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.
- checksums.yaml +4 -4
- data/.github/workflows/ruby.yml +20 -1
- data/.gitignore +9 -1
- data/CHANGELOG.md +20 -9
- data/Rakefile +16 -1
- data/core/binding.rbs +2 -0
- data/core/complex.rbs +0 -2
- data/core/float.rbs +0 -2
- data/core/integer.rbs +0 -2
- data/core/numeric.rbs +7 -0
- data/core/object.rbs +1 -1
- data/core/proc.rbs +2 -0
- data/core/rational.rbs +0 -2
- data/core/unbound_method.rbs +13 -0
- data/docs/rbs_by_example.md +2 -2
- data/docs/syntax.md +2 -3
- data/ext/{rbs/extension → rbs_extension}/constants.c +0 -1
- data/ext/{rbs/extension → rbs_extension}/constants.h +0 -0
- data/ext/{rbs/extension → rbs_extension}/extconf.rb +1 -1
- data/ext/rbs_extension/lexer.c +2533 -0
- data/ext/{rbs/extension → rbs_extension}/lexer.h +33 -17
- data/ext/rbs_extension/lexer.re +140 -0
- data/ext/rbs_extension/lexstate.c +139 -0
- data/ext/{rbs/extension → rbs_extension}/location.c +0 -0
- data/ext/{rbs/extension → rbs_extension}/location.h +0 -0
- data/ext/{rbs/extension → rbs_extension}/main.c +1 -1
- data/ext/{rbs/extension → rbs_extension}/parser.c +6 -32
- data/ext/{rbs/extension → rbs_extension}/parser.h +0 -5
- data/ext/{rbs/extension → rbs_extension}/parserstate.c +0 -1
- data/ext/{rbs/extension → rbs_extension}/parserstate.h +0 -0
- data/ext/{rbs/extension → rbs_extension}/rbs_extension.h +1 -1
- data/ext/{rbs/extension → rbs_extension}/ruby_objs.c +84 -148
- data/ext/{rbs/extension → rbs_extension}/ruby_objs.h +0 -2
- data/ext/{rbs/extension → rbs_extension}/unescape.c +0 -0
- data/lib/rbs/collection/installer.rb +1 -0
- data/lib/rbs/collection/sources/git.rb +6 -1
- data/lib/rbs/errors.rb +14 -0
- data/lib/rbs/location_aux.rb +13 -0
- data/lib/rbs/parser_aux.rb +39 -0
- data/lib/rbs/parser_compat/lexer_error.rb +4 -0
- data/lib/rbs/parser_compat/located_value.rb +5 -0
- data/lib/rbs/parser_compat/semantics_error.rb +4 -0
- data/lib/rbs/parser_compat/syntax_error.rb +4 -0
- data/lib/rbs/prototype/helpers.rb +113 -0
- data/lib/rbs/prototype/rb.rb +2 -105
- data/lib/rbs/prototype/runtime.rb +16 -0
- data/lib/rbs/types.rb +2 -2
- data/lib/rbs/version.rb +1 -1
- data/lib/rbs.rb +13 -1
- data/rbs.gemspec +1 -1
- data/sig/errors.rbs +10 -0
- data/sig/location.rbs +5 -0
- data/sig/parser.rbs +5 -0
- data/sig/rbs.rbs +4 -0
- data/stdlib/io-console/0/io-console.rbs +137 -0
- data/stdlib/net-http/0/net-http.rbs +2 -1
- data/stdlib/tempfile/0/tempfile.rbs +4 -6
- metadata +27 -19
- 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
|
@@ -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);
|