compiler/libec: Fixed declMode issues introduced in last commit (d6b10c363a61ab5232e7...
authorJerome St-Louis <jerome@ecere.com>
Thu, 6 Feb 2014 14:25:31 +0000 (21:25 +0700)
committerJerome St-Louis <jerome@ecere.com>
Thu, 6 Feb 2014 14:25:31 +0000 (21:25 +0700)
13 files changed:
compiler/bootstrap/libec/bootstrap/ast.c
compiler/bootstrap/libec/bootstrap/grammar.c
compiler/bootstrap/libec/bootstrap/lexer.c
compiler/bootstrap/libec/bootstrap/pass0.c
compiler/bootstrap/libec/bootstrap/shortcuts.c
compiler/libec/precompiled/grammar.c
compiler/libec/src/ast.ec
compiler/libec/src/grammar.ec
compiler/libec/src/grammar.y
compiler/libec/src/lexer.ec
compiler/libec/src/lexer.l
compiler/libec/src/pass0.ec
compiler/libec/src/shortcuts.ec

index 0f7d492..fbb41b9 100644 (file)
@@ -1216,9 +1216,11 @@ strictNameSpaces = b;
 
 int declMode = 2;
 
+int structDeclMode = 2;
+
 void SetDeclMode(int accessMode)
 {
-declMode = accessMode;
+structDeclMode = declMode = accessMode;
 }
 
 int defaultDeclMode = 2;
@@ -1892,9 +1894,9 @@ struct Specifier * MkStructOrUnion(int type, struct Identifier * id, struct __ec
 struct Specifier * spec = (spec = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Specifier), spec->type = type, spec->id = id, spec);
 
 if(id && FindType(curContext, id->string))
-declMode = 0;
+structDeclMode = 0;
 spec->definitions = definitions;
-if(definitions && id && !declMode)
+if(definitions && id && structDeclMode == 0)
 {
 struct __ecereNameSpace__ecere__sys__OldList specs = 
 {
@@ -2895,7 +2897,7 @@ struct Specifier * spec;
 for(spec = (*function->specifiers).first; spec; spec = spec->next)
 if(spec->type == 0 && spec->specifier == STATIC)
 {
-declMode = 3;
+structDeclMode = declMode = 3;
 break;
 }
 }
@@ -2936,12 +2938,12 @@ struct Specifier * spec;
 for(spec = (*declaration->specifiers).first; spec; spec = spec->next)
 if(spec->type == 0 && spec->specifier == TYPEDEF)
 {
-declMode = 0;
+structDeclMode = declMode = 0;
 break;
 }
 else if(spec->type == 0 && spec->specifier == STATIC)
 {
-declMode = 3;
+structDeclMode = declMode = 3;
 break;
 }
 }
index 8bf535b..c4a591c 100644 (file)
@@ -2746,6 +2746,8 @@ extern struct Expression * MkExpCondition(struct Expression * cond, struct __ece
 
 extern struct Specifier * MkSpecifier(int specifier);
 
+extern int structDeclMode;
+
 extern int declMode;
 
 extern struct Enumerator * MkEnumerator(struct Identifier * id, struct Expression * exp);
@@ -2822,6 +2824,8 @@ extern void Compiler_Warning(char *  format, ...);
 
 extern struct Declaration * MkDeclaration(struct __ecereNameSpace__ecere__sys__OldList * specifiers, struct __ecereNameSpace__ecere__sys__OldList * initDeclarators);
 
+extern int defaultDeclMode;
+
 extern struct Declaration * MkDeclarationInst(struct Instantiation * inst);
 
 extern struct Declaration * MkDeclarationDefine(struct Identifier * id, struct Expression * exp);
@@ -2856,8 +2860,6 @@ extern void *  memcpy(void * , const void * , size_t size);
 
 extern struct External * MkExternalFunction(struct FunctionDefinition * function);
 
-extern int defaultDeclMode;
-
 extern struct External * MkExternalClass(struct ClassDefinition * _class);
 
 extern struct External * MkExternalDeclaration(struct Declaration * declaration);
@@ -7607,7 +7609,7 @@ break;
 case 623:
 {
 yyval.specifier = MkSpecifier(TYPEDEF);
-declMode = 0;
+structDeclMode = declMode = 0;
 ;
 }
 break;
@@ -7620,7 +7622,7 @@ break;
 case 625:
 {
 yyval.specifier = MkSpecifier(STATIC);
-declMode = 3;
+structDeclMode = declMode = 3;
 ;
 }
 break;
@@ -11355,19 +11357,19 @@ yyval.stmt->loc = (yyloc);
 break;
 case 1156:
 {
-yyval.declMode = declMode = 1;
+yyval.declMode = structDeclMode = declMode = 1;
 ;
 }
 break;
 case 1157:
 {
-yyval.declMode = declMode = 2;
+yyval.declMode = structDeclMode = declMode = 2;
 ;
 }
 break;
 case 1158:
 {
-yyval.declMode = declMode = 0;
+yyval.declMode = structDeclMode = declMode = 0;
 ;
 }
 break;
@@ -11387,6 +11389,7 @@ case 1161:
 {
 yyval.declaration = MkDeclaration(yyvsp[(1) - (2)].list, (((void *)0)));
 yyval.declaration->loc = (yyloc);
+structDeclMode = defaultDeclMode;
 ;
 }
 break;
@@ -11394,6 +11397,7 @@ case 1162:
 {
 yyval.declaration = MkDeclaration(yyvsp[(1) - (3)].list, yyvsp[(2) - (3)].list);
 yyval.declaration->loc = (yyloc);
+structDeclMode = defaultDeclMode;
 ;
 }
 break;
@@ -11401,12 +11405,14 @@ case 1163:
 {
 yyval.declaration = MkDeclarationInst(yyvsp[(1) - (2)].instance);
 yyval.declaration->loc = (yyloc);
+structDeclMode = defaultDeclMode;
 ;
 }
 break;
 case 1164:
 {
 yyval.declaration = yyvsp[(1) - (2)].declaration;
+structDeclMode = defaultDeclMode;
 ;
 }
 break;
@@ -11447,7 +11453,7 @@ yyval.declaration->loc = (yyloc);
 break;
 case 1170:
 {
-declMode = 3;
+structDeclMode = declMode = 3;
 yyval.declaration = MkDeclarationDefine(yyvsp[(3) - (6)].id, yyvsp[(5) - (6)].exp);
 yyval.declaration->loc = (yyloc);
 ;
@@ -11465,11 +11471,13 @@ case 1172:
 {
 yyval.declaration = MkDeclaration(yyvsp[(1) - (2)].list, (((void *)0)));
 yyval.declaration->loc = (yyloc);
+structDeclMode = defaultDeclMode;
 ;
 }
 break;
 case 1173:
 {
+structDeclMode = defaultDeclMode;
 ;
 }
 break;
@@ -11477,6 +11485,7 @@ case 1174:
 {
 yyval.declaration = MkDeclarationInst(yyvsp[(1) - (2)].instance);
 yyval.declaration->loc = (yyloc);
+structDeclMode = defaultDeclMode;
 ;
 }
 break;
@@ -11484,6 +11493,7 @@ case 1175:
 {
 yyval.declaration = MkDeclarationInst(yyvsp[(1) - (2)].instance);
 yyval.declaration->loc = (yyloc);
+structDeclMode = defaultDeclMode;
 ;
 }
 break;
@@ -11491,6 +11501,7 @@ case 1176:
 {
 yyval.declaration = MkDeclaration(yyvsp[(1) - (2)].list, yyvsp[(2) - (2)].list);
 yyval.declaration->loc = (yyloc);
+structDeclMode = defaultDeclMode;
 ;
 }
 break;
@@ -12226,7 +12237,7 @@ case 1275:
 yyval.external = MkExternalFunction(yyvsp[(1) - (1)].function);
 yyval.external->loc = (yyloc);
 yyvsp[(1) - (1)].function->declMode = declMode;
-declMode = defaultDeclMode;
+structDeclMode = declMode = defaultDeclMode;
 ;
 }
 break;
@@ -12235,7 +12246,7 @@ case 1276:
 yyval.external = MkExternalClass(yyvsp[(1) - (1)]._class);
 yyval.external->loc = (yyloc);
 yyvsp[(1) - (1)]._class->declMode = (declMode != 0) ? declMode : 2;
-declMode = defaultDeclMode;
+structDeclMode = declMode = defaultDeclMode;
 ;
 }
 break;
@@ -12244,7 +12255,7 @@ case 1277:
 yyval.external = MkExternalClass(yyvsp[(2) - (2)]._class);
 yyval.external->loc = (yyloc);
 yyvsp[(2) - (2)]._class->declMode = (declMode != 0) ? declMode : 2;
-declMode = defaultDeclMode;
+structDeclMode = declMode = defaultDeclMode;
 FreeList(yyvsp[(1) - (2)].list, FreeSpecifier);
 ;
 }
@@ -12254,7 +12265,7 @@ case 1278:
 yyval.external = MkExternalDeclaration(yyvsp[(1) - (1)].declaration);
 yyval.external->loc = (yyloc);
 yyvsp[(1) - (1)].declaration->declMode = declMode;
-declMode = defaultDeclMode;
+structDeclMode = declMode = defaultDeclMode;
 ;
 }
 break;
@@ -12295,7 +12306,7 @@ case 1283:
 yyval.external = MkExternalFunction(yyvsp[(2) - (2)].function);
 yyval.external->loc = (yyloc);
 yyvsp[(2) - (2)].function->declMode = yyvsp[(1) - (2)].declMode;
-declMode = defaultDeclMode;
+structDeclMode = declMode = defaultDeclMode;
 ;
 }
 break;
@@ -12304,7 +12315,7 @@ case 1284:
 yyval.external = MkExternalClass(yyvsp[(2) - (2)]._class);
 yyval.external->loc = (yyloc);
 yyvsp[(2) - (2)]._class->declMode = (yyvsp[(1) - (2)].declMode != 0) ? yyvsp[(1) - (2)].declMode : 2;
-declMode = defaultDeclMode;
+structDeclMode = declMode = defaultDeclMode;
 ;
 }
 break;
@@ -12313,7 +12324,7 @@ case 1285:
 yyval.external = MkExternalDeclaration(yyvsp[(2) - (2)].declaration);
 yyval.external->loc = (yyloc);
 yyvsp[(2) - (2)].declaration->declMode = yyvsp[(1) - (2)].declMode;
-declMode = defaultDeclMode;
+structDeclMode = declMode = defaultDeclMode;
 ;
 }
 break;
@@ -12321,7 +12332,7 @@ case 1286:
 {
 yyval.external = MkExternalImport(yyvsp[(3) - (3)].string, 0, (yyvsp[(1) - (3)].declMode != 0) ? yyvsp[(1) - (3)].declMode : 2);
 yyval.external->loc = (yyloc);
-declMode = defaultDeclMode;
+structDeclMode = declMode = defaultDeclMode;
 ;
 }
 break;
@@ -12329,7 +12340,7 @@ case 1287:
 {
 yyval.external = MkExternalImport(yyvsp[(4) - (4)].string, 1, (yyvsp[(1) - (4)].declMode != 0) ? yyvsp[(1) - (4)].declMode : 2);
 yyval.external->loc = (yyloc);
-declMode = defaultDeclMode;
+structDeclMode = declMode = defaultDeclMode;
 ;
 }
 break;
@@ -12340,7 +12351,7 @@ unsigned int isRemote = !strcmp(yyvsp[(3) - (4)].id->string, "remote");
 yyval.external = MkExternalImport(yyvsp[(4) - (4)].string, isRemote ? 2 : 0, (yyvsp[(1) - (4)].declMode != 0) ? yyvsp[(1) - (4)].declMode : 2);
 yyval.external->loc = (yyloc);
 FreeIdentifier(yyvsp[(3) - (4)].id);
-declMode = defaultDeclMode;
+structDeclMode = declMode = defaultDeclMode;
 if(!isRemote)
 yyerror();
 ;
@@ -12380,7 +12391,7 @@ case 1293:
 yyval.external = MkExternalDBTable(yyvsp[(1) - (1)].dbtableDef);
 yyval.external->loc = (yyloc);
 yyvsp[(1) - (1)].dbtableDef->declMode = (declMode != 0) ? declMode : 2;
-declMode = defaultDeclMode;
+structDeclMode = declMode = defaultDeclMode;
 ;
 }
 break;
@@ -12389,7 +12400,7 @@ case 1294:
 yyval.external = MkExternalDBTable(yyvsp[(2) - (2)].dbtableDef);
 yyval.external->loc = (yyloc);
 yyvsp[(2) - (2)].dbtableDef->declMode = (yyvsp[(1) - (2)].declMode != 0) ? declMode : 2;
-declMode = defaultDeclMode;
+structDeclMode = declMode = defaultDeclMode;
 ;
 }
 break;
@@ -12398,7 +12409,7 @@ case 1295:
 yyval.external = MkExternalClass(yyvsp[(1) - (1)]._class);
 yyval.external->loc = yyvsp[(1) - (1)]._class->loc;
 yyvsp[(1) - (1)]._class->declMode = (declMode != 0) ? declMode : 2;
-declMode = defaultDeclMode;
+structDeclMode = declMode = defaultDeclMode;
 ;
 }
 break;
@@ -12408,7 +12419,7 @@ FreeList(yyvsp[(1) - (2)].list, FreeSpecifier);
 yyval.external = MkExternalClass(yyvsp[(2) - (2)]._class);
 yyval.external->loc = yyvsp[(2) - (2)]._class->loc;
 yyvsp[(2) - (2)]._class->declMode = (declMode != 0) ? declMode : 2;
-declMode = defaultDeclMode;
+structDeclMode = declMode = defaultDeclMode;
 ;
 }
 break;
@@ -12417,7 +12428,7 @@ case 1297:
 yyval.external = MkExternalFunction(yyvsp[(1) - (1)].function);
 yyval.external->loc = yyvsp[(1) - (1)].function->loc;
 yyvsp[(1) - (1)].function->declMode = declMode;
-declMode = defaultDeclMode;
+structDeclMode = declMode = defaultDeclMode;
 ;
 }
 break;
@@ -12426,7 +12437,7 @@ case 1298:
 yyval.external = MkExternalClass(yyvsp[(2) - (2)]._class);
 yyval.external->loc = yyvsp[(2) - (2)]._class->loc;
 yyvsp[(2) - (2)]._class->declMode = (yyvsp[(1) - (2)].declMode != 0) ? yyvsp[(1) - (2)].declMode : 2;
-declMode = defaultDeclMode;
+structDeclMode = declMode = defaultDeclMode;
 ;
 }
 break;
@@ -12435,7 +12446,7 @@ case 1299:
 yyval.external = MkExternalFunction(yyvsp[(2) - (2)].function);
 yyval.external->loc = yyvsp[(2) - (2)].function->loc;
 yyvsp[(2) - (2)].function->declMode = yyvsp[(1) - (2)].declMode;
-declMode = defaultDeclMode;
+structDeclMode = declMode = defaultDeclMode;
 ;
 }
 break;
@@ -12444,7 +12455,7 @@ case 1300:
 yyval.external = MkExternalDeclaration(yyvsp[(1) - (1)].declaration);
 yyval.external->loc = (yyloc);
 yyvsp[(1) - (1)].declaration->declMode = declMode;
-declMode = defaultDeclMode;
+structDeclMode = declMode = defaultDeclMode;
 ;
 }
 break;
@@ -12453,7 +12464,7 @@ case 1301:
 yyval.external = MkExternalDeclaration(yyvsp[(2) - (2)].declaration);
 yyval.external->loc = (yyloc);
 yyvsp[(2) - (2)].declaration->declMode = yyvsp[(1) - (2)].declMode;
-declMode = defaultDeclMode;
+structDeclMode = declMode = defaultDeclMode;
 ;
 }
 break;
@@ -12502,7 +12513,7 @@ yyval.list = yyvsp[(1) - (2)].list;
 ListAdd(yyvsp[(1) - (2)].list, _class);
 _class->loc = (yylsp[(2) - (2)]);
 yyvsp[(2) - (2)]._class->declMode = (declMode != 0) ? declMode : 2;
-declMode = defaultDeclMode;
+structDeclMode = declMode = defaultDeclMode;
 ;
 }
 break;
@@ -12514,7 +12525,7 @@ yyval.list = yyvsp[(1) - (3)].list;
 ListAdd(yyvsp[(1) - (3)].list, _class);
 _class->loc = (yylsp[(3) - (3)]);
 yyvsp[(3) - (3)]._class->declMode = (yyvsp[(2) - (3)].declMode != 0) ? yyvsp[(2) - (3)].declMode : 2;
-declMode = defaultDeclMode;
+structDeclMode = declMode = defaultDeclMode;
 ;
 }
 break;
index a550eec..30f1417 100644 (file)
@@ -723,6 +723,8 @@ extern int defaultDeclMode;
 
 extern int declMode;
 
+extern int structDeclMode;
+
 extern void __ecereNameSpace__ecere__com__eInstance_DecRef(struct __ecereNameSpace__ecere__com__Instance * instance);
 
 int yylex(void)
@@ -1795,7 +1797,7 @@ case 173LL:
 while(include_stack_ptr && !fileStack[include_stack_ptr - 1])
 {
 --include_stack_ptr;
-defaultDeclMode = declMode = declModeStack[include_stack_ptr];
+defaultDeclMode = declMode = structDeclMode = declModeStack[include_stack_ptr];
 }
 if(--include_stack_ptr < 0)
 {
@@ -1811,7 +1813,7 @@ yylloc = locStack[include_stack_ptr];
 type_yylloc = locStack[include_stack_ptr];
 expression_yylloc = locStack[include_stack_ptr];
 yy_switch_to_buffer(include_stack[include_stack_ptr]);
-defaultDeclMode = declMode = declModeStack[include_stack_ptr];
+defaultDeclMode = declMode = structDeclMode = declModeStack[include_stack_ptr];
 }
 }
 break;
@@ -2425,14 +2427,14 @@ char extension[17];
 defaultDeclMode = declModeStack[include_stack_ptr] = declMode;
 __ecereNameSpace__ecere__sys__GetExtension(fileName, extension);
 if(!strcmp(extension, "c") || !strcmp(extension, "h"))
-declMode = defaultDeclMode = 0;
+declMode = defaultDeclMode = structDeclMode = 0;
 fileStack[include_stack_ptr] = (((void *)0));
 include_stack_ptr++;
 }
 else if(inOut == 2)
 {
 include_stack_ptr--;
-defaultDeclMode = declMode = declModeStack[include_stack_ptr];
+defaultDeclMode = declMode = structDeclMode = declModeStack[include_stack_ptr];
 }
 yylloc.end.charPos = 1;
 yylloc.end.line = lineNumber;
@@ -2518,7 +2520,7 @@ yylloc.start.pos = yylloc.end.pos = 0;
 yylloc.start.included = yylloc.end.included = GetIncludeFileID(includeFile);
 __ecereNameSpace__ecere__sys__GetExtension(includeFile, extension);
 if(!strcmp(extension, "c") || !strcmp(extension, "h"))
-declMode = defaultDeclMode = 0;
+declMode = defaultDeclMode = structDeclMode = 0;
 fileInput = file;
 yy_switch_to_buffer(yy_create_buffer(fileInput, 16384));
 yy_start = 1 + 2 * (0);
@@ -2645,7 +2647,7 @@ memcpy(locStack, ((struct LexerBackup *)(((char *)backup + __ecereClass_LexerBac
 memcpy(declModeStack, ((struct LexerBackup *)(((char *)backup + __ecereClass_LexerBackup->offset)))->declModeStack, sizeof declModeStack);
 include_stack_ptr = ((struct LexerBackup *)(((char *)backup + __ecereClass_LexerBackup->offset)))->include_stack_ptr;
 defaultDeclMode = ((struct LexerBackup *)(((char *)backup + __ecereClass_LexerBackup->offset)))->defaultDeclMode;
-declMode = ((struct LexerBackup *)(((char *)backup + __ecereClass_LexerBackup->offset)))->declMode;
+declMode = structDeclMode = ((struct LexerBackup *)(((char *)backup + __ecereClass_LexerBackup->offset)))->declMode;
 yy_current_buffer = ((struct LexerBackup *)(((char *)backup + __ecereClass_LexerBackup->offset)))->buffer;
 yy_n_chars = ((struct LexerBackup *)(((char *)backup + __ecereClass_LexerBackup->offset)))->yy_n_chars;
 yytext = ((struct LexerBackup *)(((char *)backup + __ecereClass_LexerBackup->offset)))->yytext;
index 85c7051..005edc2 100644 (file)
@@ -1631,6 +1631,8 @@ extern void FreeExternal(struct External * external);
 
 extern int declMode;
 
+extern int structDeclMode;
+
 extern char *  strstr(const char * , const char * );
 
 extern char *  sourceFile;
@@ -1967,7 +1969,7 @@ struct External * external;
 
 strcpy(classDataStructName, "__ecereClassData_");
 FullClassNameCat(classDataStructName, symbol->string, 0x0);
-declMode = 0;
+declMode = structDeclMode = 0;
 ListAdd(specs, MkStructOrUnion(3, MkIdentifier(classDataStructName), classDataList));
 external = MkExternalDeclaration(MkDeclaration(specs, (((void *)0))));
 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert(defs, after, external);
index bd89443..4183deb 100644 (file)
@@ -625,6 +625,8 @@ extern size_t strlen(const char * );
 
 extern int declMode;
 
+extern int structDeclMode;
+
 extern void resetScanner();
 
 extern struct Declarator * MkStructDeclarator(struct Declarator * declarator, struct Expression * exp);
@@ -675,7 +677,7 @@ __internal_ClassInst ? __internal_ClassInst->_vTbl : __ecereClass___ecereNameSpa
 echoOn = 0x0;
 parseTypeError = 0x0;
 parsedType = (((void *)0));
-declMode = (int)0;
+declMode = structDeclMode = 0;
 resetScanner();
 {
 unsigned int oldParsingType = parsingType;
@@ -684,7 +686,7 @@ parsingType = 0x1;
 type_yyparse();
 parsingType = oldParsingType;
 }
-declMode = 2;
+declMode = structDeclMode = 2;
 type_yydebug = 0x0;
 (__ecereNameSpace__ecere__com__eInstance_DecRef(fileInput), fileInput = 0);
 if(parsedType)
index 39759d2..0e999a3 100644 (file)
@@ -2744,6 +2744,8 @@ extern struct Expression * MkExpCondition(struct Expression * cond, struct __ece
 
 extern struct Specifier * MkSpecifier(int specifier);
 
+extern int structDeclMode;
+
 extern int declMode;
 
 extern struct Enumerator * MkEnumerator(struct Identifier * id, struct Expression * exp);
@@ -7605,7 +7607,7 @@ break;
 case 623:
 {
 yyval.specifier = MkSpecifier(TYPEDEF);
-declMode = 0;
+structDeclMode = declMode = 0;
 ;
 }
 break;
@@ -7618,7 +7620,7 @@ break;
 case 625:
 {
 yyval.specifier = MkSpecifier(STATIC);
-declMode = 3;
+structDeclMode = declMode = 3;
 ;
 }
 break;
@@ -11353,19 +11355,19 @@ yyval.stmt->loc = (yyloc);
 break;
 case 1156:
 {
-yyval.declMode = declMode = 1;
+yyval.declMode = structDeclMode = declMode = 1;
 ;
 }
 break;
 case 1157:
 {
-yyval.declMode = declMode = 2;
+yyval.declMode = structDeclMode = declMode = 2;
 ;
 }
 break;
 case 1158:
 {
-yyval.declMode = declMode = 0;
+yyval.declMode = structDeclMode = declMode = 0;
 ;
 }
 break;
@@ -11385,8 +11387,7 @@ case 1161:
 {
 yyval.declaration = MkDeclaration(yyvsp[(1) - (2)].list, (((void *)0)));
 yyval.declaration->loc = (yyloc);
-if(declMode == 0)
-declMode = defaultDeclMode;
+structDeclMode = defaultDeclMode;
 ;
 }
 break;
@@ -11394,8 +11395,7 @@ case 1162:
 {
 yyval.declaration = MkDeclaration(yyvsp[(1) - (3)].list, yyvsp[(2) - (3)].list);
 yyval.declaration->loc = (yyloc);
-if(declMode == 0)
-declMode = defaultDeclMode;
+structDeclMode = defaultDeclMode;
 ;
 }
 break;
@@ -11403,16 +11403,14 @@ case 1163:
 {
 yyval.declaration = MkDeclarationInst(yyvsp[(1) - (2)].instance);
 yyval.declaration->loc = (yyloc);
-if(declMode == 0)
-declMode = defaultDeclMode;
+structDeclMode = defaultDeclMode;
 ;
 }
 break;
 case 1164:
 {
 yyval.declaration = yyvsp[(1) - (2)].declaration;
-if(declMode == 0)
-declMode = defaultDeclMode;
+structDeclMode = defaultDeclMode;
 ;
 }
 break;
@@ -11453,7 +11451,7 @@ yyval.declaration->loc = (yyloc);
 break;
 case 1170:
 {
-declMode = 3;
+structDeclMode = declMode = 3;
 yyval.declaration = MkDeclarationDefine(yyvsp[(3) - (6)].id, yyvsp[(5) - (6)].exp);
 yyval.declaration->loc = (yyloc);
 ;
@@ -11471,15 +11469,13 @@ case 1172:
 {
 yyval.declaration = MkDeclaration(yyvsp[(1) - (2)].list, (((void *)0)));
 yyval.declaration->loc = (yyloc);
-if(declMode == 0)
-declMode = defaultDeclMode;
+structDeclMode = defaultDeclMode;
 ;
 }
 break;
 case 1173:
 {
-if(declMode == 0)
-declMode = defaultDeclMode;
+structDeclMode = defaultDeclMode;
 ;
 }
 break;
@@ -11487,8 +11483,7 @@ case 1174:
 {
 yyval.declaration = MkDeclarationInst(yyvsp[(1) - (2)].instance);
 yyval.declaration->loc = (yyloc);
-if(declMode == 0)
-declMode = defaultDeclMode;
+structDeclMode = defaultDeclMode;
 ;
 }
 break;
@@ -11496,8 +11491,7 @@ case 1175:
 {
 yyval.declaration = MkDeclarationInst(yyvsp[(1) - (2)].instance);
 yyval.declaration->loc = (yyloc);
-if(declMode == 0)
-declMode = defaultDeclMode;
+structDeclMode = defaultDeclMode;
 ;
 }
 break;
@@ -11505,8 +11499,7 @@ case 1176:
 {
 yyval.declaration = MkDeclaration(yyvsp[(1) - (2)].list, yyvsp[(2) - (2)].list);
 yyval.declaration->loc = (yyloc);
-if(declMode == 0)
-declMode = defaultDeclMode;
+structDeclMode = defaultDeclMode;
 ;
 }
 break;
@@ -12242,7 +12235,7 @@ case 1275:
 yyval.external = MkExternalFunction(yyvsp[(1) - (1)].function);
 yyval.external->loc = (yyloc);
 yyvsp[(1) - (1)].function->declMode = declMode;
-declMode = defaultDeclMode;
+structDeclMode = declMode = defaultDeclMode;
 ;
 }
 break;
@@ -12251,7 +12244,7 @@ case 1276:
 yyval.external = MkExternalClass(yyvsp[(1) - (1)]._class);
 yyval.external->loc = (yyloc);
 yyvsp[(1) - (1)]._class->declMode = (declMode != 0) ? declMode : 2;
-declMode = defaultDeclMode;
+structDeclMode = declMode = defaultDeclMode;
 ;
 }
 break;
@@ -12260,7 +12253,7 @@ case 1277:
 yyval.external = MkExternalClass(yyvsp[(2) - (2)]._class);
 yyval.external->loc = (yyloc);
 yyvsp[(2) - (2)]._class->declMode = (declMode != 0) ? declMode : 2;
-declMode = defaultDeclMode;
+structDeclMode = declMode = defaultDeclMode;
 FreeList(yyvsp[(1) - (2)].list, FreeSpecifier);
 ;
 }
@@ -12270,7 +12263,7 @@ case 1278:
 yyval.external = MkExternalDeclaration(yyvsp[(1) - (1)].declaration);
 yyval.external->loc = (yyloc);
 yyvsp[(1) - (1)].declaration->declMode = declMode;
-declMode = defaultDeclMode;
+structDeclMode = declMode = defaultDeclMode;
 ;
 }
 break;
@@ -12311,7 +12304,7 @@ case 1283:
 yyval.external = MkExternalFunction(yyvsp[(2) - (2)].function);
 yyval.external->loc = (yyloc);
 yyvsp[(2) - (2)].function->declMode = yyvsp[(1) - (2)].declMode;
-declMode = defaultDeclMode;
+structDeclMode = declMode = defaultDeclMode;
 ;
 }
 break;
@@ -12320,7 +12313,7 @@ case 1284:
 yyval.external = MkExternalClass(yyvsp[(2) - (2)]._class);
 yyval.external->loc = (yyloc);
 yyvsp[(2) - (2)]._class->declMode = (yyvsp[(1) - (2)].declMode != 0) ? yyvsp[(1) - (2)].declMode : 2;
-declMode = defaultDeclMode;
+structDeclMode = declMode = defaultDeclMode;
 ;
 }
 break;
@@ -12329,7 +12322,7 @@ case 1285:
 yyval.external = MkExternalDeclaration(yyvsp[(2) - (2)].declaration);
 yyval.external->loc = (yyloc);
 yyvsp[(2) - (2)].declaration->declMode = yyvsp[(1) - (2)].declMode;
-declMode = defaultDeclMode;
+structDeclMode = declMode = defaultDeclMode;
 ;
 }
 break;
@@ -12337,7 +12330,7 @@ case 1286:
 {
 yyval.external = MkExternalImport(yyvsp[(3) - (3)].string, 0, (yyvsp[(1) - (3)].declMode != 0) ? yyvsp[(1) - (3)].declMode : 2);
 yyval.external->loc = (yyloc);
-declMode = defaultDeclMode;
+structDeclMode = declMode = defaultDeclMode;
 ;
 }
 break;
@@ -12345,7 +12338,7 @@ case 1287:
 {
 yyval.external = MkExternalImport(yyvsp[(4) - (4)].string, 1, (yyvsp[(1) - (4)].declMode != 0) ? yyvsp[(1) - (4)].declMode : 2);
 yyval.external->loc = (yyloc);
-declMode = defaultDeclMode;
+structDeclMode = declMode = defaultDeclMode;
 ;
 }
 break;
@@ -12356,7 +12349,7 @@ unsigned int isRemote = !strcmp(yyvsp[(3) - (4)].id->string, "remote");
 yyval.external = MkExternalImport(yyvsp[(4) - (4)].string, isRemote ? 2 : 0, (yyvsp[(1) - (4)].declMode != 0) ? yyvsp[(1) - (4)].declMode : 2);
 yyval.external->loc = (yyloc);
 FreeIdentifier(yyvsp[(3) - (4)].id);
-declMode = defaultDeclMode;
+structDeclMode = declMode = defaultDeclMode;
 if(!isRemote)
 yyerror();
 ;
@@ -12396,7 +12389,7 @@ case 1293:
 yyval.external = MkExternalDBTable(yyvsp[(1) - (1)].dbtableDef);
 yyval.external->loc = (yyloc);
 yyvsp[(1) - (1)].dbtableDef->declMode = (declMode != 0) ? declMode : 2;
-declMode = defaultDeclMode;
+structDeclMode = declMode = defaultDeclMode;
 ;
 }
 break;
@@ -12405,7 +12398,7 @@ case 1294:
 yyval.external = MkExternalDBTable(yyvsp[(2) - (2)].dbtableDef);
 yyval.external->loc = (yyloc);
 yyvsp[(2) - (2)].dbtableDef->declMode = (yyvsp[(1) - (2)].declMode != 0) ? declMode : 2;
-declMode = defaultDeclMode;
+structDeclMode = declMode = defaultDeclMode;
 ;
 }
 break;
@@ -12414,7 +12407,7 @@ case 1295:
 yyval.external = MkExternalClass(yyvsp[(1) - (1)]._class);
 yyval.external->loc = yyvsp[(1) - (1)]._class->loc;
 yyvsp[(1) - (1)]._class->declMode = (declMode != 0) ? declMode : 2;
-declMode = defaultDeclMode;
+structDeclMode = declMode = defaultDeclMode;
 ;
 }
 break;
@@ -12424,7 +12417,7 @@ FreeList(yyvsp[(1) - (2)].list, FreeSpecifier);
 yyval.external = MkExternalClass(yyvsp[(2) - (2)]._class);
 yyval.external->loc = yyvsp[(2) - (2)]._class->loc;
 yyvsp[(2) - (2)]._class->declMode = (declMode != 0) ? declMode : 2;
-declMode = defaultDeclMode;
+structDeclMode = declMode = defaultDeclMode;
 ;
 }
 break;
@@ -12433,7 +12426,7 @@ case 1297:
 yyval.external = MkExternalFunction(yyvsp[(1) - (1)].function);
 yyval.external->loc = yyvsp[(1) - (1)].function->loc;
 yyvsp[(1) - (1)].function->declMode = declMode;
-declMode = defaultDeclMode;
+structDeclMode = declMode = defaultDeclMode;
 ;
 }
 break;
@@ -12442,7 +12435,7 @@ case 1298:
 yyval.external = MkExternalClass(yyvsp[(2) - (2)]._class);
 yyval.external->loc = yyvsp[(2) - (2)]._class->loc;
 yyvsp[(2) - (2)]._class->declMode = (yyvsp[(1) - (2)].declMode != 0) ? yyvsp[(1) - (2)].declMode : 2;
-declMode = defaultDeclMode;
+structDeclMode = declMode = defaultDeclMode;
 ;
 }
 break;
@@ -12451,7 +12444,7 @@ case 1299:
 yyval.external = MkExternalFunction(yyvsp[(2) - (2)].function);
 yyval.external->loc = yyvsp[(2) - (2)].function->loc;
 yyvsp[(2) - (2)].function->declMode = yyvsp[(1) - (2)].declMode;
-declMode = defaultDeclMode;
+structDeclMode = declMode = defaultDeclMode;
 ;
 }
 break;
@@ -12460,7 +12453,7 @@ case 1300:
 yyval.external = MkExternalDeclaration(yyvsp[(1) - (1)].declaration);
 yyval.external->loc = (yyloc);
 yyvsp[(1) - (1)].declaration->declMode = declMode;
-declMode = defaultDeclMode;
+structDeclMode = declMode = defaultDeclMode;
 ;
 }
 break;
@@ -12469,7 +12462,7 @@ case 1301:
 yyval.external = MkExternalDeclaration(yyvsp[(2) - (2)].declaration);
 yyval.external->loc = (yyloc);
 yyvsp[(2) - (2)].declaration->declMode = yyvsp[(1) - (2)].declMode;
-declMode = defaultDeclMode;
+structDeclMode = declMode = defaultDeclMode;
 ;
 }
 break;
@@ -12518,7 +12511,7 @@ yyval.list = yyvsp[(1) - (2)].list;
 ListAdd(yyvsp[(1) - (2)].list, _class);
 _class->loc = (yylsp[(2) - (2)]);
 yyvsp[(2) - (2)]._class->declMode = (declMode != 0) ? declMode : 2;
-declMode = defaultDeclMode;
+structDeclMode = declMode = defaultDeclMode;
 ;
 }
 break;
@@ -12530,7 +12523,7 @@ yyval.list = yyvsp[(1) - (3)].list;
 ListAdd(yyvsp[(1) - (3)].list, _class);
 _class->loc = (yylsp[(3) - (3)]);
 yyvsp[(3) - (3)]._class->declMode = (yyvsp[(2) - (3)].declMode != 0) ? yyvsp[(2) - (3)].declMode : 2;
-declMode = defaultDeclMode;
+structDeclMode = declMode = defaultDeclMode;
 ;
 }
 break;
index 4bf3f73..119a43d 100644 (file)
@@ -12,7 +12,9 @@ bool strictNameSpaces;
 public void SetStrictNameSpaces(bool b) { strictNameSpaces = b; }
 
 AccessMode declMode = privateAccess;
-public void SetDeclMode(AccessMode accessMode) { declMode = accessMode; }
+AccessMode structDeclMode = privateAccess;
+
+public void SetDeclMode(AccessMode accessMode) { structDeclMode = declMode = accessMode; }
 AccessMode defaultDeclMode = privateAccess;
 public void SetDefaultDeclMode(AccessMode accessMode) { defaultDeclMode = accessMode; }
 
@@ -487,9 +489,9 @@ Specifier MkStructOrUnion(SpecifierType type, Identifier id, OldList definitions
 {
    Specifier spec { type = type, id = id };
    if(id && FindType(curContext, id.string))
-      declMode = defaultAccess;
+      structDeclMode = defaultAccess;
    spec.definitions = definitions;
-   if(definitions && id && !declMode)
+   if(definitions && id && structDeclMode == defaultAccess)
    {
       OldList specs { };
       Symbol symbol;
@@ -1259,7 +1261,7 @@ External MkExternalFunction(FunctionDefinition function)
       for(spec = function.specifiers->first; spec; spec = spec.next)
          if(spec.type == baseSpecifier && spec.specifier == STATIC)
          {
-            declMode = staticAccess;
+            structDeclMode = declMode = staticAccess;
             break;
          }
    }
@@ -1304,12 +1306,12 @@ External MkExternalDeclaration(Declaration declaration)
       for(spec = declaration.specifiers->first; spec; spec = spec.next)
          if(spec.type == baseSpecifier && spec.specifier == TYPEDEF)
          {
-            declMode = defaultAccess;
+            structDeclMode = declMode = defaultAccess;
             break;
          }
          else if(spec.type == baseSpecifier && spec.specifier == STATIC)
          {
-            declMode = staticAccess;
+            structDeclMode = declMode = staticAccess;
             break;
          }
    }
index 5a32e1d..79543a4 100644 (file)
@@ -17632,7 +17632,7 @@ yyreduce:
 
 /* Line 1464 of yacc.c  */
 #line 2108 "grammar.y"
-    { (yyval.specifier) = MkSpecifier(TYPEDEF); declMode = defaultAccess; ;}
+    { (yyval.specifier) = MkSpecifier(TYPEDEF); structDeclMode = declMode = defaultAccess; ;}
     break;
 
   case 624:
@@ -17646,7 +17646,7 @@ yyreduce:
 
 /* Line 1464 of yacc.c  */
 #line 2110 "grammar.y"
-    { (yyval.specifier) = MkSpecifier(STATIC); declMode = staticAccess; ;}
+    { (yyval.specifier) = MkSpecifier(STATIC); structDeclMode = declMode = staticAccess; ;}
     break;
 
   case 626:
@@ -21401,21 +21401,21 @@ yyreduce:
 
 /* Line 1464 of yacc.c  */
 #line 3396 "grammar.y"
-    { (yyval.declMode) = declMode = publicAccess; ;}
+    { (yyval.declMode) = structDeclMode = declMode = publicAccess; ;}
     break;
 
   case 1157:
 
 /* Line 1464 of yacc.c  */
 #line 3397 "grammar.y"
-    { (yyval.declMode) = declMode = privateAccess; ;}
+    { (yyval.declMode) = structDeclMode = declMode = privateAccess; ;}
     break;
 
   case 1158:
 
 /* Line 1464 of yacc.c  */
 #line 3398 "grammar.y"
-    { (yyval.declMode) = declMode = defaultAccess; ;}
+    { (yyval.declMode) = structDeclMode = declMode = defaultAccess; ;}
     break;
 
   case 1159:
@@ -21436,28 +21436,28 @@ yyreduce:
 
 /* Line 1464 of yacc.c  */
 #line 3407 "grammar.y"
-    { (yyval.declaration) = MkDeclaration((yyvsp[(1) - (2)].list), null); (yyval.declaration).loc = (yyloc); if(declMode == defaultAccess) declMode = defaultDeclMode; ;}
+    { (yyval.declaration) = MkDeclaration((yyvsp[(1) - (2)].list), null); (yyval.declaration).loc = (yyloc); structDeclMode = defaultDeclMode; ;}
     break;
 
   case 1162:
 
 /* Line 1464 of yacc.c  */
 #line 3408 "grammar.y"
-    { (yyval.declaration) = MkDeclaration((yyvsp[(1) - (3)].list), (yyvsp[(2) - (3)].list)); (yyval.declaration).loc = (yyloc); if(declMode == defaultAccess) declMode = defaultDeclMode; ;}
+    { (yyval.declaration) = MkDeclaration((yyvsp[(1) - (3)].list), (yyvsp[(2) - (3)].list)); (yyval.declaration).loc = (yyloc); structDeclMode = defaultDeclMode; ;}
     break;
 
   case 1163:
 
 /* Line 1464 of yacc.c  */
 #line 3409 "grammar.y"
-    { (yyval.declaration) = MkDeclarationInst((yyvsp[(1) - (2)].instance)); (yyval.declaration).loc = (yyloc); if(declMode == defaultAccess) declMode = defaultDeclMode; ;}
+    { (yyval.declaration) = MkDeclarationInst((yyvsp[(1) - (2)].instance)); (yyval.declaration).loc = (yyloc); structDeclMode = defaultDeclMode; ;}
     break;
 
   case 1164:
 
 /* Line 1464 of yacc.c  */
 #line 3410 "grammar.y"
-    { (yyval.declaration) = (yyvsp[(1) - (2)].declaration); if(declMode == defaultAccess) declMode = defaultDeclMode; ;}
+    { (yyval.declaration) = (yyvsp[(1) - (2)].declaration); structDeclMode = defaultDeclMode; ;}
     break;
 
   case 1165:
@@ -21499,7 +21499,7 @@ yyreduce:
 
 /* Line 1464 of yacc.c  */
 #line 3420 "grammar.y"
-    { declMode = staticAccess; (yyval.declaration) = MkDeclarationDefine((yyvsp[(3) - (6)].id), (yyvsp[(5) - (6)].exp)); (yyval.declaration).loc = (yyloc); ;}
+    { structDeclMode = declMode = staticAccess; (yyval.declaration) = MkDeclarationDefine((yyvsp[(3) - (6)].id), (yyvsp[(5) - (6)].exp)); (yyval.declaration).loc = (yyloc); ;}
     break;
 
   case 1171:
@@ -21513,35 +21513,35 @@ yyreduce:
 
 /* Line 1464 of yacc.c  */
 #line 3428 "grammar.y"
-    { (yyval.declaration) = MkDeclaration((yyvsp[(1) - (2)].list), null); (yyval.declaration).loc = (yyloc); if(declMode == defaultAccess) declMode = defaultDeclMode; ;}
+    { (yyval.declaration) = MkDeclaration((yyvsp[(1) - (2)].list), null); (yyval.declaration).loc = (yyloc); structDeclMode = defaultDeclMode; ;}
     break;
 
   case 1173:
 
 /* Line 1464 of yacc.c  */
 #line 3429 "grammar.y"
-    { if(declMode == defaultAccess) declMode = defaultDeclMode;  ;}
+    { structDeclMode = defaultDeclMode;  ;}
     break;
 
   case 1174:
 
 /* Line 1464 of yacc.c  */
 #line 3431 "grammar.y"
-    { (yyval.declaration) = MkDeclarationInst((yyvsp[(1) - (2)].instance)); (yyval.declaration).loc = (yyloc); if(declMode == defaultAccess) declMode = defaultDeclMode; ;}
+    { (yyval.declaration) = MkDeclarationInst((yyvsp[(1) - (2)].instance)); (yyval.declaration).loc = (yyloc); structDeclMode = defaultDeclMode; ;}
     break;
 
   case 1175:
 
 /* Line 1464 of yacc.c  */
 #line 3432 "grammar.y"
-    { (yyval.declaration) = MkDeclarationInst((yyvsp[(1) - (2)].instance)); (yyval.declaration).loc = (yyloc); if(declMode == defaultAccess) declMode = defaultDeclMode; ;}
+    { (yyval.declaration) = MkDeclarationInst((yyvsp[(1) - (2)].instance)); (yyval.declaration).loc = (yyloc); structDeclMode = defaultDeclMode; ;}
     break;
 
   case 1176:
 
 /* Line 1464 of yacc.c  */
 #line 3433 "grammar.y"
-    { (yyval.declaration) = MkDeclaration((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].list)); (yyval.declaration).loc = (yyloc); if(declMode == defaultAccess) declMode = defaultDeclMode; ;}
+    { (yyval.declaration) = MkDeclaration((yyvsp[(1) - (2)].list), (yyvsp[(2) - (2)].list)); (yyval.declaration).loc = (yyloc); structDeclMode = defaultDeclMode; ;}
     break;
 
   case 1177:
@@ -22234,28 +22234,28 @@ yyreduce:
 
 /* Line 1464 of yacc.c  */
 #line 3624 "grammar.y"
-    { (yyval.external) = MkExternalFunction((yyvsp[(1) - (1)].function)); (yyval.external).loc = (yyloc); (yyvsp[(1) - (1)].function).declMode = declMode; declMode = defaultDeclMode; ;}
+    { (yyval.external) = MkExternalFunction((yyvsp[(1) - (1)].function)); (yyval.external).loc = (yyloc); (yyvsp[(1) - (1)].function).declMode = declMode; structDeclMode = declMode = defaultDeclMode; ;}
     break;
 
   case 1276:
 
 /* Line 1464 of yacc.c  */
 #line 3626 "grammar.y"
-    { (yyval.external) = MkExternalClass((yyvsp[(1) - (1)]._class));  (yyval.external).loc = (yyloc); (yyvsp[(1) - (1)]._class).declMode = (declMode != defaultAccess) ? declMode : privateAccess; declMode = defaultDeclMode; ;}
+    { (yyval.external) = MkExternalClass((yyvsp[(1) - (1)]._class));  (yyval.external).loc = (yyloc); (yyvsp[(1) - (1)]._class).declMode = (declMode != defaultAccess) ? declMode : privateAccess; structDeclMode = declMode = defaultDeclMode; ;}
     break;
 
   case 1277:
 
 /* Line 1464 of yacc.c  */
 #line 3629 "grammar.y"
-    { (yyval.external) = MkExternalClass((yyvsp[(2) - (2)]._class));  (yyval.external).loc = (yyloc); (yyvsp[(2) - (2)]._class).declMode = (declMode != defaultAccess) ? declMode : privateAccess; declMode = defaultDeclMode; FreeList((yyvsp[(1) - (2)].list), FreeSpecifier); ;}
+    { (yyval.external) = MkExternalClass((yyvsp[(2) - (2)]._class));  (yyval.external).loc = (yyloc); (yyvsp[(2) - (2)]._class).declMode = (declMode != defaultAccess) ? declMode : privateAccess; structDeclMode = declMode = defaultDeclMode; FreeList((yyvsp[(1) - (2)].list), FreeSpecifier); ;}
     break;
 
   case 1278:
 
 /* Line 1464 of yacc.c  */
 #line 3632 "grammar.y"
-    { (yyval.external) = MkExternalDeclaration((yyvsp[(1) - (1)].declaration));  (yyval.external).loc = (yyloc); (yyvsp[(1) - (1)].declaration).declMode = declMode; declMode = defaultDeclMode; ;}
+    { (yyval.external) = MkExternalDeclaration((yyvsp[(1) - (1)].declaration));  (yyval.external).loc = (yyloc); (yyvsp[(1) - (1)].declaration).declMode = declMode; structDeclMode = declMode = defaultDeclMode; ;}
     break;
 
   case 1279:
@@ -22297,35 +22297,35 @@ yyreduce:
 
 /* Line 1464 of yacc.c  */
 #line 3647 "grammar.y"
-    { (yyval.external) = MkExternalFunction((yyvsp[(2) - (2)].function)); (yyval.external).loc = (yyloc); (yyvsp[(2) - (2)].function).declMode = (yyvsp[(1) - (2)].declMode); declMode = defaultDeclMode; ;}
+    { (yyval.external) = MkExternalFunction((yyvsp[(2) - (2)].function)); (yyval.external).loc = (yyloc); (yyvsp[(2) - (2)].function).declMode = (yyvsp[(1) - (2)].declMode); structDeclMode = declMode = defaultDeclMode; ;}
     break;
 
   case 1284:
 
 /* Line 1464 of yacc.c  */
 #line 3649 "grammar.y"
-    { (yyval.external) = MkExternalClass((yyvsp[(2) - (2)]._class));  (yyval.external).loc = (yyloc); (yyvsp[(2) - (2)]._class).declMode = ((yyvsp[(1) - (2)].declMode) != defaultAccess) ? (yyvsp[(1) - (2)].declMode) : privateAccess; declMode = defaultDeclMode; ;}
+    { (yyval.external) = MkExternalClass((yyvsp[(2) - (2)]._class));  (yyval.external).loc = (yyloc); (yyvsp[(2) - (2)]._class).declMode = ((yyvsp[(1) - (2)].declMode) != defaultAccess) ? (yyvsp[(1) - (2)].declMode) : privateAccess; structDeclMode = declMode = defaultDeclMode; ;}
     break;
 
   case 1285:
 
 /* Line 1464 of yacc.c  */
 #line 3650 "grammar.y"
-    { (yyval.external) = MkExternalDeclaration((yyvsp[(2) - (2)].declaration)); (yyval.external).loc = (yyloc); (yyvsp[(2) - (2)].declaration).declMode = (yyvsp[(1) - (2)].declMode); declMode = defaultDeclMode; ;}
+    { (yyval.external) = MkExternalDeclaration((yyvsp[(2) - (2)].declaration)); (yyval.external).loc = (yyloc); (yyvsp[(2) - (2)].declaration).declMode = (yyvsp[(1) - (2)].declMode); structDeclMode = declMode = defaultDeclMode; ;}
     break;
 
   case 1286:
 
 /* Line 1464 of yacc.c  */
 #line 3651 "grammar.y"
-    { (yyval.external) = MkExternalImport((yyvsp[(3) - (3)].string), normalImport, ((yyvsp[(1) - (3)].declMode) != defaultAccess) ? (yyvsp[(1) - (3)].declMode) : privateAccess);  (yyval.external).loc = (yyloc); declMode = defaultDeclMode; ;}
+    { (yyval.external) = MkExternalImport((yyvsp[(3) - (3)].string), normalImport, ((yyvsp[(1) - (3)].declMode) != defaultAccess) ? (yyvsp[(1) - (3)].declMode) : privateAccess);  (yyval.external).loc = (yyloc); structDeclMode = declMode = defaultDeclMode; ;}
     break;
 
   case 1287:
 
 /* Line 1464 of yacc.c  */
 #line 3652 "grammar.y"
-    { (yyval.external) = MkExternalImport((yyvsp[(4) - (4)].string), staticImport, ((yyvsp[(1) - (4)].declMode) != defaultAccess) ? (yyvsp[(1) - (4)].declMode) : privateAccess);  (yyval.external).loc = (yyloc); declMode = defaultDeclMode; ;}
+    { (yyval.external) = MkExternalImport((yyvsp[(4) - (4)].string), staticImport, ((yyvsp[(1) - (4)].declMode) != defaultAccess) ? (yyvsp[(1) - (4)].declMode) : privateAccess);  (yyval.external).loc = (yyloc); structDeclMode = declMode = defaultDeclMode; ;}
     break;
 
   case 1288:
@@ -22337,7 +22337,7 @@ yyreduce:
       (yyval.external) = MkExternalImport((yyvsp[(4) - (4)].string), isRemote ? remoteImport : normalImport, ((yyvsp[(1) - (4)].declMode) != defaultAccess) ? (yyvsp[(1) - (4)].declMode) : privateAccess);
       (yyval.external).loc = (yyloc);
       FreeIdentifier((yyvsp[(3) - (4)].id));
-      declMode = defaultDeclMode;
+      structDeclMode = declMode = defaultDeclMode;
       if(!isRemote)
          yyerror();
    ;}
@@ -22375,21 +22375,21 @@ yyreduce:
 
 /* Line 1464 of yacc.c  */
 #line 3667 "grammar.y"
-    { (yyval.external) = MkExternalDBTable((yyvsp[(1) - (1)].dbtableDef)); (yyval.external).loc = (yyloc);  (yyvsp[(1) - (1)].dbtableDef).declMode = (declMode != defaultAccess) ? declMode : privateAccess; declMode = defaultDeclMode; ;}
+    { (yyval.external) = MkExternalDBTable((yyvsp[(1) - (1)].dbtableDef)); (yyval.external).loc = (yyloc);  (yyvsp[(1) - (1)].dbtableDef).declMode = (declMode != defaultAccess) ? declMode : privateAccess; structDeclMode = declMode = defaultDeclMode; ;}
     break;
 
   case 1294:
 
 /* Line 1464 of yacc.c  */
 #line 3668 "grammar.y"
-    { (yyval.external) = MkExternalDBTable((yyvsp[(2) - (2)].dbtableDef)); (yyval.external).loc = (yyloc);  (yyvsp[(2) - (2)].dbtableDef).declMode = ((yyvsp[(1) - (2)].declMode) != defaultAccess) ? declMode : privateAccess; declMode = defaultDeclMode; ;}
+    { (yyval.external) = MkExternalDBTable((yyvsp[(2) - (2)].dbtableDef)); (yyval.external).loc = (yyloc);  (yyvsp[(2) - (2)].dbtableDef).declMode = ((yyvsp[(1) - (2)].declMode) != defaultAccess) ? declMode : privateAccess; structDeclMode = declMode = defaultDeclMode; ;}
     break;
 
   case 1295:
 
 /* Line 1464 of yacc.c  */
 #line 3672 "grammar.y"
-    { (yyval.external) = MkExternalClass((yyvsp[(1) - (1)]._class));  (yyval.external).loc = (yyvsp[(1) - (1)]._class).loc; (yyvsp[(1) - (1)]._class).declMode = (declMode != defaultAccess) ? declMode : privateAccess; declMode = defaultDeclMode; ;}
+    { (yyval.external) = MkExternalClass((yyvsp[(1) - (1)]._class));  (yyval.external).loc = (yyvsp[(1) - (1)]._class).loc; (yyvsp[(1) - (1)]._class).declMode = (declMode != defaultAccess) ? declMode : privateAccess; structDeclMode = declMode = defaultDeclMode; ;}
     break;
 
   case 1296:
@@ -22401,7 +22401,7 @@ yyreduce:
       (yyval.external) = MkExternalClass((yyvsp[(2) - (2)]._class));
       (yyval.external).loc = (yyvsp[(2) - (2)]._class).loc;
       (yyvsp[(2) - (2)]._class).declMode = (declMode != defaultAccess) ? declMode : privateAccess;
-      declMode = defaultDeclMode;
+      structDeclMode = declMode = defaultDeclMode;
    ;}
     break;
 
@@ -22409,35 +22409,35 @@ yyreduce:
 
 /* Line 1464 of yacc.c  */
 #line 3681 "grammar.y"
-    { (yyval.external) = MkExternalFunction((yyvsp[(1) - (1)].function)); (yyval.external).loc = (yyvsp[(1) - (1)].function).loc;  (yyvsp[(1) - (1)].function).declMode = declMode; declMode = defaultDeclMode; ;}
+    { (yyval.external) = MkExternalFunction((yyvsp[(1) - (1)].function)); (yyval.external).loc = (yyvsp[(1) - (1)].function).loc;  (yyvsp[(1) - (1)].function).declMode = declMode; structDeclMode = declMode = defaultDeclMode; ;}
     break;
 
   case 1298:
 
 /* Line 1464 of yacc.c  */
 #line 3683 "grammar.y"
-    { (yyval.external) = MkExternalClass((yyvsp[(2) - (2)]._class));  (yyval.external).loc = (yyvsp[(2) - (2)]._class).loc; (yyvsp[(2) - (2)]._class).declMode = ((yyvsp[(1) - (2)].declMode) != defaultAccess) ? (yyvsp[(1) - (2)].declMode) : privateAccess; declMode = defaultDeclMode; ;}
+    { (yyval.external) = MkExternalClass((yyvsp[(2) - (2)]._class));  (yyval.external).loc = (yyvsp[(2) - (2)]._class).loc; (yyvsp[(2) - (2)]._class).declMode = ((yyvsp[(1) - (2)].declMode) != defaultAccess) ? (yyvsp[(1) - (2)].declMode) : privateAccess; structDeclMode = declMode = defaultDeclMode; ;}
     break;
 
   case 1299:
 
 /* Line 1464 of yacc.c  */
 #line 3684 "grammar.y"
-    { (yyval.external) = MkExternalFunction((yyvsp[(2) - (2)].function)); (yyval.external).loc = (yyvsp[(2) - (2)].function).loc; (yyvsp[(2) - (2)].function).declMode = (yyvsp[(1) - (2)].declMode); declMode = defaultDeclMode; ;}
+    { (yyval.external) = MkExternalFunction((yyvsp[(2) - (2)].function)); (yyval.external).loc = (yyvsp[(2) - (2)].function).loc; (yyvsp[(2) - (2)].function).declMode = (yyvsp[(1) - (2)].declMode); structDeclMode = declMode = defaultDeclMode; ;}
     break;
 
   case 1300:
 
 /* Line 1464 of yacc.c  */
 #line 3687 "grammar.y"
-    { (yyval.external) = MkExternalDeclaration((yyvsp[(1) - (1)].declaration));  (yyval.external).loc = (yyloc); (yyvsp[(1) - (1)].declaration).declMode = declMode; declMode = defaultDeclMode; ;}
+    { (yyval.external) = MkExternalDeclaration((yyvsp[(1) - (1)].declaration));  (yyval.external).loc = (yyloc); (yyvsp[(1) - (1)].declaration).declMode = declMode; structDeclMode = declMode = defaultDeclMode; ;}
     break;
 
   case 1301:
 
 /* Line 1464 of yacc.c  */
 #line 3688 "grammar.y"
-    { (yyval.external) = MkExternalDeclaration((yyvsp[(2) - (2)].declaration)); (yyval.external).loc = (yyloc); (yyvsp[(2) - (2)].declaration).declMode = (yyvsp[(1) - (2)].declMode); declMode = defaultDeclMode; ;}
+    { (yyval.external) = MkExternalDeclaration((yyvsp[(2) - (2)].declaration)); (yyval.external).loc = (yyloc); (yyvsp[(2) - (2)].declaration).declMode = (yyvsp[(1) - (2)].declMode); structDeclMode = declMode = defaultDeclMode; ;}
     break;
 
   case 1302:
@@ -22479,14 +22479,14 @@ yyreduce:
 
 /* Line 1464 of yacc.c  */
 #line 3703 "grammar.y"
-    { External _class = MkExternalClass((yyvsp[(2) - (2)]._class)); (yyval.list) = (yyvsp[(1) - (2)].list); ListAdd((yyvsp[(1) - (2)].list), _class); _class.loc = (yylsp[(2) - (2)]);  (yyvsp[(2) - (2)]._class).declMode = (declMode != defaultAccess) ? declMode : privateAccess; declMode = defaultDeclMode; ;}
+    { External _class = MkExternalClass((yyvsp[(2) - (2)]._class)); (yyval.list) = (yyvsp[(1) - (2)].list); ListAdd((yyvsp[(1) - (2)].list), _class); _class.loc = (yylsp[(2) - (2)]);  (yyvsp[(2) - (2)]._class).declMode = (declMode != defaultAccess) ? declMode : privateAccess; structDeclMode = declMode = defaultDeclMode; ;}
     break;
 
   case 1310:
 
 /* Line 1464 of yacc.c  */
 #line 3705 "grammar.y"
-    { External _class = MkExternalClass((yyvsp[(3) - (3)]._class)); (yyval.list) = (yyvsp[(1) - (3)].list); ListAdd((yyvsp[(1) - (3)].list), _class); _class.loc = (yylsp[(3) - (3)]);  (yyvsp[(3) - (3)]._class).declMode = ((yyvsp[(2) - (3)].declMode) != defaultAccess) ? (yyvsp[(2) - (3)].declMode) : privateAccess; declMode = defaultDeclMode; ;}
+    { External _class = MkExternalClass((yyvsp[(3) - (3)]._class)); (yyval.list) = (yyvsp[(1) - (3)].list); ListAdd((yyvsp[(1) - (3)].list), _class); _class.loc = (yylsp[(3) - (3)]);  (yyvsp[(3) - (3)]._class).declMode = ((yyvsp[(2) - (3)].declMode) != defaultAccess) ? (yyvsp[(2) - (3)].declMode) : privateAccess; structDeclMode = declMode = defaultDeclMode; ;}
     break;
 
   case 1313:
index 13e4466..adea488 100644 (file)
@@ -2105,9 +2105,9 @@ storage_class_specifier:
        ;
 
 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; }
        | AUTO          { $$ = MkSpecifier(AUTO); }
        | REGISTER      { $$ = MkSpecifier(REGISTER); }
    | RESTRICT      { $$ = MkSpecifier(RESTRICT); }
@@ -3393,9 +3393,9 @@ labeled_statement_error:
        ;
 
 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:
@@ -3404,10 +3404,10 @@ member_access:
    ;
 
 declaration:
-         declaration_specifiers ';'                       { $$ = MkDeclaration($1, null); $$.loc = @$; if(declMode == defaultAccess) declMode = defaultDeclMode; }
-       | declaration_specifiers init_declarator_list ';'  { $$ = MkDeclaration($1, $2); $$.loc = @$; if(declMode == defaultAccess) declMode = defaultDeclMode; }
-   | instantiation_named ';'                          { $$ = MkDeclarationInst($1); $$.loc = @$; if(declMode == defaultAccess) declMode = defaultDeclMode; }
-   | declaration_error ';'                            { $$ = $1; if(declMode == defaultAccess) declMode = defaultDeclMode; }
+         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:
@@ -3417,7 +3417,7 @@ 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:
@@ -3425,12 +3425,12 @@ external_guess_declaration_error:
        ;
 
 declaration_error:
-     declaration_specifiers error                       { $$ = MkDeclaration($1, null); $$.loc = @$; if(declMode == defaultAccess) declMode = defaultDeclMode; }
-   | declaration_error error                            { if(declMode == defaultAccess) declMode = defaultDeclMode;  }
+     declaration_specifiers error                       { $$ = MkDeclaration($1, null); $$.loc = @$; structDeclMode = defaultDeclMode; }
+   | declaration_error error                            { structDeclMode = defaultDeclMode;  }
 
-   | instantiation_named_error error                   { $$ = MkDeclarationInst($1); $$.loc = @$; if(declMode == defaultAccess) declMode = defaultDeclMode; }
-   | instantiation_named error                         { $$ = MkDeclarationInst($1); $$.loc = @$; if(declMode == defaultAccess) declMode = defaultDeclMode; }
-   | declaration_specifiers init_declarator_list_error  { $$ = MkDeclaration($1, $2); $$.loc = @$; if(declMode == defaultAccess) declMode = defaultDeclMode; }
+   | 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:
@@ -3621,15 +3621,15 @@ string_literal:
    ;
 
 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
@@ -3644,19 +3644,19 @@ external_declaration:
 
    | ';' { $$ = 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();
    }
@@ -3664,28 +3664,28 @@ external_declaration:
    | 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               { $$ = MkExternalClass($1);  $$.loc = $1.loc; $1.declMode = (declMode != defaultAccess) ? declMode : privateAccess; structDeclMode = declMode = defaultDeclMode; }
    | external_guess_declaration_specifiers class_error
    {
       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 { $$ = 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               { $$ = MkExternalClass($2);  $$.loc = $2.loc; $2.declMode = ($1 != defaultAccess) ? $1 : privateAccess; structDeclMode = declMode = defaultDeclMode; }
+   | declaration_mode function_definition_error { $$ = 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; }
+      { $$ = MkExternalDeclaration($1);  $$.loc = @$; $1.declMode = declMode; structDeclMode = declMode = defaultDeclMode; }
+   | declaration_mode external_guess_declaration_error         { $$ = MkExternalDeclaration($2); $$.loc = @$; $2.declMode = $1; structDeclMode = declMode = defaultDeclMode; }
    ;
 
 translation_unit_error:
@@ -3700,9 +3700,9 @@ translation_unit:
          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:
index f03eacb..b0f0c9b 100644 (file)
@@ -2283,7 +2283,7 @@ case YY_STATE_EOF(INITIAL):
       while(include_stack_ptr && !fileStack[include_stack_ptr-1])
       {
          --include_stack_ptr;
-         defaultDeclMode = declMode = declModeStack[include_stack_ptr];
+         defaultDeclMode = declMode = structDeclMode = declModeStack[include_stack_ptr];
       }
 
       if ( --include_stack_ptr < 0 )
@@ -2300,7 +2300,7 @@ case YY_STATE_EOF(INITIAL):
          type_yylloc = locStack[include_stack_ptr];
          expression_yylloc = locStack[include_stack_ptr];
          yy_switch_to_buffer(include_stack[include_stack_ptr] );
-         defaultDeclMode = declMode = declModeStack[include_stack_ptr];
+         defaultDeclMode = declMode = structDeclMode = declModeStack[include_stack_ptr];
       }
    }
        YY_BREAK
@@ -3340,7 +3340,7 @@ int preprocessor()
 
                   GetExtension(fileName, extension);
                   if(!strcmp(extension, "c") || !strcmp(extension, "h"))
-                     declMode = defaultDeclMode = defaultAccess;
+                     declMode = defaultDeclMode = structDeclMode = defaultAccess;
 
                   fileStack[include_stack_ptr] = null;
                   include_stack_ptr++;
@@ -3348,7 +3348,7 @@ int preprocessor()
                else if(inOut == 2)
                {
                   include_stack_ptr--;
-                  defaultDeclMode = declMode = declModeStack[include_stack_ptr];
+                  defaultDeclMode = declMode = structDeclMode = declModeStack[include_stack_ptr];
                }
 
                yylloc.end.charPos = 1;
@@ -3452,7 +3452,7 @@ int preprocessor()
 
             GetExtension(includeFile, extension);
             if(!strcmp(extension, "c") || !strcmp(extension, "h"))
-               declMode = defaultDeclMode = defaultAccess;
+               declMode = defaultDeclMode = structDeclMode = defaultAccess;
 
             fileInput = file;
             yy_switch_to_buffer( yy_create_buffer( fileInput, YY_BUF_SIZE ) );
@@ -3587,7 +3587,7 @@ void popLexer(LexerBackup backup)
    memcpy(declModeStack, backup.declModeStack, sizeof(declModeStack));
    include_stack_ptr = backup.include_stack_ptr;
    defaultDeclMode = backup.defaultDeclMode;
-   declMode = backup.declMode;
+   declMode = structDeclMode = backup.declMode;
 
    // yy_switch_to_buffer(backup.buffer);
    yy_current_buffer = backup.buffer;
index 6e41c66..7ca5897 100644 (file)
@@ -274,7 +274,7 @@ L?\"(\\.|[^\\"])*\"     { return(STRING_LITERAL); }
       while(include_stack_ptr && !fileStack[include_stack_ptr-1])
       {
          --include_stack_ptr;
-         defaultDeclMode = declMode = declModeStack[include_stack_ptr];
+         defaultDeclMode = declMode = structDeclMode = declModeStack[include_stack_ptr];
       }
 
       if ( --include_stack_ptr < 0 )
@@ -291,7 +291,7 @@ L?\"(\\.|[^\\"])*\"     { return(STRING_LITERAL); }
          type_yylloc = locStack[include_stack_ptr];
          expression_yylloc = locStack[include_stack_ptr];
          yy_switch_to_buffer(include_stack[include_stack_ptr] );
-         defaultDeclMode = declMode = declModeStack[include_stack_ptr];
+         defaultDeclMode = declMode = structDeclMode = declModeStack[include_stack_ptr];
       }
    }
 
@@ -428,7 +428,7 @@ int preprocessor()
 
                   GetExtension(fileName, extension);
                   if(!strcmp(extension, "c") || !strcmp(extension, "h"))
-                     declMode = defaultDeclMode = defaultAccess;
+                     declMode = defaultDeclMode = structDeclMode = defaultAccess;
 
                   fileStack[include_stack_ptr] = null;
                   include_stack_ptr++;
@@ -436,7 +436,7 @@ int preprocessor()
                else if(inOut == 2)
                {
                   include_stack_ptr--;
-                  defaultDeclMode = declMode = declModeStack[include_stack_ptr];
+                  defaultDeclMode = declMode = structDeclMode = declModeStack[include_stack_ptr];
                }
 
                yylloc.end.charPos = 1;
@@ -540,7 +540,7 @@ int preprocessor()
 
             GetExtension(includeFile, extension);
             if(!strcmp(extension, "c") || !strcmp(extension, "h"))
-               declMode = defaultDeclMode = defaultAccess;
+               declMode = defaultDeclMode = structDeclMode = defaultAccess;
 
             fileInput = file;
             yy_switch_to_buffer( yy_create_buffer( fileInput, YY_BUF_SIZE ) );
@@ -675,7 +675,7 @@ void popLexer(LexerBackup backup)
    memcpy(declModeStack, backup.declModeStack, sizeof(declModeStack));
    include_stack_ptr = backup.include_stack_ptr;
    defaultDeclMode = backup.defaultDeclMode;
-   declMode = backup.declMode;
+   declMode = structDeclMode = backup.declMode;
 
    // yy_switch_to_buffer(backup.buffer);
    yy_current_buffer = backup.buffer;
index 8342ecb..5ecc287 100644 (file)
@@ -793,7 +793,7 @@ static void ProcessClass(ClassType classType, OldList definitions, Symbol symbol
          strcpy(classDataStructName, "__ecereClassData_");
          FullClassNameCat(classDataStructName, symbol.string, false);
 
-         declMode = defaultAccess;
+         declMode = structDeclMode = defaultAccess;
          ListAdd(specs, MkStructOrUnion(structSpecifier, MkIdentifier(classDataStructName), classDataList));
          external = MkExternalDeclaration(MkDeclaration(specs, null));
          defs.Insert(after, external);
index 2e3951e..45ce470 100644 (file)
@@ -184,7 +184,7 @@ public Declarator SpecDeclFromString(char * string, OldList * specs, Declarator
    echoOn = false;
    parseTypeError = false;
    parsedType = null;
-   declMode = 0;
+   declMode = structDeclMode = defaultAccess;
    resetScanner();
    {
       bool oldParsingType = parsingType;
@@ -192,7 +192,7 @@ public Declarator SpecDeclFromString(char * string, OldList * specs, Declarator
       type_yyparse();
       parsingType = oldParsingType;
    }
-   declMode = privateAccess;
+   declMode = structDeclMode = privateAccess;
 
    type_yydebug = false;