%{
import "ecdefs"
+#define YYSIZE_T size_t
#define YYLTYPE Location
#include "grammar.h"
#define POP_DEFAULT_ACCESS if(defaultMemberAccess > -1) defaultMemberAccess--;
-#define C89_DECL_WARNING "eC expects all declarations to precede statements in the block (C89 style)\n"
+#define C89_DECL_WARNING $"eC expects all declarations to precede statements in the block (C89 style)\n"
+#define CASE_LABELED_STMT_WARNING $"labeled statement directly within a case statement\n"
#define uint _uint
default:
relational_expression_error equality_expression_error and_expression_error
exclusive_or_expression_error inclusive_or_expression_error logical_and_expression_error
logical_or_expression_error conditional_expression_error assignment_expression_error
- simple_primary_expression
- simple_postfix_expression simple_postfix_expression_error
+ simple_primary_expression constant
common_unary_expression common_unary_expression_error
- simple_unary_expression simple_unary_expression_error
database_open dbfield dbindex dbtable
+//simple_unary_expression simple_unary_expression_error
+// simple_postfix_expression simple_postfix_expression_error
+
%type <list> argument_expression_list expression expression_anon_inst expression_anon_inst_error enumerator_list type_qualifier_list
struct_declarator_list struct_declaration_list
declaration_specifiers identifier_list identifier_list_error initializer_list init_declarator_list
%token XOR_ASSIGN OR_ASSIGN TYPE_NAME
%token TYPEDEF EXTERN STATIC AUTO REGISTER
-%token CHAR SHORT INT UINT INT64 LONG SIGNED UNSIGNED FLOAT DOUBLE CONST VOLATILE VOID VALIST
+%token CHAR SHORT INT UINT INT64 INT128 LONG SIGNED UNSIGNED FLOAT DOUBLE CONST VOLATILE VOID VALIST
%token STRUCT UNION ENUM ELLIPSIS
%token CASE DEFAULT IF SWITCH WHILE DO FOR GOTO CONTINUE BREAK RETURN
%token NEW0OP RENEW0 VAARG
%token DBTABLE DBFIELD DBINDEX DATABASE_OPEN
%token ALIGNOF ATTRIB_DEP __ATTRIB
+%token BOOL _BOOL _COMPLEX _IMAGINARY RESTRICT THREAD
+%token WIDE_STRING_LITERAL
+%token BUILTIN_OFFSETOF
%destructor { FreeIdentifier($$); } identifier
%destructor { FreePointer($$); } pointer
identifier '*'
{
$$ = null;
- // if($1._class && !$1._class.name)
- if($1._class)
- {
- char name[1024];
- strcpy(name, $1._class.name ? $1._class.name : "");
- strcat(name, "::");
- strcat(name, $1.string);
- _DeclClass(0, name);
- }
- else
- _DeclClass(0, $1.string);
+ _DeclClass($1._class, $1.string);
FreeIdentifier($1);
{
$$ = null;
#ifdef PRECOMPILER
- // if($1._class && !$1._class.name)
- if($1._class)
- {
- char name[1024];
- strcpy(name, $1._class.name ? $1._class.name : "");
- strcat(name, "::");
- strcat(name, $1.string);
- _DeclClass(0, name);
- }
- else
- _DeclClass(0, $1.string);
+ _DeclClass($1._class, $1.string);
FreeIdentifier($1);
}
/* | identifier '*' '<' template_arguments_list '>'
{
- //if($1._class && !$1._class.name)
- if($1._class)
- {
- char name[1024];
- strcpy(name, $1._class.name ? $1._class.name : "");
- strcat(name, "::");
- strcat(name, $1.string);
- _DeclClass(0, name);
- }
- else
- _DeclClass(0, $1.string);
+ _DeclClass($1._class, $1.string);
fileInput.Seek(@1.start.pos, start);
resetScannerPos(&@1.start);
yyclearin;
| identifier identifier
{
#ifdef PRECOMPILER
- // if($1._class && !$1._class.name)
- if($1._class)
+ if(!$1.string[0])
{
- char name[1024];
- strcpy(name, $1._class.name ? $1._class.name : "");
- strcat(name, "::");
- strcat(name, $1.string);
- _DeclClass(0, name);
+ $$ = MkSpecifierName($1.string);
+ FreeIdentifier($1);
+ FreeIdentifier($2);
}
else
- _DeclClass(0, $1.string);
- FreeIdentifier($1);
- FreeIdentifier($2);
+ {
+ _DeclClass($1._class, $1.string);
- fileInput.Seek(@1.start.pos, start);
- resetScannerPos(&@1.start);
- yyclearin;
+ FreeIdentifier($1);
+ FreeIdentifier($2);
- YYPOPSTACK(1);
- yystate = *yyssp;
- YY_STACK_PRINT (yyss, yyssp);
- YYPOPSTACK(1);
- yystate = *yyssp;
- YY_STACK_PRINT (yyss, yyssp);
- goto yysetstate;
+ fileInput.Seek(@1.start.pos, start);
+ resetScannerPos(&@1.start);
+ yyclearin;
+
+ YYPOPSTACK(1);
+ yystate = *yyssp;
+ YY_STACK_PRINT (yyss, yyssp);
+ YYPOPSTACK(1);
+ yystate = *yyssp;
+ YY_STACK_PRINT (yyss, yyssp);
+ goto yysetstate;
#else
- Location tmpLoc = yylloc; $$ = $2; yylloc = @1;
- Compiler_Error($"Not a type: %s\n", $1.string);
- yylloc = tmpLoc; $2.badID = $1;
+ Location tmpLoc = yylloc; $$ = $2; yylloc = @1;
+ Compiler_Error($"Not a type: %s\n", $1.string);
+ yylloc = tmpLoc; $2.badID = $1;
#endif
+ }
}
/*
| identifier '<'
{
#ifdef PRECOMPILER
- //if($1._class && !$1._class.name)
- if($1._class)
- {
- char name[1024];
- strcpy(name, $1._class.name ? $1._class.name : "");
- strcat(name, "::");
- strcat(name, $1.string);
- _DeclClass(0, name);
- }
- else
- _DeclClass(0, $1.string);
+ _DeclClass($1._class, $1.string);
fileInput.Seek(@1.start.pos, start);
resetScannerPos(&@1.start);
yyclearin;
| identifier identifier '<' template_arguments_list '>'
{
#ifdef PRECOMPILER
- // if($1._class && !$1._class.name)
- if($1._class)
- {
- char name[1024];
- strcpy(name, $1._class.name ? $1._class.name : "");
- strcat(name, "::");
- strcat(name, $1.string);
- _DeclClass(0, name);
- }
- else
- _DeclClass(0, $1.string);
+ _DeclClass($1._class, $1.string);
FreeIdentifier($1);
FreeIdentifier($2);
/* | identifier '<' template_arguments_list '>' */
/*| identifier '<' error
{
- // if($1._class && !$1._class.name)
- if($1._class)
- {
- char name[1024];
- strcpy(name, $1._class.name ? $1._class.name : "");
- strcat(name, "::");
- strcat(name, $1.string);
- _DeclClass(0, name);
- }
- else
- _DeclClass(0, $1.string);
+ _DeclClass($1._class, $1.string);
yyerrok;
class_function_definition_start:
guess_declaration_specifiers declarator_function_type_ok
- { $$ = MkClassFunction($1, null, $2, null); $$.loc = @$; $$.id = ++globalContext.nextID; }
+ { $$ = MkClassFunction($1, null, $2, null); $$.loc = @$; }
| declarator_function
- { $$ = MkClassFunction(null, null, $1, null); $$.loc = @$; $$.id = ++globalContext.nextID; }
+ { $$ = MkClassFunction(null, null, $1, null); $$.loc = @$; }
;
constructor_function_definition_start:
guess_declaration_specifiers '(' ')'
- { $$ = MkClassFunction(null, null, null, null); $$.isConstructor = true; $$.loc = @$; $$.id = ++globalContext.nextID; FreeList($1, FreeSpecifier); }
+ { $$ = MkClassFunction($1, null, null, null); $$.isConstructor = true; $$.loc = @$; }
;
destructor_function_definition_start:
'~' guess_declaration_specifiers '(' ')'
- { $$ = MkClassFunction(null, null, null, null); $$.isDestructor = true; $$.loc = @$; $$.id = ++globalContext.nextID; FreeList($2, FreeSpecifier) }
+ { $$ = MkClassFunction($2, null, null, null); $$.isDestructor = true; $$.loc = @$; }
;
virtual_class_function_definition_start:
VIRTUAL guess_declaration_specifiers declarator_function_type_ok
- { $$ = MkClassFunction($2, null, $3, null); $$.isVirtual = true; $$.loc = @$; $$.id = ++globalContext.nextID; }
+ { $$ = MkClassFunction($2, null, $3, null); $$.isVirtual = true; $$.loc = @$; }
| VIRTUAL declarator_function
- { $$ = MkClassFunction(null, null, $2, null); $$.isVirtual = true; $$.loc = @$; $$.id = ++globalContext.nextID; }
+ { $$ = MkClassFunction(null, null, $2, null); $$.isVirtual = true; $$.loc = @$; }
;
class_function_definition_start_error:
guess_declaration_specifiers declarator_function_error_type_ok
- { $$ = MkClassFunction($1, null, $2, null); $$.loc = @$; $$.id = ++globalContext.nextID; }
+ { $$ = MkClassFunction($1, null, $2, null); $$.loc = @$; }
| declarator_function_error
- { $$ = MkClassFunction(null, null, $1, null); $$.loc = @$; $$.id = ++globalContext.nextID; }
+ { $$ = MkClassFunction(null, null, $1, null); $$.loc = @$; }
;
virtual_class_function_definition_start_error:
VIRTUAL guess_declaration_specifiers declarator_function_error_type_ok
- { $$ = MkClassFunction($2, null, $3, null); $$.isVirtual = true; $$.loc = @$; $$.id = ++globalContext.nextID; }
+ { $$ = MkClassFunction($2, null, $3, null); $$.isVirtual = true; $$.loc = @$; }
| VIRTUAL declarator_function_error
- { $$ = MkClassFunction(null, null, $2, null); $$.isVirtual = true; $$.loc = @$; $$.id = ++globalContext.nextID; }
+ { $$ = MkClassFunction(null, null, $2, null); $$.isVirtual = true; $$.loc = @$; }
;
class_function_definition:
// In Instances, return type is required to distinguish from calling the function
instance_class_function_definition_start:
declaration_specifiers declarator_function_type_ok
- { $$ = MkClassFunction($1, null, $2, null); $$.loc = @$; $$.id = ++globalContext.nextID; }
+ { $$ = MkClassFunction($1, null, $2, null); $$.loc = @$; }
| declaration_specifiers declarator_nofunction_type_ok
- { $$ = MkClassFunction($1, null, MkDeclaratorFunction($2, null), null); $$.loc = @$; $$.id = ++globalContext.nextID; }
+ { $$ = MkClassFunction($1, null, MkDeclaratorFunction($2, null), null); $$.loc = @$; }
;
instance_class_function_definition_start_error:
declaration_specifiers declarator_function_error_type_ok
- { $$ = MkClassFunction($1, null, $2, null); $$.loc = @$; $$.id = ++globalContext.nextID; }
+ { $$ = MkClassFunction($1, null, $2, null); $$.loc = @$; }
;
instance_class_function_definition:
| members_initialization_list_error instance_class_function_definition { ListAdd($$, MkMembersInitMethod($2)); ((MembersInit)$$->last).loc = @2; $$ = $1; }
| members_initialization_list_coloned data_member_initialization_list_coloned { MembersInit members = MkMembersInitList($2); ListAdd($$, members); members.loc = @2; $$ = $1; }
| members_initialization_list_coloned instance_class_function_definition { ListAdd($$, MkMembersInitMethod($2)); ((MembersInit)$$->last).loc = @2; $$ = $1; }
- | ';' { MembersInit members = MkMembersInitList(MkList()); $$ = MkList(); ListAdd($$, members); members.loc = @1; }
| members_initialization_list_error ';'
- | members_initialization_list_coloned ';' { MembersInit members = MkMembersInitList(MkList()); ListAdd($$, members); members.loc = @2; $$ = $1; }
+ | members_initialization_list_coloned ';'
+ {
+ MembersInit members = (MembersInit)$$->last;
+ if(members.type == dataMembersInit)
+ members.loc.end = @$.end;
+ else
+ {
+ MembersInit members = MkMembersInitList(MkList());
+ ListAdd($$, members);
+ members.loc = @2;
+ }
+ $$ = $1;
+ }
+ | ';' { MembersInit members = MkMembersInitList(MkList()); $$ = MkList(); ListAdd($$, members); members.loc = @1; }
;
members_initialization_list:
;
struct_declaration:
- struct_declaration_error ';' { $$ = $1; $$.loc.end = @2.start; }
+ struct_declaration_error ';' { $$ = $1; $$.loc.end = @2.end; }
| default_property_list ';' { $$ = MkClassDefDefaultProperty($1); if($1->last) ((MemberInit)$1->last).loc.end = @2.start; $$.loc = @$; }
| class_function_definition { $$ = MkClassDefFunction($1); $$.loc = @$; $$.memberAccess = memberAccessStack[defaultMemberAccess]; }
- | property { $$ = MkClassDefProperty($1); $$.loc = @$; globalContext.nextID++; $$.memberAccess = memberAccessStack[defaultMemberAccess]; }
+ | property { $$ = MkClassDefProperty($1); $$.loc = @$; $$.memberAccess = memberAccessStack[defaultMemberAccess]; }
| member_access class_function_definition { $$ = MkClassDefFunction($2); $$.loc = @$; $$.memberAccess = $1; }
- | member_access property { $$ = MkClassDefProperty($2); $$.loc = @$; globalContext.nextID++; $$.memberAccess = $1; }
- | class_property { $$ = MkClassDefClassProperty($1); $$.loc = @$; globalContext.nextID++; }
+ | member_access property { $$ = MkClassDefProperty($2); $$.loc = @$; $$.memberAccess = $1; }
+ | class_property { $$ = MkClassDefClassProperty($1); $$.loc = @$; }
| WATCHABLE { $$ = null; deleteWatchable = true; }
| CLASS_NO_EXPANSION { $$ = MkClassDefNoExpansion(); }
| CLASS_FIXED { $$ = MkClassDefFixed(); }
| member_access instantiation_unnamed { $$ = MkClassDefDeclaration(MkDeclarationClassInst($2)); $$.loc = @$; $$.decl.loc = @$; $$.memberAccess = $1; }
| member_access guess_instantiation_named { $$ = MkClassDefDeclaration(MkDeclarationClassInst($2)); $$.loc = @$; $$.decl.loc = @$; $$.memberAccess = $1; }
| CLASS_DATA guess_declaration_specifiers struct_declarator_list { $$ = MkClassDefClassData(MkStructDeclaration($2, $3, null)); $$.decl.loc = @$; $$.loc = @$; }
- | self_watch_definition { $$ = MkClassDefPropertyWatch($1); $$.loc = @$; globalContext.nextID++; }
+ | self_watch_definition { $$ = MkClassDefPropertyWatch($1); $$.loc = @$; }
| CLASS_DESIGNER identifier { $$ = MkClassDefDesigner($2.string); FreeIdentifier($2); }
| CLASS_DESIGNER strict_type { $$ = MkClassDefDesigner($2.name); FreeSpecifier($2); }
| CLASS_DEFAULT_PROPERTY identifier { $$ = MkClassDefDesignerDefaultProperty($2); }
;
struct_declaration_list_error:
- struct_declaration_error { $$ = MkList(); ListAdd($$, $1); }
+ struct_declaration_error { yyerror(); $$ = MkList(); ListAdd($$, $1); }
| struct_declaration_list error
| struct_declaration_list_error error
- | struct_declaration_list struct_declaration_error { $$ = $1; ListAdd($$, $2); }
+ | struct_declaration_list struct_declaration_error { yyerror(); $$ = $1; ListAdd($$, $2); }
| struct_declaration_list_error struct_declaration_error { $$ = $1; ListAdd($$, $2); }
;
};
class_decl:
- class_entry identifier { $1; $$ = DeclClassAddNameSpace(globalContext.nextID++, $2.string); FreeIdentifier($2); $$.nameLoc = @2; memberAccessStack[++defaultMemberAccess] = privateAccess; }
+ class_entry identifier { (void)$1; $$ = DeclClassAddNameSpace($2._class, $2.string); FreeIdentifier($2); $$.nameLoc = @2; memberAccessStack[++defaultMemberAccess] = privateAccess; }
| class_entry base_strict_type
{
- $1; $$ = DeclClass(globalContext.nextID++, $2.name);
+ (void)$1; $$ = DeclClass($2.nsSpec, $2.name);
$$.nameLoc = @2;
FreeSpecifier($2);
++defaultMemberAccess;
memberAccessStack[defaultMemberAccess] = privateAccess;
}
- | identifier class_entry identifier { $2; $$ = DeclClassAddNameSpace(globalContext.nextID++, $3.string); FreeIdentifier($1); FreeIdentifier($3); $$.nameLoc = @3; $$.isRemote = true; memberAccessStack[++defaultMemberAccess] = privateAccess; }
- | identifier class_entry base_strict_type { $2; $$ = DeclClass(globalContext.nextID++, $3.name); FreeIdentifier($1); $$.nameLoc = @3; $$.isRemote = true; FreeSpecifier($3); memberAccessStack[++defaultMemberAccess] = privateAccess; }
+ | identifier class_entry identifier { (void)$2; $$ = DeclClassAddNameSpace($3._class, $3.string); FreeIdentifier($1); FreeIdentifier($3); $$.nameLoc = @3; $$.isRemote = true; memberAccessStack[++defaultMemberAccess] = privateAccess; }
+ | identifier class_entry base_strict_type { (void)$2; $$ = DeclClass($3.nsSpec, $3.name); FreeIdentifier($1); $$.nameLoc = @3; $$.isRemote = true; FreeSpecifier($3); memberAccessStack[++defaultMemberAccess] = privateAccess; }
- | class_entry identifier '<' template_parameters_list '>' { $1; $$ = DeclClassAddNameSpace(globalContext.nextID++, $2.string); $$.templateParams = $4; FreeIdentifier($2); $$.nameLoc = @2; memberAccessStack[++defaultMemberAccess] = privateAccess; }
+ | class_entry identifier '<' template_parameters_list '>' { (void)$1; $$ = DeclClassAddNameSpace($2._class, $2.string); $$.templateParams = $4; FreeIdentifier($2); $$.nameLoc = @2; memberAccessStack[++defaultMemberAccess] = privateAccess; }
| class_entry base_strict_type '<' template_parameters_list '>'
{
- $1; $$ = DeclClass(globalContext.nextID++, $2.name);
+ (void)$1; $$ = DeclClass($2.nsSpec, $2.name);
$$.templateParams = $4;
$$.nameLoc = @2;
FreeSpecifier($2);
++defaultMemberAccess;
memberAccessStack[defaultMemberAccess] = privateAccess;
}
- | identifier class_entry identifier '<' template_parameters_list '>' { $2; $$ = DeclClassAddNameSpace(globalContext.nextID++, $3.string); $$.templateParams = $5; FreeIdentifier($1); FreeIdentifier($3); $$.nameLoc = @3; $$.isRemote = true; memberAccessStack[++defaultMemberAccess] = privateAccess; }
- | identifier class_entry base_strict_type '<' template_parameters_list '>' { $2; $$ = DeclClass(globalContext.nextID++, $3.name); $$.templateParams = $5; FreeIdentifier($1); $$.nameLoc = @3; $$.isRemote = true; FreeSpecifier($3); memberAccessStack[++defaultMemberAccess] = privateAccess; }
+ | identifier class_entry identifier '<' template_parameters_list '>' { (void)$2; $$ = DeclClassAddNameSpace($3._class, $3.string); $$.templateParams = $5; FreeIdentifier($1); FreeIdentifier($3); $$.nameLoc = @3; $$.isRemote = true; memberAccessStack[++defaultMemberAccess] = privateAccess; }
+ | identifier class_entry base_strict_type '<' template_parameters_list '>' { (void)$2; $$ = DeclClass($3.nsSpec, $3.name); $$.templateParams = $5; FreeIdentifier($1); $$.nameLoc = @3; $$.isRemote = true; FreeSpecifier($3); memberAccessStack[++defaultMemberAccess] = privateAccess; }
;
class:
// Added this for unit classes...
| class_head ';'
{
- $$ = $1; $$.definitions = MkList(); $$.blockStart = @2; $$.loc = @$; $$.endid = globalContext.nextID++;
+ $$ = $1; $$.definitions = MkList(); $$.blockStart = @2; $$.loc = @$;
POP_DEFAULT_ACCESS
PopContext(curContext);
}
| class_decl '{' '}'
{
- $$ = MkClass($1, null, MkList()); $$.blockStart = @2; $$.loc = @$; $$.endid = globalContext.nextID++;
+ $$ = MkClass($1, null, MkList()); $$.blockStart = @2; $$.loc = @$;
POP_DEFAULT_ACCESS
PopContext(curContext);
}
| class_head '{' '}'
{
- $$ = $1; $$.definitions = MkList(); $$.blockStart = @2; $$.loc = @$; $$.endid = globalContext.nextID++;
+ $$ = $1; $$.definitions = MkList(); $$.blockStart = @2; $$.loc = @$;
POP_DEFAULT_ACCESS
PopContext(curContext);
}
| class_entry identifier ';'
{
- $1; $$ = MkClass(DeclClassAddNameSpace(0, $2.string), null, null); FreeIdentifier($2);
+ (void)$1; $$ = MkClass(DeclClassAddNameSpace($2._class, $2.string), null, null); FreeIdentifier($2);
POP_DEFAULT_ACCESS
PopContext(curContext);
}
| class_entry type ';'
{
- $1; $$ = MkClass(DeclClass(0, $2.name), null, null); FreeSpecifier($2);
+ (void)$1; $$ = MkClass(DeclClass($2.nsSpec, $2.name), null, null); FreeSpecifier($2);
POP_DEFAULT_ACCESS
PopContext(curContext);
}
class_error:
class_decl '{' struct_declaration_list_error
{
- $$ = MkClass($1, null, $3); $$.deleteWatchable = deleteWatchable; deleteWatchable = false; $$.blockStart = @2; $$.loc = @$; $$.loc.end.charPos++; $$.loc.end.pos++; $$.endid = globalContext.nextID++;
+ $$ = MkClass($1, null, $3); $$.deleteWatchable = deleteWatchable; deleteWatchable = false; $$.blockStart = @2; $$.loc = @$; $$.loc.end.charPos++; $$.loc.end.pos++;
POP_DEFAULT_ACCESS
PopContext(curContext);
}
| class_head '{' struct_declaration_list_error
{
- $$ = $1; $$.definitions = $3; $$.deleteWatchable = deleteWatchable; deleteWatchable = false; $$.blockStart = @2; $$.loc = @$; $$.loc.end.charPos++; $$.loc.end.pos++; $$.endid = globalContext.nextID++;
+ $$ = $1; $$.definitions = $3; $$.deleteWatchable = deleteWatchable; deleteWatchable = false; $$.blockStart = @2; $$.loc = @$; $$.loc.end.charPos++; $$.loc.end.pos++;
POP_DEFAULT_ACCESS
PopContext(curContext);
}
| class_decl '{' struct_declaration_list
{
- $$ = MkClass($1, null, $3); $$.deleteWatchable = deleteWatchable; deleteWatchable = false; $$.blockStart = @2; $$.loc = @$; $$.loc.end.charPos++; $$.loc.end.pos++; $$.endid = globalContext.nextID++;
+ $$ = MkClass($1, null, $3); $$.deleteWatchable = deleteWatchable; deleteWatchable = false; $$.blockStart = @2; $$.loc = @$; $$.loc.end.charPos++; $$.loc.end.pos++;
POP_DEFAULT_ACCESS
PopContext(curContext);
}
| class_head '{' struct_declaration_list
{
- $$ = $1; $$.definitions = $3; $$.deleteWatchable = deleteWatchable; deleteWatchable = false; $$.blockStart = @2; $$.loc = @$; $$.loc.end.charPos++; $$.loc.end.pos++; $$.endid = globalContext.nextID++;
+ $$ = $1; $$.definitions = $3; $$.deleteWatchable = deleteWatchable; deleteWatchable = false; $$.blockStart = @2; $$.loc = @$; $$.loc.end.charPos++; $$.loc.end.pos++;
POP_DEFAULT_ACCESS
PopContext(curContext);
}
| class_decl '{' error
{
- $$ = MkClass($1, null, MkList()); $$.deleteWatchable = deleteWatchable; deleteWatchable = false; $$.blockStart = @2; $$.loc = @$; $$.loc.end.charPos++; $$.loc.end.pos++; $$.endid = globalContext.nextID++;
+ $$ = MkClass($1, null, MkList()); $$.deleteWatchable = deleteWatchable; deleteWatchable = false; $$.blockStart = @2; $$.loc = @$; $$.loc.end.charPos++; $$.loc.end.pos++;
POP_DEFAULT_ACCESS
PopContext(curContext);
}
| class_head '{' error
{
- $$ = $1; $$.definitions = MkList(); $$.deleteWatchable = deleteWatchable; deleteWatchable = false; $$.blockStart = @2; $$.loc = @$; $$.loc.end.charPos++; $$.loc.end.pos++; $$.endid = globalContext.nextID++;
+ $$ = $1; $$.definitions = MkList(); $$.deleteWatchable = deleteWatchable; deleteWatchable = false; $$.blockStart = @2; $$.loc = @$; $$.loc.end.charPos++; $$.loc.end.pos++;
POP_DEFAULT_ACCESS
PopContext(curContext);
}
| '$' string_literal '.' string_literal { $$ = MkExpIntlString($4, $2); delete $2; delete $4; $$.loc = @$; }
;
+constant:
+ CONSTANT { $$ = MkExpConstant(yytext); $$.loc = @$; }
+ ;
+
simple_primary_expression:
identifier { $$ = MkExpIdentifier($1); $$.loc = @$; }
| instantiation_unnamed { $$ = MkExpInstance($1); $$.loc = @$; }
| EXTENSION '(' expression ')' { $$ = MkExpExtensionExpression($3); $$.loc = @$; }
| EXTENSION '(' type_name ')' initializer { $$ = MkExpExtensionInitializer($3, $5); $$.loc = @$; }
| EXTENSION '(' type_name ')' '(' type_name ')' initializer { $$ = MkExpExtensionInitializer($3, MkInitializerAssignment(MkExpExtensionInitializer($6, $8))); $$.loc = @$; }
- | CONSTANT { $$ = MkExpConstant(yytext); $$.loc = @$; }
+ | constant identifier
+ {
+ char * constant = $1.constant;
+ int len = strlen(constant);
+ if(constant[len-1] == '.')
+ {
+ constant[len-1] = 0;
+ $$ = MkExpMember($1, $2);
+ $$.loc = @$;
+ }
+ else
+ yyerror();
+ }
+ | constant { $$ = $1; }
| i18n_string
+ | WIDE_STRING_LITERAL { $$ = MkExpWideString(yytext); $$.loc = @$; }
| '(' ')' { Expression exp = MkExpDummy(); exp.loc.start = @1.end; exp.loc.end = @2.start; $$ = MkExpBrackets(MkListOne(exp)); $$.loc = @$; yyerror(); }
| NEWOP new_specifiers abstract_declarator_noarray '[' constant_expression ']' { $$ = MkExpNew(MkTypeName($2,$3), $5); $$.loc = @$; }
| NEWOP new_specifiers abstract_declarator_noarray '[' constant_expression_error ']' { $$ = MkExpNew(MkTypeName($2,$3), $5); $$.loc = @$; }
| dbtable
| '[' argument_expression_list /*expression*/ ']' { $$ = MkExpArray($2); $$.loc = @$; }
+ | '[' ']' { $$ = MkExpArray(null); $$.loc = @$; }
;
anon_instantiation_expression:
;
primary_expression_error:
- '(' expression { $$ = MkExpBrackets($2); $$.loc = @$; }
+ '(' expression { yyerror(); $$ = MkExpBrackets($2); $$.loc = @$; }
| '(' expression_error { $$ = MkExpBrackets($2); $$.loc = @$; }
;
| postfix_expression_error DEC_OP { $$ = MkExpOp($1, DEC_OP, null); $$.loc = @$; }
;
-simple_postfix_expression:
+/*simple_postfix_expression:
simple_primary_expression
| simple_postfix_expression '[' expression ']' { $$ = MkExpIndex($1, $3); $$.loc = @$; }
| simple_postfix_expression_error PTR_OP identifier { $$ = MkExpPointer($1, $3); $$.loc = @$; }
| simple_postfix_expression_error INC_OP { $$ = MkExpOp($1, INC_OP, null); $$.loc = @$; }
| simple_postfix_expression_error DEC_OP { $$ = MkExpOp($1, DEC_OP, null); $$.loc = @$; }
-;
+;*/
argument_expression_list:
assignment_expression { $$ = MkList(); ListAdd($$, $1); }
| anon_instantiation_expression_error { $$ = MkList(); ListAdd($$, $1); }
| argument_expression_list ',' assignment_expression_error { $$ = $1; ListAdd($1, $3); }
| argument_expression_list ',' anon_instantiation_expression_error { $$ = $1; ListAdd($1, $3); }
- | argument_expression_list ',' { Expression exp = MkExpDummy(); exp.loc.start = @2.end; exp.loc.end = @2.end; $$ = $1; ListAdd($1, exp); }
+ | argument_expression_list ',' { Expression exp = MkExpDummy(); yyerror(); exp.loc.start = @2.end; exp.loc.end = @2.end; $$ = $1; ListAdd($1, exp); }
;
common_unary_expression:
| DEC_OP unary_expression { $$ = MkExpOp(null, DEC_OP, $2); $$.loc = @$; }
| unary_operator cast_expression { $$ = MkExpOp(null, $1, $2); $$.loc = @$; }
| unary_operator anon_instantiation_expression { $$ = MkExpOp(null, $1, $2); $$.loc = @$; }
- | SIZEOF '(' unary_expression ')' { $$ = MkExpOp(null, SIZEOF, $3); $$.loc = @$; }
- | SIZEOF simple_unary_expression { $$ = MkExpOp(null, SIZEOF, $2); $$.loc = @$; }
+ //| SIZEOF '(' unary_expression ')' { $$ = MkExpOp(null, SIZEOF, $3); $$.loc = @$; }
+ | SIZEOF unary_expression { $$ = MkExpOp(null, SIZEOF, $2); $$.loc = @$; }
| SIZEOF '(' guess_type_name ')' { $$ = MkExpTypeSize($3); $$.loc = @$; }
| SIZEOF '(' CLASS type ')' { $$ = MkExpClassSize($4); $$.loc = @$; }
| SIZEOF '(' CLASS guess_type ')' { $$ = MkExpClassSize($4); $$.loc = @$; }
- | ALIGNOF '(' unary_expression ')' { $$ = MkExpOp(null, ALIGNOF, $3); $$.loc = @$; }
- | ALIGNOF simple_unary_expression { $$ = MkExpOp(null, ALIGNOF, $2); $$.loc = @$; }
+ //| ALIGNOF '(' unary_expression ')' { $$ = MkExpOp(null, ALIGNOF, $3); $$.loc = @$; }
+ | ALIGNOF unary_expression { $$ = MkExpOp(null, ALIGNOF, $2); $$.loc = @$; }
| ALIGNOF '(' guess_type_name ')' { $$ = MkExpTypeAlign($3); $$.loc = @$; }
+
+ | BUILTIN_OFFSETOF '(' guess_type_name ',' identifier ')' { $$ = MkExpOffsetOf($3, $5); $$.loc = @$; }
;
unary_expression:
common_unary_expression
| postfix_expression
;
-
-simple_unary_expression:
+/*
+?:
common_unary_expression
| simple_postfix_expression
;
-
+*/
unary_operator:
'&' { $$ = '&'; }
| '*' { $$ = '*'; }
conditional_expression
| unary_expression assignment_operator assignment_expression { $$ = MkExpOp($1, $2, $3); $$.loc = @$; }
| unary_expression_error assignment_operator assignment_expression { $$ = MkExpOp($1, $2, $3); $$.loc = @$; }
- | conditional_expression assignment_operator assignment_expression { $$ = MkExpOp($1, $2, $3); $$.loc = @$; } // TODO: Generate error here:
- | conditional_expression_error assignment_operator assignment_expression { $$ = MkExpOp($1, $2, $3); $$.loc = @$; } // TODO: Generate error here:
+ | conditional_expression assignment_operator assignment_expression { Compiler_Error($"l-value expected\n"); $$ = MkExpOp($1, $2, $3); $$.loc = @$; }
+ | conditional_expression_error assignment_operator assignment_expression { Compiler_Error($"l-value expected\n"); $$ = MkExpOp($1, $2, $3); $$.loc = @$; }
| unary_expression assignment_operator anon_instantiation_expression { $$ = MkExpOp($1, $2, $3); $$.loc = @$; }
| unary_expression_error assignment_operator anon_instantiation_expression { $$ = MkExpOp($1, $2, $3); $$.loc = @$; }
| postfix_expression PTR_OP error { $$ = MkExpPointer($1, null); $$.loc = @$; }
| postfix_expression_error PTR_OP error { $$ = MkExpPointer($1, null); $$.loc = @$; }
- | postfix_expression '(' argument_expression_list { $$ = MkExpCall($1, $3); $$.call.argLoc.start = @2.start; $$.call.argLoc.end = @3.end; $$.loc = @$; $$.call.argLoc.end.charPos++;}
+ | postfix_expression '(' argument_expression_list { yyerror(); $$ = MkExpCall($1, $3); $$.call.argLoc.start = @2.start; $$.call.argLoc.end = @3.end; $$.loc = @$; $$.call.argLoc.end.charPos++;}
| postfix_expression '(' argument_expression_list_error { $$ = MkExpCall($1, $3); $$.call.argLoc.start = @2.start; $$.call.argLoc.end = @3.end; $$.loc = @$; $$.call.argLoc.end.charPos++;}
/* Useless rules due to conflicts
| postfix_expression '(' argument_expression_list ',' error { $$ = MkExpCall($1, $3); $$.call.argLoc.start = @2.start; $$.call.argLoc.end = @4.end;$$.loc = @$; $$.call.argLoc.end.charPos++;}
| postfix_expression_error '.' error { $$ = MkExpMember($1, null); $$.loc = @$; }
;
-simple_postfix_expression_error:
+/*simple_postfix_expression_error:
error { $$ = MkExpDummy(); $$.loc = @$; }
| simple_postfix_expression error
| instantiation_unnamed_error error { $$ = MkExpInstance($1); $$.loc = @$; }
| simple_postfix_expression PTR_OP error { $$ = MkExpPointer($1, null); $$.loc = @$; }
| simple_postfix_expression_error PTR_OP error { $$ = MkExpPointer($1, null); $$.loc = @$; }
- | simple_postfix_expression '(' argument_expression_list { $$ = MkExpCall($1, $3); $$.call.argLoc.start = @2.start; $$.call.argLoc.end = @3.end; $$.loc = @$; $$.call.argLoc.end.charPos++;}
+ | simple_postfix_expression '(' argument_expression_list { yyerror(); $$ = MkExpCall($1, $3); $$.call.argLoc.start = @2.start; $$.call.argLoc.end = @3.end; $$.loc = @$; $$.call.argLoc.end.charPos++;}
| simple_postfix_expression '(' argument_expression_list_error { $$ = MkExpCall($1, $3); $$.call.argLoc.start = @2.start; $$.call.argLoc.end = @3.end; $$.loc = @$; $$.call.argLoc.end.charPos++;}
- /* Useless rules due to conflicts
- | simple_postfix_expression '(' argument_expression_list ',' error { $$ = MkExpCall($1, $3); $$.call.argLoc.start = @2.start; $$.call.argLoc.end = @4.end;$$.loc = @$; $$.call.argLoc.end.charPos++;}
- | simple_postfix_expression '(' error { $$ = MkExpCall($1, MkList() ); @$.end = yylloc.start; $$.loc = @$; $$.call.argLoc.start = @2.start; $$.call.argLoc.end = yylloc.start; }
- */
+ // Useless rules due to conflicts
+ //| simple_postfix_expression '(' argument_expression_list ',' error { $$ = MkExpCall($1, $3); $$.call.argLoc.start = @2.start; $$.call.argLoc.end = @4.end;$$.loc = @$; $$.call.argLoc.end.charPos++;}
+ //| simple_postfix_expression '(' error { $$ = MkExpCall($1, MkList() ); @$.end = yylloc.start; $$.loc = @$; $$.call.argLoc.start = @2.start; $$.call.argLoc.end = yylloc.start; }
+
| simple_postfix_expression '.' error { $$ = MkExpMember($1, null); $$.loc = @$; }
| simple_postfix_expression_error '(' argument_expression_list_error { $$ = MkExpCall($1, $3); $$.loc = @$; $$.call.argLoc.start = @2.start; $$.call.argLoc.end = @3.end; $$.call.argLoc.end.charPos++;}
- /* Useless rules due to conflicts
- | simple_postfix_expression_error '(' argument_expression_list ',' error { $$ = MkExpCall($1, $3); $$.loc = @$; $$.call.argLoc.start = @2.start; $$.call.argLoc.end = @4.end; $$.call.argLoc.end.charPos++;}
- | simple_postfix_expression_error '(' error { $$ = MkExpCall($1, MkList() ); $$.loc = @$; $$.call.argLoc.start = @2.start; $$.call.argLoc.end = @2.end; $$.call.argLoc.end.charPos++;}
- */
+ // Useless rules due to conflicts
+ //| simple_postfix_expression_error '(' argument_expression_list ',' error { $$ = MkExpCall($1, $3); $$.loc = @$; $$.call.argLoc.start = @2.start; $$.call.argLoc.end = @4.end; $$.call.argLoc.end.charPos++;}
+ //| simple_postfix_expression_error '(' error { $$ = MkExpCall($1, MkList() ); $$.loc = @$; $$.call.argLoc.start = @2.start; $$.call.argLoc.end = @2.end; $$.call.argLoc.end.charPos++;}
| simple_postfix_expression_error '.' error { $$ = MkExpMember($1, null); $$.loc = @$; }
;
+*/
common_unary_expression_error:
INC_OP unary_expression_error { $$ = MkExpOp(null, INC_OP, $2); $$.loc = @$; }
| DEC_OP unary_expression_error { $$ = MkExpOp(null, DEC_OP, $2); $$.loc = @$; }
| unary_operator cast_expression_error { $$ = MkExpOp(null, $1, $2); $$.loc = @$; }
| unary_operator anon_instantiation_expression_error { $$ = MkExpOp(null, $1, $2); $$.loc = @$; }
- | SIZEOF '(' unary_expression_error { $$ = MkExpOp(null, SIZEOF, $3); $$.loc = @$; }
- | SIZEOF simple_unary_expression_error { $$ = MkExpOp(null, SIZEOF, $2); $$.loc = @$; }
+ //| SIZEOF '(' unary_expression_error { $$ = MkExpOp(null, SIZEOF, $3); $$.loc = @$; }
+ | SIZEOF unary_expression_error { $$ = MkExpOp(null, SIZEOF, $2); $$.loc = @$; }
| SIZEOF '(' guess_type_name ')' error { $$ = MkExpTypeSize($3); $$.loc = @$; }
| SIZEOF '(' CLASS type ')' error { $$ = MkExpClassSize($4); $$.loc = @$; }
| SIZEOF '(' CLASS guess_type ')' error { $$ = MkExpClassSize($4); $$.loc = @$; }
- | ALIGNOF '(' unary_expression_error { $$ = MkExpOp(null, ALIGNOF, $3); $$.loc = @$; }
- | ALIGNOF simple_unary_expression_error { $$ = MkExpOp(null, ALIGNOF, $2); $$.loc = @$; }
+ //| ALIGNOF '(' unary_expression_error { $$ = MkExpOp(null, ALIGNOF, $3); $$.loc = @$; }
+ | ALIGNOF unary_expression_error { $$ = MkExpOp(null, ALIGNOF, $2); $$.loc = @$; }
| ALIGNOF '(' guess_type_name ')' error { $$ = MkExpTypeAlign($3); $$.loc = @$; }
;
| postfix_expression_error
;
-simple_unary_expression_error:
+/*simple_unary_expression_error:
common_unary_expression_error
| simple_postfix_expression_error
- ;
-
+ ;*/
cast_expression_error:
unary_expression_error
{
if($1.type == identifierExp)
{
- if($1.identifier._class && !$1.identifier._class.name)
- {
- char name[1024];
- strcpy(name, "::");
- strcat(name, $1.identifier.string);
- _DeclClass(0, name);
- }
- else
- _DeclClass(0, $1.identifier.string);
+ _DeclClass($1.identifier._class, $1.identifier.string);
// printf("Declaring Class %s\n", $1.identifier.string);
skipErrors = false;
| logical_or_expression '?' ':'
{
+ yyerror();
$$ = MkExpCondition($1, MkListOne(MkExpDummy()), MkExpDummy());
$$.loc = @$;
((Expression)$$.cond.exp->last).loc = @2;
}
| logical_or_expression '?'
{
+ yyerror();
$$ = MkExpCondition($1, MkListOne(MkExpDummy()), MkExpDummy()); $$.loc = @$; ((Expression)$$.cond.exp->last).loc = @2; $$.cond.elseExp.loc = @2;
}
| logical_or_expression_error '?'
| expression_error ',' error
| expression error
*/
- | expression expression { $$ = $1; FreeList($2, FreeExpression); }
+ | expression expression { yyerror(); $$ = $1; FreeList($2, FreeExpression); }
| expression_error expression { $$ = $1; FreeList($2, FreeExpression); }
| expression expression_error { $$ = $1; FreeList($2, FreeExpression); }
;
TYPEDEF { $$ = MkSpecifier(TYPEDEF); }
| EXTERN { $$ = MkSpecifier(EXTERN); }
| STATIC { $$ = MkSpecifier(STATIC); }
+ | THREAD { $$ = MkSpecifier(THREAD); }
| AUTO { $$ = MkSpecifier(AUTO); }
| REGISTER { $$ = MkSpecifier(REGISTER); }
+ | RESTRICT { $$ = MkSpecifier(RESTRICT); }
;
external_storage_class_specifier:
- TYPEDEF { $$ = MkSpecifier(TYPEDEF); declMode = defaultAccess; }
+ TYPEDEF { $$ = MkSpecifier(TYPEDEF); structDeclMode = declMode = defaultAccess; }
| EXTERN { $$ = MkSpecifier(EXTERN); }
- | STATIC { $$ = MkSpecifier(STATIC); declMode = staticAccess; }
+ | STATIC { $$ = MkSpecifier(STATIC); structDeclMode = declMode = staticAccess; }
+ | THREAD { $$ = MkSpecifier(THREAD); }
| AUTO { $$ = MkSpecifier(AUTO); }
| REGISTER { $$ = MkSpecifier(REGISTER); }
+ | RESTRICT { $$ = MkSpecifier(RESTRICT); }
;
enumerator:
| enum_specifier strict_type '{' error { $$ = MkEnum(MkIdentifier($2.name), null); $$.loc = @$; FreeSpecifier($2); POP_DEFAULT_ACCESS }
| enum_specifier strict_type '{' enumerator_list ';' struct_declaration_list { $$ = MkEnum(MkIdentifier($2.name), $4); $$.loc = @$; $$.definitions = $6; FreeSpecifier($2); POP_DEFAULT_ACCESS }
| enum_specifier strict_type '{' enumerator_list ';' struct_declaration_list_error { $$ = MkEnum(MkIdentifier($2.name), $4); $$.loc = @$; $$.definitions = $6; FreeSpecifier($2); POP_DEFAULT_ACCESS }
+
+ | enum_specifier identifier '{' enumerator_list ';' { $$ = MkEnum($2, $4); $$.loc = @$; POP_DEFAULT_ACCESS }
+ | enum_specifier strict_type '{' enumerator_list ';' { $$ = MkEnum(MkIdentifier($2.name), $4); $$.loc = @$; FreeSpecifier($2); POP_DEFAULT_ACCESS }
;
enum_decl:
- enum_specifier identifier { $$ = $2; if(declMode) DeclClassAddNameSpace(globalContext.nextID++, $2.string); }
- | enum_specifier strict_type { $$ = MkIdentifier($2.name); if(declMode) DeclClass(globalContext.nextID++, $2.name); FreeSpecifier($2); }
+ enum_specifier identifier { $$ = $2; if(declMode) DeclClassAddNameSpace($2._class, $2.string); }
+ | enum_specifier strict_type { $$ = MkIdentifier($2.name); if(declMode) DeclClass($2.nsSpec, $2.name); FreeSpecifier($2); }
;
enum_class:
| enum_decl '{' error { $$ = MkEnum($1, null); $$.loc = @$; POP_DEFAULT_ACCESS }
| enum_decl '{' enumerator_list ';' struct_declaration_list { $$ = MkEnum($1, $3); $$.definitions = $5; $$.loc = @$; POP_DEFAULT_ACCESS }
| enum_decl '{' enumerator_list ';' struct_declaration_list_error { $$ = MkEnum($1, $3); $$.definitions = $5; $$.loc = @$; POP_DEFAULT_ACCESS }
+
+ | enum_decl ':' inheritance_specifiers '{' enumerator_list ';' { $$ = MkEnum($1, $5); $$.baseSpecs = $3; $$.loc = @$; POP_DEFAULT_ACCESS }
+ | enum_decl ':' inheritance_specifiers '{' enumerator_list error ';' { $$ = MkEnum($1, $5); $$.baseSpecs = $3; $$.loc = @$; POP_DEFAULT_ACCESS }
+ | enum_decl ':' inheritance_specifiers '{' error ';' { $$ = MkEnum($1, null); $$.baseSpecs = $3; $$.loc = @$; POP_DEFAULT_ACCESS }
+ | enum_decl '{' enumerator_list ';' { $$ = MkEnum($1, $3); $$.loc = @$; POP_DEFAULT_ACCESS }
;
class_specifier:
| INT { $$ = MkSpecifier(INT); }
| UINT { $$ = MkSpecifier(UINT); }
| INT64 { $$ = MkSpecifier(INT64); }
+ | INT128 { $$ = MkSpecifier(INT128); }
| VALIST { $$ = MkSpecifier(VALIST); }
| LONG { $$ = MkSpecifier(LONG); }
| FLOAT { $$ = MkSpecifier(FLOAT); }
| type
| TYPEOF '(' assignment_expression ')' { $$ = MkSpecifierTypeOf($3); }
| SUBCLASS '(' type ')' { $$ = MkSpecifierSubClass($3); }
- | SUBCLASS '(' identifier ')' { _DeclClass(0, $3.string); $$ = MkSpecifierSubClass(MkSpecifierName($3.string)); FreeIdentifier($3); }
+ | SUBCLASS '(' identifier ')' { _DeclClass($3._class, $3.string); $$ = MkSpecifierSubClass(MkSpecifierName($3.string)); FreeIdentifier($3); }
| THISCLASS { $$ = MkSpecifier(THISCLASS); }
| TYPED_OBJECT { $$ = MkSpecifier(TYPED_OBJECT); }
| ANY_OBJECT { $$ = MkSpecifier(ANY_OBJECT); }
+ | _BOOL { $$ = MkSpecifier(_BOOL); }
+ | BOOL { $$ = MkSpecifier(BOOL); }
+ | _COMPLEX { $$ = MkSpecifier(_COMPLEX); }
+ | _IMAGINARY { $$ = MkSpecifier(_IMAGINARY); }
;
strict_type_specifier:
| INT { $$ = MkSpecifier(INT); }
| UINT { $$ = MkSpecifier(UINT); }
| INT64 { $$ = MkSpecifier(INT64); }
+ | INT128 { $$ = MkSpecifier(INT128); }
| VALIST { $$ = MkSpecifier(VALIST); }
| LONG { $$ = MkSpecifier(LONG); }
| FLOAT { $$ = MkSpecifier(FLOAT); }
| struct_or_union_specifier_nocompound
| enum_specifier_nocompound
| strict_type
+ | _BOOL { $$ = MkSpecifier(_BOOL); }
+ | BOOL { $$ = MkSpecifier(BOOL); }
+ | _COMPLEX { $$ = MkSpecifier(_COMPLEX); }
+ | _IMAGINARY { $$ = MkSpecifier(_IMAGINARY); }
| TYPEOF '(' assignment_expression ')' { $$ = MkSpecifierTypeOf($3); }
| SUBCLASS '(' type ')' { $$ = MkSpecifierSubClass($3); }
- | SUBCLASS '(' identifier ')' { _DeclClass(0, $3.string); $$ = MkSpecifierSubClass(MkSpecifierName($3.string)); FreeIdentifier($3); }
+ | SUBCLASS '(' identifier ')' { _DeclClass($3._class, $3.string); $$ = MkSpecifierSubClass(MkSpecifierName($3.string)); FreeIdentifier($3); }
| THISCLASS { $$ = MkSpecifier(THISCLASS); }
;
$$ = $1;
if(declMode)
{
- ($1.addNameSpace ? DeclClassAddNameSpace : DeclClass)(globalContext.nextID++, $1.id.string);
+ ($1.addNameSpace ? DeclClassAddNameSpace : DeclClass)($1.id._class, $1.id.string);
}
}
| struct_entry '<' template_parameters_list '>'
{
- Symbol symbol = ($1.addNameSpace ? DeclClassAddNameSpace : DeclClass)(globalContext.nextID++, $1.id.string);
+ Symbol symbol = ($1.addNameSpace ? DeclClassAddNameSpace : DeclClass)($1.id._class, $1.id.string);
$$ = $1;
symbol.templateParams = $3;
}
| strict_type_specifier { $$ = MkList(); ListAdd($$, $1); }
| _inheritance_specifiers strict_type_specifier { $$ = $1; ListAdd($1, $2); }
| identifier
- { _DeclClass(0, $1.string); $$ = MkListOne(MkSpecifierName($1.string)); FreeIdentifier($1); }
- | _inheritance_specifiers identifier { $$ = $1; _DeclClass(0, $2.string); ListAdd($1, MkSpecifierName($2.string)); FreeIdentifier($2); }
+ { _DeclClass($1._class, $1.string); $$ = MkListOne(MkSpecifierName($1.string)); FreeIdentifier($1); }
+ | _inheritance_specifiers identifier { $$ = $1; _DeclClass($2._class, $2.string); ListAdd($1, MkSpecifierName($2.string)); FreeIdentifier($2); }
| identifier '<' template_arguments_list '>'
{
- // if($1._class && !$1._class.name)
- if($1._class)
- {
- char name[1024];
- strcpy(name, $1._class.name ? $1._class.name : "");
- strcat(name, "::");
- strcat(name, $1.string);
- _DeclClass(0, name);
- }
- else
- _DeclClass(0, $1.string);
+ _DeclClass($1._class, $1.string);
$$ = MkList();
ListAdd($$, MkSpecifierNameArgs($1.string, $3));
| _inheritance_specifiers identifier '<' template_arguments_list '>'
{
$$ = $1;
- if($2._class && !$2._class.name)
- {
- char name[1024];
- strcpy(name, "::");
- strcat(name, $2.string);
- _DeclClass(0, name);
- }
- else
- _DeclClass(0, $2.string);
+ _DeclClass($2._class, $2.string);
ListAdd($1, MkSpecifierNameArgs($2.string, $4));
FreeIdentifier($2);
}
| property_specifiers identifier { $$ = $1; ListAdd($1, MkSpecifierName($2.string)); FreeIdentifier($2)}
| identifier '<' template_arguments_list '>'
{
- // if($1._class && !$1._class.name)
- if($1._class)
- {
- char name[1024];
- strcpy(name, $1._class.name ? $1._class.name : "");
- strcat(name, "::");
- strcat(name, $1.string);
- _DeclClass(0, name);
- }
- else
- _DeclClass(0, $1.string);
+ _DeclClass($1._class, $1.string);
$$ = MkList();
ListAdd($$, MkSpecifierNameArgs($1.string, $3));
}
| property_specifiers identifier '<' template_arguments_list '>'
{
- if($2._class && !$2._class.name)
- {
- char name[1024];
- strcpy(name, "::");
- strcat(name, $2.string);
- _DeclClass(0, name);
- }
- else
- _DeclClass(0, $2.string);
+ _DeclClass($2._class, $2.string);
ListAdd($1, MkSpecifierNameArgs($2.string, $4));
FreeIdentifier($2);
}
| renew_specifiers identifier { $$ = $1; ListAdd($1, MkSpecifierName($2.string)); FreeIdentifier($2)}
| identifier '<' template_arguments_list '>'
{
- // if($1._class && !$1._class.name)
- if($1._class)
- {
- char name[1024];
- strcpy(name, $1._class.name ? $1._class.name : "");
- strcat(name, "::");
- strcat(name, $1.string);
- _DeclClass(0, name);
- }
- else
- _DeclClass(0, $1.string);
+ _DeclClass($1._class, $1.string);
$$ = MkList();
ListAdd($$, MkSpecifierNameArgs($1.string, $3));
}
| renew_specifiers identifier '<' template_arguments_list '>'
{
- if($2._class && !$2._class.name)
- {
- char name[1024];
- strcpy(name, "::");
- strcat(name, $2.string);
- _DeclClass(0, name);
- }
- else
- _DeclClass(0, $2.string);
+ _DeclClass($2._class, $2.string);
ListAdd($1, MkSpecifierNameArgs($2.string, $4));
FreeIdentifier($2);
}
| new_specifiers identifier { $$ = $1; ListAdd($1, MkSpecifierName($2.string)); FreeIdentifier($2)}
| identifier '<' template_arguments_list '>'
{
- // if($1._class && !$1._class.name)
- if($1._class)
- {
- char name[1024];
- strcpy(name, $1._class.name ? $1._class.name : "");
- strcat(name, "::");
- strcat(name, $1.string);
- _DeclClass(0, name);
- }
- else
- _DeclClass(0, $1.string);
+ _DeclClass($1._class, $1.string);
$$ = MkList();
ListAdd($$, MkSpecifierNameArgs($1.string, $3));
}
| new_specifiers identifier '<' template_arguments_list '>'
{
- if($2._class && !$2._class.name)
- {
- char name[1024];
- strcpy(name, "::");
- strcat(name, $2.string);
- _DeclClass(0, name);
- }
- else
- _DeclClass(0, $2.string);
+ _DeclClass($2._class, $2.string);
ListAdd($1, MkSpecifierNameArgs($2.string, $4));
FreeIdentifier($2);
}
| '{' initializer_list '}' { $$ = MkInitializerList($2); $$.loc = @$; }
| '{' initializer_list ',' '}'
{
+ Compiler_Warning($"extra comma\n");
$$ = MkInitializerList($2);
$$.loc = @$;
initializer_error:
assignment_expression_error { $$ = MkInitializerAssignment($1); $$.loc = @$; }
| '{' initializer_list '}' error { $$ = MkInitializerList($2); $$.loc = @$; }
- | '{' initializer_list { $$ = MkInitializerList($2); $$.loc = @$; }
+ | '{' initializer_list { yyerror(); $$ = MkInitializerList($2); $$.loc = @$; }
| '{' initializer_list ',' '}' error
{
$$ = MkInitializerList($2);
}
| '{' initializer_list ','
{
+ yyerror();
$$ = MkInitializerList($2);
$$.loc = @$;
| initializer_list ',' initializer_error { $$ = $1; ListAdd($1, $3); }
// Errors
- | initializer_list initializer { $$ = $1; ListAdd($1, $2); }
+ | initializer_list initializer { yyerror(); $$ = $1; ListAdd($1, $2); }
| initializer_list initializer_error { $$ = $1; ListAdd($1, $2); }
;
| init_declarator_list ',' init_declarator { $$ = $1; ListAdd($1, $3); }
| UINT ',' init_declarator { $$ = MkList(); ListAdd($$, MkInitDeclarator(MkDeclaratorIdentifier(MkIdentifier("uint")), null)); ListAdd($$, $3); }
| INT64 ',' init_declarator { $$ = MkList(); ListAdd($$, MkInitDeclarator(MkDeclaratorIdentifier(MkIdentifier("int64")), null)); ListAdd($$, $3); }
+ | INT128 ',' init_declarator { $$ = MkList(); ListAdd($$, MkInitDeclarator(MkDeclaratorIdentifier(MkIdentifier("__int128")), null)); ListAdd($$, $3); }
| base_strict_type ',' init_declarator
{
char * colon = RSearchString($1.name, "::", strlen($1.name), true, false);
;
asm_field:
- string_literal { $$ = MkAsmField($1, null); $$.loc = @1; }
- | string_literal '(' assignment_expression ')' { $$ = MkAsmField($1, $3); $$.loc = @$; }
+ string_literal { $$ = MkAsmField($1, null, null); $$.loc = @1; }
+ | string_literal '(' assignment_expression ')' { $$ = MkAsmField($1, $3, null); $$.loc = @$; }
+ | '[' identifier ']' string_literal '(' assignment_expression ')' { $$ = MkAsmField($4, $6, $2); $$.loc = @$; }
;
asm_field_list:
;
labeled_statement:
- identifier ':' statement { $$ = MkLabeledStmt($1, $3); $$.loc = @$; }
- | CASE constant_expression ':' statement { $$ = MkCaseStmt($2, $4); $$.loc = @$; $2.loc.start = @1.end; }
- | CASE constant_expression_error ':' statement { $$ = MkCaseStmt($2, $4); $$.loc = @$; $2.loc.start = @1.end; }
- | CASE ':' statement { $$ = MkCaseStmt(MkExpDummy(), $3); $$.caseStmt.exp.loc = @2; $$.loc = @$; $$.caseStmt.exp.loc.start = @1.end; }
- | DEFAULT ':' statement { $$ = MkCaseStmt(null, $3); $$.loc = @$; }
- ;
-
-labeled_statement_error
- : identifier ':' statement_error { $$ = MkLabeledStmt($1, $3); $$.loc = @$; }
- | CASE constant_expression ':' statement_error { $$ = MkCaseStmt($2, $4); $$.loc = @$; $2.loc.start = @1.end; }
- | CASE constant_expression_error ':' statement_error { $$ = MkCaseStmt($2, $4); $$.loc = @$; $2.loc.start = @1.end; }
- | CASE ':' statement_error { $$ = MkCaseStmt(MkExpDummy(), $3); $$.caseStmt.exp.loc = @2; $$.loc = @$; $$.caseStmt.exp.loc.start = @1.end; }
+ identifier ':' statement { $$ = MkLabeledStmt($1, $3); $$.loc = @$; }
+ | CASE constant_expression ':' statement { /*if($4.type == labeledStmt) Compiler_Warning(CASE_LABELED_STMT_WARNING);*/ $$ = MkCaseStmt($2, $4); $$.loc = @$; $2.loc.start = @1.end; }
+ | CASE constant_expression_error ':' statement { /*if($4.type == labeledStmt) Compiler_Warning(CASE_LABELED_STMT_WARNING);*/ $$ = MkCaseStmt($2, $4); $$.loc = @$; $2.loc.start = @1.end; }
+ | CASE ':' statement { /*if($3.type == labeledStmt) Compiler_Warning(CASE_LABELED_STMT_WARNING);*/ $$ = MkCaseStmt(MkExpDummy(), $3); $$.caseStmt.exp.loc = @2; $$.loc = @$; $$.caseStmt.exp.loc.start = @1.end; }
+ | DEFAULT ':' statement { /*if($3.type == labeledStmt) Compiler_Warning(CASE_LABELED_STMT_WARNING);*/ $$ = MkCaseStmt(null, $3); $$.loc = @$; }
+
+ | identifier ':' declaration { Statement stmt = MkBadDeclStmt($3); stmt.loc = @3; Compiler_Warning(C89_DECL_WARNING); $$ = MkLabeledStmt($1, stmt); $$.loc = @$; }
+ | CASE constant_expression ':' declaration { Statement stmt = MkBadDeclStmt($4); stmt.loc = @4; Compiler_Warning(C89_DECL_WARNING); $$ = MkCaseStmt($2, stmt); $$.loc = @$; $2.loc.start = @1.end; }
+ | CASE constant_expression_error ':' declaration { Statement stmt = MkBadDeclStmt($4); stmt.loc = @4; Compiler_Warning(C89_DECL_WARNING); $$ = MkCaseStmt($2, stmt); $$.loc = @$; $2.loc.start = @1.end; }
+ | CASE ':' declaration { Statement stmt = MkBadDeclStmt($3); stmt.loc = @3; Compiler_Warning(C89_DECL_WARNING); $$ = MkCaseStmt(MkExpDummy(), stmt); $$.caseStmt.exp.loc = @2; $$.loc = @$; $$.caseStmt.exp.loc.start = @1.end; }
+ | DEFAULT ':' declaration { Statement stmt = MkBadDeclStmt($3); stmt.loc = @3; Compiler_Warning(C89_DECL_WARNING); $$ = MkCaseStmt(null, stmt); $$.loc = @$; }
+ ;
+
+labeled_statement_error:
+ identifier ':' statement_error { $$ = MkLabeledStmt($1, $3); $$.loc = @$; }
+ | CASE constant_expression ':' statement_error { /*if($4.type == labeledStmt) Compiler_Warning(CASE_LABELED_STMT_WARNING);*/ $$ = MkCaseStmt($2, $4); $$.loc = @$; $2.loc.start = @1.end; }
+ | CASE constant_expression_error ':' statement_error { /*if($4.type == labeledStmt) Compiler_Warning(CASE_LABELED_STMT_WARNING);*/ $$ = MkCaseStmt($2, $4); $$.loc = @$; $2.loc.start = @1.end; }
+ | CASE ':' statement_error { /*if($3.type == labeledStmt) Compiler_Warning(CASE_LABELED_STMT_WARNING);*/ $$ = MkCaseStmt(MkExpDummy(), $3); $$.caseStmt.exp.loc = @2; $$.loc = @$; $$.caseStmt.exp.loc.start = @1.end; }
| CASE ':' { $$ = MkCaseStmt(MkExpDummy(), null); $$.caseStmt.exp.loc = @2; $$.loc = @$; $$.caseStmt.exp.loc.start = @1.end; }
- | DEFAULT ':' statement_error { $$ = MkCaseStmt(null, $3); $$.loc = @$; }
+ | DEFAULT ':' statement_error { /*if($3.type == labeledStmt) Compiler_Warning(CASE_LABELED_STMT_WARNING);*/ $$ = MkCaseStmt(null, $3); $$.loc = @$; }
| DEFAULT ':' { $$ = MkCaseStmt(null, null); $$.loc = @$; }
+
+ | identifier ':' declaration_error { Statement stmt = MkBadDeclStmt($3); stmt.loc = @3; Compiler_Warning(C89_DECL_WARNING); $$ = MkLabeledStmt($1, stmt); $$.loc = @$; }
+ | CASE constant_expression ':' declaration_error { Statement stmt = MkBadDeclStmt($4); stmt.loc = @4; Compiler_Warning(C89_DECL_WARNING); $$ = MkCaseStmt($2, stmt); $$.loc = @$; $2.loc.start = @1.end; }
+ | CASE constant_expression_error ':' declaration_error { Statement stmt = MkBadDeclStmt($4); stmt.loc = @4; Compiler_Warning(C89_DECL_WARNING); $$ = MkCaseStmt($2, stmt); $$.loc = @$; $2.loc.start = @1.end; }
+ | CASE ':' declaration_error { Statement stmt = MkBadDeclStmt($3); stmt.loc = @3; Compiler_Warning(C89_DECL_WARNING); $$ = MkCaseStmt(MkExpDummy(), stmt); $$.caseStmt.exp.loc = @2; $$.loc = @$; $$.caseStmt.exp.loc.start = @1.end; }
+ | DEFAULT ':' declaration_error { Statement stmt = MkBadDeclStmt($3); stmt.loc = @3; Compiler_Warning(C89_DECL_WARNING); $$ = MkCaseStmt(null, stmt); $$.loc = @$; }
;
declaration_mode:
- PUBLIC { $$ = declMode = publicAccess; }
- | PRIVATE { $$ = declMode = privateAccess; }
- | DEFAULT { $$ = declMode = defaultAccess; }
+ PUBLIC { $$ = structDeclMode = declMode = publicAccess; }
+ | PRIVATE { $$ = structDeclMode = declMode = privateAccess; }
+ | DEFAULT { $$ = structDeclMode = declMode = defaultAccess; }
;
member_access:
;
declaration:
- declaration_specifiers ';' { $$ = MkDeclaration($1, null); $$.loc = @$; }
- | declaration_specifiers init_declarator_list ';' { $$ = MkDeclaration($1, $2); $$.loc = @$; }
- | instantiation_named ';' { $$ = MkDeclarationInst($1); $$.loc = @$; }
- | declaration_error ';' { $$ = $1; }
+ declaration_specifiers ';' { $$ = MkDeclaration($1, null); $$.loc = @$; structDeclMode = defaultDeclMode; }
+ | declaration_specifiers init_declarator_list ';' { $$ = MkDeclaration($1, $2); $$.loc = @$; structDeclMode = defaultDeclMode; }
+ | instantiation_named ';' { $$ = MkDeclarationInst($1); $$.loc = @$; structDeclMode = defaultDeclMode; }
+ | declaration_error ';' { $$ = $1; structDeclMode = defaultDeclMode; }
;
external_guess_declaration:
| external_guess_instantiation_named ';' { $$ = MkDeclarationInst($1); $$.loc = @$; }
| DEFINE identifier '=' conditional_expression ';' { $$ = MkDeclarationDefine($2, $4); $$.loc = @$; }
- | STATIC DEFINE identifier '=' conditional_expression ';' { declMode = staticAccess; $$ = MkDeclarationDefine($3, $5); $$.loc = @$; }
+ | STATIC DEFINE identifier '=' conditional_expression ';' { structDeclMode = declMode = staticAccess; $$ = MkDeclarationDefine($3, $5); $$.loc = @$; }
;
external_guess_declaration_error:
;
declaration_error:
- declaration_specifiers error { $$ = MkDeclaration($1, null); $$.loc = @$; }
- | declaration_error error {}
+ declaration_specifiers error { $$ = MkDeclaration($1, null); $$.loc = @$; structDeclMode = defaultDeclMode; }
+ | declaration_error error { structDeclMode = defaultDeclMode; }
- | instantiation_named_error error { $$ = MkDeclarationInst($1); $$.loc = @$; }
- | instantiation_named error { $$ = MkDeclarationInst($1); $$.loc = @$; }
- | declaration_specifiers init_declarator_list_error { $$ = MkDeclaration($1, $2); $$.loc = @$; }
+ | instantiation_named_error error { $$ = MkDeclarationInst($1); $$.loc = @$; structDeclMode = defaultDeclMode; }
+ | instantiation_named error { $$ = MkDeclarationInst($1); $$.loc = @$; structDeclMode = defaultDeclMode; }
+ | declaration_specifiers init_declarator_list_error { $$ = MkDeclaration($1, $2); $$.loc = @$; structDeclMode = defaultDeclMode; }
;
declaration_list:
iteration_statement:
WHILE '(' expression ')' statement { $$ = MkWhileStmt($3, $5); $$.loc = @$; }
| WHILE '(' expression_error statement { $$ = MkWhileStmt($3, $4); $$.loc = @$; }
- | WHILE '(' ')' statement { $$ = MkWhileStmt(null, $4); $$.loc = @$; }
+ | WHILE '(' ')' statement { yyerror(); $$ = MkWhileStmt(null, $4); $$.loc = @$; }
| DO statement WHILE '(' expression ')' ';' { $$ = MkDoWhileStmt($2, $5); $$.loc = @$; }
| DO statement WHILE '(' expression_error ';' { $$ = MkDoWhileStmt($2, $5); $$.loc = @$; }
| FOR '(' expression_statement expression_statement ')' statement { $$ = MkForStmt($3, $4, null, $6); $$.loc = @$; }
- | FOR '(' expression_statement ')' statement { $$ = MkForStmt($3, null, null, $5); $$.loc = @$; }
+ | FOR '(' expression_statement ')' statement { yyerror(); $$ = MkForStmt($3, null, null, $5); $$.loc = @$; }
| FOR '(' expression_statement expression_statement expression ')' statement { $$ = MkForStmt($3, $4, $5, $7); $$.loc = @$; }
| FOR '(' expression_statement expression_statement expression_error statement { $$ = MkForStmt($3, $4, $5, $6 ); $$.loc = @$; }
- | FOR '(' ')' statement { $$ = MkForStmt(null, null, null, $4); $$.loc = @$; }
+ | FOR '(' ')' statement { yyerror(); $$ = MkForStmt(null, null, null, $4); $$.loc = @$; }
| FOR '(' identifier ':' expression ')' statement { $$ = MkForEachStmt($3, $5, null, $7); $$.loc = @$; }
| FOR '(' identifier ':' expression ';' expression ')' statement { $$ = MkForEachStmt($3, $5, $7, $9); $$.loc = @$; }
FOR '(' expression_statement expression_statement expression ')' statement_error { $$ = MkForStmt($3, $4, $5, $7); $$.loc = @$; } |
FOR '(' expression_statement expression_statement expression_error statement_error { $$ = MkForStmt($3, $4, $5, $6 ); $$.loc = @$; } |
- DO statement WHILE '(' expression ')' { $$ = MkDoWhileStmt($2, $5); $$.loc = @$; } |
- DO statement WHILE '(' expression { $$ = MkDoWhileStmt($2, $5); $$.loc = @$; } |
+ DO statement WHILE '(' expression ')' { yyerror(); $$ = MkDoWhileStmt($2, $5); $$.loc = @$; } |
+ DO statement WHILE '(' expression { yyerror(); $$ = MkDoWhileStmt($2, $5); $$.loc = @$; } |
DO statement WHILE '(' expression_error { $$ = MkDoWhileStmt($2, $5); $$.loc = @$; } |
DO statement WHILE '(' { $$ = MkDoWhileStmt($2, null); $$.loc = @$; } |
- DO statement WHILE { $$ = MkDoWhileStmt($2, null); $$.loc = @$; } |
- DO statement { $$ = MkDoWhileStmt($2, null); $$.loc = @$; } |
- DO { $$ = MkDoWhileStmt(null, null); $$.loc = @$; } |
+ DO statement WHILE { yyerror(); $$ = MkDoWhileStmt($2, null); $$.loc = @$; } |
+ DO statement { yyerror(); $$ = MkDoWhileStmt($2, null); $$.loc = @$; } |
+ DO { yyerror(); $$ = MkDoWhileStmt(null, null); $$.loc = @$; } |
WHILE error { $$ = MkWhileStmt(null, null); $$.loc = @$; } |
;
external_declaration:
- function_definition { $$ = MkExternalFunction($1); $$.loc = @$; $1.declMode = declMode; declMode = defaultDeclMode; }
+ function_definition { $$ = MkExternalFunction($1); $$.loc = @$; $1.declMode = declMode; structDeclMode = declMode = defaultDeclMode; }
| class
- { $$ = MkExternalClass($1); $$.loc = @$; $1.declMode = (declMode != defaultAccess) ? declMode : privateAccess; declMode = defaultDeclMode; }
+ { $$ = MkExternalClass($1); $$.loc = @$; $1.declMode = (declMode != defaultAccess) ? declMode : privateAccess; structDeclMode = declMode = defaultDeclMode; }
| external_guess_declaration_specifiers class
- { $$ = MkExternalClass($2); $$.loc = @$; $2.declMode = (declMode != defaultAccess) ? declMode : privateAccess; declMode = defaultDeclMode; FreeList($1, FreeSpecifier); }
+ { $$ = MkExternalClass($2); $$.loc = @$; $2.declMode = (declMode != defaultAccess) ? declMode : privateAccess; structDeclMode = declMode = defaultDeclMode; FreeList($1, FreeSpecifier); }
| external_guess_declaration
- { $$ = MkExternalDeclaration($1); $$.loc = @$; $1.declMode = declMode; declMode = defaultDeclMode; }
+ { $$ = MkExternalDeclaration($1); $$.loc = @$; $1.declMode = declMode; structDeclMode = declMode = defaultDeclMode; }
| IMPORT string_literal { $$ = MkExternalImport($2, normalImport, (declMode != defaultAccess) ? declMode : privateAccess); $$.loc = @$; }
| IMPORT STATIC string_literal { $$ = MkExternalImport($3, staticImport, (declMode != defaultAccess) ? declMode : privateAccess); $$.loc = @$; }
| IMPORT identifier string_literal
| ';' { $$ = null; }
- | declaration_mode function_definition { $$ = MkExternalFunction($2); $$.loc = @$; $2.declMode = $1; declMode = defaultDeclMode; }
+ | declaration_mode function_definition { $$ = MkExternalFunction($2); $$.loc = @$; $2.declMode = $1; structDeclMode = declMode = defaultDeclMode; }
| declaration_mode class
- { $$ = MkExternalClass($2); $$.loc = @$; $2.declMode = ($1 != defaultAccess) ? $1 : privateAccess; declMode = defaultDeclMode; }
- | declaration_mode external_guess_declaration { $$ = MkExternalDeclaration($2); $$.loc = @$; $2.declMode = $1; declMode = defaultDeclMode; }
- | declaration_mode IMPORT string_literal { $$ = MkExternalImport($3, normalImport, ($1 != defaultAccess) ? $1 : privateAccess); $$.loc = @$; declMode = defaultDeclMode; }
- | declaration_mode IMPORT STATIC string_literal { $$ = MkExternalImport($4, staticImport, ($1 != defaultAccess) ? $1 : privateAccess); $$.loc = @$; declMode = defaultDeclMode; }
+ { $$ = MkExternalClass($2); $$.loc = @$; $2.declMode = ($1 != defaultAccess) ? $1 : privateAccess; structDeclMode = declMode = defaultDeclMode; }
+ | declaration_mode external_guess_declaration { $$ = MkExternalDeclaration($2); $$.loc = @$; $2.declMode = $1; structDeclMode = declMode = defaultDeclMode; }
+ | declaration_mode IMPORT string_literal { $$ = MkExternalImport($3, normalImport, ($1 != defaultAccess) ? $1 : privateAccess); $$.loc = @$; structDeclMode = declMode = defaultDeclMode; }
+ | declaration_mode IMPORT STATIC string_literal { $$ = MkExternalImport($4, staticImport, ($1 != defaultAccess) ? $1 : privateAccess); $$.loc = @$; structDeclMode = declMode = defaultDeclMode; }
| declaration_mode IMPORT identifier string_literal
{
bool isRemote = !strcmp($3.string, "remote");
$$ = MkExternalImport($4, isRemote ? remoteImport : normalImport, ($1 != defaultAccess) ? $1 : privateAccess);
$$.loc = @$;
FreeIdentifier($3);
- declMode = defaultDeclMode;
+ structDeclMode = declMode = defaultDeclMode;
if(!isRemote)
yyerror();
}
| STATIC ':' { defaultDeclMode = staticAccess; $$ = null; }
| NAMESPACE identifier { $$ = MkExternalNameSpace($2); $$.loc = @$; }
| NAMESPACE strict_type { $$ = MkExternalNameSpace(MkIdentifier($2.name)); FreeSpecifier($2); $$.loc = @$; }
- | dbtable_definition { $$ = MkExternalDBTable($1); $$.loc = @$; $1.declMode = (declMode != defaultAccess) ? declMode : privateAccess; declMode = defaultDeclMode; }
- | declaration_mode dbtable_definition { $$ = MkExternalDBTable($2); $$.loc = @$; $2.declMode = ($1 != defaultAccess) ? declMode : privateAccess; declMode = defaultDeclMode; }
+ | dbtable_definition { $$ = MkExternalDBTable($1); $$.loc = @$; $1.declMode = (declMode != defaultAccess) ? declMode : privateAccess; structDeclMode = declMode = defaultDeclMode; }
+ | declaration_mode dbtable_definition { $$ = MkExternalDBTable($2); $$.loc = @$; $2.declMode = ($1 != defaultAccess) ? declMode : privateAccess; structDeclMode = declMode = defaultDeclMode; }
;
external_declaration_error:
- class_error { $$ = MkExternalClass($1); $$.loc = $1.loc; $1.declMode = (declMode != defaultAccess) ? declMode : privateAccess; declMode = defaultDeclMode; }
+ class_error { yyerror(); $$ = MkExternalClass($1); $$.loc = $1.loc; $1.declMode = (declMode != defaultAccess) ? declMode : privateAccess; structDeclMode = declMode = defaultDeclMode; }
| external_guess_declaration_specifiers class_error
{
+ yyerror();
FreeList($1, FreeSpecifier);
$$ = MkExternalClass($2);
$$.loc = $2.loc;
$2.declMode = (declMode != defaultAccess) ? declMode : privateAccess;
- declMode = defaultDeclMode;
+ structDeclMode = declMode = defaultDeclMode;
}
- | function_definition_error { $$ = MkExternalFunction($1); $$.loc = $1.loc; $1.declMode = declMode; declMode = defaultDeclMode; }
+ | function_definition_error { yyerror(); $$ = MkExternalFunction($1); $$.loc = $1.loc; $1.declMode = declMode; structDeclMode = declMode = defaultDeclMode; }
- | declaration_mode class_error { $$ = MkExternalClass($2); $$.loc = $2.loc; $2.declMode = ($1 != defaultAccess) ? $1 : privateAccess; declMode = defaultDeclMode; }
- | declaration_mode function_definition_error { $$ = MkExternalFunction($2); $$.loc = $2.loc; $2.declMode = $1; declMode = defaultDeclMode; }
+ | declaration_mode class_error { yyerror(); $$ = MkExternalClass($2); $$.loc = $2.loc; $2.declMode = ($1 != defaultAccess) ? $1 : privateAccess; structDeclMode = declMode = defaultDeclMode; }
+ | declaration_mode function_definition_error { yyerror(); $$ = MkExternalFunction($2); $$.loc = $2.loc; $2.declMode = $1; structDeclMode = declMode = defaultDeclMode; }
| external_guess_declaration_error
- { $$ = MkExternalDeclaration($1); $$.loc = @$; $1.declMode = declMode; declMode = defaultDeclMode; }
- | declaration_mode external_guess_declaration_error { $$ = MkExternalDeclaration($2); $$.loc = @$; $2.declMode = $1; declMode = defaultDeclMode; }
+ { yyerror(); $$ = MkExternalDeclaration($1); $$.loc = @$; $1.declMode = declMode; structDeclMode = declMode = defaultDeclMode; }
+ | declaration_mode external_guess_declaration_error { yyerror(); $$ = MkExternalDeclaration($2); $$.loc = @$; $2.declMode = $1; structDeclMode = declMode = defaultDeclMode; }
;
translation_unit_error:
external_declaration { $$ = MkList(); ListAdd($$, $1); ast = $$; }
| translation_unit external_declaration { $$ = $1; ListAdd($1, $2); }
| translation_unit_error class
- { External _class = MkExternalClass($2); $$ = $1; ListAdd($1, _class); _class.loc = @2; $2.declMode = (declMode != defaultAccess) ? declMode : privateAccess; declMode = defaultDeclMode; }
+ { External _class = MkExternalClass($2); $$ = $1; ListAdd($1, _class); _class.loc = @2; $2.declMode = (declMode != defaultAccess) ? declMode : privateAccess; structDeclMode = declMode = defaultDeclMode; }
| translation_unit_error declaration_mode class
- { External _class = MkExternalClass($3); $$ = $1; ListAdd($1, _class); _class.loc = @3; $3.declMode = ($2 != defaultAccess) ? $2 : privateAccess; declMode = defaultDeclMode; }
+ { External _class = MkExternalClass($3); $$ = $1; ListAdd($1, _class); _class.loc = @3; $3.declMode = ($2 != defaultAccess) ? $2 : privateAccess; structDeclMode = declMode = defaultDeclMode; }
;
thefile:
;
dbtable_definition:
- DBTABLE string_literal identifier '{' dbfield_definition_list '}' { Symbol symbol = DeclClassAddNameSpace(globalContext.nextID++, $3.string); FreeIdentifier($3); $$ = MkDBTableDef($2, symbol, $5); }
- | DBTABLE string_literal strict_type '{' dbfield_definition_list '}' { Symbol symbol = DeclClass(globalContext.nextID++, $3.name); FreeSpecifier($3); $$ = MkDBTableDef($2, symbol, $5); }
+ DBTABLE string_literal identifier '{' dbfield_definition_list '}' { Symbol symbol = DeclClassAddNameSpace($3._class, $3.string); FreeIdentifier($3); $$ = MkDBTableDef($2, symbol, $5); }
+ | DBTABLE string_literal strict_type '{' dbfield_definition_list '}' { Symbol symbol = DeclClass($3.nsSpec, $3.name); FreeSpecifier($3); $$ = MkDBTableDef($2, symbol, $5); }
| DBTABLE string_literal '{' dbfield_definition_list '}' { $$ = MkDBTableDef($2, null, $4); }
;