diff --git a/compiler/i386/ra386int.pas b/compiler/i386/ra386int.pas index 9e6b47edaa..e4def0aff0 100644 --- a/compiler/i386/ra386int.pas +++ b/compiler/i386/ra386int.pas @@ -1289,6 +1289,8 @@ var l : longint; tempstr : string; begin + if not (opr.typ in [OPR_NONE,OPR_CONSTANT]) then + Message(asmr_e_invalid_operand_type); BuildConstSymbolExpression(true,false,l,tempstr); if tempstr<>'' then begin @@ -1298,8 +1300,13 @@ begin end else begin - opr.typ:=OPR_CONSTANT; - opr.val:=l; + if opr.typ=OPR_NONE then + begin + opr.typ:=OPR_CONSTANT; + opr.val:=l; + end + else + inc(opr.val,l); end; end; @@ -1353,6 +1360,11 @@ Begin inc(opr.val,toffset); OPR_REFERENCE : inc(opr.ref.offset,toffset); + OPR_NONE : + begin + opr.typ:=OPR_CONSTANT; + opr.val:=toffset; + end; else internalerror(200309222); end; @@ -1372,8 +1384,6 @@ Begin AS_NOT, AS_STRING : Begin - if not (opr.typ in [OPR_NONE,OPR_CONSTANT]) then - Message(asmr_e_invalid_operand_type); BuildConstant; end; @@ -1461,7 +1471,6 @@ Begin else { is it a normal variable ? } Begin - InitRef; expr:=actasmpattern; Consume(AS_ID); { typecasting? } @@ -1478,15 +1487,18 @@ Begin end; end else - if not SetupVar(expr,false) then - Begin - { not a variable, check special variables.. } - if expr = 'SELF' then - SetupSelf - else - Message1(sym_e_unknown_id,expr); - expr:=''; - end; + begin + InitRef; + if not SetupVar(expr,false) then + Begin + { not a variable, check special variables.. } + if expr = 'SELF' then + SetupSelf + else + Message1(sym_e_unknown_id,expr); + expr:=''; + end; + end; end; end; end; @@ -1894,7 +1906,10 @@ finalization end. { $Log$ - Revision 1.59 2003-10-24 17:39:03 peter + Revision 1.60 2003-10-27 15:29:43 peter + * fixed trec.field to return constant + + Revision 1.59 2003/10/24 17:39:03 peter * more intel parser updates Revision 1.58 2003/10/23 17:19:44 peter