瀏覽代碼

Merge pull request #152 from amaanq/typedef-fixes

Typedef fixes
pull/153/head
Amaan Qureshi 3 年之前
committed by GitHub
父節點
當前提交
475dc3bb84
沒有發現已知的金鑰在資料庫的簽署中 GPG Key ID: 4AEE18F83AFDEB23
共有 5 個文件被更改,包括 59473 次插入59138 次删除
  1. +8
    -20
      grammar.js
  2. +33
    -65
      src/grammar.json
  3. +5
    -25
      src/node-types.json
  4. +59398
    -59022
      src/parser.c
  5. +29
    -6
      test/corpus/declarations.txt

+ 8
- 20
grammar.js 查看文件

@ -62,8 +62,8 @@ module.exports = grammar({
[$._type_specifier, $._expression_not_binary],
[$._type_specifier, $._expression_not_binary, $.macro_type_specifier],
[$._type_specifier, $.macro_type_specifier],
[$._typedef_type_specifier, $.macro_type_specifier],
[$.sized_type_specifier],
[$._type_specifier, $.sized_type_specifier],
[$.attributed_statement],
[$._declaration_modifiers, $.attributed_statement],
[$.enum_specifier],
@ -242,7 +242,7 @@ module.exports = grammar({
type_definition: $ => seq(
'typedef',
repeat($.type_qualifier),
field('type', $._typedef_type_specifier),
field('type', $._type_specifier),
repeat($.type_qualifier),
commaSep1(field('declarator', $._type_declarator)),
';',
@ -358,6 +358,8 @@ module.exports = grammar({
alias($.array_type_declarator, $.array_declarator),
alias($.parenthesized_type_declarator, $.parenthesized_declarator),
$._type_identifier,
alias(choice('signed', 'unsigned', 'long', 'short'), $.primitive_type),
$.primitive_type,
),
_abstract_declarator: $ => choice(
@ -508,16 +510,6 @@ module.exports = grammar({
'noreturn',
),
_typedef_type_specifier: $ => choice(
$.struct_specifier,
$.union_specifier,
$.enum_specifier,
$.macro_type_specifier,
alias($._typedef_sized_type_specifier, $.sized_type_specifier),
$.primitive_type,
$._type_identifier,
),
_type_specifier: $ => choice(
$.struct_specifier,
$.union_specifier,
@ -528,13 +520,6 @@ module.exports = grammar({
$._type_identifier,
),
_typedef_sized_type_specifier: _ => repeat1(choice(
'signed',
'unsigned',
'long',
'short',
)),
sized_type_specifier: $ => seq(
repeat1(choice(
'signed',
@ -1168,7 +1153,10 @@ module.exports = grammar({
identifier: _ =>
/(\p{XID_Start}|_|\\u[0-9A-Fa-f]{4}|\\U[0-9A-Fa-f]{8})(\p{XID_Continue}|\\u[0-9A-Fa-f]{4}|\\U[0-9A-Fa-f]{8})*/,
_type_identifier: $ => alias($.identifier, $.type_identifier),
_type_identifier: $ => alias(
$.identifier,
$.type_identifier,
),
_field_identifier: $ => alias($.identifier, $.field_identifier),
_statement_identifier: $ => alias($.identifier, $.statement_identifier),

+ 33
- 65
src/grammar.json 查看文件

@ -1972,7 +1972,7 @@
"name": "type",
"content": {
"type": "SYMBOL",
"name": "_typedef_type_specifier"
"name": "_type_specifier"
}
},
{
@ -2487,6 +2487,36 @@
{
"type": "SYMBOL",
"name": "_type_identifier"
},
{
"type": "ALIAS",
"content": {
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "signed"
},
{
"type": "STRING",
"value": "unsigned"
},
{
"type": "STRING",
"value": "long"
},
{
"type": "STRING",
"value": "short"
}
]
},
"named": true,
"value": "primitive_type"
},
{
"type": "SYMBOL",
"name": "primitive_type"
}
]
},
@ -3319,44 +3349,6 @@
}
]
},
"_typedef_type_specifier": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "struct_specifier"
},
{
"type": "SYMBOL",
"name": "union_specifier"
},
{
"type": "SYMBOL",
"name": "enum_specifier"
},
{
"type": "SYMBOL",
"name": "macro_type_specifier"
},
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "_typedef_sized_type_specifier"
},
"named": true,
"value": "sized_type_specifier"
},
{
"type": "SYMBOL",
"name": "primitive_type"
},
{
"type": "SYMBOL",
"name": "_type_identifier"
}
]
},
"_type_specifier": {
"type": "CHOICE",
"members": [
@ -3390,30 +3382,6 @@
}
]
},
"_typedef_sized_type_specifier": {
"type": "REPEAT1",
"content": {
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "signed"
},
{
"type": "STRING",
"value": "unsigned"
},
{
"type": "STRING",
"value": "long"
},
{
"type": "STRING",
"value": "short"
}
]
}
},
"sized_type_specifier": {
"type": "SEQ",
"members": [
@ -7758,10 +7726,10 @@
"macro_type_specifier"
],
[
"_typedef_type_specifier",
"macro_type_specifier"
"sized_type_specifier"
],
[
"_type_specifier",
"sized_type_specifier"
],
[

+ 5
- 25
src/node-types.json 查看文件

@ -269,6 +269,10 @@
"type": "pointer_declarator",
"named": true
},
{
"type": "primitive_type",
"named": true
},
{
"type": "type_identifier",
"named": true
@ -3424,31 +3428,7 @@
"required": true,
"types": [
{
"type": "enum_specifier",
"named": true
},
{
"type": "macro_type_specifier",
"named": true
},
{
"type": "primitive_type",
"named": true
},
{
"type": "sized_type_specifier",
"named": true
},
{
"type": "struct_specifier",
"named": true
},
{
"type": "type_identifier",
"named": true
},
{
"type": "union_specifier",
"type": "_type_specifier",
"named": true
}
]

+ 59398
- 59022
src/parser.c
文件差異過大導致無法顯示
查看文件


+ 29
- 6
test/corpus/declarations.txt 查看文件

@ -306,8 +306,13 @@ typedef short short_t;
typedef unsigned unsigned_t;
typedef signed signed_t;
// FIXME: Still errors
typedef long long;
typedef short short;
typedef unsigned int uint;
typedef unsigned short ushort;
typedef unsigned unsigned short;
typedef signed signed short;
typedef signed signed unsigned;
--------------------------------------------------------------------------------
@ -361,13 +366,19 @@ typedef long long;
declarator: (type_identifier)))
(type_definition
type: (sized_type_specifier)
declarator: (type_identifier))
declarator: (primitive_type))
(type_definition
type: (sized_type_specifier)
declarator: (type_identifier))
declarator: (primitive_type))
(type_definition
type: (sized_type_specifier)
declarator: (type_identifier))
declarator: (primitive_type))
(type_definition
type: (sized_type_specifier)
declarator: (primitive_type))
(type_definition
type: (sized_type_specifier)
declarator: (primitive_type))
(type_definition
type: (sized_type_specifier)
declarator: (type_identifier))
@ -388,14 +399,26 @@ typedef long long;
declarator: (type_identifier))
(type_definition
type: (sized_type_specifier)
declarator: (primitive_type))
(type_definition
type: (sized_type_specifier)
declarator: (primitive_type))
(type_definition
type: (sized_type_specifier
type: (primitive_type))
declarator: (type_identifier))
(type_definition
type: (sized_type_specifier)
declarator: (type_identifier))
(comment)
(type_definition
type: (sized_type_specifier)
declarator: (MISSING type_identifier)))
declarator: (primitive_type))
(type_definition
type: (sized_type_specifier)
declarator: (primitive_type))
(type_definition
type: (sized_type_specifier)
declarator: (primitive_type)))
================================================================================
Function declarations

Loading…
取消
儲存