9#include "prism/internal/diagnostic.h"
13#include "prism/internal/allocator.h"
14#include "prism/internal/arena.h"
15#include "prism/internal/list.h"
23#define PM_DIAGNOSTIC_ID_MAX 329
102 [PM_ERR_INVALID_ENCODING_MAGIC_COMMENT] = {
"unknown or invalid encoding in the magic comment",
PM_ERROR_LEVEL_ARGUMENT },
108 [PM_ERR_ALIAS_ARGUMENT] = {
"invalid argument being passed to `alias`; expected a bare word, symbol, constant, or global variable",
PM_ERROR_LEVEL_SYNTAX },
109 [PM_ERR_ALIAS_ARGUMENT_NUMBERED_REFERENCE] = {
"invalid argument being passed to `alias`; can't make alias for the number variables",
PM_ERROR_LEVEL_SYNTAX },
110 [PM_ERR_AMPAMPEQ_MULTI_ASSIGN] = {
"unexpected `&&=` in a multiple assignment",
PM_ERROR_LEVEL_SYNTAX },
111 [PM_ERR_ARGUMENT_AFTER_BLOCK] = {
"unexpected argument after a block argument",
PM_ERROR_LEVEL_SYNTAX },
112 [PM_ERR_ARGUMENT_AFTER_FORWARDING_ELLIPSES] = {
"unexpected argument after `...`",
PM_ERROR_LEVEL_SYNTAX },
114 [PM_ERR_ARGUMENT_BLOCK_MULTI] = {
"both block arg and actual block given; only one block is allowed",
PM_ERROR_LEVEL_SYNTAX },
115 [PM_ERR_ARGUMENT_CONFLICT_AMPERSAND] = {
"unexpected `&`; anonymous block parameter is also used within block",
PM_ERROR_LEVEL_SYNTAX },
116 [PM_ERR_ARGUMENT_CONFLICT_STAR] = {
"unexpected `*`; anonymous rest parameter is also used within block",
PM_ERROR_LEVEL_SYNTAX },
117 [PM_ERR_ARGUMENT_CONFLICT_STAR_STAR] = {
"unexpected `**`; anonymous keyword rest parameter is also used within block",
PM_ERROR_LEVEL_SYNTAX },
118 [PM_ERR_ARGUMENT_FORMAL_CLASS] = {
"invalid formal argument; formal argument cannot be a class variable",
PM_ERROR_LEVEL_SYNTAX },
119 [PM_ERR_ARGUMENT_FORMAL_CONSTANT] = {
"invalid formal argument; formal argument cannot be a constant",
PM_ERROR_LEVEL_SYNTAX },
120 [PM_ERR_ARGUMENT_FORMAL_GLOBAL] = {
"invalid formal argument; formal argument cannot be a global variable",
PM_ERROR_LEVEL_SYNTAX },
121 [PM_ERR_ARGUMENT_FORMAL_IVAR] = {
"invalid formal argument; formal argument cannot be an instance variable",
PM_ERROR_LEVEL_SYNTAX },
122 [PM_ERR_ARGUMENT_FORWARDING_UNBOUND] = {
"unexpected `...` in an non-parenthesized call",
PM_ERROR_LEVEL_SYNTAX },
123 [PM_ERR_ARGUMENT_NO_FORWARDING_AMPERSAND] = {
"unexpected `&`; no anonymous block parameter",
PM_ERROR_LEVEL_SYNTAX },
124 [PM_ERR_ARGUMENT_NO_FORWARDING_ELLIPSES] = {
"unexpected ... when the parent method is not forwarding",
PM_ERROR_LEVEL_SYNTAX },
125 [PM_ERR_ARGUMENT_NO_FORWARDING_ELLIPSES_LAMBDA] = {
"unexpected ... in lambda argument",
PM_ERROR_LEVEL_SYNTAX },
126 [PM_ERR_ARGUMENT_NO_FORWARDING_ELLIPSES_BLOCK] = {
"unexpected ... in block argument",
PM_ERROR_LEVEL_SYNTAX },
127 [PM_ERR_ARGUMENT_NO_FORWARDING_STAR] = {
"unexpected `*`; no anonymous rest parameter",
PM_ERROR_LEVEL_SYNTAX },
128 [PM_ERR_ARGUMENT_NO_FORWARDING_STAR_STAR] = {
"unexpected `**`; no anonymous keyword rest parameter",
PM_ERROR_LEVEL_SYNTAX },
129 [PM_ERR_ARGUMENT_SPLAT_AFTER_ASSOC_SPLAT] = {
"unexpected `*` splat argument after a `**` keyword splat argument",
PM_ERROR_LEVEL_SYNTAX },
130 [PM_ERR_ARGUMENT_SPLAT_AFTER_SPLAT] = {
"unexpected `*` splat argument after a `*` splat argument",
PM_ERROR_LEVEL_SYNTAX },
131 [PM_ERR_ARGUMENT_TERM_PAREN] = {
"unexpected %s; expected a `)` to close the arguments",
PM_ERROR_LEVEL_SYNTAX },
132 [PM_ERR_ARGUMENT_UNEXPECTED_BLOCK] = {
"unexpected '{' after a method call without parenthesis",
PM_ERROR_LEVEL_SYNTAX },
134 [PM_ERR_ARRAY_EXPRESSION] = {
"expected an expression for the array element",
PM_ERROR_LEVEL_SYNTAX },
135 [PM_ERR_ARRAY_EXPRESSION_AFTER_STAR] = {
"expected an expression after `*` in the array",
PM_ERROR_LEVEL_SYNTAX },
136 [PM_ERR_ARRAY_SEPARATOR] = {
"unexpected %s; expected a `,` separator for the array elements",
PM_ERROR_LEVEL_SYNTAX },
138 [PM_ERR_BEGIN_LONELY_ELSE] = {
"unexpected `else` in `begin` block; else without rescue is useless",
PM_ERROR_LEVEL_SYNTAX },
141 [PM_ERR_BEGIN_UPCASE_TERM] = {
"expected a `}` to close the `BEGIN` statement",
PM_ERROR_LEVEL_SYNTAX },
143 [PM_ERR_BLOCK_PARAM_LOCAL_VARIABLE] = {
"expected a local variable name in the block parameters",
PM_ERROR_LEVEL_SYNTAX },
144 [PM_ERR_BLOCK_PARAM_PIPE_TERM] = {
"expected the block parameters to end with `|`",
PM_ERROR_LEVEL_SYNTAX },
145 [PM_ERR_BLOCK_TERM_BRACE] = {
"expected a block beginning with `{` to end with `}`",
PM_ERROR_LEVEL_SYNTAX },
146 [PM_ERR_BLOCK_TERM_END] = {
"expected a block beginning with `do` to end with `end`",
PM_ERROR_LEVEL_SYNTAX },
148 [PM_ERR_CASE_EXPRESSION_AFTER_CASE] = {
"expected an expression after `case`",
PM_ERROR_LEVEL_SYNTAX },
149 [PM_ERR_CASE_EXPRESSION_AFTER_WHEN] = {
"expected an expression after `when`",
PM_ERROR_LEVEL_SYNTAX },
150 [PM_ERR_CASE_MATCH_MISSING_PREDICATE] = {
"expected a predicate for a case matching statement",
PM_ERROR_LEVEL_SYNTAX },
151 [PM_ERR_CASE_MISSING_CONDITIONS] = {
"expected a `when` or `in` clause after `case`",
PM_ERROR_LEVEL_SYNTAX },
154 [PM_ERR_CLASS_NAME] = {
"unexpected constant path after `class`; class/module name must be CONSTANT",
PM_ERROR_LEVEL_SYNTAX },
157 [PM_ERR_CLASS_UNEXPECTED_END] = {
"unexpected `end`, expecting ';' or '\\n'",
PM_ERROR_LEVEL_SYNTAX },
158 [PM_ERR_CLASS_VARIABLE_BARE] = {
"'@@' without identifiers is not allowed as a class variable name",
PM_ERROR_LEVEL_SYNTAX },
159 [PM_ERR_CONDITIONAL_ELSIF_PREDICATE] = {
"expected a predicate expression for the `elsif` statement",
PM_ERROR_LEVEL_SYNTAX },
160 [PM_ERR_CONDITIONAL_IF_PREDICATE] = {
"expected a predicate expression for the `if` statement",
PM_ERROR_LEVEL_SYNTAX },
162 [PM_ERR_CONDITIONAL_TERM] = {
"expected an `end` to close the conditional clause",
PM_ERROR_LEVEL_SYNTAX },
163 [PM_ERR_CONDITIONAL_TERM_ELSE] = {
"expected an `end` to close the `else` clause",
PM_ERROR_LEVEL_SYNTAX },
164 [PM_ERR_CONDITIONAL_UNLESS_PREDICATE] = {
"expected a predicate expression for the `unless` statement",
PM_ERROR_LEVEL_SYNTAX },
165 [PM_ERR_CONDITIONAL_UNTIL_PREDICATE] = {
"expected a predicate expression for the `until` statement",
PM_ERROR_LEVEL_SYNTAX },
166 [PM_ERR_CONDITIONAL_WHILE_PREDICATE] = {
"expected a predicate expression for the `while` statement",
PM_ERROR_LEVEL_SYNTAX },
167 [PM_ERR_CONSTANT_PATH_COLON_COLON_CONSTANT] = {
"expected a constant after the `::` operator",
PM_ERROR_LEVEL_SYNTAX },
169 [PM_ERR_DEF_ENDLESS_PARAMETERS] = {
"could not parse the endless method parameters",
PM_ERROR_LEVEL_SYNTAX },
170 [PM_ERR_DEF_ENDLESS_SETTER] = {
"invalid method name; a setter method cannot be defined in an endless method definition",
PM_ERROR_LEVEL_SYNTAX },
171 [PM_ERR_DEF_ENDLESS_DO_BLOCK] = {
"unexpected `do` for block in an endless method definition",
PM_ERROR_LEVEL_SYNTAX },
173 [PM_ERR_DEF_PARAMS_TERM] = {
"expected a delimiter to close the parameters",
PM_ERROR_LEVEL_SYNTAX },
174 [PM_ERR_DEF_PARAMS_TERM_PAREN] = {
"unexpected %s; expected a `)` to close the parameters",
PM_ERROR_LEVEL_SYNTAX },
176 [PM_ERR_DEF_RECEIVER_TERM] = {
"expected a `.` or `::` after the receiver in a method definition",
PM_ERROR_LEVEL_SYNTAX },
185 [PM_ERR_ESCAPE_INVALID_CONTROL_REPEAT] = {
"invalid control escape sequence; control cannot be repeated",
PM_ERROR_LEVEL_SYNTAX },
188 [PM_ERR_ESCAPE_INVALID_META_REPEAT] = {
"invalid meta escape sequence; meta cannot be repeated",
PM_ERROR_LEVEL_SYNTAX },
190 [PM_ERR_ESCAPE_INVALID_UNICODE_CM_FLAGS] = {
"invalid Unicode escape sequence; Unicode cannot be combined with control or meta flags",
PM_ERROR_LEVEL_SYNTAX },
192 [PM_ERR_ESCAPE_INVALID_UNICODE_LITERAL] = {
"invalid Unicode escape sequence; Multiple codepoints at single character literal are disallowed",
PM_ERROR_LEVEL_SYNTAX },
193 [PM_ERR_ESCAPE_INVALID_UNICODE_LONG] = {
"invalid Unicode escape sequence; maximum length is 6 digits",
PM_ERROR_LEVEL_SYNTAX },
194 [PM_ERR_ESCAPE_INVALID_UNICODE_SHORT] = {
"too short escape sequence: %.*s",
PM_ERROR_LEVEL_SYNTAX },
197 [PM_ERR_EXPECT_EOL_AFTER_STATEMENT] = {
"unexpected %s, expecting end-of-input",
PM_ERROR_LEVEL_SYNTAX },
198 [PM_ERR_EXPECT_EXPRESSION_AFTER_AMPAMPEQ] = {
"expected an expression after `&&=`",
PM_ERROR_LEVEL_SYNTAX },
199 [PM_ERR_EXPECT_EXPRESSION_AFTER_PIPEPIPEEQ] = {
"expected an expression after `||=`",
PM_ERROR_LEVEL_SYNTAX },
200 [PM_ERR_EXPECT_EXPRESSION_AFTER_COMMA] = {
"expected an expression after `,`",
PM_ERROR_LEVEL_SYNTAX },
201 [PM_ERR_EXPECT_EXPRESSION_AFTER_EQUAL] = {
"expected an expression after `=`",
PM_ERROR_LEVEL_SYNTAX },
202 [PM_ERR_EXPECT_EXPRESSION_AFTER_LESS_LESS] = {
"expected an expression after `<<`",
PM_ERROR_LEVEL_SYNTAX },
203 [PM_ERR_EXPECT_EXPRESSION_AFTER_LPAREN] = {
"expected an expression after `(`",
PM_ERROR_LEVEL_SYNTAX },
204 [PM_ERR_EXPECT_EXPRESSION_AFTER_OPERATOR] = {
"unexpected %s; expected an expression after the operator",
PM_ERROR_LEVEL_SYNTAX },
205 [PM_ERR_EXPECT_EXPRESSION_AFTER_SPLAT] = {
"expected an expression after `*` splat in an argument",
PM_ERROR_LEVEL_SYNTAX },
206 [PM_ERR_EXPECT_EXPRESSION_AFTER_SPLAT_HASH] = {
"expected an expression after `**` in a hash",
PM_ERROR_LEVEL_SYNTAX },
207 [PM_ERR_EXPECT_EXPRESSION_AFTER_STAR] = {
"expected an expression after `*`",
PM_ERROR_LEVEL_SYNTAX },
208 [PM_ERR_EXPECT_FOR_DELIMITER] = {
"unexpected %s; expected a 'do', newline, or ';' after the 'for' loop collection",
PM_ERROR_LEVEL_SYNTAX },
209 [PM_ERR_EXPECT_IDENT_REQ_PARAMETER] = {
"expected an identifier for the required parameter",
PM_ERROR_LEVEL_SYNTAX },
210 [PM_ERR_EXPECT_IN_DELIMITER] = {
"expected a delimiter after the patterns of an `in` clause",
PM_ERROR_LEVEL_SYNTAX },
211 [PM_ERR_EXPECT_LPAREN_AFTER_NOT_LPAREN] = {
"expected a `(` immediately after `not`",
PM_ERROR_LEVEL_SYNTAX },
213 [PM_ERR_EXPECT_LPAREN_REQ_PARAMETER] = {
"expected a `(` to start a required parameter",
PM_ERROR_LEVEL_SYNTAX },
214 [PM_ERR_EXPECT_MESSAGE] = {
"unexpected %s; expecting a message to send to the receiver",
PM_ERROR_LEVEL_SYNTAX },
217 [PM_ERR_EXPECT_RPAREN_AFTER_MULTI] = {
"expected a `)` after multiple assignment",
PM_ERROR_LEVEL_SYNTAX },
218 [PM_ERR_EXPECT_RPAREN_REQ_PARAMETER] = {
"expected a `)` to end a required parameter",
PM_ERROR_LEVEL_SYNTAX },
219 [PM_ERR_EXPECT_SINGLETON_CLASS_DELIMITER] = {
"unexpected %s; expected a newline or a ';' after the singleton class",
PM_ERROR_LEVEL_SYNTAX },
220 [PM_ERR_EXPECT_STRING_CONTENT] = {
"expected string content after opening string delimiter",
PM_ERROR_LEVEL_SYNTAX },
221 [PM_ERR_EXPECT_WHEN_DELIMITER] = {
"expected a delimiter after the predicates of a `when` clause",
PM_ERROR_LEVEL_SYNTAX },
223 [PM_ERR_EXPRESSION_NOT_WRITABLE] = {
"unexpected '='; target cannot be written",
PM_ERROR_LEVEL_SYNTAX },
224 [PM_ERR_EXPRESSION_NOT_WRITABLE_ENCODING] = {
"Can't assign to __ENCODING__",
PM_ERROR_LEVEL_SYNTAX },
229 [PM_ERR_EXPRESSION_NOT_WRITABLE_NUMBERED] = {
"Can't assign to numbered parameter %.2s",
PM_ERROR_LEVEL_SYNTAX },
233 [PM_ERR_FOR_COLLECTION] = {
"expected a collection after the `in` in a `for` statement",
PM_ERROR_LEVEL_SYNTAX },
235 [PM_ERR_FOR_IN] = {
"expected an `in` after the index in a `for` statement",
PM_ERROR_LEVEL_SYNTAX },
237 [PM_ERR_GLOBAL_VARIABLE_BARE] = {
"'$' without identifiers is not allowed as a global variable name",
PM_ERROR_LEVEL_SYNTAX },
238 [PM_ERR_HASH_EXPRESSION_AFTER_LABEL] = {
"expected an expression after the label in a hash",
PM_ERROR_LEVEL_SYNTAX },
239 [PM_ERR_HASH_KEY] = {
"unexpected %s, expecting '}' or a key in the hash literal",
PM_ERROR_LEVEL_SYNTAX },
242 [PM_ERR_HASH_VALUE] = {
"unexpected %s; expected a value in the hash literal",
PM_ERROR_LEVEL_SYNTAX },
244 [PM_ERR_HEREDOC_TERM] = {
"unterminated heredoc; can't find string \"%.*s\" anywhere before EOF",
PM_ERROR_LEVEL_SYNTAX },
246 [PM_ERR_INCOMPLETE_VARIABLE_CLASS_3_3] = {
"`%.*s' is not allowed as a class variable name",
PM_ERROR_LEVEL_SYNTAX },
247 [PM_ERR_INCOMPLETE_VARIABLE_CLASS] = {
"'%.*s' is not allowed as a class variable name",
PM_ERROR_LEVEL_SYNTAX },
248 [PM_ERR_INCOMPLETE_VARIABLE_INSTANCE_3_3] = {
"`%.*s' is not allowed as an instance variable name",
PM_ERROR_LEVEL_SYNTAX },
249 [PM_ERR_INCOMPLETE_VARIABLE_INSTANCE] = {
"'%.*s' is not allowed as an instance variable name",
PM_ERROR_LEVEL_SYNTAX },
250 [PM_ERR_INSTANCE_VARIABLE_BARE] = {
"'@' without identifiers is not allowed as an instance variable name",
PM_ERROR_LEVEL_SYNTAX },
255 [PM_ERR_INVALID_LOCAL_VARIABLE_READ] = {
"identifier %.*s is not valid to get",
PM_ERROR_LEVEL_SYNTAX },
256 [PM_ERR_INVALID_LOCAL_VARIABLE_WRITE] = {
"identifier %.*s is not valid to set",
PM_ERROR_LEVEL_SYNTAX },
257 [PM_ERR_INVALID_NUMBER_BINARY] = {
"invalid binary number; numeric literal without digits",
PM_ERROR_LEVEL_SYNTAX },
258 [PM_ERR_INVALID_NUMBER_DECIMAL] = {
"invalid decimal number; numeric literal without digits",
PM_ERROR_LEVEL_SYNTAX },
259 [PM_ERR_INVALID_NUMBER_FRACTION] = {
"unexpected fraction part after numeric literal",
PM_ERROR_LEVEL_SYNTAX },
260 [PM_ERR_INVALID_NUMBER_HEXADECIMAL] = {
"invalid hexadecimal number; numeric literal without digits",
PM_ERROR_LEVEL_SYNTAX },
261 [PM_ERR_INVALID_NUMBER_OCTAL] = {
"invalid octal number; numeric literal without digits",
PM_ERROR_LEVEL_SYNTAX },
262 [PM_ERR_INVALID_NUMBER_UNDERSCORE_INNER] = {
"invalid underscore placement in number",
PM_ERROR_LEVEL_SYNTAX },
266 [PM_ERR_INVALID_MULTIBYTE_CHARACTER] = {
"invalid multibyte character 0x%X",
PM_ERROR_LEVEL_SYNTAX },
270 [PM_ERR_INVALID_PERCENT_EOF] = {
"unterminated quoted string meets end of file",
PM_ERROR_LEVEL_SYNTAX },
275 [PM_ERR_INVALID_VARIABLE_GLOBAL_3_3] = {
"`%.*s' is not allowed as a global variable name",
PM_ERROR_LEVEL_SYNTAX },
276 [PM_ERR_INVALID_VARIABLE_GLOBAL] = {
"'%.*s' is not allowed as a global variable name",
PM_ERROR_LEVEL_SYNTAX },
278 [PM_ERR_IT_NOT_ALLOWED_NUMBERED] = {
"'it' is not allowed when a numbered parameter is already used",
PM_ERROR_LEVEL_SYNTAX },
279 [PM_ERR_IT_NOT_ALLOWED_ORDINARY] = {
"'it' is not allowed when an ordinary parameter is defined",
PM_ERROR_LEVEL_SYNTAX },
280 [PM_ERR_LAMBDA_OPEN] = {
"expected a `do` keyword or a `{` to open the lambda block",
PM_ERROR_LEVEL_SYNTAX },
281 [PM_ERR_LAMBDA_TERM_BRACE] = {
"expected a lambda block beginning with `{` to end with `}`",
PM_ERROR_LEVEL_SYNTAX },
282 [PM_ERR_LAMBDA_TERM_END] = {
"expected a lambda block beginning with `do` to end with `end`",
PM_ERROR_LEVEL_SYNTAX },
284 [PM_ERR_LIST_I_LOWER_TERM] = {
"unterminated list; expected a closing delimiter for the `%i`",
PM_ERROR_LEVEL_SYNTAX },
286 [PM_ERR_LIST_I_UPPER_TERM] = {
"unterminated list; expected a closing delimiter for the `%I`",
PM_ERROR_LEVEL_SYNTAX },
288 [PM_ERR_LIST_W_LOWER_TERM] = {
"unterminated list; expected a closing delimiter for the `%w`",
PM_ERROR_LEVEL_SYNTAX },
290 [PM_ERR_LIST_W_UPPER_TERM] = {
"unterminated list; expected a closing delimiter for the `%W`",
PM_ERROR_LEVEL_SYNTAX },
293 [PM_ERR_MODULE_IN_METHOD] = {
"unexpected module definition in method body",
PM_ERROR_LEVEL_SYNTAX },
294 [PM_ERR_MODULE_NAME] = {
"unexpected constant path after `module`; class/module name must be CONSTANT",
PM_ERROR_LEVEL_SYNTAX },
295 [PM_ERR_MODULE_TERM] = {
"expected an `end` to close the `module` statement",
PM_ERROR_LEVEL_SYNTAX },
296 [PM_ERR_MULTI_ASSIGN_MULTI_SPLATS] = {
"multiple splats in multiple assignment",
PM_ERROR_LEVEL_SYNTAX },
297 [PM_ERR_MULTI_ASSIGN_UNEXPECTED_REST] = {
"unexpected '%.*s' resulting in multiple splats in multiple assignment",
PM_ERROR_LEVEL_SYNTAX },
300 [PM_ERR_NON_ASSOCIATIVE_OPERATOR] = {
"unexpected %s; %s is a non-associative operator",
PM_ERROR_LEVEL_SYNTAX },
303 [PM_ERR_NUMBERED_PARAMETER_INNER_BLOCK] = {
"numbered parameter is already used in inner block",
PM_ERROR_LEVEL_SYNTAX },
304 [PM_ERR_NUMBERED_PARAMETER_IT] = {
"numbered parameters are not allowed when 'it' is already used",
PM_ERROR_LEVEL_SYNTAX },
305 [PM_ERR_NUMBERED_PARAMETER_ORDINARY] = {
"numbered parameters are not allowed when an ordinary parameter is defined",
PM_ERROR_LEVEL_SYNTAX },
306 [PM_ERR_NUMBERED_PARAMETER_OUTER_BLOCK] = {
"numbered parameter is already used in outer block",
PM_ERROR_LEVEL_SYNTAX },
307 [PM_ERR_OPERATOR_MULTI_ASSIGN] = {
"unexpected operator for a multiple assignment",
PM_ERROR_LEVEL_SYNTAX },
308 [PM_ERR_OPERATOR_WRITE_ARGUMENTS] = {
"unexpected operator after a call with arguments",
PM_ERROR_LEVEL_SYNTAX },
309 [PM_ERR_OPERATOR_WRITE_BLOCK] = {
"unexpected operator after a call with a block",
PM_ERROR_LEVEL_SYNTAX },
310 [PM_ERR_PARAMETER_ASSOC_SPLAT_MULTI] = {
"unexpected multiple `**` splat parameters",
PM_ERROR_LEVEL_SYNTAX },
311 [PM_ERR_PARAMETER_BLOCK_MULTI] = {
"multiple block parameters; only one block is allowed",
PM_ERROR_LEVEL_SYNTAX },
316 [PM_ERR_PARAMETER_NO_DEFAULT] = {
"expected a default value for the parameter",
PM_ERROR_LEVEL_SYNTAX },
317 [PM_ERR_PARAMETER_NO_DEFAULT_KW] = {
"expected a default value for the keyword parameter",
PM_ERROR_LEVEL_SYNTAX },
318 [PM_ERR_PARAMETER_NUMBERED_RESERVED] = {
"%.2s is reserved for numbered parameters",
PM_ERROR_LEVEL_SYNTAX },
320 [PM_ERR_PARAMETER_SPLAT_MULTI] = {
"unexpected multiple `*` splat parameters",
PM_ERROR_LEVEL_SYNTAX },
324 [PM_ERR_PARAMETER_UNEXPECTED_NO_KW] = {
"unexpected **nil; no keywords marker disallowed after keywords",
PM_ERROR_LEVEL_SYNTAX },
325 [PM_ERR_PATTERN_ARRAY_MULTIPLE_RESTS] = {
"unexpected multiple '*' rest patterns in an array pattern",
PM_ERROR_LEVEL_SYNTAX },
327 [PM_ERR_PATTERN_CAPTURE_IN_ALTERNATIVE] = {
"variable capture in alternative pattern",
PM_ERROR_LEVEL_SYNTAX },
328 [PM_ERR_PATTERN_EXPRESSION_AFTER_BRACKET] = {
"expected a pattern expression after the `[` operator",
PM_ERROR_LEVEL_SYNTAX },
329 [PM_ERR_PATTERN_EXPRESSION_AFTER_COMMA] = {
"expected a pattern expression after `,`",
PM_ERROR_LEVEL_SYNTAX },
330 [PM_ERR_PATTERN_EXPRESSION_AFTER_HROCKET] = {
"expected a pattern expression after `=>`",
PM_ERROR_LEVEL_SYNTAX },
331 [PM_ERR_PATTERN_EXPRESSION_AFTER_IN] = {
"expected a pattern expression after the `in` keyword",
PM_ERROR_LEVEL_SYNTAX },
332 [PM_ERR_PATTERN_EXPRESSION_AFTER_KEY] = {
"expected a pattern expression after the key",
PM_ERROR_LEVEL_SYNTAX },
333 [PM_ERR_PATTERN_EXPRESSION_AFTER_PAREN] = {
"expected a pattern expression after the `(` operator",
PM_ERROR_LEVEL_SYNTAX },
334 [PM_ERR_PATTERN_EXPRESSION_AFTER_PIN] = {
"expected a pattern expression after the `^` pin operator",
PM_ERROR_LEVEL_SYNTAX },
335 [PM_ERR_PATTERN_EXPRESSION_AFTER_PIPE] = {
"expected a pattern expression after the `|` operator",
PM_ERROR_LEVEL_SYNTAX },
336 [PM_ERR_PATTERN_EXPRESSION_AFTER_RANGE] = {
"expected a pattern expression after the range operator",
PM_ERROR_LEVEL_SYNTAX },
337 [PM_ERR_PATTERN_EXPRESSION_AFTER_REST] = {
"unexpected pattern expression after the `**` expression",
PM_ERROR_LEVEL_SYNTAX },
338 [PM_ERR_PATTERN_FIND_MISSING_INNER] = {
"find patterns need at least one required inner pattern",
PM_ERROR_LEVEL_SYNTAX },
339 [PM_ERR_PATTERN_HASH_IMPLICIT] = {
"unexpected implicit hash in pattern; use '{' to delineate",
PM_ERROR_LEVEL_SYNTAX },
340 [PM_ERR_PATTERN_HASH_KEY] = {
"unexpected %s; expected a key in the hash pattern",
PM_ERROR_LEVEL_SYNTAX },
342 [PM_ERR_PATTERN_HASH_KEY_INTERPOLATED] = {
"symbol literal with interpolation is not allowed",
PM_ERROR_LEVEL_SYNTAX },
343 [PM_ERR_PATTERN_HASH_KEY_LABEL] = {
"expected a label as the key in the hash pattern",
PM_ERROR_LEVEL_SYNTAX },
344 [PM_ERR_PATTERN_HASH_KEY_LOCALS] = {
"key must be valid as local variables",
PM_ERROR_LEVEL_SYNTAX },
345 [PM_ERR_PATTERN_IDENT_AFTER_HROCKET] = {
"expected an identifier after the `=>` operator",
PM_ERROR_LEVEL_SYNTAX },
346 [PM_ERR_PATTERN_LABEL_AFTER_COMMA] = {
"expected a label after the `,` in the hash pattern",
PM_ERROR_LEVEL_SYNTAX },
348 [PM_ERR_PATTERN_TERM_BRACE] = {
"expected a `}` to close the pattern expression",
PM_ERROR_LEVEL_SYNTAX },
349 [PM_ERR_PATTERN_TERM_BRACKET] = {
"expected a `]` to close the pattern expression",
PM_ERROR_LEVEL_SYNTAX },
350 [PM_ERR_PATTERN_TERM_PAREN] = {
"expected a `)` to close the pattern expression",
PM_ERROR_LEVEL_SYNTAX },
351 [PM_ERR_PIPEPIPEEQ_MULTI_ASSIGN] = {
"unexpected `||=` in a multiple assignment",
PM_ERROR_LEVEL_SYNTAX },
352 [PM_ERR_REGEXP_ENCODING_OPTION_MISMATCH] = {
"regexp encoding option '%c' differs from source encoding '%s'",
PM_ERROR_LEVEL_SYNTAX },
353 [PM_ERR_REGEXP_ESCAPED_NON_ASCII_IN_UTF8] = {
"escaped non ASCII character in UTF-8 regexp: /%.*s/",
PM_ERROR_LEVEL_SYNTAX },
354 [PM_ERR_REGEXP_INCOMPAT_CHAR_ENCODING] = {
"incompatible character encoding: /%.*s/",
PM_ERROR_LEVEL_SYNTAX },
355 [PM_ERR_REGEXP_INVALID_CHAR_PROPERTY] = {
"invalid character property name {%.*s}: /%.*s/",
PM_ERROR_LEVEL_SYNTAX },
357 [PM_ERR_REGEXP_NON_ESCAPED_MBC] = {
"/.../n has a non escaped non ASCII character in non ASCII-8BIT script: /%.*s/",
PM_ERROR_LEVEL_SYNTAX },
360 [PM_ERR_REGEXP_TERM] = {
"unterminated regexp meets end of file; expected a closing delimiter",
PM_ERROR_LEVEL_SYNTAX },
361 [PM_ERR_REGEXP_UTF8_CHAR_NON_UTF8_REGEXP] = {
"UTF-8 character in non UTF-8 regexp: /%.*s/",
PM_ERROR_LEVEL_SYNTAX },
363 [PM_ERR_RESCUE_MODIFIER_VALUE] = {
"expected a value after the `rescue` modifier",
PM_ERROR_LEVEL_SYNTAX },
364 [PM_ERR_RESCUE_TERM] = {
"expected a closing delimiter for the `rescue` clause",
PM_ERROR_LEVEL_SYNTAX },
365 [PM_ERR_RESCUE_VARIABLE] = {
"expected an exception variable after `=>` in a rescue statement",
PM_ERROR_LEVEL_SYNTAX },
367 [PM_ERR_SINGLETON_FOR_LITERALS] = {
"cannot define singleton method for literals",
PM_ERROR_LEVEL_SYNTAX },
368 [PM_ERR_STATEMENT_ALIAS] = {
"unexpected an `alias` at a non-statement position",
PM_ERROR_LEVEL_SYNTAX },
369 [PM_ERR_STATEMENT_POSTEXE_END] = {
"unexpected an `END` at a non-statement position",
PM_ERROR_LEVEL_SYNTAX },
370 [PM_ERR_STATEMENT_PREEXE_BEGIN] = {
"unexpected a `BEGIN` at a non-statement position",
PM_ERROR_LEVEL_SYNTAX },
371 [PM_ERR_STATEMENT_UNDEF] = {
"unexpected an `undef` at a non-statement position",
PM_ERROR_LEVEL_SYNTAX },
373 [PM_ERR_STRING_INTERPOLATED_TERM] = {
"unterminated string; expected a closing delimiter for the interpolated string",
PM_ERROR_LEVEL_SYNTAX },
375 [PM_ERR_STRING_LITERAL_TERM] = {
"unexpected %s, expected a string literal terminator",
PM_ERROR_LEVEL_SYNTAX },
377 [PM_ERR_SYMBOL_TERM_DYNAMIC] = {
"unterminated quoted string; expected a closing delimiter for the dynamic symbol",
PM_ERROR_LEVEL_SYNTAX },
378 [PM_ERR_SYMBOL_TERM_INTERPOLATED] = {
"unterminated symbol; expected a closing delimiter for the interpolated symbol",
PM_ERROR_LEVEL_SYNTAX },
379 [PM_ERR_TERNARY_COLON] = {
"expected a `:` after the true expression of a ternary operator",
PM_ERROR_LEVEL_SYNTAX },
380 [PM_ERR_TERNARY_EXPRESSION_FALSE] = {
"expected an expression after `:` in the ternary operator",
PM_ERROR_LEVEL_SYNTAX },
381 [PM_ERR_TERNARY_EXPRESSION_TRUE] = {
"expected an expression after `?` in the ternary operator",
PM_ERROR_LEVEL_SYNTAX },
382 [PM_ERR_UNARY_RECEIVER] = {
"unexpected %s, expected a receiver for unary `%c`",
PM_ERROR_LEVEL_SYNTAX },
383 [PM_ERR_UNARY_DISALLOWED] = {
"unexpected %s; unary calls are not allowed in this context",
PM_ERROR_LEVEL_SYNTAX },
384 [PM_ERR_UNDEF_ARGUMENT] = {
"invalid argument being passed to `undef`; expected a bare word, constant, or symbol argument",
PM_ERROR_LEVEL_SYNTAX },
385 [PM_ERR_UNEXPECTED_BLOCK_ARGUMENT] = {
"block argument should not be given",
PM_ERROR_LEVEL_SYNTAX },
386 [PM_ERR_UNEXPECTED_INDEX_BLOCK] = {
"unexpected block arg given in index assignment; blocks are not allowed in index assignment expressions",
PM_ERROR_LEVEL_SYNTAX },
387 [PM_ERR_UNEXPECTED_INDEX_KEYWORDS] = {
"unexpected keyword arg given in index assignment; keywords are not allowed in index assignment expressions",
PM_ERROR_LEVEL_SYNTAX },
389 [PM_ERR_UNEXPECTED_MULTI_WRITE] = {
"unexpected multiple assignment; multiple assignment is not allowed in this context",
PM_ERROR_LEVEL_SYNTAX },
390 [PM_ERR_UNEXPECTED_PARAMETER_DEFAULT_VALUE] = {
"unexpected %s; expected a default value for a parameter",
PM_ERROR_LEVEL_SYNTAX },
391 [PM_ERR_UNEXPECTED_RANGE_OPERATOR] = {
"unexpected range operator; .. and ... are non-associative and cannot be chained",
PM_ERROR_LEVEL_SYNTAX },
392 [PM_ERR_UNEXPECTED_SAFE_NAVIGATION] = {
"&. inside multiple assignment destination",
PM_ERROR_LEVEL_SYNTAX },
393 [PM_ERR_UNEXPECTED_TOKEN_CLOSE_CONTEXT] = {
"unexpected %s, assuming it is closing the parent %s",
PM_ERROR_LEVEL_SYNTAX },
401 [PM_ERR_XSTRING_TERM] = {
"expected a closing delimiter for the `%x` or backtick string",
PM_ERROR_LEVEL_SYNTAX },
404 [PM_WARN_AMBIGUOUS_BINARY_OPERATOR] = {
"'%s' after local variable or literal is interpreted as binary operator even though it seems like %s",
PM_WARNING_LEVEL_VERBOSE },
405 [PM_WARN_AMBIGUOUS_FIRST_ARGUMENT_MINUS] = {
"ambiguous first argument; put parentheses or a space even after `-` operator",
PM_WARNING_LEVEL_VERBOSE },
406 [PM_WARN_AMBIGUOUS_FIRST_ARGUMENT_PLUS] = {
"ambiguous first argument; put parentheses or a space even after `+` operator",
PM_WARNING_LEVEL_VERBOSE },
407 [PM_WARN_AMBIGUOUS_PREFIX_AMPERSAND] = {
"ambiguous `&` has been interpreted as an argument prefix",
PM_WARNING_LEVEL_VERBOSE },
408 [PM_WARN_AMBIGUOUS_PREFIX_STAR] = {
"ambiguous `*` has been interpreted as an argument prefix",
PM_WARNING_LEVEL_VERBOSE },
409 [PM_WARN_AMBIGUOUS_PREFIX_STAR_STAR] = {
"ambiguous `**` has been interpreted as an argument prefix",
PM_WARNING_LEVEL_VERBOSE },
410 [PM_WARN_AMBIGUOUS_SLASH] = {
"ambiguous `/`; wrap regexp in parentheses or add a space after `/` operator",
PM_WARNING_LEVEL_VERBOSE },
413 [PM_WARN_DUPLICATED_HASH_KEY] = {
"key %.*s is duplicated and overwritten on line %" PRIi32,
PM_WARNING_LEVEL_DEFAULT },
414 [PM_WARN_DUPLICATED_WHEN_CLAUSE] = {
"'when' clause on line %" PRIi32
" duplicates 'when' clause on line %" PRIi32
" and is ignored",
PM_WARNING_LEVEL_VERBOSE },
415 [PM_WARN_EQUAL_IN_CONDITIONAL_3_3] = {
"found `= literal' in conditional, should be ==",
PM_WARNING_LEVEL_DEFAULT },
419 [PM_WARN_IGNORED_FROZEN_STRING_LITERAL] = {
"'frozen_string_literal' is ignored after any tokens",
PM_WARNING_LEVEL_VERBOSE },
420 [PM_WARN_INDENTATION_MISMATCH] = {
"mismatched indentations at '%.*s' with '%.*s' at %" PRIi32,
PM_WARNING_LEVEL_VERBOSE },
424 [PM_WARN_INVALID_NUMBERED_REFERENCE] = {
"'%.*s' is too big for a number variable, always nil",
PM_WARNING_LEVEL_DEFAULT },
428 [PM_WARN_SHAREABLE_CONSTANT_VALUE_LINE] = {
"'shareable_constant_value' is ignored unless in comment-only line",
PM_WARNING_LEVEL_VERBOSE },
429 [PM_WARN_SHEBANG_CARRIAGE_RETURN] = {
"shebang line ending with \\r may cause problems",
PM_WARNING_LEVEL_DEFAULT },
430 [PM_WARN_UNEXPECTED_CARRIAGE_RETURN] = {
"encountered \\r in middle of line, treated as a mere space",
PM_WARNING_LEVEL_DEFAULT },
440pm_diagnostic_id_name(pm_diagnostic_id_t diag_id) {
442 case PM_ERR_ALIAS_ARGUMENT:
return "alias_argument";
443 case PM_ERR_ALIAS_ARGUMENT_NUMBERED_REFERENCE:
return "alias_argument_numbered_reference";
444 case PM_ERR_AMPAMPEQ_MULTI_ASSIGN:
return "ampampeq_multi_assign";
445 case PM_ERR_ARGUMENT_AFTER_BLOCK:
return "argument_after_block";
446 case PM_ERR_ARGUMENT_AFTER_FORWARDING_ELLIPSES:
return "argument_after_forwarding_ellipses";
447 case PM_ERR_ARGUMENT_BARE_HASH:
return "argument_bare_hash";
448 case PM_ERR_ARGUMENT_BLOCK_FORWARDING:
return "argument_block_forwarding";
449 case PM_ERR_ARGUMENT_BLOCK_MULTI:
return "argument_block_multi";
450 case PM_ERR_ARGUMENT_CONFLICT_AMPERSAND:
return "argument_conflict_ampersand";
451 case PM_ERR_ARGUMENT_CONFLICT_STAR:
return "argument_conflict_star";
452 case PM_ERR_ARGUMENT_CONFLICT_STAR_STAR:
return "argument_conflict_star_star";
453 case PM_ERR_ARGUMENT_FORMAL_CLASS:
return "argument_formal_class";
454 case PM_ERR_ARGUMENT_FORMAL_CONSTANT:
return "argument_formal_constant";
455 case PM_ERR_ARGUMENT_FORMAL_GLOBAL:
return "argument_formal_global";
456 case PM_ERR_ARGUMENT_FORMAL_IVAR:
return "argument_formal_ivar";
457 case PM_ERR_ARGUMENT_FORWARDING_UNBOUND:
return "argument_forwarding_unbound";
458 case PM_ERR_ARGUMENT_NO_FORWARDING_AMPERSAND:
return "argument_no_forwarding_ampersand";
459 case PM_ERR_ARGUMENT_NO_FORWARDING_ELLIPSES:
return "argument_no_forwarding_ellipses";
460 case PM_ERR_ARGUMENT_NO_FORWARDING_ELLIPSES_LAMBDA:
return "argument_no_forwarding_ellipses_lambda";
461 case PM_ERR_ARGUMENT_NO_FORWARDING_ELLIPSES_BLOCK:
return "argument_no_forwarding_ellipses_block";
462 case PM_ERR_ARGUMENT_NO_FORWARDING_STAR:
return "argument_no_forwarding_star";
463 case PM_ERR_ARGUMENT_NO_FORWARDING_STAR_STAR:
return "argument_no_forwarding_star_star";
464 case PM_ERR_ARGUMENT_SPLAT_AFTER_ASSOC_SPLAT:
return "argument_splat_after_assoc_splat";
465 case PM_ERR_ARGUMENT_SPLAT_AFTER_SPLAT:
return "argument_splat_after_splat";
466 case PM_ERR_ARGUMENT_TERM_PAREN:
return "argument_term_paren";
467 case PM_ERR_ARGUMENT_UNEXPECTED_BLOCK:
return "argument_unexpected_block";
468 case PM_ERR_ARRAY_ELEMENT:
return "array_element";
469 case PM_ERR_ARRAY_EXPRESSION:
return "array_expression";
470 case PM_ERR_ARRAY_EXPRESSION_AFTER_STAR:
return "array_expression_after_star";
471 case PM_ERR_ARRAY_SEPARATOR:
return "array_separator";
472 case PM_ERR_ARRAY_TERM:
return "array_term";
473 case PM_ERR_BEGIN_LONELY_ELSE:
return "begin_lonely_else";
474 case PM_ERR_BEGIN_TERM:
return "begin_term";
475 case PM_ERR_BEGIN_UPCASE_BRACE:
return "begin_upcase_brace";
476 case PM_ERR_BEGIN_UPCASE_TERM:
return "begin_upcase_term";
477 case PM_ERR_BEGIN_UPCASE_TOPLEVEL:
return "begin_upcase_toplevel";
478 case PM_ERR_BLOCK_PARAM_LOCAL_VARIABLE:
return "block_param_local_variable";
479 case PM_ERR_BLOCK_PARAM_PIPE_TERM:
return "block_param_pipe_term";
480 case PM_ERR_BLOCK_TERM_BRACE:
return "block_term_brace";
481 case PM_ERR_BLOCK_TERM_END:
return "block_term_end";
482 case PM_ERR_CANNOT_PARSE_EXPRESSION:
return "cannot_parse_expression";
483 case PM_ERR_CANNOT_PARSE_STRING_PART:
return "cannot_parse_string_part";
484 case PM_ERR_CASE_EXPRESSION_AFTER_CASE:
return "case_expression_after_case";
485 case PM_ERR_CASE_EXPRESSION_AFTER_WHEN:
return "case_expression_after_when";
486 case PM_ERR_CASE_MATCH_MISSING_PREDICATE:
return "case_match_missing_predicate";
487 case PM_ERR_CASE_MISSING_CONDITIONS:
return "case_missing_conditions";
488 case PM_ERR_CASE_TERM:
return "case_term";
489 case PM_ERR_CLASS_IN_METHOD:
return "class_in_method";
490 case PM_ERR_CLASS_NAME:
return "class_name";
491 case PM_ERR_CLASS_SUPERCLASS:
return "class_superclass";
492 case PM_ERR_CLASS_TERM:
return "class_term";
493 case PM_ERR_CLASS_UNEXPECTED_END:
return "class_unexpected_end";
494 case PM_ERR_CLASS_VARIABLE_BARE:
return "class_variable_bare";
495 case PM_ERR_CONDITIONAL_ELSIF_PREDICATE:
return "conditional_elsif_predicate";
496 case PM_ERR_CONDITIONAL_IF_PREDICATE:
return "conditional_if_predicate";
497 case PM_ERR_CONDITIONAL_PREDICATE_TERM:
return "conditional_predicate_term";
498 case PM_ERR_CONDITIONAL_TERM:
return "conditional_term";
499 case PM_ERR_CONDITIONAL_TERM_ELSE:
return "conditional_term_else";
500 case PM_ERR_CONDITIONAL_UNLESS_PREDICATE:
return "conditional_unless_predicate";
501 case PM_ERR_CONDITIONAL_UNTIL_PREDICATE:
return "conditional_until_predicate";
502 case PM_ERR_CONDITIONAL_WHILE_PREDICATE:
return "conditional_while_predicate";
503 case PM_ERR_CONSTANT_PATH_COLON_COLON_CONSTANT:
return "constant_path_colon_colon_constant";
504 case PM_ERR_DEF_ENDLESS:
return "def_endless";
505 case PM_ERR_DEF_ENDLESS_PARAMETERS:
return "def_endless_parameters";
506 case PM_ERR_DEF_ENDLESS_SETTER:
return "def_endless_setter";
507 case PM_ERR_DEF_ENDLESS_DO_BLOCK:
return "def_endless_do_block";
508 case PM_ERR_DEF_NAME:
return "def_name";
509 case PM_ERR_DEF_PARAMS_TERM:
return "def_params_term";
510 case PM_ERR_DEF_PARAMS_TERM_PAREN:
return "def_params_term_paren";
511 case PM_ERR_DEF_RECEIVER:
return "def_receiver";
512 case PM_ERR_DEF_RECEIVER_TERM:
return "def_receiver_term";
513 case PM_ERR_DEF_TERM:
return "def_term";
514 case PM_ERR_DEFINED_EXPRESSION:
return "defined_expression";
515 case PM_ERR_EMBDOC_TERM:
return "embdoc_term";
516 case PM_ERR_EMBEXPR_END:
return "embexpr_end";
517 case PM_ERR_EMBVAR_INVALID:
return "embvar_invalid";
518 case PM_ERR_END_UPCASE_BRACE:
return "end_upcase_brace";
519 case PM_ERR_END_UPCASE_TERM:
return "end_upcase_term";
520 case PM_ERR_ESCAPE_INVALID_CONTROL:
return "escape_invalid_control";
521 case PM_ERR_ESCAPE_INVALID_CONTROL_REPEAT:
return "escape_invalid_control_repeat";
522 case PM_ERR_ESCAPE_INVALID_HEXADECIMAL:
return "escape_invalid_hexadecimal";
523 case PM_ERR_ESCAPE_INVALID_META:
return "escape_invalid_meta";
524 case PM_ERR_ESCAPE_INVALID_META_REPEAT:
return "escape_invalid_meta_repeat";
525 case PM_ERR_ESCAPE_INVALID_UNICODE:
return "escape_invalid_unicode";
526 case PM_ERR_ESCAPE_INVALID_UNICODE_CM_FLAGS:
return "escape_invalid_unicode_cm_flags";
527 case PM_ERR_ESCAPE_INVALID_UNICODE_LIST:
return "escape_invalid_unicode_list";
528 case PM_ERR_ESCAPE_INVALID_UNICODE_LITERAL:
return "escape_invalid_unicode_literal";
529 case PM_ERR_ESCAPE_INVALID_UNICODE_LONG:
return "escape_invalid_unicode_long";
530 case PM_ERR_ESCAPE_INVALID_UNICODE_SHORT:
return "escape_invalid_unicode_short";
531 case PM_ERR_ESCAPE_INVALID_UNICODE_TERM:
return "escape_invalid_unicode_term";
532 case PM_ERR_EXPECT_ARGUMENT:
return "expect_argument";
533 case PM_ERR_EXPECT_EOL_AFTER_STATEMENT:
return "expect_eol_after_statement";
534 case PM_ERR_EXPECT_EXPRESSION_AFTER_AMPAMPEQ:
return "expect_expression_after_ampampeq";
535 case PM_ERR_EXPECT_EXPRESSION_AFTER_COMMA:
return "expect_expression_after_comma";
536 case PM_ERR_EXPECT_EXPRESSION_AFTER_EQUAL:
return "expect_expression_after_equal";
537 case PM_ERR_EXPECT_EXPRESSION_AFTER_LESS_LESS:
return "expect_expression_after_less_less";
538 case PM_ERR_EXPECT_EXPRESSION_AFTER_LPAREN:
return "expect_expression_after_lparen";
539 case PM_ERR_EXPECT_EXPRESSION_AFTER_OPERATOR:
return "expect_expression_after_operator";
540 case PM_ERR_EXPECT_EXPRESSION_AFTER_PIPEPIPEEQ:
return "expect_expression_after_pipepipeeq";
541 case PM_ERR_EXPECT_EXPRESSION_AFTER_QUESTION:
return "expect_expression_after_question";
542 case PM_ERR_EXPECT_EXPRESSION_AFTER_SPLAT:
return "expect_expression_after_splat";
543 case PM_ERR_EXPECT_EXPRESSION_AFTER_SPLAT_HASH:
return "expect_expression_after_splat_hash";
544 case PM_ERR_EXPECT_EXPRESSION_AFTER_STAR:
return "expect_expression_after_star";
545 case PM_ERR_EXPECT_FOR_DELIMITER:
return "expect_for_delimiter";
546 case PM_ERR_EXPECT_IDENT_REQ_PARAMETER:
return "expect_ident_req_parameter";
547 case PM_ERR_EXPECT_IN_DELIMITER:
return "expect_in_delimiter";
548 case PM_ERR_EXPECT_LPAREN_AFTER_NOT_LPAREN:
return "expect_lparen_after_not_lparen";
549 case PM_ERR_EXPECT_LPAREN_AFTER_NOT_OTHER:
return "expect_lparen_after_not_other";
550 case PM_ERR_EXPECT_LPAREN_REQ_PARAMETER:
return "expect_lparen_req_parameter";
551 case PM_ERR_EXPECT_MESSAGE:
return "expect_message";
552 case PM_ERR_EXPECT_RBRACKET:
return "expect_rbracket";
553 case PM_ERR_EXPECT_RPAREN:
return "expect_rparen";
554 case PM_ERR_EXPECT_RPAREN_AFTER_MULTI:
return "expect_rparen_after_multi";
555 case PM_ERR_EXPECT_RPAREN_REQ_PARAMETER:
return "expect_rparen_req_parameter";
556 case PM_ERR_EXPECT_SINGLETON_CLASS_DELIMITER:
return "expect_singleton_class_delimiter";
557 case PM_ERR_EXPECT_STRING_CONTENT:
return "expect_string_content";
558 case PM_ERR_EXPECT_WHEN_DELIMITER:
return "expect_when_delimiter";
559 case PM_ERR_EXPRESSION_BARE_HASH:
return "expression_bare_hash";
560 case PM_ERR_EXPRESSION_NOT_WRITABLE:
return "expression_not_writable";
561 case PM_ERR_EXPRESSION_NOT_WRITABLE_ENCODING:
return "expression_not_writable_encoding";
562 case PM_ERR_EXPRESSION_NOT_WRITABLE_FALSE:
return "expression_not_writable_false";
563 case PM_ERR_EXPRESSION_NOT_WRITABLE_FILE:
return "expression_not_writable_file";
564 case PM_ERR_EXPRESSION_NOT_WRITABLE_LINE:
return "expression_not_writable_line";
565 case PM_ERR_EXPRESSION_NOT_WRITABLE_NIL:
return "expression_not_writable_nil";
566 case PM_ERR_EXPRESSION_NOT_WRITABLE_NUMBERED:
return "expression_not_writable_numbered";
567 case PM_ERR_EXPRESSION_NOT_WRITABLE_SELF:
return "expression_not_writable_self";
568 case PM_ERR_EXPRESSION_NOT_WRITABLE_TRUE:
return "expression_not_writable_true";
569 case PM_ERR_FLOAT_PARSE:
return "float_parse";
570 case PM_ERR_FOR_COLLECTION:
return "for_collection";
571 case PM_ERR_FOR_IN:
return "for_in";
572 case PM_ERR_FOR_INDEX:
return "for_index";
573 case PM_ERR_FOR_TERM:
return "for_term";
574 case PM_ERR_GLOBAL_VARIABLE_BARE:
return "global_variable_bare";
575 case PM_ERR_HASH_EXPRESSION_AFTER_LABEL:
return "hash_expression_after_label";
576 case PM_ERR_HASH_KEY:
return "hash_key";
577 case PM_ERR_HASH_ROCKET:
return "hash_rocket";
578 case PM_ERR_HASH_TERM:
return "hash_term";
579 case PM_ERR_HASH_VALUE:
return "hash_value";
580 case PM_ERR_HEREDOC_IDENTIFIER:
return "heredoc_identifier";
581 case PM_ERR_HEREDOC_TERM:
return "heredoc_term";
582 case PM_ERR_INCOMPLETE_QUESTION_MARK:
return "incomplete_question_mark";
583 case PM_ERR_INCOMPLETE_VARIABLE_CLASS:
return "incomplete_variable_class";
584 case PM_ERR_INCOMPLETE_VARIABLE_CLASS_3_3:
return "incomplete_variable_class_3_3";
585 case PM_ERR_INCOMPLETE_VARIABLE_INSTANCE:
return "incomplete_variable_instance";
586 case PM_ERR_INCOMPLETE_VARIABLE_INSTANCE_3_3:
return "incomplete_variable_instance_3_3";
587 case PM_ERR_INSTANCE_VARIABLE_BARE:
return "instance_variable_bare";
588 case PM_ERR_INVALID_BLOCK_EXIT:
return "invalid_block_exit";
589 case PM_ERR_INVALID_CHARACTER:
return "invalid_character";
590 case PM_ERR_INVALID_COMMA:
return "invalid_comma";
591 case PM_ERR_INVALID_ENCODING_MAGIC_COMMENT:
return "invalid_encoding_magic_comment";
592 case PM_ERR_INVALID_ESCAPE_CHARACTER:
return "invalid_escape_character";
593 case PM_ERR_INVALID_FLOAT_EXPONENT:
return "invalid_float_exponent";
594 case PM_ERR_INVALID_LOCAL_VARIABLE_READ:
return "invalid_local_variable_read";
595 case PM_ERR_INVALID_LOCAL_VARIABLE_WRITE:
return "invalid_local_variable_write";
596 case PM_ERR_INVALID_MULTIBYTE_CHAR:
return "invalid_multibyte_char";
597 case PM_ERR_INVALID_MULTIBYTE_CHARACTER:
return "invalid_multibyte_character";
598 case PM_ERR_INVALID_MULTIBYTE_ESCAPE:
return "invalid_multibyte_escape";
599 case PM_ERR_INVALID_NUMBER_BINARY:
return "invalid_number_binary";
600 case PM_ERR_INVALID_NUMBER_DECIMAL:
return "invalid_number_decimal";
601 case PM_ERR_INVALID_NUMBER_FRACTION:
return "invalid_number_fraction";
602 case PM_ERR_INVALID_NUMBER_HEXADECIMAL:
return "invalid_number_hexadecimal";
603 case PM_ERR_INVALID_NUMBER_OCTAL:
return "invalid_number_octal";
604 case PM_ERR_INVALID_NUMBER_UNDERSCORE_INNER:
return "invalid_number_underscore_inner";
605 case PM_ERR_INVALID_NUMBER_UNDERSCORE_TRAILING:
return "invalid_number_underscore_trailing";
606 case PM_ERR_INVALID_PERCENT:
return "invalid_percent";
607 case PM_ERR_INVALID_PERCENT_EOF:
return "invalid_percent_eof";
608 case PM_ERR_INVALID_PRINTABLE_CHARACTER:
return "invalid_printable_character";
609 case PM_ERR_INVALID_RETRY_AFTER_ELSE:
return "invalid_retry_after_else";
610 case PM_ERR_INVALID_RETRY_AFTER_ENSURE:
return "invalid_retry_after_ensure";
611 case PM_ERR_INVALID_RETRY_WITHOUT_RESCUE:
return "invalid_retry_without_rescue";
612 case PM_ERR_INVALID_SYMBOL:
return "invalid_symbol";
613 case PM_ERR_INVALID_VARIABLE_GLOBAL:
return "invalid_variable_global";
614 case PM_ERR_INVALID_VARIABLE_GLOBAL_3_3:
return "invalid_variable_global_3_3";
615 case PM_ERR_INVALID_YIELD:
return "invalid_yield";
616 case PM_ERR_IT_NOT_ALLOWED_NUMBERED:
return "it_not_allowed_numbered";
617 case PM_ERR_IT_NOT_ALLOWED_ORDINARY:
return "it_not_allowed_ordinary";
618 case PM_ERR_LAMBDA_OPEN:
return "lambda_open";
619 case PM_ERR_LAMBDA_TERM_BRACE:
return "lambda_term_brace";
620 case PM_ERR_LAMBDA_TERM_END:
return "lambda_term_end";
621 case PM_ERR_LIST_I_LOWER_ELEMENT:
return "list_i_lower_element";
622 case PM_ERR_LIST_I_LOWER_TERM:
return "list_i_lower_term";
623 case PM_ERR_LIST_I_UPPER_ELEMENT:
return "list_i_upper_element";
624 case PM_ERR_LIST_I_UPPER_TERM:
return "list_i_upper_term";
625 case PM_ERR_LIST_W_LOWER_ELEMENT:
return "list_w_lower_element";
626 case PM_ERR_LIST_W_LOWER_TERM:
return "list_w_lower_term";
627 case PM_ERR_LIST_W_UPPER_ELEMENT:
return "list_w_upper_element";
628 case PM_ERR_LIST_W_UPPER_TERM:
return "list_w_upper_term";
629 case PM_ERR_MALLOC_FAILED:
return "malloc_failed";
630 case PM_ERR_MIXED_ENCODING:
return "mixed_encoding";
631 case PM_ERR_MODULE_IN_METHOD:
return "module_in_method";
632 case PM_ERR_MODULE_NAME:
return "module_name";
633 case PM_ERR_MODULE_TERM:
return "module_term";
634 case PM_ERR_MULTI_ASSIGN_MULTI_SPLATS:
return "multi_assign_multi_splats";
635 case PM_ERR_MULTI_ASSIGN_UNEXPECTED_REST:
return "multi_assign_unexpected_rest";
636 case PM_ERR_NESTING_TOO_DEEP:
return "nesting_too_deep";
637 case PM_ERR_NO_LOCAL_VARIABLE:
return "no_local_variable";
638 case PM_ERR_NON_ASSOCIATIVE_OPERATOR:
return "non_associative_operator";
639 case PM_ERR_NOT_EXPRESSION:
return "not_expression";
640 case PM_ERR_NUMBER_LITERAL_UNDERSCORE:
return "number_literal_underscore";
641 case PM_ERR_NUMBERED_PARAMETER_INNER_BLOCK:
return "numbered_parameter_inner_block";
642 case PM_ERR_NUMBERED_PARAMETER_IT:
return "numbered_parameter_it";
643 case PM_ERR_NUMBERED_PARAMETER_ORDINARY:
return "numbered_parameter_ordinary";
644 case PM_ERR_NUMBERED_PARAMETER_OUTER_BLOCK:
return "numbered_parameter_outer_block";
645 case PM_ERR_OPERATOR_MULTI_ASSIGN:
return "operator_multi_assign";
646 case PM_ERR_OPERATOR_WRITE_ARGUMENTS:
return "operator_write_arguments";
647 case PM_ERR_OPERATOR_WRITE_BLOCK:
return "operator_write_block";
648 case PM_ERR_PARAMETER_ASSOC_SPLAT_MULTI:
return "parameter_assoc_splat_multi";
649 case PM_ERR_PARAMETER_BLOCK_MULTI:
return "parameter_block_multi";
650 case PM_ERR_PARAMETER_CIRCULAR:
return "parameter_circular";
651 case PM_ERR_PARAMETER_FORWARDING_AFTER_REST:
return "parameter_forwarding_after_rest";
652 case PM_ERR_PARAMETER_METHOD_NAME:
return "parameter_method_name";
653 case PM_ERR_PARAMETER_NAME_DUPLICATED:
return "parameter_name_duplicated";
654 case PM_ERR_PARAMETER_NO_DEFAULT:
return "parameter_no_default";
655 case PM_ERR_PARAMETER_NO_DEFAULT_KW:
return "parameter_no_default_kw";
656 case PM_ERR_PARAMETER_NUMBERED_RESERVED:
return "parameter_numbered_reserved";
657 case PM_ERR_PARAMETER_ORDER:
return "parameter_order";
658 case PM_ERR_PARAMETER_SPLAT_MULTI:
return "parameter_splat_multi";
659 case PM_ERR_PARAMETER_STAR:
return "parameter_star";
660 case PM_ERR_PARAMETER_UNEXPECTED_FWD:
return "parameter_unexpected_fwd";
661 case PM_ERR_PARAMETER_UNEXPECTED_NO_KW:
return "parameter_unexpected_no_kw";
662 case PM_ERR_PARAMETER_WILD_LOOSE_COMMA:
return "parameter_wild_loose_comma";
663 case PM_ERR_PATTERN_ARRAY_MULTIPLE_RESTS:
return "pattern_array_multiple_rests";
664 case PM_ERR_PATTERN_CAPTURE_DUPLICATE:
return "pattern_capture_duplicate";
665 case PM_ERR_PATTERN_CAPTURE_IN_ALTERNATIVE:
return "pattern_capture_in_alternative";
666 case PM_ERR_PATTERN_EXPRESSION_AFTER_BRACKET:
return "pattern_expression_after_bracket";
667 case PM_ERR_PATTERN_EXPRESSION_AFTER_COMMA:
return "pattern_expression_after_comma";
668 case PM_ERR_PATTERN_EXPRESSION_AFTER_HROCKET:
return "pattern_expression_after_hrocket";
669 case PM_ERR_PATTERN_EXPRESSION_AFTER_IN:
return "pattern_expression_after_in";
670 case PM_ERR_PATTERN_EXPRESSION_AFTER_KEY:
return "pattern_expression_after_key";
671 case PM_ERR_PATTERN_EXPRESSION_AFTER_PAREN:
return "pattern_expression_after_paren";
672 case PM_ERR_PATTERN_EXPRESSION_AFTER_PIN:
return "pattern_expression_after_pin";
673 case PM_ERR_PATTERN_EXPRESSION_AFTER_PIPE:
return "pattern_expression_after_pipe";
674 case PM_ERR_PATTERN_EXPRESSION_AFTER_RANGE:
return "pattern_expression_after_range";
675 case PM_ERR_PATTERN_EXPRESSION_AFTER_REST:
return "pattern_expression_after_rest";
676 case PM_ERR_PATTERN_FIND_MISSING_INNER:
return "pattern_find_missing_inner";
677 case PM_ERR_PATTERN_HASH_IMPLICIT:
return "pattern_hash_implicit";
678 case PM_ERR_PATTERN_HASH_KEY:
return "pattern_hash_key";
679 case PM_ERR_PATTERN_HASH_KEY_DUPLICATE:
return "pattern_hash_key_duplicate";
680 case PM_ERR_PATTERN_HASH_KEY_INTERPOLATED:
return "pattern_hash_key_interpolated";
681 case PM_ERR_PATTERN_HASH_KEY_LABEL:
return "pattern_hash_key_label";
682 case PM_ERR_PATTERN_HASH_KEY_LOCALS:
return "pattern_hash_key_locals";
683 case PM_ERR_PATTERN_IDENT_AFTER_HROCKET:
return "pattern_ident_after_hrocket";
684 case PM_ERR_PATTERN_LABEL_AFTER_COMMA:
return "pattern_label_after_comma";
685 case PM_ERR_PATTERN_REST:
return "pattern_rest";
686 case PM_ERR_PATTERN_TERM_BRACE:
return "pattern_term_brace";
687 case PM_ERR_PATTERN_TERM_BRACKET:
return "pattern_term_bracket";
688 case PM_ERR_PATTERN_TERM_PAREN:
return "pattern_term_paren";
689 case PM_ERR_PIPEPIPEEQ_MULTI_ASSIGN:
return "pipepipeeq_multi_assign";
690 case PM_ERR_REGEXP_ENCODING_OPTION_MISMATCH:
return "regexp_encoding_option_mismatch";
691 case PM_ERR_REGEXP_ESCAPED_NON_ASCII_IN_UTF8:
return "regexp_escaped_non_ascii_in_utf8";
692 case PM_ERR_REGEXP_INCOMPAT_CHAR_ENCODING:
return "regexp_incompat_char_encoding";
693 case PM_ERR_REGEXP_INVALID_CHAR_PROPERTY:
return "regexp_invalid_char_property";
694 case PM_ERR_REGEXP_INVALID_UNICODE_RANGE:
return "regexp_invalid_unicode_range";
695 case PM_ERR_REGEXP_NON_ESCAPED_MBC:
return "regexp_non_escaped_mbc";
696 case PM_ERR_REGEXP_PARSE_ERROR:
return "regexp_parse_error";
697 case PM_ERR_REGEXP_TERM:
return "regexp_term";
698 case PM_ERR_REGEXP_UNKNOWN_OPTIONS:
return "regexp_unknown_options";
699 case PM_ERR_REGEXP_UTF8_CHAR_NON_UTF8_REGEXP:
return "regexp_utf8_char_non_utf8_regexp";
700 case PM_ERR_RESCUE_EXPRESSION:
return "rescue_expression";
701 case PM_ERR_RESCUE_MODIFIER_VALUE:
return "rescue_modifier_value";
702 case PM_ERR_RESCUE_TERM:
return "rescue_term";
703 case PM_ERR_RESCUE_VARIABLE:
return "rescue_variable";
704 case PM_ERR_RETURN_INVALID:
return "return_invalid";
705 case PM_ERR_SCRIPT_NOT_FOUND:
return "script_not_found";
706 case PM_ERR_SINGLETON_FOR_LITERALS:
return "singleton_for_literals";
707 case PM_ERR_STATEMENT_ALIAS:
return "statement_alias";
708 case PM_ERR_STATEMENT_POSTEXE_END:
return "statement_postexe_end";
709 case PM_ERR_STATEMENT_PREEXE_BEGIN:
return "statement_preexe_begin";
710 case PM_ERR_STATEMENT_UNDEF:
return "statement_undef";
711 case PM_ERR_STRING_CONCATENATION:
return "string_concatenation";
712 case PM_ERR_STRING_INTERPOLATED_TERM:
return "string_interpolated_term";
713 case PM_ERR_STRING_LITERAL_EOF:
return "string_literal_eof";
714 case PM_ERR_STRING_LITERAL_TERM:
return "string_literal_term";
715 case PM_ERR_SYMBOL_INVALID:
return "symbol_invalid";
716 case PM_ERR_SYMBOL_TERM_DYNAMIC:
return "symbol_term_dynamic";
717 case PM_ERR_SYMBOL_TERM_INTERPOLATED:
return "symbol_term_interpolated";
718 case PM_ERR_TERNARY_COLON:
return "ternary_colon";
719 case PM_ERR_TERNARY_EXPRESSION_FALSE:
return "ternary_expression_false";
720 case PM_ERR_TERNARY_EXPRESSION_TRUE:
return "ternary_expression_true";
721 case PM_ERR_UNARY_DISALLOWED:
return "unary_disallowed";
722 case PM_ERR_UNARY_RECEIVER:
return "unary_receiver";
723 case PM_ERR_UNDEF_ARGUMENT:
return "undef_argument";
724 case PM_ERR_UNEXPECTED_BLOCK_ARGUMENT:
return "unexpected_block_argument";
725 case PM_ERR_UNEXPECTED_INDEX_BLOCK:
return "unexpected_index_block";
726 case PM_ERR_UNEXPECTED_INDEX_KEYWORDS:
return "unexpected_index_keywords";
727 case PM_ERR_UNEXPECTED_LABEL:
return "unexpected_label";
728 case PM_ERR_UNEXPECTED_MULTI_WRITE:
return "unexpected_multi_write";
729 case PM_ERR_UNEXPECTED_PARAMETER_DEFAULT_VALUE:
return "unexpected_parameter_default_value";
730 case PM_ERR_UNEXPECTED_RANGE_OPERATOR:
return "unexpected_range_operator";
731 case PM_ERR_UNEXPECTED_SAFE_NAVIGATION:
return "unexpected_safe_navigation";
732 case PM_ERR_UNEXPECTED_TOKEN_CLOSE_CONTEXT:
return "unexpected_token_close_context";
733 case PM_ERR_UNEXPECTED_TOKEN_IGNORE:
return "unexpected_token_ignore";
734 case PM_ERR_UNTIL_TERM:
return "until_term";
735 case PM_ERR_VOID_EXPRESSION:
return "void_expression";
736 case PM_ERR_WHILE_TERM:
return "while_term";
737 case PM_ERR_WRITE_TARGET_IN_METHOD:
return "write_target_in_method";
738 case PM_ERR_WRITE_TARGET_READONLY:
return "write_target_readonly";
739 case PM_ERR_WRITE_TARGET_UNEXPECTED:
return "write_target_unexpected";
740 case PM_ERR_XSTRING_TERM:
return "xstring_term";
741 case PM_WARN_AMBIGUOUS_BINARY_OPERATOR:
return "ambiguous_binary_operator";
742 case PM_WARN_AMBIGUOUS_FIRST_ARGUMENT_MINUS:
return "ambiguous_first_argument_minus";
743 case PM_WARN_AMBIGUOUS_FIRST_ARGUMENT_PLUS:
return "ambiguous_first_argument_plus";
744 case PM_WARN_AMBIGUOUS_PREFIX_AMPERSAND:
return "ambiguous_prefix_ampersand";
745 case PM_WARN_AMBIGUOUS_PREFIX_STAR:
return "ambiguous_prefix_star";
746 case PM_WARN_AMBIGUOUS_PREFIX_STAR_STAR:
return "ambiguous_prefix_star_star";
747 case PM_WARN_AMBIGUOUS_SLASH:
return "ambiguous_slash";
748 case PM_WARN_COMPARISON_AFTER_COMPARISON:
return "comparison_after_comparison";
749 case PM_WARN_DOT_DOT_DOT_EOL:
return "dot_dot_dot_eol";
750 case PM_WARN_EQUAL_IN_CONDITIONAL:
return "equal_in_conditional";
751 case PM_WARN_EQUAL_IN_CONDITIONAL_3_3:
return "equal_in_conditional_3_3";
752 case PM_WARN_END_IN_METHOD:
return "end_in_method";
753 case PM_WARN_DUPLICATED_HASH_KEY:
return "duplicated_hash_key";
754 case PM_WARN_DUPLICATED_WHEN_CLAUSE:
return "duplicated_when_clause";
755 case PM_WARN_FLOAT_OUT_OF_RANGE:
return "float_out_of_range";
756 case PM_WARN_IGNORED_FROZEN_STRING_LITERAL:
return "ignored_frozen_string_literal";
757 case PM_WARN_INDENTATION_MISMATCH:
return "indentation_mismatch";
758 case PM_WARN_INTEGER_IN_FLIP_FLOP:
return "integer_in_flip_flop";
759 case PM_WARN_INVALID_CHARACTER:
return "invalid_character";
760 case PM_WARN_INVALID_MAGIC_COMMENT_VALUE:
return "invalid_magic_comment_value";
761 case PM_WARN_INVALID_NUMBERED_REFERENCE:
return "invalid_numbered_reference";
762 case PM_WARN_KEYWORD_EOL:
return "keyword_eol";
763 case PM_WARN_LITERAL_IN_CONDITION_DEFAULT:
return "literal_in_condition_default";
764 case PM_WARN_LITERAL_IN_CONDITION_VERBOSE:
return "literal_in_condition_verbose";
765 case PM_WARN_SHAREABLE_CONSTANT_VALUE_LINE:
return "shareable_constant_value_line";
766 case PM_WARN_SHEBANG_CARRIAGE_RETURN:
return "shebang_carriage_return";
767 case PM_WARN_UNEXPECTED_CARRIAGE_RETURN:
return "unexpected_carriage_return";
768 case PM_WARN_UNREACHABLE_STATEMENT:
return "unreachable_statement";
769 case PM_WARN_UNUSED_LOCAL_VARIABLE:
return "unused_local_variable";
770 case PM_WARN_VOID_STATEMENT:
return "void_statement";
773 assert(
false &&
"unreachable");
778pm_diagnostic_id_message(pm_diagnostic_id_t diag_id) {
779 assert(diag_id < PM_DIAGNOSTIC_ID_MAX);
781 const char *message = diagnostic_messages[diag_id].
message;
788pm_diagnostic_id_level(pm_diagnostic_id_t diag_id) {
789 assert(diag_id < PM_DIAGNOSTIC_ID_MAX);
791 return (uint8_t) diagnostic_messages[diag_id].
level;
799 return pm_diagnostic_id_name(diagnostic->diag_id);
807 return diagnostic->location;
815 return diagnostic->message;
838pm_diagnostic_list_append(
pm_arena_t *arena,
pm_list_t *list, uint32_t start, uint32_t length, pm_diagnostic_id_t diag_id) {
842 .location = { .
start = start, .length = length },
844 .message = pm_diagnostic_id_message(diag_id),
845 .level = pm_diagnostic_id_level(diag_id)
856pm_diagnostic_list_append_format(
pm_arena_t *arena,
pm_list_t *list, uint32_t start, uint32_t length, pm_diagnostic_id_t diag_id, ...) {
858 va_start(arguments, diag_id);
860 const char *format = pm_diagnostic_id_message(diag_id);
861 int result = vsnprintf(NULL, 0, format, arguments);
870 size_t message_length = (size_t) (result + 1);
871 char *message = (
char *) pm_arena_alloc(arena, message_length, 1);
873 va_start(arguments, diag_id);
874 vsnprintf(message, message_length, format, arguments);
878 .location = { .
start = start, .length = length },
881 .level = pm_diagnostic_id_level(diag_id)
#define PRISM_ALIGNOF
Get the alignment requirement of a type.
pm_warning_level_t
The levels of warnings generated during parsing.
@ PM_WARNING_LEVEL_DEFAULT
For warnings which should be emitted if $VERBOSE != nil.
@ PM_WARNING_LEVEL_VERBOSE
For warnings which should be emitted if $VERBOSE == true.
pm_error_level_t
The levels of errors generated during parsing.
@ PM_ERROR_LEVEL_ARGUMENT
For errors that should raise an argument error.
@ PM_ERROR_LEVEL_LOAD
For errors that should raise a load error.
@ PM_ERROR_LEVEL_SYNTAX
For errors that should raise a syntax error.
#define PRISM_INLINE
Old Visual Studio versions do not support the inline keyword, so we need to define it to be __inline.
This struct holds the data for each diagnostic.
uint8_t level
The level associated with the diagnostic.
const char * message
The message associated with the diagnostic.
This struct represents a slice in the source code, defined by an offset and a length.
uint32_t start
The offset of the location from the start of the source.