diff --git a/compiler/libpc300/libpc300.sln b/compiler/libpc300/libpc300.sln index 9ceb4d8b..96b5d99b 100755 --- a/compiler/libpc300/libpc300.sln +++ b/compiler/libpc300/libpc300.sln @@ -6,6 +6,7 @@ EndProject Global GlobalSection(SolutionConfiguration) = preSolution Debug = Debug + Debug32 = Debug32 Release = Release Release32 = Release32 Release64 = Release64 @@ -13,6 +14,8 @@ Global GlobalSection(ProjectConfiguration) = postSolution {19B72687-080B-437A-917A-12AEB0031635}.Debug.ActiveCfg = Release|Win32 {19B72687-080B-437A-917A-12AEB0031635}.Debug.Build.0 = Release|Win32 + {19B72687-080B-437A-917A-12AEB0031635}.Debug32.ActiveCfg = Debug32|Win32 + {19B72687-080B-437A-917A-12AEB0031635}.Debug32.Build.0 = Debug32|Win32 {19B72687-080B-437A-917A-12AEB0031635}.Release.ActiveCfg = Release|Win32 {19B72687-080B-437A-917A-12AEB0031635}.Release.Build.0 = Release|Win32 {19B72687-080B-437A-917A-12AEB0031635}.Release32.ActiveCfg = Release32|Win32 diff --git a/compiler/libpc300/libpc300.vcproj b/compiler/libpc300/libpc300.vcproj index cf897b05..165649e7 100755 --- a/compiler/libpc300/libpc300.vcproj +++ b/compiler/libpc300/libpc300.vcproj @@ -200,6 +200,55 @@ + + + + + + + + + + + + + + + @@ -247,9 +296,6 @@ - - diff --git a/compiler/libpc300/sc1.c b/compiler/libpc300/sc1.c index 2fff3a93..a3ac9292 100755 --- a/compiler/libpc300/sc1.c +++ b/compiler/libpc300/sc1.c @@ -3178,7 +3178,7 @@ static int newfunc(char *firstname,int firsttag,int fpublic,int fstatic,int stoc if ((sym->usage & (uPROTOTYPED | uREAD))==uREAD && sym->tag!=0) { int curstatus=sc_status; sc_status=statWRITE; /* temporarily set status to WRITE, so the warning isn't blocked */ - error(208); + //error(208); //this is silly, it should be caught the first pass sc_status=curstatus; sc_reparse=TRUE; /* must add another pass to "initial scan" phase */ } /* if */ diff --git a/compiler/libpc300/sc3.c b/compiler/libpc300/sc3.c index dbc28e44..786ae2b0 100755 --- a/compiler/libpc300/sc3.c +++ b/compiler/libpc300/sc3.c @@ -964,8 +964,12 @@ static int hier14(value *lval1) check_userop(NULL,lval2.tag,lval3.tag,2,&lval3,&lval2.tag); store(&lval3); /* now, store the expression result */ } /* if */ - if (!oper && !matchtag(lval3.tag,lval2.tag,TRUE)) - error(213); /* tagname mismatch (if "oper", warning already given in plunge2()) */ + if (!oper) { /* tagname mismatch (if "oper", warning already given in plunge2()) */ + if (lval3.sym && !matchtag(lval3.sym->tag, lval2.tag, TRUE)) + error(213); + else if (!lval3.sym && !matchtag(lval3.tag, lval2.tag, TRUE)) + error(213); + } if (lval3.sym) markusage(lval3.sym,uWRITTEN); sideeffect=TRUE;