compiler: fix assembler constant expressions evaluation + fully enable appropriate test

git-svn-id: trunk@14475 -
This commit is contained in:
paul 2009-12-25 05:26:48 +00:00
parent 3fff90de80
commit 56bd6e830e
2 changed files with 9 additions and 7 deletions

View File

@ -378,12 +378,14 @@ begin
Case _Operator OF
'(' :
Priority:=0;
'+', '-' :
Priority:=1;
'*', '/','%','<','>' :
Priority:=2;
'|','&','^','~' :
'|','^','~' : // the lowest priority: OR, XOR, NOT
Priority:=0;
'&' : // bigger priority: AND
Priority:=1;
'+', '-' : // bigger priority: +, -
Priority:=2;
'*', '/','%','<','>' : // the highest priority: *, /, MOD, SHL, SHR
Priority:=3;
else
Message(asmr_e_expr_illegal);
end;
@ -440,7 +442,7 @@ begin
end;
{ if start of expression then surely a prefix }
{ or if previous char was also an operator }
if (I = 1) or (not (Expr[I-1] in ['0'..'9','(',')'])) then
if (I = 1) or (not (Expr[I-1] in ['0'..'9',')'])) then
OpPush(Expr[I],true)
else
Begin

View File

@ -9,7 +9,7 @@
function Expression1: Integer;
asm
// mov eax, 4 * 3 - 2 + (-1) / 2
mov eax, 4 * 3 - 2 + (-1) / 2
end;
function Expression2: Integer;