From e3f4c9507bbedb2ae121411a33859ac35ebf921d Mon Sep 17 00:00:00 2001 From: Amaan Qureshi Date: Fri, 16 Feb 2024 18:32:15 -0500 Subject: [PATCH] fix: ms call modifier missing in some spots --- grammar.js | 9 ++++++- test/corpus/microsoft.txt | 49 +++++++++++++++++++++++++++++++++++++-- 2 files changed, 55 insertions(+), 3 deletions(-) diff --git a/grammar.js b/grammar.js index 5e51e6898..f5450d7b4 100644 --- a/grammar.js +++ b/grammar.js @@ -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( diff --git a/test/corpus/microsoft.txt b/test/corpus/microsoft.txt index 93c0ae8a6..0a85aec1d 100644 --- a/test/corpus/microsoft.txt +++ b/test/corpus/microsoft.txt @@ -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