* merged fix for bug #1327

This commit is contained in:
peter 2001-02-09 23:42:49 +00:00
parent 474befaba9
commit 55d92375c4

View File

@ -1009,7 +1009,7 @@ type
Procedure T386IntelOperand.BuildReference;
var
k,l : longint;
k,l,scale : longint;
tempstr2,
tempstr,hs : string;
code : integer;
@ -1024,6 +1024,7 @@ Begin
GotPlus:=true;
GotOffset:=false;
Negative:=false;
Scale:=0;
repeat
if GotOffset and (actasmtoken<>AS_ID) then
Message(asmr_e_invalid_reference_syntax);
@ -1137,6 +1138,7 @@ Begin
Negative:=false;
GotPlus:=true;
GotStar:=false;
Scale:=0;
end;
AS_MINUS :
@ -1145,6 +1147,7 @@ Begin
Negative:=true;
GotPlus:=true;
GotStar:=false;
Scale:=0;
end;
AS_STAR : { Scaling, with eax*4 order }
@ -1163,6 +1166,12 @@ Begin
AS_REGISTER :
begin
if opr.ref.scalefactor=0 then
if scale<>0 then
begin
opr.ref.scalefactor:=scale;
scale:=0;
end
else
Message(asmr_e_wrong_scale_factor);
end;
else
@ -1173,7 +1182,7 @@ Begin
if hs<>'' then
val(hs,l,code);
opr.ref.scalefactor:=l;
if l>8 then
if l>9 then
Message(asmr_e_wrong_scale_factor);
end;
GotPlus:=false;
@ -1198,6 +1207,11 @@ Begin
if (opr.ref.index<>R_NO) then
Message(asmr_e_multiple_index);
opr.ref.index:=hreg;
if scale<>0 then
begin
opr.ref.scalefactor:=scale;
scale:=0;
end;
end
else
opr.ref.base:=hreg;
@ -1216,9 +1230,10 @@ Begin
AS_INTNUM,
AS_LPAREN : { Constant reference expression }
begin
if not GotPlus then
if not GotPlus and not GotStar then
Message(asmr_e_invalid_reference_syntax);
BuildConstSymbolExpression(true,true,l,tempstr);
if tempstr<>'' then
begin
if GotStar then
@ -1230,6 +1245,13 @@ Begin
end;
if GotStar then
opr.ref.scalefactor:=l
else if (prevasmtoken = AS_STAR) then
begin
if scale<>0 then
scale:=l*scale
else
scale:=l;
end
else
begin
if negative then
@ -1246,7 +1268,7 @@ Begin
AS_RBRACKET :
begin
if GotPlus then
if GotPlus or GotStar then
Message(asmr_e_invalid_reference_syntax);
Consume(AS_RBRACKET);
break;
@ -1921,7 +1943,10 @@ begin
end.
{
$Log$
Revision 1.7 2001-01-05 17:36:58 florian
Revision 1.8 2001-02-09 23:42:49 peter
* merged fix for bug 1327
Revision 1.7 2001/01/05 17:36:58 florian
* the info about exception frames is stored now on the stack
instead on the heap