Fixed bug in expression compiler.

This commit is contained in:
Claudio L 2018-07-28 23:35:47 -04:00
parent 60f49fdc83
commit 1d2beb567d
5 changed files with 11 additions and 11 deletions

View file

@ -6668,7 +6668,7 @@ void halDeferProcess(void (*function)(void))
{
int k;
for(k=0;k<3;++k) {
if(halProcesses[k]==0) halProcesses[k]=function; break;
if(halProcesses[k]==0) { halProcesses[k]=function; break; }
}
}

View file

@ -299,8 +299,8 @@ RESOURCES += \
# Clang doesn't like double const specifiers, but are needed for firmware: disable the warning
clang: QMAKE_CFLAGS += -Wno-duplicate-decl-specifier
# gcc and Clang don't like double const specifiers, but are needed for firmware: disable the warning
QMAKE_CFLAGS += -Wno-duplicate-decl-specifier

View file

@ -1330,7 +1330,7 @@ end_of_expression:
else
if(*(InfixOpTop-6)==(CMD_OVR_POW)) {
// ALWAYS PARENTHESIZE THE ARGUMENTS OF POWER
if((TI_TYPE(*(InfixOpTop-1))!=TITYPE_FUNCTION)&&(TI_TYPE(*(InfixOpTop-1))!=TITYPE_CUSTOMFUNC))
if((TI_TYPE(*(InfixOpTop-1))!=TITYPE_FUNCTION)&&(TI_TYPE(*(InfixOpTop-1))!=TITYPE_CUSTOMFUNC)&&(TI_TYPE(RetNum)!=TITYPE_OPENBRACKET))
rplDecompAppendChar('(');
}
@ -1342,14 +1342,14 @@ end_of_expression:
if(TI_PRECEDENCE(*(InfixOpTop-5))==TI_PRECEDENCE(RetNum)) {
// ALWAYS ADD PARENTHESIS, EXCEPT FOR MUL AND ADD
if( (*DecompileObject!=(CMD_OVR_MUL)) && (*DecompileObject!=(CMD_OVR_ADD))) {
if((TI_TYPE(*(InfixOpTop-5))!=TITYPE_FUNCTION)&&(TI_TYPE(*(InfixOpTop-5))!=TITYPE_CUSTOMFUNC)) // DO NOT ADD PARENTHESIS TO FUNCTION ARGUMENTS!
if((TI_TYPE(*(InfixOpTop-5))!=TITYPE_FUNCTION)&&(TI_TYPE(*(InfixOpTop-5))!=TITYPE_CUSTOMFUNC)&&(TI_TYPE(RetNum)!=TITYPE_OPENBRACKET)) // DO NOT ADD PARENTHESIS TO FUNCTION ARGUMENTS! OR BRACKET-TYPE DELIMITERS
rplDecompAppendChar('(');
}
}
else
if(TI_PRECEDENCE(*(InfixOpTop-5))<TI_PRECEDENCE(RetNum)) {
if((TI_TYPE(*(InfixOpTop-5))!=TITYPE_FUNCTION)&&(TI_TYPE(*(InfixOpTop-5))!=TITYPE_CUSTOMFUNC)) // DO NOT ADD PARENTHESIS TO FUNCTION ARGUMENTS!
if((TI_TYPE(*(InfixOpTop-5))!=TITYPE_FUNCTION)&&(TI_TYPE(*(InfixOpTop-5))!=TITYPE_CUSTOMFUNC)&&(TI_TYPE(RetNum)!=TITYPE_OPENBRACKET)) // DO NOT ADD PARENTHESIS TO FUNCTION ARGUMENTS! OR BRACKET-TYPE DELIMITERS
rplDecompAppendChar('(');
}
}

View file

@ -1194,7 +1194,7 @@ WORD rplGetIdentProp(WORDPTR ident)
BYTEPTR ptr=(BYTEPTR)(ident+1);
BYTEPTR end=(BYTEPTR)rplSkipOb(ident);
if(IDENTHASATTR(ident)) end-=4;
if(IDENTHASATTR(*ident)) end-=4;
while(end[-1]==0) --end;
// FIND THE TRIPLE DOT SEPARATOR
@ -1213,7 +1213,7 @@ WORDPTR rplMakeIdentNoProps(WORDPTR ident)
BYTEPTR ptr=(BYTEPTR)(ident+1);
BYTEPTR start=ptr,end=(BYTEPTR)rplSkipOb(ident);
if(IDENTHASATTR(ident)) end-=4;
if(IDENTHASATTR(*ident)) end-=4;
while(end[-1]==0) --end;
// FIND THE TRIPLE DOT SEPARATOR
@ -1494,7 +1494,7 @@ for(k=0;k<oldnum;++k)
}
}
} else hasdepend=0;
}
else {
// THIS DEPENDENCY TREE WAS BROKEN,CHECK IF WE SHOULD ADD THE DEPENDENCY

View file

@ -30,7 +30,7 @@
#define COMMAND_LIST \
ECMD(RULESEPARATOR,":→",MKTOKENINFO(2,TITYPE_BINARYOP_LEFT,2,14)), \
ECMD(OPENBRACKET,"(",MKTOKENINFO(1,TITYPE_OPENBRACKET,0,1)), \
ECMD(OPENBRACKET,"(",MKTOKENINFO(1,TITYPE_OPENBRACKET,0,31)), \
ECMD(CLOSEBRACKET,")",MKTOKENINFO(1,TITYPE_CLOSEBRACKET,0,31)), \
ECMD(COMMA,"",MKTOKENINFO(1,TITYPE_COMMA,0,31)), \
ECMD(SYMBEVALPRE,"",MKTOKENINFO(0,TITYPE_NOTALLOWED,1,2)), \
@ -48,7 +48,7 @@
ECMD(TOFRACTION,"→Q",MKTOKENINFO(2,TITYPE_FUNCTION,1,2)), \
ECMD(SYMBEVAL1CHK,"",MKTOKENINFO(0,TITYPE_NOTALLOWED,1,2)), \
ECMD(EQUATIONOPERATOR,"=",MKTOKENINFO(1,TITYPE_BINARYOP_LEFT,2,15)), \
ECMD(LISTOPENBRACKET,"{",MKTOKENINFO(1,TITYPE_OPENBRACKET,0,1)), \
ECMD(LISTOPENBRACKET,"{",MKTOKENINFO(1,TITYPE_OPENBRACKET,0,31)), \
ECMD(LISTCLOSEBRACKET,"}",MKTOKENINFO(1,TITYPE_CLOSEBRACKET,0,31))
// CMD(TEST,MKTOKENINFO(4,TITYPE_NOTALLOWED,1,2))