fix: ms call modifier missing in some spots

pull/708/head
Amaan Qureshi 2024-02-16 18:32:15 +07:00
parent 579f349216
commit e3f4c9507b
2 changed files with 55 additions and 3 deletions

@ -231,6 +231,7 @@ module.exports = grammar({
function_definition: $ => seq(
optional($.ms_call_modifier),
$._declaration_specifiers,
optional($.ms_call_modifier),
field('declarator', $._declarator),
field('body', $.compound_statement),
),
@ -247,6 +248,7 @@ module.exports = grammar({
$._declaration_specifiers,
commaSep1(field('declarator', choice(
seq(
optional($.ms_call_modifier),
$._declaration_declarator,
optional($.gnu_asm_expression),
),
@ -398,21 +400,25 @@ module.exports = grammar({
parenthesized_declarator: $ => prec.dynamic(PREC.PAREN_DECLARATOR, seq(
'(',
optional($.ms_call_modifier),
$._declarator,
')',
)),
parenthesized_field_declarator: $ => prec.dynamic(PREC.PAREN_DECLARATOR, seq(
'(',
optional($.ms_call_modifier),
$._field_declarator,
')',
)),
parenthesized_type_declarator: $ => prec.dynamic(PREC.PAREN_DECLARATOR, seq(
'(',
optional($.ms_call_modifier),
$._type_declarator,
')',
)),
abstract_parenthesized_declarator: $ => prec(1, seq(
'(',
optional($.ms_call_modifier),
$._abstract_declarator,
')',
)),
@ -468,7 +474,8 @@ module.exports = grammar({
$.identifier,
alias($.preproc_call_expression, $.call_expression),
)),
)),
),
),
_function_declaration_declarator: $ => prec.right(1,
seq(

@ -166,6 +166,16 @@ __fastcall void mymethod(){
return;
}
void __stdcall f() { }
void (__stdcall g)() { }
void __stdcall h();
void (__stdcall j());
typedef void(__stdcall *fp)();
---
(translation_unit
@ -184,8 +194,43 @@ __fastcall void mymethod(){
declarator: (identifier)
parameters: (parameter_list))
body: (compound_statement
(return_statement))))
(return_statement)))
(function_definition
type: (primitive_type)
(ms_call_modifier)
declarator: (function_declarator
declarator: (identifier)
parameters: (parameter_list))
body: (compound_statement))
(function_definition
type: (primitive_type)
declarator: (function_declarator
declarator: (parenthesized_declarator
(ms_call_modifier)
(identifier))
parameters: (parameter_list))
body: (compound_statement))
(declaration
type: (primitive_type)
declarator: (ms_call_modifier)
declarator: (function_declarator
declarator: (identifier)
parameters: (parameter_list)))
(declaration
type: (primitive_type)
declarator: (parenthesized_declarator
(ms_call_modifier)
(function_declarator
declarator: (identifier)
parameters: (parameter_list))))
(type_definition
type: (primitive_type)
declarator: (function_declarator
declarator: (parenthesized_declarator
(ms_call_modifier)
(pointer_declarator
declarator: (type_identifier)))
parameters: (parameter_list))))
================================
SEH exception handling