Bläddra i källkod

Allow comma operator in return statement

Fixes #31
pull/34/head
Max Brunsfeld 6 år sedan
förälder
incheckning
916be99704
6 ändrade filer med 48009 tillägg och 47844 borttagningar
  1. +21
    -0
      corpus/statements.txt
  2. +1
    -1
      grammar.js
  3. +11
    -2
      src/grammar.json
  4. +161
    -153
      src/node-types.json
  5. +47812
    -47687
      src/parser.c
  6. +3
    -1
      src/tree_sitter/parser.h

+ 21
- 0
corpus/statements.txt Visa fil

@ -176,6 +176,27 @@ void foo(int a) {
(expression_statement (call_expression (identifier) (argument_list)))
(break_statement)))))))
============================================
Return statements
============================================
void foo() {
return;
return a;
return a, b;
}
---
(translation_unit
(function_definition
(primitive_type)
(function_declarator (identifier) (parameter_list))
(compound_statement
(return_statement)
(return_statement (identifier))
(return_statement (comma_expression (identifier) (identifier))))))
============================================
Comments with asterisks
============================================

+ 1
- 1
grammar.js Visa fil

@ -529,7 +529,7 @@ module.exports = grammar({
return_statement: $ => seq(
'return',
optional($._expression),
optional(choice($._expression, $.comma_expression)),
';'
),

+ 11
- 2
src/grammar.json Visa fil

@ -2982,8 +2982,17 @@
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_expression"
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_expression"
},
{
"type": "SYMBOL",
"name": "comma_expression"
}
]
},
{
"type": "BLANK"

+ 161
- 153
src/node-types.json Visa fil

@ -348,8 +348,8 @@
"named": true,
"fields": {},
"children": {
"multiple": true,
"required": false,
"multiple": false,
"required": true,
"types": [
{
"type": "_abstract_declarator",
@ -490,8 +490,8 @@
"named": true,
"fields": {},
"children": {
"multiple": true,
"required": false,
"multiple": false,
"required": true,
"types": [
{
"type": "argument_list",
@ -609,8 +609,8 @@
"named": true,
"fields": {},
"children": {
"multiple": true,
"required": false,
"multiple": false,
"required": true,
"types": [
{
"type": "_expression",
@ -715,7 +715,7 @@
"named": true,
"fields": {},
"children": {
"multiple": true,
"multiple": false,
"required": false,
"types": [
{
@ -730,7 +730,7 @@
"named": true,
"fields": {
"left": {
"multiple": true,
"multiple": false,
"required": true,
"types": [
{
@ -740,7 +740,7 @@
]
},
"right": {
"multiple": true,
"multiple": false,
"required": true,
"types": [
{
@ -806,7 +806,7 @@
"fields": {},
"children": {
"multiple": true,
"required": false,
"required": true,
"types": [
{
"type": "string_literal",
@ -862,7 +862,7 @@
"fields": {
"declarator": {
"multiple": true,
"required": false,
"required": true,
"types": [
{
"type": "_declarator",
@ -968,7 +968,7 @@
"named": true,
"fields": {
"body": {
"multiple": true,
"multiple": false,
"required": true,
"types": [
{
@ -978,7 +978,7 @@
]
},
"condition": {
"multiple": true,
"multiple": false,
"required": true,
"types": [
{
@ -1061,7 +1061,7 @@
"named": true,
"fields": {},
"children": {
"multiple": true,
"multiple": false,
"required": false,
"types": [
{
@ -1163,8 +1163,8 @@
"named": true,
"fields": {},
"children": {
"multiple": true,
"required": false,
"multiple": false,
"required": true,
"types": [
{
"type": "field_identifier",
@ -1204,7 +1204,7 @@
"named": true,
"fields": {
"condition": {
"multiple": true,
"multiple": false,
"required": false,
"types": [
{
@ -1214,7 +1214,7 @@
]
},
"initializer": {
"multiple": true,
"multiple": false,
"required": false,
"types": [
{
@ -1232,7 +1232,7 @@
]
},
"update": {
"multiple": true,
"multiple": false,
"required": false,
"types": [
{
@ -1247,8 +1247,8 @@
}
},
"children": {
"multiple": true,
"required": false,
"multiple": false,
"required": true,
"types": [
{
"type": "_statement",
@ -1368,7 +1368,7 @@
"named": true,
"fields": {
"alternative": {
"multiple": true,
"multiple": false,
"required": false,
"types": [
{
@ -1378,7 +1378,7 @@
]
},
"condition": {
"multiple": true,
"multiple": false,
"required": true,
"types": [
{
@ -1388,7 +1388,7 @@
]
},
"consequence": {
"multiple": true,
"multiple": false,
"required": true,
"types": [
{
@ -1491,7 +1491,7 @@
"named": true,
"fields": {
"label": {
"multiple": true,
"multiple": false,
"required": true,
"types": [
{
@ -1502,8 +1502,8 @@
}
},
"children": {
"multiple": true,
"required": false,
"multiple": false,
"required": true,
"types": [
{
"type": "_statement",
@ -1640,8 +1640,8 @@
"named": true,
"fields": {},
"children": {
"multiple": true,
"required": false,
"multiple": false,
"required": true,
"types": [
{
"type": "_type_declarator",
@ -1655,8 +1655,8 @@
"named": true,
"fields": {},
"children": {
"multiple": true,
"required": false,
"multiple": false,
"required": true,
"types": [
{
"type": "_expression",
@ -1782,7 +1782,7 @@
"named": true,
"fields": {
"alternative": {
"multiple": true,
"multiple": false,
"required": false,
"types": [
{
@ -1796,7 +1796,7 @@
]
},
"condition": {
"multiple": true,
"multiple": false,
"required": true,
"types": [
{
@ -2068,12 +2068,16 @@
"named": true,
"fields": {},
"children": {
"multiple": true,
"multiple": false,
"required": false,
"types": [
{
"type": "_expression",
"named": true
},
{
"type": "comma_expression",
"named": true
}
]
}
@ -2175,8 +2179,8 @@
"named": true,
"fields": {},
"children": {
"multiple": true,
"required": false,
"multiple": false,
"required": true,
"types": [
{
"type": "_expression",
@ -2302,7 +2306,7 @@
"fields": {
"declarator": {
"multiple": true,
"required": false,
"required": true,
"types": [
{
"type": "_type_declarator",
@ -2472,7 +2476,7 @@
"named": true,
"fields": {
"body": {
"multiple": true,
"multiple": false,
"required": true,
"types": [
{
@ -2482,7 +2486,7 @@
]
},
"condition": {
"multiple": true,
"multiple": false,
"required": true,
"types": [
{
@ -2498,43 +2502,39 @@
"named": false
},
{
"type": "(",
"type": "!",
"named": false
},
{
"type": "...",
"type": "!=",
"named": false
},
{
"type": ",",
"type": "\"",
"named": false
},
{
"type": ")",
"type": "%",
"named": false
},
{
"type": "preproc_directive",
"named": true
},
{
"type": "preproc_arg",
"named": true
"type": "%=",
"named": false
},
{
"type": ";",
"type": "&",
"named": false
},
{
"type": "typedef",
"type": "&&",
"named": false
},
{
"type": "extern",
"type": "&=",
"named": false
},
{
"type": "__attribute__",
"type": "'",
"named": false
},
{
@ -2542,331 +2542,339 @@
"named": false
},
{
"type": "{",
"type": ")",
"named": false
},
{
"type": "}",
"type": "*",
"named": false
},
{
"type": "*",
"type": "*=",
"named": false
},
{
"type": "[",
"type": "+",
"named": false
},
{
"type": "]",
"type": "++",
"named": false
},
{
"type": "=",
"type": "+=",
"named": false
},
{
"type": "static",
"type": ",",
"named": false
},
{
"type": "auto",
"type": "-",
"named": false
},
{
"type": "register",
"type": "--",
"named": false
},
{
"type": "inline",
"type": "-=",
"named": false
},
{
"type": "const",
"type": "->",
"named": false
},
{
"type": "volatile",
"type": ".",
"named": false
},
{
"type": "restrict",
"type": "...",
"named": false
},
{
"type": "_Atomic",
"type": "/",
"named": false
},
{
"type": "signed",
"type": "/=",
"named": false
},
{
"type": "unsigned",
"type": ":",
"named": false
},
{
"type": "long",
"type": ";",
"named": false
},
{
"type": "short",
"type": "<",
"named": false
},
{
"type": "primitive_type",
"named": true
"type": "<<",
"named": false
},
{
"type": "enum",
"type": "<<=",
"named": false
},
{
"type": "struct",
"type": "<=",
"named": false
},
{
"type": "union",
"type": "=",
"named": false
},
{
"type": ":",
"type": "==",
"named": false
},
{
"type": "if",
"type": ">",
"named": false
},
{
"type": "else",
"type": ">=",
"named": false
},
{
"type": "switch",
"type": ">>",
"named": false
},
{
"type": "case",
"type": ">>=",
"named": false
},
{
"type": "default",
"type": "?",
"named": false
},
{
"type": "while",
"type": "L\"",
"named": false
},
{
"type": "do",
"type": "L'",
"named": false
},
{
"type": "for",
"type": "[",
"named": false
},
{
"type": "return",
"type": "]",
"named": false
},
{
"type": "break",
"type": "^",
"named": false
},
{
"type": "continue",
"type": "^=",
"named": false
},
{
"type": "goto",
"type": "_Atomic",
"named": false
},
{
"type": "?",
"type": "__attribute__",
"named": false
},
{
"type": "*=",
"type": "auto",
"named": false
},
{
"type": "/=",
"type": "break",
"named": false
},
{
"type": "%=",
"type": "case",
"named": false
},
{
"type": "+=",
"type": "const",
"named": false
},
{
"type": "-=",
"type": "continue",
"named": false
},
{
"type": "<<=",
"type": "default",
"named": false
},
{
"type": ">>=",
"type": "do",
"named": false
},
{
"type": "&=",
"type": "else",
"named": false
},
{
"type": "^=",
"type": "enum",
"named": false
},
{
"type": "|=",
"named": false
"type": "escape_sequence",
"named": true
},
{
"type": "&",
"type": "extern",
"named": false
},
{
"type": "!",
"named": false
"type": "false",
"named": true
},
{
"type": "~",
"named": false
"type": "field_identifier",
"named": true
},
{
"type": "-",
"type": "for",
"named": false
},
{
"type": "+",
"type": "goto",
"named": false
},
{
"type": "/",
"named": false
"type": "identifier",
"named": true
},
{
"type": "%",
"type": "if",
"named": false
},
{
"type": "||",
"type": "inline",
"named": false
},
{
"type": "&&",
"type": "long",
"named": false
},
{
"type": "|",
"named": false
"type": "null",
"named": true
},
{
"type": "^",
"named": false
"type": "number_literal",
"named": true
},
{
"type": "==",
"named": false
"type": "preproc_arg",
"named": true
},
{
"type": "!=",
"named": false
"type": "preproc_directive",
"named": true
},
{
"type": ">",
"named": false
"type": "primitive_type",
"named": true
},
{
"type": ">=",
"type": "register",
"named": false
},
{
"type": "<=",
"type": "restrict",
"named": false
},
{
"type": "<",
"type": "return",
"named": false
},
{
"type": "<<",
"type": "short",
"named": false
},
{
"type": ">>",
"type": "signed",
"named": false
},
{
"type": "--",
"type": "sizeof",
"named": false
},
{
"type": "++",
"named": false
"type": "statement_identifier",
"named": true
},
{
"type": "sizeof",
"type": "static",
"named": false
},
{
"type": ".",
"type": "struct",
"named": false
},
{
"type": "->",
"type": "switch",
"named": false
},
{
"type": "number_literal",
"type": "system_lib_string",
"named": true
},
{
"type": "L'",
"type": "true",
"named": true
},
{
"type": "type_identifier",
"named": true
},
{
"type": "typedef",
"named": false
},
{
"type": "'",
"type": "union",
"named": false
},
{
"type": "L\"",
"type": "unsigned",
"named": false
},
{
"type": "\"",
"type": "volatile",
"named": false
},
{
"type": "escape_sequence",
"named": true
"type": "while",
"named": false
},
{
"type": "system_lib_string",
"named": true
"type": "{",
"named": false
},
{
"type": "true",
"named": true
"type": "|",
"named": false
},
{
"type": "false",
"named": true
"type": "|=",
"named": false
},
{
"type": "null",
"named": true
"type": "||",
"named": false
},
{
"type": "identifier",
"named": true
"type": "}",
"named": false
},
{
"type": "comment",
"named": true
"type": "~",
"named": false
}
]

+ 47812
- 47687
src/parser.c
Filskillnaden har hållits tillbaka eftersom den är för stor
Visa fil


+ 3
- 1
src/tree_sitter/parser.h Visa fil

@ -45,7 +45,8 @@ struct TSLexer {
void (*advance)(TSLexer *, bool);
void (*mark_end)(TSLexer *);
uint32_t (*get_column)(TSLexer *);
bool (*is_at_included_range_start)(TSLexer *);
bool (*is_at_included_range_start)(const TSLexer *);
bool (*eof)(const TSLexer *);
};
typedef enum {
@ -123,6 +124,7 @@ struct TSLanguage {
#define START_LEXER() \
bool result = false; \
bool skip = false; \
bool eof = false; \
int32_t lookahead; \
goto start; \
next_state: \

Laddar…
Avbryt
Spara