rbs 1.7.0.beta.2 → 1.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ruby.yml +20 -1
  3. data/.gitignore +9 -2
  4. data/CHANGELOG.md +36 -9
  5. data/Rakefile +15 -0
  6. data/Steepfile +0 -1
  7. data/core/binding.rbs +2 -0
  8. data/core/complex.rbs +0 -2
  9. data/core/env.rbs +881 -0
  10. data/core/false_class.rbs +2 -0
  11. data/core/float.rbs +0 -2
  12. data/core/integer.rbs +0 -2
  13. data/core/nil_class.rbs +2 -0
  14. data/core/numeric.rbs +7 -0
  15. data/core/object.rbs +1 -1
  16. data/core/proc.rbs +2 -0
  17. data/core/rational.rbs +0 -2
  18. data/core/symbol.rbs +2 -0
  19. data/core/true_class.rbs +2 -0
  20. data/core/unbound_method.rbs +13 -0
  21. data/docs/rbs_by_example.md +2 -2
  22. data/docs/syntax.md +2 -3
  23. data/ext/rbs_extension/constants.c +0 -1
  24. data/ext/rbs_extension/lexer.c +2526 -1063
  25. data/ext/rbs_extension/lexer.h +33 -17
  26. data/ext/rbs_extension/lexer.re +140 -0
  27. data/ext/rbs_extension/lexstate.c +139 -0
  28. data/ext/rbs_extension/parser.c +2 -32
  29. data/ext/rbs_extension/parser.h +0 -5
  30. data/ext/rbs_extension/parserstate.c +0 -1
  31. data/ext/rbs_extension/rbs_extension.h +1 -1
  32. data/ext/rbs_extension/ruby_objs.c +84 -148
  33. data/ext/rbs_extension/ruby_objs.h +0 -2
  34. data/lib/rbs/collection/installer.rb +1 -0
  35. data/lib/rbs/collection/sources/git.rb +6 -1
  36. data/lib/rbs/errors.rb +6 -0
  37. data/lib/rbs/parser_aux.rb +37 -5
  38. data/lib/rbs/parser_compat/lexer_error.rb +4 -0
  39. data/lib/rbs/parser_compat/located_value.rb +5 -0
  40. data/lib/rbs/parser_compat/semantics_error.rb +4 -0
  41. data/lib/rbs/parser_compat/syntax_error.rb +4 -0
  42. data/lib/rbs/prototype/helpers.rb +113 -0
  43. data/lib/rbs/prototype/rb.rb +2 -105
  44. data/lib/rbs/prototype/runtime.rb +16 -0
  45. data/lib/rbs/test/setup.rb +1 -0
  46. data/lib/rbs/types.rb +2 -2
  47. data/lib/rbs/version.rb +1 -1
  48. data/lib/rbs.rb +12 -0
  49. data/sig/parser.rbs +2 -0
  50. data/sig/rbs.rbs +4 -0
  51. data/stdlib/bigdecimal/0/big_decimal.rbs +44 -0
  52. data/stdlib/csv/0/csv.rbs +49 -3
  53. data/stdlib/io-console/0/io-console.rbs +137 -0
  54. data/stdlib/net-http/0/net-http.rbs +2 -1
  55. data/stdlib/tempfile/0/tempfile.rbs +4 -6
  56. metadata +13 -5
  57. data/lib/rbs/parser.y +0 -1805
@@ -29,35 +29,35 @@ enum TokenType {
29
29
  pLT, /* < */
30
30
  pEQ, /* = */
31
31
 
32
+ kALIAS, /* alias */
33
+ kATTRACCESSOR, /* attr_accessor */
34
+ kATTRREADER, /* attr_reader */
35
+ kATTRWRITER, /* attr_writer */
32
36
  kBOOL, /* bool */
33
37
  kBOT, /* bot */
34
38
  kCLASS, /* class */
39
+ kDEF, /* def */
40
+ kEND, /* end */
41
+ kEXTEND, /* extend */
35
42
  kFALSE, /* false */
43
+ kIN, /* in */
44
+ kINCLUDE, /* include */
36
45
  kINSTANCE, /* instance */
37
46
  kINTERFACE, /* interface */
47
+ kMODULE, /* module */
38
48
  kNIL, /* nil */
49
+ kOUT, /* out */
50
+ kPREPEND, /* prepend */
51
+ kPRIVATE, /* private */
52
+ kPUBLIC, /* public */
39
53
  kSELF, /* self */
40
54
  kSINGLETON, /* singleton */
41
55
  kTOP, /* top */
42
56
  kTRUE, /* true */
43
- kVOID, /* void */
44
57
  kTYPE, /* type */
45
58
  kUNCHECKED, /* unchecked */
46
- kIN, /* in */
47
- kOUT, /* out */
48
- kEND, /* end */
49
- kDEF, /* def */
50
- kINCLUDE, /* include */
51
- kEXTEND, /* extend */
52
- kPREPEND, /* prepend */
53
- kALIAS, /* alias */
54
- kMODULE, /* module */
55
- kATTRREADER, /* attr_reader */
56
- kATTRWRITER, /* attr_writer */
57
- kATTRACCESSOR, /* attr_accessor */
58
- kPUBLIC, /* public */
59
- kPRIVATE, /* private */
60
59
  kUNTYPED, /* untyped */
60
+ kVOID, /* void */
61
61
 
62
62
  tLIDENT, /* Identifiers starting with lower case */
63
63
  tUIDENT, /* Identifiers starting with upper case */
@@ -121,14 +121,13 @@ typedef struct {
121
121
  position current; /* The current position */
122
122
  position start; /* The start position of the current token */
123
123
  bool first_token_of_line; /* This flag is used for tLINECOMMENT */
124
+ unsigned int last_char; /* Last peeked character */
124
125
  } lexstate;
125
126
 
126
127
  extern token NullToken;
127
128
  extern position NullPosition;
128
129
  extern range NULL_RANGE;
129
130
 
130
- token rbsparser_next_token(lexstate *state);
131
-
132
131
  char *peek_token(lexstate *state, token tok);
133
132
  int token_chars(token tok);
134
133
  int token_bytes(token tok);
@@ -140,6 +139,23 @@ int token_bytes(token tok);
140
139
 
141
140
  const char *token_type_str(enum TokenType type);
142
141
 
142
+ /**
143
+ * Read next character.
144
+ * */
145
+ unsigned int peek(lexstate *state);
146
+
147
+ /**
148
+ * Skip one character.
149
+ * */
150
+ void skip(lexstate *state);
151
+
152
+ /**
153
+ * Return new token with given type.
154
+ * */
155
+ token next_token(lexstate *state, enum TokenType type);
156
+
157
+ token rbsparser_next_token(lexstate *state);
158
+
143
159
  void print_token(token tok);
144
160
 
145
161
  #endif
@@ -0,0 +1,140 @@
1
+ #include "rbs_extension.h"
2
+
3
+ token rbsparser_next_token(lexstate *state) {
4
+ lexstate backup;
5
+
6
+ start:
7
+ backup = *state;
8
+
9
+ /*!re2c
10
+ re2c:flags:u = 1;
11
+ re2c:api:style = free-form;
12
+ re2c:flags:input = custom;
13
+ re2c:define:YYCTYPE = "unsigned int";
14
+ re2c:define:YYPEEK = "peek(state)";
15
+ re2c:define:YYSKIP = "skip(state);";
16
+ re2c:define:YYBACKUP = "backup = *state;";
17
+ re2c:define:YYRESTORE = "*state = backup;";
18
+ re2c:yyfill:enable = 0;
19
+
20
+ word = [a-zA-Z0-9_];
21
+
22
+ operator = "/" | "~" | "[]" | "[]=" | "!" | "!=" | "!~" | "-" | "-@" | "+" | "+@"
23
+ | "==" | "===" | "=~" | "<<" | "<=" | "<=>" | ">" | ">=" | ">>" | "%";
24
+
25
+ "(" { return next_token(state, pLPAREN); }
26
+ ")" { return next_token(state, pRPAREN); }
27
+ "[" { return next_token(state, pLBRACKET); }
28
+ "]" { return next_token(state, pRBRACKET); }
29
+ "{" { return next_token(state, pLBRACE); }
30
+ "}" { return next_token(state, pRBRACE); }
31
+ "," { return next_token(state, pCOMMA); }
32
+ "|" { return next_token(state, pBAR); }
33
+ "^" { return next_token(state, pHAT); }
34
+ "&" { return next_token(state, pAMP); }
35
+ "?" { return next_token(state, pQUESTION); }
36
+ "*" { return next_token(state, pSTAR); }
37
+ "**" { return next_token(state, pSTAR2); }
38
+ "." { return next_token(state, pDOT); }
39
+ "..." { return next_token(state, pDOT3); }
40
+ "`" { return next_token(state, tOPERATOR); }
41
+ "`" [^ :\x00] [^`\x00]* "`" { return next_token(state, tQIDENT); }
42
+ "->" { return next_token(state, pARROW); }
43
+ "=>" { return next_token(state, pFATARROW); }
44
+ "=" { return next_token(state, pEQ); }
45
+ ":" { return next_token(state, pCOLON); }
46
+ "::" { return next_token(state, pCOLON2); }
47
+ "<" { return next_token(state, pLT); }
48
+ operator { return next_token(state, tOPERATOR); }
49
+
50
+ number = [0-9] [0-9_]*;
51
+ ("-"|"+")? number { return next_token(state, tINTEGER); }
52
+
53
+ "%a{" [^}\x00]* "}" { return next_token(state, tANNOTATION); }
54
+ "%a(" [^)\x00]* ")" { return next_token(state, tANNOTATION); }
55
+ "%a[" [^\]\x00]* "]" { return next_token(state, tANNOTATION); }
56
+ "%a|" [^|\x00]* "|" { return next_token(state, tANNOTATION); }
57
+ "%a<" [^>\x00]* ">" { return next_token(state, tANNOTATION); }
58
+
59
+ "#" (. \ [\x00])* {
60
+ return next_token(
61
+ state,
62
+ state->first_token_of_line ? tLINECOMMENT : tCOMMENT
63
+ );
64
+ }
65
+
66
+ "alias" { return next_token(state, kALIAS); }
67
+ "attr_accessor" { return next_token(state, kATTRACCESSOR); }
68
+ "attr_reader" { return next_token(state, kATTRREADER); }
69
+ "attr_writer" { return next_token(state, kATTRWRITER); }
70
+ "bool" { return next_token(state, kBOOL); }
71
+ "bot" { return next_token(state, kBOT); }
72
+ "class" { return next_token(state, kCLASS); }
73
+ "def" { return next_token(state, kDEF); }
74
+ "end" { return next_token(state, kEND); }
75
+ "extend" { return next_token(state, kEXTEND); }
76
+ "false" { return next_token(state, kFALSE); }
77
+ "in" { return next_token(state, kIN); }
78
+ "include" { return next_token(state, kINCLUDE); }
79
+ "instance" { return next_token(state, kINSTANCE); }
80
+ "interface" { return next_token(state, kINTERFACE); }
81
+ "module" { return next_token(state, kMODULE); }
82
+ "nil" { return next_token(state, kNIL); }
83
+ "out" { return next_token(state, kOUT); }
84
+ "prepend" { return next_token(state, kPREPEND); }
85
+ "private" { return next_token(state, kPRIVATE); }
86
+ "public" { return next_token(state, kPUBLIC); }
87
+ "self" { return next_token(state, kSELF); }
88
+ "singleton" { return next_token(state, kSINGLETON); }
89
+ "top" { return next_token(state, kTOP); }
90
+ "true" { return next_token(state, kTRUE); }
91
+ "type" { return next_token(state, kTYPE); }
92
+ "unchecked" { return next_token(state, kUNCHECKED); }
93
+ "untyped" { return next_token(state, kUNTYPED); }
94
+ "void" { return next_token(state, kVOID); }
95
+
96
+ dqstring = ["] ("\\"["] | [^"\x00])* ["];
97
+ sqstring = ['] ("\\"['] | [^'\x00])* ['];
98
+
99
+ dqstring { return next_token(state, tDQSTRING); }
100
+ sqstring { return next_token(state, tSQSTRING); }
101
+ ":" dqstring { return next_token(state, tDQSYMBOL); }
102
+ ":" sqstring { return next_token(state, tSQSYMBOL); }
103
+
104
+ identifier = [a-zA-Z_] word* [!?=]?;
105
+ symbol_opr = ":|" | ":&" | ":/" | ":%" | ":~" | ":`" | ":^"
106
+ | ":==" | ":=~" | ":===" | ":!" | ":!=" | ":!~"
107
+ | ":<" | ":<=" | ":<<" | ":<=>" | ":>" | ":>=" | ":>>"
108
+ | ":-" | ":-@" | ":+" | ":+@" | ":*" | ":**" | ":[]" | ":[]=";
109
+
110
+ global_ident = [0-9]+
111
+ | "-" [a-zA-Z0-9_]
112
+ | [~*$?!@\\/;,.=:<>"&'`+]
113
+ | [^ \t\r\n:;=.,!"$%&()-+~|\\'[\]{}*/<>^\x00]+;
114
+
115
+ ":" identifier { return next_token(state, tSYMBOL); }
116
+ ":@" identifier { return next_token(state, tSYMBOL); }
117
+ ":@@" identifier { return next_token(state, tSYMBOL); }
118
+ ":$" global_ident { return next_token(state, tSYMBOL); }
119
+ symbol_opr { return next_token(state, tSYMBOL); }
120
+
121
+ [a-z] word* { return next_token(state, tLIDENT); }
122
+ [A-Z] word* { return next_token(state, tUIDENT); }
123
+ "_" [a-z0-9_] word* { return next_token(state, tULLIDENT); }
124
+ "_" [A-Z] word* { return next_token(state, tULIDENT); }
125
+ "_" { return next_token(state, tULLIDENT); }
126
+ [a-zA-Z_] word* "!" { return next_token(state, tBANGIDENT); }
127
+ [a-zA-Z_] word* "=" { return next_token(state, tEQIDENT); }
128
+
129
+ "@" [a-zA-Z_] word* { return next_token(state, tAIDENT); }
130
+ "@@" [a-zA-Z_] word* { return next_token(state, tA2IDENT); }
131
+
132
+ "$" global_ident { return next_token(state, tGIDENT); }
133
+
134
+ skip = [ \t\n]+;
135
+
136
+ skip { state->start = state->current; goto start; }
137
+ "\x00" { return next_token(state, pEOF); }
138
+ * { return next_token(state, ErrorToken); }
139
+ */
140
+ }
@@ -0,0 +1,139 @@
1
+ #include "rbs_extension.h"
2
+
3
+ static const char *RBS_TOKENTYPE_NAMES[] = {
4
+ "NullType",
5
+ "pEOF",
6
+ "ErrorToken",
7
+
8
+ "pLPAREN", /* ( */
9
+ "pRPAREN", /* ) */
10
+ "pCOLON", /* : */
11
+ "pCOLON2", /* :: */
12
+ "pLBRACKET", /* [ */
13
+ "pRBRACKET", /* ] */
14
+ "pLBRACE", /* { */
15
+ "pRBRACE", /* } */
16
+ "pHAT", /* ^ */
17
+ "pARROW", /* -> */
18
+ "pFATARROW", /* => */
19
+ "pCOMMA", /* , */
20
+ "pBAR", /* | */
21
+ "pAMP", /* & */
22
+ "pSTAR", /* * */
23
+ "pSTAR2", /* ** */
24
+ "pDOT", /* . */
25
+ "pDOT3", /* ... */
26
+ "pBANG", /* ! */
27
+ "pQUESTION", /* ? */
28
+ "pLT", /* < */
29
+ "pEQ", /* = */
30
+
31
+ "kALIAS", /* alias */
32
+ "kATTRACCESSOR", /* attr_accessor */
33
+ "kATTRREADER", /* attr_reader */
34
+ "kATTRWRITER", /* attr_writer */
35
+ "kBOOL", /* bool */
36
+ "kBOT", /* bot */
37
+ "kCLASS", /* class */
38
+ "kDEF", /* def */
39
+ "kEND", /* end */
40
+ "kEXTEND", /* extend */
41
+ "kFALSE", /* kFALSE */
42
+ "kIN", /* in */
43
+ "kINCLUDE", /* include */
44
+ "kINSTANCE", /* instance */
45
+ "kINTERFACE", /* interface */
46
+ "kMODULE", /* module */
47
+ "kNIL", /* nil */
48
+ "kOUT", /* out */
49
+ "kPREPEND", /* prepend */
50
+ "kPRIVATE", /* private */
51
+ "kPUBLIC", /* public */
52
+ "kSELF", /* self */
53
+ "kSINGLETON", /* singleton */
54
+ "kTOP", /* top */
55
+ "kTRUE", /* true */
56
+ "kTYPE", /* type */
57
+ "kUNCHECKED", /* unchecked */
58
+ "kUNTYPED", /* untyped */
59
+ "kVOID", /* void */
60
+
61
+ "tLIDENT", /* Identifiers starting with lower case */
62
+ "tUIDENT", /* Identifiers starting with upper case */
63
+ "tULIDENT", /* Identifiers starting with `_` */
64
+ "tULLIDENT",
65
+ "tGIDENT", /* Identifiers starting with `$` */
66
+ "tAIDENT", /* Identifiers starting with `@` */
67
+ "tA2IDENT", /* Identifiers starting with `@@` */
68
+ "tBANGIDENT",
69
+ "tEQIDENT",
70
+ "tQIDENT", /* Quoted identifier */
71
+ "tOPERATOR", /* Operator identifier */
72
+
73
+ "tCOMMENT",
74
+ "tLINECOMMENT",
75
+
76
+ "tDQSTRING", /* Double quoted string */
77
+ "tSQSTRING", /* Single quoted string */
78
+ "tINTEGER", /* Integer */
79
+ "tSYMBOL", /* Symbol */
80
+ "tDQSYMBOL",
81
+ "tSQSYMBOL",
82
+ "tANNOTATION", /* Annotation */
83
+ };
84
+
85
+ token NullToken = { NullType };
86
+ position NullPosition = { -1, -1, -1, -1 };
87
+ range NULL_RANGE = { { -1, -1, -1, -1 }, { -1, -1, -1, -1 } };
88
+
89
+ const char *token_type_str(enum TokenType type) {
90
+ return RBS_TOKENTYPE_NAMES[type];
91
+ }
92
+
93
+ int token_chars(token tok) {
94
+ return tok.range.end.char_pos - tok.range.start.char_pos;
95
+ }
96
+
97
+ int token_bytes(token tok) {
98
+ return RANGE_BYTES(tok.range);
99
+ }
100
+
101
+ unsigned int peek(lexstate *state) {
102
+ unsigned int c = rb_enc_mbc_to_codepoint(RSTRING_PTR(state->string) + state->current.byte_pos, RSTRING_END(state->string), rb_enc_get(state->string));
103
+ state->last_char = c;
104
+ return c;
105
+ }
106
+
107
+ token next_token(lexstate *state, enum TokenType type) {
108
+ token t;
109
+
110
+ t.type = type;
111
+ t.range.start = state->start;
112
+ t.range.end = state->current;
113
+ state->start = state->current;
114
+ state->first_token_of_line = false;
115
+
116
+ return t;
117
+ }
118
+
119
+ void skip(lexstate *state) {
120
+ if (!state->last_char) {
121
+ peek(state);
122
+ }
123
+ int byte_len = rb_enc_codelen(state->last_char, rb_enc_get(state->string));
124
+
125
+ state->current.char_pos += 1;
126
+ state->current.byte_pos += byte_len;
127
+
128
+ if (state->last_char == '\n') {
129
+ state->current.line += 1;
130
+ state->current.column = 0;
131
+ state->first_token_of_line = true;
132
+ } else {
133
+ state->current.column += 1;
134
+ }
135
+ }
136
+
137
+ char *peek_token(lexstate *state, token tok) {
138
+ return RSTRING_PTR(state->string) + tok.range.start.byte_pos;
139
+ }
@@ -1487,6 +1487,8 @@ VALUE parse_member_def(parserstate *state, bool instance_only, bool accept_overl
1487
1487
  case INSTANCE_SINGLETON_KIND:
1488
1488
  k = ID2SYM(rb_intern("singleton_instance"));
1489
1489
  break;
1490
+ default:
1491
+ rbs_abort();
1490
1492
  }
1491
1493
 
1492
1494
  VALUE location = rbs_new_location(state->buffer, member_range);
@@ -2387,36 +2389,4 @@ void rbs__init_parser() {
2387
2389
  rb_define_singleton_method(RBS_Parser, "_parse_type", rbsparser_parse_type, 4);
2388
2390
  rb_define_singleton_method(RBS_Parser, "_parse_method_type", rbsparser_parse_method_type, 4);
2389
2391
  rb_define_singleton_method(RBS_Parser, "_parse_signature", rbsparser_parse_signature, 3);
2390
-
2391
- RBS_Parser_KEYWORDS = rb_hash_new();
2392
- rb_hash_aset(RBS_Parser_KEYWORDS, rb_str_new_literal("bool"), INT2FIX(kBOOL));
2393
- rb_hash_aset(RBS_Parser_KEYWORDS, rb_str_new_literal("bot"), INT2FIX(kBOT));
2394
- rb_hash_aset(RBS_Parser_KEYWORDS, rb_str_new_literal("class"), INT2FIX(kCLASS));
2395
- rb_hash_aset(RBS_Parser_KEYWORDS, rb_str_new_literal("instance"), INT2FIX(kINSTANCE));
2396
- rb_hash_aset(RBS_Parser_KEYWORDS, rb_str_new_literal("interface"), INT2FIX(kINTERFACE));
2397
- rb_hash_aset(RBS_Parser_KEYWORDS, rb_str_new_literal("nil"), INT2FIX(kNIL));
2398
- rb_hash_aset(RBS_Parser_KEYWORDS, rb_str_new_literal("self"), INT2FIX(kSELF));
2399
- rb_hash_aset(RBS_Parser_KEYWORDS, rb_str_new_literal("singleton"), INT2FIX(kSINGLETON));
2400
- rb_hash_aset(RBS_Parser_KEYWORDS, rb_str_new_literal("top"), INT2FIX(kTOP));
2401
- rb_hash_aset(RBS_Parser_KEYWORDS, rb_str_new_literal("void"), INT2FIX(kVOID));
2402
- rb_hash_aset(RBS_Parser_KEYWORDS, rb_str_new_literal("type"), INT2FIX(kTYPE));
2403
- rb_hash_aset(RBS_Parser_KEYWORDS, rb_str_new_literal("unchecked"), INT2FIX(kUNCHECKED));
2404
- rb_hash_aset(RBS_Parser_KEYWORDS, rb_str_new_literal("in"), INT2FIX(kIN));
2405
- rb_hash_aset(RBS_Parser_KEYWORDS, rb_str_new_literal("out"), INT2FIX(kOUT));
2406
- rb_hash_aset(RBS_Parser_KEYWORDS, rb_str_new_literal("end"), INT2FIX(kEND));
2407
- rb_hash_aset(RBS_Parser_KEYWORDS, rb_str_new_literal("def"), INT2FIX(kDEF));
2408
- rb_hash_aset(RBS_Parser_KEYWORDS, rb_str_new_literal("include"), INT2FIX(kINCLUDE));
2409
- rb_hash_aset(RBS_Parser_KEYWORDS, rb_str_new_literal("extend"), INT2FIX(kEXTEND));
2410
- rb_hash_aset(RBS_Parser_KEYWORDS, rb_str_new_literal("prepend"), INT2FIX(kPREPEND));
2411
- rb_hash_aset(RBS_Parser_KEYWORDS, rb_str_new_literal("alias"), INT2FIX(kALIAS));
2412
- rb_hash_aset(RBS_Parser_KEYWORDS, rb_str_new_literal("module"), INT2FIX(kMODULE));
2413
- rb_hash_aset(RBS_Parser_KEYWORDS, rb_str_new_literal("attr_reader"), INT2FIX(kATTRREADER));
2414
- rb_hash_aset(RBS_Parser_KEYWORDS, rb_str_new_literal("attr_writer"), INT2FIX(kATTRWRITER));
2415
- rb_hash_aset(RBS_Parser_KEYWORDS, rb_str_new_literal("attr_accessor"), INT2FIX(kATTRACCESSOR));
2416
- rb_hash_aset(RBS_Parser_KEYWORDS, rb_str_new_literal("public"), INT2FIX(kPUBLIC));
2417
- rb_hash_aset(RBS_Parser_KEYWORDS, rb_str_new_literal("private"), INT2FIX(kPRIVATE));
2418
- rb_hash_aset(RBS_Parser_KEYWORDS, rb_str_new_literal("untyped"), INT2FIX(kUNTYPED));
2419
- rb_hash_aset(RBS_Parser_KEYWORDS, rb_str_new_literal("true"), INT2FIX(kTRUE));
2420
- rb_hash_aset(RBS_Parser_KEYWORDS, rb_str_new_literal("false"), INT2FIX(kFALSE));
2421
- rb_define_const(RBS_Parser, "KEYWORDS", RBS_Parser_KEYWORDS);
2422
2392
  }
@@ -9,11 +9,6 @@
9
9
  * */
10
10
  extern VALUE RBS_Parser;
11
11
 
12
- /**
13
- * RBS::Parser::KEYWORDS constant, which stores a hash from keyword string to token type fixnum
14
- * */
15
- extern VALUE RBS_Parser_KEYWORDS;
16
-
17
12
  VALUE parse_type(parserstate *state);
18
13
  VALUE parse_method_type(parserstate *state);
19
14
  VALUE parse_signature(parserstate *state);
@@ -87,7 +87,6 @@ bool parser_typevar_member(parserstate *state, ID id) {
87
87
  }
88
88
 
89
89
  void print_parser(parserstate *state) {
90
- pp(state->buffer);
91
90
  printf(" current_token = %s (%d...%d)\n", token_type_str(state->current_token.type), state->current_token.range.start.char_pos, state->current_token.range.end.char_pos);
92
91
  printf(" next_token = %s (%d...%d)\n", token_type_str(state->next_token.type), state->next_token.range.start.char_pos, state->next_token.range.end.char_pos);
93
92
  printf(" next_token2 = %s (%d...%d)\n", token_type_str(state->next_token2.type), state->next_token2.range.start.char_pos, state->next_token2.range.end.char_pos);
@@ -37,4 +37,4 @@ VALUE rbs_unquote_string(parserstate *state, range rg, int offset_bytes);
37
37
  * foo.rbs:11:21...11:25: Syntax error: {message}, token=`{tok source}` ({tok type})
38
38
  * ```
39
39
  * */
40
- NORETURN(void) raise_syntax_error(parserstate *state, token tok, const char *fmt, ...);
40
+ PRINTF_ARGS(NORETURN(void) raise_syntax_error(parserstate *state, token tok, const char *fmt, ...), 3, 4);