rbs 1.7.0.beta.1 → 1.7.0.beta.5

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 (59) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ruby.yml +20 -1
  3. data/.gitignore +9 -1
  4. data/CHANGELOG.md +20 -9
  5. data/Rakefile +16 -1
  6. data/core/binding.rbs +2 -0
  7. data/core/complex.rbs +0 -2
  8. data/core/float.rbs +0 -2
  9. data/core/integer.rbs +0 -2
  10. data/core/numeric.rbs +7 -0
  11. data/core/object.rbs +1 -1
  12. data/core/proc.rbs +2 -0
  13. data/core/rational.rbs +0 -2
  14. data/core/unbound_method.rbs +13 -0
  15. data/docs/rbs_by_example.md +2 -2
  16. data/docs/syntax.md +2 -3
  17. data/ext/{rbs/extension → rbs_extension}/constants.c +0 -1
  18. data/ext/{rbs/extension → rbs_extension}/constants.h +0 -0
  19. data/ext/{rbs/extension → rbs_extension}/extconf.rb +1 -1
  20. data/ext/rbs_extension/lexer.c +2533 -0
  21. data/ext/{rbs/extension → rbs_extension}/lexer.h +33 -17
  22. data/ext/rbs_extension/lexer.re +140 -0
  23. data/ext/rbs_extension/lexstate.c +139 -0
  24. data/ext/{rbs/extension → rbs_extension}/location.c +0 -0
  25. data/ext/{rbs/extension → rbs_extension}/location.h +0 -0
  26. data/ext/{rbs/extension → rbs_extension}/main.c +1 -1
  27. data/ext/{rbs/extension → rbs_extension}/parser.c +6 -32
  28. data/ext/{rbs/extension → rbs_extension}/parser.h +0 -5
  29. data/ext/{rbs/extension → rbs_extension}/parserstate.c +0 -1
  30. data/ext/{rbs/extension → rbs_extension}/parserstate.h +0 -0
  31. data/ext/{rbs/extension → rbs_extension}/rbs_extension.h +1 -1
  32. data/ext/{rbs/extension → rbs_extension}/ruby_objs.c +84 -148
  33. data/ext/{rbs/extension → rbs_extension}/ruby_objs.h +0 -2
  34. data/ext/{rbs/extension → rbs_extension}/unescape.c +0 -0
  35. data/lib/rbs/collection/installer.rb +1 -0
  36. data/lib/rbs/collection/sources/git.rb +6 -1
  37. data/lib/rbs/errors.rb +14 -0
  38. data/lib/rbs/location_aux.rb +13 -0
  39. data/lib/rbs/parser_aux.rb +39 -0
  40. data/lib/rbs/parser_compat/lexer_error.rb +4 -0
  41. data/lib/rbs/parser_compat/located_value.rb +5 -0
  42. data/lib/rbs/parser_compat/semantics_error.rb +4 -0
  43. data/lib/rbs/parser_compat/syntax_error.rb +4 -0
  44. data/lib/rbs/prototype/helpers.rb +113 -0
  45. data/lib/rbs/prototype/rb.rb +2 -105
  46. data/lib/rbs/prototype/runtime.rb +16 -0
  47. data/lib/rbs/types.rb +2 -2
  48. data/lib/rbs/version.rb +1 -1
  49. data/lib/rbs.rb +13 -1
  50. data/rbs.gemspec +1 -1
  51. data/sig/errors.rbs +10 -0
  52. data/sig/location.rbs +5 -0
  53. data/sig/parser.rbs +5 -0
  54. data/sig/rbs.rbs +4 -0
  55. data/stdlib/io-console/0/io-console.rbs +137 -0
  56. data/stdlib/net-http/0/net-http.rbs +2 -1
  57. data/stdlib/tempfile/0/tempfile.rbs +4 -6
  58. metadata +27 -19
  59. data/ext/rbs/extension/lexer.c +0 -1070
@@ -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
+ }
File without changes
File without changes
@@ -1,7 +1,7 @@
1
1
  #include "rbs_extension.h"
2
2
 
3
3
  void
4
- Init_extension(void)
4
+ Init_rbs_extension(void)
5
5
  {
6
6
  rbs__init_constants();
7
7
  rbs__init_location();
@@ -1449,6 +1449,7 @@ VALUE parse_member_def(parserstate *state, bool instance_only, bool accept_overl
1449
1449
  parser_advance(state);
1450
1450
  loop = false;
1451
1451
  overload_range = state->current_token.range;
1452
+ member_range.end = overload_range.end;
1452
1453
  break;
1453
1454
  } else {
1454
1455
  raise_syntax_error(
@@ -1486,6 +1487,8 @@ VALUE parse_member_def(parserstate *state, bool instance_only, bool accept_overl
1486
1487
  case INSTANCE_SINGLETON_KIND:
1487
1488
  k = ID2SYM(rb_intern("singleton_instance"));
1488
1489
  break;
1490
+ default:
1491
+ rbs_abort();
1489
1492
  }
1490
1493
 
1491
1494
  VALUE location = rbs_new_location(state->buffer, member_range);
@@ -2280,6 +2283,9 @@ VALUE parse_nested_decl(parserstate *state, const char *nested_in, position anno
2280
2283
  case pCOLON2:
2281
2284
  decl = parse_const_decl(state);
2282
2285
  break;
2286
+ case tGIDENT:
2287
+ decl = parse_global_decl(state);
2288
+ break;
2283
2289
  case kTYPE:
2284
2290
  decl = parse_type_decl(state, annot_pos, annotations);
2285
2291
  break;
@@ -2383,36 +2389,4 @@ void rbs__init_parser() {
2383
2389
  rb_define_singleton_method(RBS_Parser, "_parse_type", rbsparser_parse_type, 4);
2384
2390
  rb_define_singleton_method(RBS_Parser, "_parse_method_type", rbsparser_parse_method_type, 4);
2385
2391
  rb_define_singleton_method(RBS_Parser, "_parse_signature", rbsparser_parse_signature, 3);
2386
-
2387
- RBS_Parser_KEYWORDS = rb_hash_new();
2388
- rb_hash_aset(RBS_Parser_KEYWORDS, rb_str_new_literal("bool"), INT2FIX(kBOOL));
2389
- rb_hash_aset(RBS_Parser_KEYWORDS, rb_str_new_literal("bot"), INT2FIX(kBOT));
2390
- rb_hash_aset(RBS_Parser_KEYWORDS, rb_str_new_literal("class"), INT2FIX(kCLASS));
2391
- rb_hash_aset(RBS_Parser_KEYWORDS, rb_str_new_literal("instance"), INT2FIX(kINSTANCE));
2392
- rb_hash_aset(RBS_Parser_KEYWORDS, rb_str_new_literal("interface"), INT2FIX(kINTERFACE));
2393
- rb_hash_aset(RBS_Parser_KEYWORDS, rb_str_new_literal("nil"), INT2FIX(kNIL));
2394
- rb_hash_aset(RBS_Parser_KEYWORDS, rb_str_new_literal("self"), INT2FIX(kSELF));
2395
- rb_hash_aset(RBS_Parser_KEYWORDS, rb_str_new_literal("singleton"), INT2FIX(kSINGLETON));
2396
- rb_hash_aset(RBS_Parser_KEYWORDS, rb_str_new_literal("top"), INT2FIX(kTOP));
2397
- rb_hash_aset(RBS_Parser_KEYWORDS, rb_str_new_literal("void"), INT2FIX(kVOID));
2398
- rb_hash_aset(RBS_Parser_KEYWORDS, rb_str_new_literal("type"), INT2FIX(kTYPE));
2399
- rb_hash_aset(RBS_Parser_KEYWORDS, rb_str_new_literal("unchecked"), INT2FIX(kUNCHECKED));
2400
- rb_hash_aset(RBS_Parser_KEYWORDS, rb_str_new_literal("in"), INT2FIX(kIN));
2401
- rb_hash_aset(RBS_Parser_KEYWORDS, rb_str_new_literal("out"), INT2FIX(kOUT));
2402
- rb_hash_aset(RBS_Parser_KEYWORDS, rb_str_new_literal("end"), INT2FIX(kEND));
2403
- rb_hash_aset(RBS_Parser_KEYWORDS, rb_str_new_literal("def"), INT2FIX(kDEF));
2404
- rb_hash_aset(RBS_Parser_KEYWORDS, rb_str_new_literal("include"), INT2FIX(kINCLUDE));
2405
- rb_hash_aset(RBS_Parser_KEYWORDS, rb_str_new_literal("extend"), INT2FIX(kEXTEND));
2406
- rb_hash_aset(RBS_Parser_KEYWORDS, rb_str_new_literal("prepend"), INT2FIX(kPREPEND));
2407
- rb_hash_aset(RBS_Parser_KEYWORDS, rb_str_new_literal("alias"), INT2FIX(kALIAS));
2408
- rb_hash_aset(RBS_Parser_KEYWORDS, rb_str_new_literal("module"), INT2FIX(kMODULE));
2409
- rb_hash_aset(RBS_Parser_KEYWORDS, rb_str_new_literal("attr_reader"), INT2FIX(kATTRREADER));
2410
- rb_hash_aset(RBS_Parser_KEYWORDS, rb_str_new_literal("attr_writer"), INT2FIX(kATTRWRITER));
2411
- rb_hash_aset(RBS_Parser_KEYWORDS, rb_str_new_literal("attr_accessor"), INT2FIX(kATTRACCESSOR));
2412
- rb_hash_aset(RBS_Parser_KEYWORDS, rb_str_new_literal("public"), INT2FIX(kPUBLIC));
2413
- rb_hash_aset(RBS_Parser_KEYWORDS, rb_str_new_literal("private"), INT2FIX(kPRIVATE));
2414
- rb_hash_aset(RBS_Parser_KEYWORDS, rb_str_new_literal("untyped"), INT2FIX(kUNTYPED));
2415
- rb_hash_aset(RBS_Parser_KEYWORDS, rb_str_new_literal("true"), INT2FIX(kTRUE));
2416
- rb_hash_aset(RBS_Parser_KEYWORDS, rb_str_new_literal("false"), INT2FIX(kFALSE));
2417
- rb_define_const(RBS_Parser, "KEYWORDS", RBS_Parser_KEYWORDS);
2418
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);
File without changes
@@ -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);