graphql-c_parser 1.1.0 → 1.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/ext/graphql_c_parser_ext/graphql_c_parser_ext.c +3 -3
- data/ext/graphql_c_parser_ext/lexer.c +144 -97
- data/ext/graphql_c_parser_ext/lexer.h +1 -1
- data/lib/graphql/c_parser/version.rb +1 -1
- data/lib/graphql/c_parser.rb +22 -11
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9ce3db30ea33e3358c671556d5a3d4d8338e578da71948bd0dcd924a24b8fa23
|
4
|
+
data.tar.gz: d80041b89bdadc5a83a60e352a68b4ace5b18de7eb34dabec09a6f180d13989d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7f85e41f5361db1ca4d9025ea239069127b3535c20ac2f2afde1c79a89b019bf953a221eafe65739d2ebd9bf8f479aa37ab3ef520d1e3df0c30c0401291a0e92
|
7
|
+
data.tar.gz: c1f171a7ca8f49304a58e4b0fb4acab15ce51e9f51c39ff5817df31e385478488e87a854915cc666bc672b5741d6ecaf9916a8e02c4c059fae186c4a30960bc1
|
@@ -1,7 +1,7 @@
|
|
1
1
|
#include "graphql_c_parser_ext.h"
|
2
2
|
|
3
|
-
VALUE GraphQL_CParser_Lexer_tokenize_with_c_internal(VALUE self, VALUE query_string, VALUE fstring_identifiers) {
|
4
|
-
return tokenize(query_string, RTEST(fstring_identifiers));
|
3
|
+
VALUE GraphQL_CParser_Lexer_tokenize_with_c_internal(VALUE self, VALUE query_string, VALUE fstring_identifiers, VALUE reject_numbers_followed_by_names, VALUE max_tokens) {
|
4
|
+
return tokenize(query_string, RTEST(fstring_identifiers), RTEST(reject_numbers_followed_by_names), FIX2INT(max_tokens));
|
5
5
|
}
|
6
6
|
|
7
7
|
VALUE GraphQL_CParser_Parser_c_parse(VALUE self) {
|
@@ -13,7 +13,7 @@ void Init_graphql_c_parser_ext() {
|
|
13
13
|
VALUE GraphQL = rb_define_module("GraphQL");
|
14
14
|
VALUE CParser = rb_define_module_under(GraphQL, "CParser");
|
15
15
|
VALUE Lexer = rb_define_module_under(CParser, "Lexer");
|
16
|
-
rb_define_singleton_method(Lexer, "tokenize_with_c_internal", GraphQL_CParser_Lexer_tokenize_with_c_internal,
|
16
|
+
rb_define_singleton_method(Lexer, "tokenize_with_c_internal", GraphQL_CParser_Lexer_tokenize_with_c_internal, 4);
|
17
17
|
setup_static_token_variables();
|
18
18
|
|
19
19
|
VALUE Parser = rb_define_class_under(CParser, "Parser", rb_cObject);
|
@@ -1,6 +1,6 @@
|
|
1
1
|
#line 1 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.rl"
|
2
2
|
|
3
|
-
#line
|
3
|
+
#line 106 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.rl"
|
4
4
|
|
5
5
|
|
6
6
|
|
@@ -682,7 +682,7 @@ static const int graphql_c_lexer_error = -1;
|
|
682
682
|
static const int graphql_c_lexer_en_main = 21;
|
683
683
|
|
684
684
|
|
685
|
-
#line
|
685
|
+
#line 108 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.rl"
|
686
686
|
|
687
687
|
|
688
688
|
#include <ruby.h>
|
@@ -778,6 +778,10 @@ typedef struct Meta {
|
|
778
778
|
VALUE tokens;
|
779
779
|
VALUE previous_token;
|
780
780
|
int dedup_identifiers;
|
781
|
+
int reject_numbers_followed_by_names;
|
782
|
+
int preceeded_by_number;
|
783
|
+
int max_tokens;
|
784
|
+
int tokens_count;
|
781
785
|
} Meta;
|
782
786
|
|
783
787
|
#define STATIC_VALUE_TOKEN(token_type, content_str) \
|
@@ -793,11 +797,25 @@ token_content = rb_utf8_str_new(ts, te - ts); \
|
|
793
797
|
break;
|
794
798
|
|
795
799
|
void emit(TokenType tt, char *ts, char *te, Meta *meta) {
|
800
|
+
meta->tokens_count++;
|
801
|
+
// -1 indicates that there is no limit:
|
802
|
+
if (meta->max_tokens > 0 && meta->tokens_count > meta->max_tokens) {
|
803
|
+
VALUE mGraphQL = rb_const_get_at(rb_cObject, rb_intern("GraphQL"));
|
804
|
+
VALUE cParseError = rb_const_get_at(mGraphQL, rb_intern("ParseError"));
|
805
|
+
VALUE exception = rb_funcall(
|
806
|
+
cParseError, rb_intern("new"), 4,
|
807
|
+
rb_str_new_cstr("This query is too large to execute."),
|
808
|
+
LONG2NUM(meta->line),
|
809
|
+
LONG2NUM(meta->col),
|
810
|
+
rb_str_new_cstr(meta->query_cstr)
|
811
|
+
);
|
812
|
+
rb_exc_raise(exception);
|
813
|
+
}
|
796
814
|
int quotes_length = 0; // set by string tokens below
|
797
815
|
int line_incr = 0;
|
798
816
|
VALUE token_sym = Qnil;
|
799
817
|
VALUE token_content = Qnil;
|
800
|
-
|
818
|
+
int this_token_is_number = 0;
|
801
819
|
switch(tt) {
|
802
820
|
STATIC_VALUE_TOKEN(ON, "on")
|
803
821
|
STATIC_VALUE_TOKEN(FRAGMENT, "fragment")
|
@@ -846,6 +864,19 @@ void emit(TokenType tt, char *ts, char *te, Meta *meta) {
|
|
846
864
|
token_content = GraphQL_null_str;
|
847
865
|
break;
|
848
866
|
case IDENTIFIER:
|
867
|
+
if (meta->reject_numbers_followed_by_names && meta->preceeded_by_number) {
|
868
|
+
VALUE mGraphQL = rb_const_get_at(rb_cObject, rb_intern("GraphQL"));
|
869
|
+
VALUE mCParser = rb_const_get_at(mGraphQL, rb_intern("CParser"));
|
870
|
+
VALUE exception = rb_funcall(
|
871
|
+
mCParser, rb_intern("prepare_number_name_parse_error"), 5,
|
872
|
+
LONG2NUM(meta->line),
|
873
|
+
LONG2NUM(meta->col),
|
874
|
+
rb_str_new_cstr(meta->query_cstr),
|
875
|
+
rb_ary_entry(meta->previous_token, 3),
|
876
|
+
rb_utf8_str_new(ts, te - ts)
|
877
|
+
);
|
878
|
+
rb_exc_raise(exception);
|
879
|
+
}
|
849
880
|
token_sym = ID2SYM(rb_intern("IDENTIFIER"));
|
850
881
|
if (meta->dedup_identifiers) {
|
851
882
|
token_content = rb_enc_interned_str(ts, te - ts, rb_utf8_encoding());
|
@@ -853,8 +884,19 @@ void emit(TokenType tt, char *ts, char *te, Meta *meta) {
|
|
853
884
|
token_content = rb_utf8_str_new(ts, te - ts);
|
854
885
|
}
|
855
886
|
break;
|
856
|
-
|
857
|
-
DYNAMIC_VALUE_TOKEN(
|
887
|
+
// Can't use these while we're in backwards-compat mode:
|
888
|
+
// DYNAMIC_VALUE_TOKEN(INT)
|
889
|
+
// DYNAMIC_VALUE_TOKEN(FLOAT)
|
890
|
+
case INT:
|
891
|
+
token_sym = ID2SYM(rb_intern("INT"));
|
892
|
+
token_content = rb_utf8_str_new(ts, te - ts);
|
893
|
+
this_token_is_number = 1;
|
894
|
+
break;
|
895
|
+
case FLOAT:
|
896
|
+
token_sym = ID2SYM(rb_intern("FLOAT"));
|
897
|
+
token_content = rb_utf8_str_new(ts, te - ts);
|
898
|
+
this_token_is_number = 1;
|
899
|
+
break;
|
858
900
|
DYNAMIC_VALUE_TOKEN(COMMENT)
|
859
901
|
case UNKNOWN_CHAR:
|
860
902
|
if (ts[0] == '\0') {
|
@@ -922,6 +964,7 @@ void emit(TokenType tt, char *ts, char *te, Meta *meta) {
|
|
922
964
|
if (tt != COMMENT) {
|
923
965
|
rb_ary_push(meta->tokens, token);
|
924
966
|
}
|
967
|
+
meta->preceeded_by_number = this_token_is_number;
|
925
968
|
meta->previous_token = token;
|
926
969
|
}
|
927
970
|
// Bump the column counter for the next token
|
@@ -929,7 +972,7 @@ void emit(TokenType tt, char *ts, char *te, Meta *meta) {
|
|
929
972
|
meta->line += line_incr;
|
930
973
|
}
|
931
974
|
|
932
|
-
VALUE tokenize(VALUE query_rbstr, int fstring_identifiers) {
|
975
|
+
VALUE tokenize(VALUE query_rbstr, int fstring_identifiers, int reject_numbers_followed_by_names, int max_tokens) {
|
933
976
|
int cs = 0;
|
934
977
|
int act = 0;
|
935
978
|
char *p = StringValueCStr(query_rbstr);
|
@@ -938,11 +981,11 @@ VALUE tokenize(VALUE query_rbstr, int fstring_identifiers) {
|
|
938
981
|
char *ts = 0;
|
939
982
|
char *te = 0;
|
940
983
|
VALUE tokens = rb_ary_new();
|
941
|
-
struct Meta meta_s = {1, 1, p, pe, tokens, Qnil, fstring_identifiers};
|
984
|
+
struct Meta meta_s = {1, 1, p, pe, tokens, Qnil, fstring_identifiers, reject_numbers_followed_by_names, 0, max_tokens, 0};
|
942
985
|
Meta *meta = &meta_s;
|
943
986
|
|
944
987
|
|
945
|
-
#line
|
988
|
+
#line 989 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.c"
|
946
989
|
{
|
947
990
|
cs = (int)graphql_c_lexer_start;
|
948
991
|
ts = 0;
|
@@ -950,10 +993,10 @@ VALUE tokenize(VALUE query_rbstr, int fstring_identifiers) {
|
|
950
993
|
act = 0;
|
951
994
|
}
|
952
995
|
|
953
|
-
#line
|
996
|
+
#line 409 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.rl"
|
954
997
|
|
955
998
|
|
956
|
-
#line
|
999
|
+
#line 1000 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.c"
|
957
1000
|
{
|
958
1001
|
unsigned int _trans = 0;
|
959
1002
|
const char * _keys;
|
@@ -968,7 +1011,7 @@ VALUE tokenize(VALUE query_rbstr, int fstring_identifiers) {
|
|
968
1011
|
#line 1 "NONE"
|
969
1012
|
{ts = p;}}
|
970
1013
|
|
971
|
-
#line
|
1014
|
+
#line 1015 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.c"
|
972
1015
|
|
973
1016
|
|
974
1017
|
break;
|
@@ -1006,7 +1049,7 @@ VALUE tokenize(VALUE query_rbstr, int fstring_identifiers) {
|
|
1006
1049
|
#line 1 "NONE"
|
1007
1050
|
{te = p+1;}}
|
1008
1051
|
|
1009
|
-
#line
|
1052
|
+
#line 1053 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.c"
|
1010
1053
|
|
1011
1054
|
|
1012
1055
|
break;
|
@@ -1019,7 +1062,7 @@ VALUE tokenize(VALUE query_rbstr, int fstring_identifiers) {
|
|
1019
1062
|
emit(RCURLY, ts, te, meta); }
|
1020
1063
|
}}
|
1021
1064
|
|
1022
|
-
#line
|
1065
|
+
#line 1066 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.c"
|
1023
1066
|
|
1024
1067
|
|
1025
1068
|
break;
|
@@ -1032,7 +1075,7 @@ VALUE tokenize(VALUE query_rbstr, int fstring_identifiers) {
|
|
1032
1075
|
emit(LCURLY, ts, te, meta); }
|
1033
1076
|
}}
|
1034
1077
|
|
1035
|
-
#line
|
1078
|
+
#line 1079 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.c"
|
1036
1079
|
|
1037
1080
|
|
1038
1081
|
break;
|
@@ -1045,7 +1088,7 @@ VALUE tokenize(VALUE query_rbstr, int fstring_identifiers) {
|
|
1045
1088
|
emit(RPAREN, ts, te, meta); }
|
1046
1089
|
}}
|
1047
1090
|
|
1048
|
-
#line
|
1091
|
+
#line 1092 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.c"
|
1049
1092
|
|
1050
1093
|
|
1051
1094
|
break;
|
@@ -1058,7 +1101,7 @@ VALUE tokenize(VALUE query_rbstr, int fstring_identifiers) {
|
|
1058
1101
|
emit(LPAREN, ts, te, meta); }
|
1059
1102
|
}}
|
1060
1103
|
|
1061
|
-
#line
|
1104
|
+
#line 1105 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.c"
|
1062
1105
|
|
1063
1106
|
|
1064
1107
|
break;
|
@@ -1071,7 +1114,7 @@ VALUE tokenize(VALUE query_rbstr, int fstring_identifiers) {
|
|
1071
1114
|
emit(RBRACKET, ts, te, meta); }
|
1072
1115
|
}}
|
1073
1116
|
|
1074
|
-
#line
|
1117
|
+
#line 1118 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.c"
|
1075
1118
|
|
1076
1119
|
|
1077
1120
|
break;
|
@@ -1084,7 +1127,7 @@ VALUE tokenize(VALUE query_rbstr, int fstring_identifiers) {
|
|
1084
1127
|
emit(LBRACKET, ts, te, meta); }
|
1085
1128
|
}}
|
1086
1129
|
|
1087
|
-
#line
|
1130
|
+
#line 1131 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.c"
|
1088
1131
|
|
1089
1132
|
|
1090
1133
|
break;
|
@@ -1097,7 +1140,7 @@ VALUE tokenize(VALUE query_rbstr, int fstring_identifiers) {
|
|
1097
1140
|
emit(COLON, ts, te, meta); }
|
1098
1141
|
}}
|
1099
1142
|
|
1100
|
-
#line
|
1143
|
+
#line 1144 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.c"
|
1101
1144
|
|
1102
1145
|
|
1103
1146
|
break;
|
@@ -1110,7 +1153,7 @@ VALUE tokenize(VALUE query_rbstr, int fstring_identifiers) {
|
|
1110
1153
|
emit(BLOCK_STRING, ts, te, meta); }
|
1111
1154
|
}}
|
1112
1155
|
|
1113
|
-
#line
|
1156
|
+
#line 1157 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.c"
|
1114
1157
|
|
1115
1158
|
|
1116
1159
|
break;
|
@@ -1123,7 +1166,7 @@ VALUE tokenize(VALUE query_rbstr, int fstring_identifiers) {
|
|
1123
1166
|
emit(QUOTED_STRING, ts, te, meta); }
|
1124
1167
|
}}
|
1125
1168
|
|
1126
|
-
#line
|
1169
|
+
#line 1170 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.c"
|
1127
1170
|
|
1128
1171
|
|
1129
1172
|
break;
|
@@ -1136,7 +1179,7 @@ VALUE tokenize(VALUE query_rbstr, int fstring_identifiers) {
|
|
1136
1179
|
emit(VAR_SIGN, ts, te, meta); }
|
1137
1180
|
}}
|
1138
1181
|
|
1139
|
-
#line
|
1182
|
+
#line 1183 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.c"
|
1140
1183
|
|
1141
1184
|
|
1142
1185
|
break;
|
@@ -1149,7 +1192,7 @@ VALUE tokenize(VALUE query_rbstr, int fstring_identifiers) {
|
|
1149
1192
|
emit(DIR_SIGN, ts, te, meta); }
|
1150
1193
|
}}
|
1151
1194
|
|
1152
|
-
#line
|
1195
|
+
#line 1196 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.c"
|
1153
1196
|
|
1154
1197
|
|
1155
1198
|
break;
|
@@ -1162,7 +1205,7 @@ VALUE tokenize(VALUE query_rbstr, int fstring_identifiers) {
|
|
1162
1205
|
emit(ELLIPSIS, ts, te, meta); }
|
1163
1206
|
}}
|
1164
1207
|
|
1165
|
-
#line
|
1208
|
+
#line 1209 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.c"
|
1166
1209
|
|
1167
1210
|
|
1168
1211
|
break;
|
@@ -1175,7 +1218,7 @@ VALUE tokenize(VALUE query_rbstr, int fstring_identifiers) {
|
|
1175
1218
|
emit(EQUALS, ts, te, meta); }
|
1176
1219
|
}}
|
1177
1220
|
|
1178
|
-
#line
|
1221
|
+
#line 1222 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.c"
|
1179
1222
|
|
1180
1223
|
|
1181
1224
|
break;
|
@@ -1188,7 +1231,7 @@ VALUE tokenize(VALUE query_rbstr, int fstring_identifiers) {
|
|
1188
1231
|
emit(BANG, ts, te, meta); }
|
1189
1232
|
}}
|
1190
1233
|
|
1191
|
-
#line
|
1234
|
+
#line 1235 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.c"
|
1192
1235
|
|
1193
1236
|
|
1194
1237
|
break;
|
@@ -1201,7 +1244,7 @@ VALUE tokenize(VALUE query_rbstr, int fstring_identifiers) {
|
|
1201
1244
|
emit(PIPE, ts, te, meta); }
|
1202
1245
|
}}
|
1203
1246
|
|
1204
|
-
#line
|
1247
|
+
#line 1248 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.c"
|
1205
1248
|
|
1206
1249
|
|
1207
1250
|
break;
|
@@ -1214,7 +1257,7 @@ VALUE tokenize(VALUE query_rbstr, int fstring_identifiers) {
|
|
1214
1257
|
emit(AMP, ts, te, meta); }
|
1215
1258
|
}}
|
1216
1259
|
|
1217
|
-
#line
|
1260
|
+
#line 1261 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.c"
|
1218
1261
|
|
1219
1262
|
|
1220
1263
|
break;
|
@@ -1227,23 +1270,24 @@ VALUE tokenize(VALUE query_rbstr, int fstring_identifiers) {
|
|
1227
1270
|
|
1228
1271
|
meta->line += 1;
|
1229
1272
|
meta->col = 1;
|
1273
|
+
meta->preceeded_by_number = 0;
|
1230
1274
|
}
|
1231
1275
|
}}
|
1232
1276
|
|
1233
|
-
#line
|
1277
|
+
#line 1278 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.c"
|
1234
1278
|
|
1235
1279
|
|
1236
1280
|
break;
|
1237
1281
|
}
|
1238
1282
|
case 11: {
|
1239
1283
|
{
|
1240
|
-
#line
|
1284
|
+
#line 104 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.rl"
|
1241
1285
|
{te = p+1;{
|
1242
|
-
#line
|
1286
|
+
#line 104 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.rl"
|
1243
1287
|
emit(UNKNOWN_CHAR, ts, te, meta); }
|
1244
1288
|
}}
|
1245
1289
|
|
1246
|
-
#line
|
1290
|
+
#line 1291 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.c"
|
1247
1291
|
|
1248
1292
|
|
1249
1293
|
break;
|
@@ -1256,7 +1300,7 @@ VALUE tokenize(VALUE query_rbstr, int fstring_identifiers) {
|
|
1256
1300
|
emit(INT, ts, te, meta); }
|
1257
1301
|
}}
|
1258
1302
|
|
1259
|
-
#line
|
1303
|
+
#line 1304 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.c"
|
1260
1304
|
|
1261
1305
|
|
1262
1306
|
break;
|
@@ -1269,7 +1313,7 @@ VALUE tokenize(VALUE query_rbstr, int fstring_identifiers) {
|
|
1269
1313
|
emit(FLOAT, ts, te, meta); }
|
1270
1314
|
}}
|
1271
1315
|
|
1272
|
-
#line
|
1316
|
+
#line 1317 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.c"
|
1273
1317
|
|
1274
1318
|
|
1275
1319
|
break;
|
@@ -1282,7 +1326,7 @@ VALUE tokenize(VALUE query_rbstr, int fstring_identifiers) {
|
|
1282
1326
|
emit(BLOCK_STRING, ts, te, meta); }
|
1283
1327
|
}}
|
1284
1328
|
|
1285
|
-
#line
|
1329
|
+
#line 1330 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.c"
|
1286
1330
|
|
1287
1331
|
|
1288
1332
|
break;
|
@@ -1295,7 +1339,7 @@ VALUE tokenize(VALUE query_rbstr, int fstring_identifiers) {
|
|
1295
1339
|
emit(QUOTED_STRING, ts, te, meta); }
|
1296
1340
|
}}
|
1297
1341
|
|
1298
|
-
#line
|
1342
|
+
#line 1343 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.c"
|
1299
1343
|
|
1300
1344
|
|
1301
1345
|
break;
|
@@ -1308,7 +1352,7 @@ VALUE tokenize(VALUE query_rbstr, int fstring_identifiers) {
|
|
1308
1352
|
emit(IDENTIFIER, ts, te, meta); }
|
1309
1353
|
}}
|
1310
1354
|
|
1311
|
-
#line
|
1355
|
+
#line 1356 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.c"
|
1312
1356
|
|
1313
1357
|
|
1314
1358
|
break;
|
@@ -1321,33 +1365,36 @@ VALUE tokenize(VALUE query_rbstr, int fstring_identifiers) {
|
|
1321
1365
|
emit(COMMENT, ts, te, meta); }
|
1322
1366
|
}}
|
1323
1367
|
|
1324
|
-
#line
|
1368
|
+
#line 1369 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.c"
|
1325
1369
|
|
1326
1370
|
|
1327
1371
|
break;
|
1328
1372
|
}
|
1329
1373
|
case 27: {
|
1330
1374
|
{
|
1331
|
-
#line
|
1375
|
+
#line 99 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.rl"
|
1332
1376
|
{te = p;p = p - 1;{
|
1333
|
-
#line
|
1334
|
-
|
1377
|
+
#line 99 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.rl"
|
1378
|
+
|
1379
|
+
meta->col += te - ts;
|
1380
|
+
meta->preceeded_by_number = 0;
|
1381
|
+
}
|
1335
1382
|
}}
|
1336
1383
|
|
1337
|
-
#line
|
1384
|
+
#line 1385 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.c"
|
1338
1385
|
|
1339
1386
|
|
1340
1387
|
break;
|
1341
1388
|
}
|
1342
1389
|
case 28: {
|
1343
1390
|
{
|
1344
|
-
#line
|
1391
|
+
#line 104 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.rl"
|
1345
1392
|
{te = p;p = p - 1;{
|
1346
|
-
#line
|
1393
|
+
#line 104 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.rl"
|
1347
1394
|
emit(UNKNOWN_CHAR, ts, te, meta); }
|
1348
1395
|
}}
|
1349
1396
|
|
1350
|
-
#line
|
1397
|
+
#line 1398 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.c"
|
1351
1398
|
|
1352
1399
|
|
1353
1400
|
break;
|
@@ -1361,7 +1408,7 @@ VALUE tokenize(VALUE query_rbstr, int fstring_identifiers) {
|
|
1361
1408
|
emit(INT, ts, te, meta); }
|
1362
1409
|
}}
|
1363
1410
|
|
1364
|
-
#line
|
1411
|
+
#line 1412 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.c"
|
1365
1412
|
|
1366
1413
|
|
1367
1414
|
break;
|
@@ -1375,21 +1422,21 @@ VALUE tokenize(VALUE query_rbstr, int fstring_identifiers) {
|
|
1375
1422
|
emit(FLOAT, ts, te, meta); }
|
1376
1423
|
}}
|
1377
1424
|
|
1378
|
-
#line
|
1425
|
+
#line 1426 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.c"
|
1379
1426
|
|
1380
1427
|
|
1381
1428
|
break;
|
1382
1429
|
}
|
1383
1430
|
case 1: {
|
1384
1431
|
{
|
1385
|
-
#line
|
1432
|
+
#line 104 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.rl"
|
1386
1433
|
{p = ((te))-1;
|
1387
1434
|
{
|
1388
|
-
#line
|
1435
|
+
#line 104 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.rl"
|
1389
1436
|
emit(UNKNOWN_CHAR, ts, te, meta); }
|
1390
1437
|
}}
|
1391
1438
|
|
1392
|
-
#line
|
1439
|
+
#line 1440 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.c"
|
1393
1440
|
|
1394
1441
|
|
1395
1442
|
break;
|
@@ -1555,7 +1602,7 @@ VALUE tokenize(VALUE query_rbstr, int fstring_identifiers) {
|
|
1555
1602
|
}}
|
1556
1603
|
}
|
1557
1604
|
|
1558
|
-
#line
|
1605
|
+
#line 1606 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.c"
|
1559
1606
|
|
1560
1607
|
|
1561
1608
|
break;
|
@@ -1565,13 +1612,13 @@ VALUE tokenize(VALUE query_rbstr, int fstring_identifiers) {
|
|
1565
1612
|
#line 1 "NONE"
|
1566
1613
|
{te = p+1;}}
|
1567
1614
|
|
1568
|
-
#line
|
1615
|
+
#line 1616 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.c"
|
1569
1616
|
|
1570
1617
|
{
|
1571
1618
|
#line 56 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.rl"
|
1572
1619
|
{act = 3;}}
|
1573
1620
|
|
1574
|
-
#line
|
1621
|
+
#line 1622 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.c"
|
1575
1622
|
|
1576
1623
|
|
1577
1624
|
break;
|
@@ -1581,13 +1628,13 @@ VALUE tokenize(VALUE query_rbstr, int fstring_identifiers) {
|
|
1581
1628
|
#line 1 "NONE"
|
1582
1629
|
{te = p+1;}}
|
1583
1630
|
|
1584
|
-
#line
|
1631
|
+
#line 1632 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.c"
|
1585
1632
|
|
1586
1633
|
{
|
1587
1634
|
#line 57 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.rl"
|
1588
1635
|
{act = 4;}}
|
1589
1636
|
|
1590
|
-
#line
|
1637
|
+
#line 1638 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.c"
|
1591
1638
|
|
1592
1639
|
|
1593
1640
|
break;
|
@@ -1597,13 +1644,13 @@ VALUE tokenize(VALUE query_rbstr, int fstring_identifiers) {
|
|
1597
1644
|
#line 1 "NONE"
|
1598
1645
|
{te = p+1;}}
|
1599
1646
|
|
1600
|
-
#line
|
1647
|
+
#line 1648 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.c"
|
1601
1648
|
|
1602
1649
|
{
|
1603
1650
|
#line 58 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.rl"
|
1604
1651
|
{act = 5;}}
|
1605
1652
|
|
1606
|
-
#line
|
1653
|
+
#line 1654 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.c"
|
1607
1654
|
|
1608
1655
|
|
1609
1656
|
break;
|
@@ -1613,13 +1660,13 @@ VALUE tokenize(VALUE query_rbstr, int fstring_identifiers) {
|
|
1613
1660
|
#line 1 "NONE"
|
1614
1661
|
{te = p+1;}}
|
1615
1662
|
|
1616
|
-
#line
|
1663
|
+
#line 1664 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.c"
|
1617
1664
|
|
1618
1665
|
{
|
1619
1666
|
#line 59 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.rl"
|
1620
1667
|
{act = 6;}}
|
1621
1668
|
|
1622
|
-
#line
|
1669
|
+
#line 1670 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.c"
|
1623
1670
|
|
1624
1671
|
|
1625
1672
|
break;
|
@@ -1629,13 +1676,13 @@ VALUE tokenize(VALUE query_rbstr, int fstring_identifiers) {
|
|
1629
1676
|
#line 1 "NONE"
|
1630
1677
|
{te = p+1;}}
|
1631
1678
|
|
1632
|
-
#line
|
1679
|
+
#line 1680 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.c"
|
1633
1680
|
|
1634
1681
|
{
|
1635
1682
|
#line 60 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.rl"
|
1636
1683
|
{act = 7;}}
|
1637
1684
|
|
1638
|
-
#line
|
1685
|
+
#line 1686 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.c"
|
1639
1686
|
|
1640
1687
|
|
1641
1688
|
break;
|
@@ -1645,13 +1692,13 @@ VALUE tokenize(VALUE query_rbstr, int fstring_identifiers) {
|
|
1645
1692
|
#line 1 "NONE"
|
1646
1693
|
{te = p+1;}}
|
1647
1694
|
|
1648
|
-
#line
|
1695
|
+
#line 1696 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.c"
|
1649
1696
|
|
1650
1697
|
{
|
1651
1698
|
#line 61 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.rl"
|
1652
1699
|
{act = 8;}}
|
1653
1700
|
|
1654
|
-
#line
|
1701
|
+
#line 1702 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.c"
|
1655
1702
|
|
1656
1703
|
|
1657
1704
|
break;
|
@@ -1661,13 +1708,13 @@ VALUE tokenize(VALUE query_rbstr, int fstring_identifiers) {
|
|
1661
1708
|
#line 1 "NONE"
|
1662
1709
|
{te = p+1;}}
|
1663
1710
|
|
1664
|
-
#line
|
1711
|
+
#line 1712 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.c"
|
1665
1712
|
|
1666
1713
|
{
|
1667
1714
|
#line 62 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.rl"
|
1668
1715
|
{act = 9;}}
|
1669
1716
|
|
1670
|
-
#line
|
1717
|
+
#line 1718 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.c"
|
1671
1718
|
|
1672
1719
|
|
1673
1720
|
break;
|
@@ -1677,13 +1724,13 @@ VALUE tokenize(VALUE query_rbstr, int fstring_identifiers) {
|
|
1677
1724
|
#line 1 "NONE"
|
1678
1725
|
{te = p+1;}}
|
1679
1726
|
|
1680
|
-
#line
|
1727
|
+
#line 1728 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.c"
|
1681
1728
|
|
1682
1729
|
{
|
1683
1730
|
#line 63 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.rl"
|
1684
1731
|
{act = 10;}}
|
1685
1732
|
|
1686
|
-
#line
|
1733
|
+
#line 1734 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.c"
|
1687
1734
|
|
1688
1735
|
|
1689
1736
|
break;
|
@@ -1693,13 +1740,13 @@ VALUE tokenize(VALUE query_rbstr, int fstring_identifiers) {
|
|
1693
1740
|
#line 1 "NONE"
|
1694
1741
|
{te = p+1;}}
|
1695
1742
|
|
1696
|
-
#line
|
1743
|
+
#line 1744 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.c"
|
1697
1744
|
|
1698
1745
|
{
|
1699
1746
|
#line 64 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.rl"
|
1700
1747
|
{act = 11;}}
|
1701
1748
|
|
1702
|
-
#line
|
1749
|
+
#line 1750 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.c"
|
1703
1750
|
|
1704
1751
|
|
1705
1752
|
break;
|
@@ -1709,13 +1756,13 @@ VALUE tokenize(VALUE query_rbstr, int fstring_identifiers) {
|
|
1709
1756
|
#line 1 "NONE"
|
1710
1757
|
{te = p+1;}}
|
1711
1758
|
|
1712
|
-
#line
|
1759
|
+
#line 1760 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.c"
|
1713
1760
|
|
1714
1761
|
{
|
1715
1762
|
#line 65 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.rl"
|
1716
1763
|
{act = 12;}}
|
1717
1764
|
|
1718
|
-
#line
|
1765
|
+
#line 1766 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.c"
|
1719
1766
|
|
1720
1767
|
|
1721
1768
|
break;
|
@@ -1725,13 +1772,13 @@ VALUE tokenize(VALUE query_rbstr, int fstring_identifiers) {
|
|
1725
1772
|
#line 1 "NONE"
|
1726
1773
|
{te = p+1;}}
|
1727
1774
|
|
1728
|
-
#line
|
1775
|
+
#line 1776 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.c"
|
1729
1776
|
|
1730
1777
|
{
|
1731
1778
|
#line 66 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.rl"
|
1732
1779
|
{act = 13;}}
|
1733
1780
|
|
1734
|
-
#line
|
1781
|
+
#line 1782 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.c"
|
1735
1782
|
|
1736
1783
|
|
1737
1784
|
break;
|
@@ -1741,13 +1788,13 @@ VALUE tokenize(VALUE query_rbstr, int fstring_identifiers) {
|
|
1741
1788
|
#line 1 "NONE"
|
1742
1789
|
{te = p+1;}}
|
1743
1790
|
|
1744
|
-
#line
|
1791
|
+
#line 1792 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.c"
|
1745
1792
|
|
1746
1793
|
{
|
1747
1794
|
#line 67 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.rl"
|
1748
1795
|
{act = 14;}}
|
1749
1796
|
|
1750
|
-
#line
|
1797
|
+
#line 1798 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.c"
|
1751
1798
|
|
1752
1799
|
|
1753
1800
|
break;
|
@@ -1757,13 +1804,13 @@ VALUE tokenize(VALUE query_rbstr, int fstring_identifiers) {
|
|
1757
1804
|
#line 1 "NONE"
|
1758
1805
|
{te = p+1;}}
|
1759
1806
|
|
1760
|
-
#line
|
1807
|
+
#line 1808 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.c"
|
1761
1808
|
|
1762
1809
|
{
|
1763
1810
|
#line 68 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.rl"
|
1764
1811
|
{act = 15;}}
|
1765
1812
|
|
1766
|
-
#line
|
1813
|
+
#line 1814 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.c"
|
1767
1814
|
|
1768
1815
|
|
1769
1816
|
break;
|
@@ -1773,13 +1820,13 @@ VALUE tokenize(VALUE query_rbstr, int fstring_identifiers) {
|
|
1773
1820
|
#line 1 "NONE"
|
1774
1821
|
{te = p+1;}}
|
1775
1822
|
|
1776
|
-
#line
|
1823
|
+
#line 1824 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.c"
|
1777
1824
|
|
1778
1825
|
{
|
1779
1826
|
#line 69 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.rl"
|
1780
1827
|
{act = 16;}}
|
1781
1828
|
|
1782
|
-
#line
|
1829
|
+
#line 1830 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.c"
|
1783
1830
|
|
1784
1831
|
|
1785
1832
|
break;
|
@@ -1789,13 +1836,13 @@ VALUE tokenize(VALUE query_rbstr, int fstring_identifiers) {
|
|
1789
1836
|
#line 1 "NONE"
|
1790
1837
|
{te = p+1;}}
|
1791
1838
|
|
1792
|
-
#line
|
1839
|
+
#line 1840 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.c"
|
1793
1840
|
|
1794
1841
|
{
|
1795
1842
|
#line 70 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.rl"
|
1796
1843
|
{act = 17;}}
|
1797
1844
|
|
1798
|
-
#line
|
1845
|
+
#line 1846 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.c"
|
1799
1846
|
|
1800
1847
|
|
1801
1848
|
break;
|
@@ -1805,13 +1852,13 @@ VALUE tokenize(VALUE query_rbstr, int fstring_identifiers) {
|
|
1805
1852
|
#line 1 "NONE"
|
1806
1853
|
{te = p+1;}}
|
1807
1854
|
|
1808
|
-
#line
|
1855
|
+
#line 1856 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.c"
|
1809
1856
|
|
1810
1857
|
{
|
1811
1858
|
#line 71 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.rl"
|
1812
1859
|
{act = 18;}}
|
1813
1860
|
|
1814
|
-
#line
|
1861
|
+
#line 1862 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.c"
|
1815
1862
|
|
1816
1863
|
|
1817
1864
|
break;
|
@@ -1821,13 +1868,13 @@ VALUE tokenize(VALUE query_rbstr, int fstring_identifiers) {
|
|
1821
1868
|
#line 1 "NONE"
|
1822
1869
|
{te = p+1;}}
|
1823
1870
|
|
1824
|
-
#line
|
1871
|
+
#line 1872 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.c"
|
1825
1872
|
|
1826
1873
|
{
|
1827
1874
|
#line 72 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.rl"
|
1828
1875
|
{act = 19;}}
|
1829
1876
|
|
1830
|
-
#line
|
1877
|
+
#line 1878 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.c"
|
1831
1878
|
|
1832
1879
|
|
1833
1880
|
break;
|
@@ -1837,13 +1884,13 @@ VALUE tokenize(VALUE query_rbstr, int fstring_identifiers) {
|
|
1837
1884
|
#line 1 "NONE"
|
1838
1885
|
{te = p+1;}}
|
1839
1886
|
|
1840
|
-
#line
|
1887
|
+
#line 1888 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.c"
|
1841
1888
|
|
1842
1889
|
{
|
1843
1890
|
#line 73 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.rl"
|
1844
1891
|
{act = 20;}}
|
1845
1892
|
|
1846
|
-
#line
|
1893
|
+
#line 1894 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.c"
|
1847
1894
|
|
1848
1895
|
|
1849
1896
|
break;
|
@@ -1853,13 +1900,13 @@ VALUE tokenize(VALUE query_rbstr, int fstring_identifiers) {
|
|
1853
1900
|
#line 1 "NONE"
|
1854
1901
|
{te = p+1;}}
|
1855
1902
|
|
1856
|
-
#line
|
1903
|
+
#line 1904 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.c"
|
1857
1904
|
|
1858
1905
|
{
|
1859
1906
|
#line 74 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.rl"
|
1860
1907
|
{act = 21;}}
|
1861
1908
|
|
1862
|
-
#line
|
1909
|
+
#line 1910 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.c"
|
1863
1910
|
|
1864
1911
|
|
1865
1912
|
break;
|
@@ -1869,13 +1916,13 @@ VALUE tokenize(VALUE query_rbstr, int fstring_identifiers) {
|
|
1869
1916
|
#line 1 "NONE"
|
1870
1917
|
{te = p+1;}}
|
1871
1918
|
|
1872
|
-
#line
|
1919
|
+
#line 1920 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.c"
|
1873
1920
|
|
1874
1921
|
{
|
1875
1922
|
#line 82 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.rl"
|
1876
1923
|
{act = 29;}}
|
1877
1924
|
|
1878
|
-
#line
|
1925
|
+
#line 1926 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.c"
|
1879
1926
|
|
1880
1927
|
|
1881
1928
|
break;
|
@@ -1885,13 +1932,13 @@ VALUE tokenize(VALUE query_rbstr, int fstring_identifiers) {
|
|
1885
1932
|
#line 1 "NONE"
|
1886
1933
|
{te = p+1;}}
|
1887
1934
|
|
1888
|
-
#line
|
1935
|
+
#line 1936 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.c"
|
1889
1936
|
|
1890
1937
|
{
|
1891
1938
|
#line 83 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.rl"
|
1892
1939
|
{act = 30;}}
|
1893
1940
|
|
1894
|
-
#line
|
1941
|
+
#line 1942 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.c"
|
1895
1942
|
|
1896
1943
|
|
1897
1944
|
break;
|
@@ -1901,13 +1948,13 @@ VALUE tokenize(VALUE query_rbstr, int fstring_identifiers) {
|
|
1901
1948
|
#line 1 "NONE"
|
1902
1949
|
{te = p+1;}}
|
1903
1950
|
|
1904
|
-
#line
|
1951
|
+
#line 1952 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.c"
|
1905
1952
|
|
1906
1953
|
{
|
1907
1954
|
#line 91 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.rl"
|
1908
1955
|
{act = 38;}}
|
1909
1956
|
|
1910
|
-
#line
|
1957
|
+
#line 1958 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.c"
|
1911
1958
|
|
1912
1959
|
|
1913
1960
|
break;
|
@@ -1927,7 +1974,7 @@ VALUE tokenize(VALUE query_rbstr, int fstring_identifiers) {
|
|
1927
1974
|
#line 1 "NONE"
|
1928
1975
|
{ts = 0;}}
|
1929
1976
|
|
1930
|
-
#line
|
1977
|
+
#line 1978 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.c"
|
1931
1978
|
|
1932
1979
|
|
1933
1980
|
break;
|
@@ -1940,7 +1987,7 @@ VALUE tokenize(VALUE query_rbstr, int fstring_identifiers) {
|
|
1940
1987
|
_out: {}
|
1941
1988
|
}
|
1942
1989
|
|
1943
|
-
#line
|
1990
|
+
#line 410 "graphql-c_parser/ext/graphql_c_parser_ext/lexer.rl"
|
1944
1991
|
|
1945
1992
|
|
1946
1993
|
return tokens;
|
@@ -1,6 +1,6 @@
|
|
1
1
|
#ifndef Graphql_lexer_h
|
2
2
|
#define Graphql_lexer_h
|
3
3
|
#include <ruby.h>
|
4
|
-
VALUE tokenize(VALUE query_rbstr, int fstring_identifiers);
|
4
|
+
VALUE tokenize(VALUE query_rbstr, int fstring_identifiers, int reject_numbers_followed_by_names, int max_tokens);
|
5
5
|
void setup_static_token_variables();
|
6
6
|
#endif
|
data/lib/graphql/c_parser.rb
CHANGED
@@ -6,8 +6,8 @@ require "graphql/graphql_c_parser_ext"
|
|
6
6
|
|
7
7
|
module GraphQL
|
8
8
|
module CParser
|
9
|
-
def self.parse(query_str, filename: nil, trace: GraphQL::Tracing::NullTrace)
|
10
|
-
Parser.parse(query_str, filename: filename, trace: trace)
|
9
|
+
def self.parse(query_str, filename: nil, trace: GraphQL::Tracing::NullTrace, max_tokens: nil)
|
10
|
+
Parser.parse(query_str, filename: filename, trace: trace, max_tokens: max_tokens)
|
11
11
|
end
|
12
12
|
|
13
13
|
def self.parse_file(filename)
|
@@ -16,12 +16,15 @@ module GraphQL
|
|
16
16
|
end
|
17
17
|
|
18
18
|
def self.tokenize_with_c(str)
|
19
|
-
|
19
|
+
reject_numbers_followed_by_names = GraphQL.respond_to?(:reject_numbers_followed_by_names) && GraphQL.reject_numbers_followed_by_names
|
20
|
+
tokenize_with_c_internal(str, false, reject_numbers_followed_by_names)
|
20
21
|
end
|
21
22
|
|
22
23
|
def self.prepare_parse_error(message, parser)
|
24
|
+
query_str = parser.query_string
|
25
|
+
filename = parser.filename
|
23
26
|
if message.start_with?("memory exhausted")
|
24
|
-
return GraphQL::ParseError.new("This query is too large to execute.", nil, nil,
|
27
|
+
return GraphQL::ParseError.new("This query is too large to execute.", nil, nil, query_str, filename: filename)
|
25
28
|
end
|
26
29
|
token = parser.tokens[parser.next_token_index - 1]
|
27
30
|
if token
|
@@ -40,7 +43,11 @@ module GraphQL
|
|
40
43
|
end
|
41
44
|
end
|
42
45
|
|
43
|
-
GraphQL::ParseError.new(message, line, col,
|
46
|
+
GraphQL::ParseError.new(message, line, col, query_str, filename: filename)
|
47
|
+
end
|
48
|
+
|
49
|
+
def self.prepare_number_name_parse_error(line, col, query_str, number_part, name_part)
|
50
|
+
raise GraphQL::ParseError.new("Name after number is not allowed (in `#{number_part}#{name_part}`)", line, col, query_str)
|
44
51
|
end
|
45
52
|
|
46
53
|
def self.prepare_bad_unicode_error(parser)
|
@@ -57,7 +64,7 @@ module GraphQL
|
|
57
64
|
end
|
58
65
|
|
59
66
|
module Lexer
|
60
|
-
def self.tokenize(graphql_string, intern_identifiers: false)
|
67
|
+
def self.tokenize(graphql_string, intern_identifiers: false, max_tokens: nil)
|
61
68
|
if !(graphql_string.encoding == Encoding::UTF_8 || graphql_string.ascii_only?)
|
62
69
|
graphql_string = graphql_string.dup.force_encoding(Encoding::UTF_8)
|
63
70
|
end
|
@@ -73,13 +80,16 @@ module GraphQL
|
|
73
80
|
]
|
74
81
|
]
|
75
82
|
end
|
76
|
-
|
83
|
+
reject_numbers_followed_by_names = GraphQL.respond_to?(:reject_numbers_followed_by_names) && GraphQL.reject_numbers_followed_by_names
|
84
|
+
# -1 indicates that there is no limit
|
85
|
+
lexer_max_tokens = max_tokens.nil? ? -1 : max_tokens
|
86
|
+
tokenize_with_c_internal(graphql_string, intern_identifiers, reject_numbers_followed_by_names, lexer_max_tokens)
|
77
87
|
end
|
78
88
|
end
|
79
89
|
|
80
90
|
class Parser
|
81
|
-
def self.parse(query_str, filename: nil, trace: GraphQL::Tracing::NullTrace)
|
82
|
-
self.new(query_str, filename, trace).result
|
91
|
+
def self.parse(query_str, filename: nil, trace: GraphQL::Tracing::NullTrace, max_tokens: nil)
|
92
|
+
self.new(query_str, filename, trace, max_tokens).result
|
83
93
|
end
|
84
94
|
|
85
95
|
def self.parse_file(filename)
|
@@ -87,7 +97,7 @@ module GraphQL
|
|
87
97
|
parse(contents, filename: filename)
|
88
98
|
end
|
89
99
|
|
90
|
-
def initialize(query_string, filename, trace)
|
100
|
+
def initialize(query_string, filename, trace, max_tokens)
|
91
101
|
if query_string.nil?
|
92
102
|
raise GraphQL::ParseError.new("No query string was present", nil, nil, query_string)
|
93
103
|
end
|
@@ -98,12 +108,13 @@ module GraphQL
|
|
98
108
|
@result = nil
|
99
109
|
@trace = trace
|
100
110
|
@intern_identifiers = false
|
111
|
+
@max_tokens = max_tokens
|
101
112
|
end
|
102
113
|
|
103
114
|
def result
|
104
115
|
if @result.nil?
|
105
116
|
@tokens = @trace.lex(query_string: @query_string) do
|
106
|
-
GraphQL::CParser::Lexer.tokenize(@query_string, intern_identifiers: @intern_identifiers)
|
117
|
+
GraphQL::CParser::Lexer.tokenize(@query_string, intern_identifiers: @intern_identifiers, max_tokens: @max_tokens)
|
107
118
|
end
|
108
119
|
@trace.parse(query_string: @query_string) do
|
109
120
|
c_parse
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: graphql-c_parser
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.
|
4
|
+
version: 1.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Robert Mosolgo
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-04-
|
11
|
+
date: 2024-04-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: graphql
|