|
@@ -944,6 +944,8 @@ procedure TOperand.InitRef;
|
|
{*********************************************************************}
|
|
{*********************************************************************}
|
|
var
|
|
var
|
|
l : aint;
|
|
l : aint;
|
|
|
|
+ hsymofs : aint;
|
|
|
|
+ hsymbol : tasmsymbol;
|
|
reg : tregister;
|
|
reg : tregister;
|
|
Begin
|
|
Begin
|
|
case opr.typ of
|
|
case opr.typ of
|
|
@@ -968,6 +970,15 @@ Begin
|
|
Fillchar(opr.ref,sizeof(treference),0);
|
|
Fillchar(opr.ref,sizeof(treference),0);
|
|
opr.Ref.base:=reg;
|
|
opr.Ref.base:=reg;
|
|
end;
|
|
end;
|
|
|
|
+ OPR_SYMBOL :
|
|
|
|
+ begin
|
|
|
|
+ hsymbol:=opr.symbol;
|
|
|
|
+ hsymofs:=opr.symofs;
|
|
|
|
+ opr.typ:=OPR_REFERENCE;
|
|
|
|
+ Fillchar(opr.ref,sizeof(treference),0);
|
|
|
|
+ opr.ref.symbol:=hsymbol;
|
|
|
|
+ opr.ref.offset:=hsymofs;
|
|
|
|
+ end;
|
|
else
|
|
else
|
|
begin
|
|
begin
|
|
Message(asmr_e_invalid_operand_type);
|
|
Message(asmr_e_invalid_operand_type);
|
|
@@ -1346,6 +1357,16 @@ Begin
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
+ { Support Field.Type as typecasting }
|
|
|
|
+ if (st=nil) and (s<>'') then
|
|
|
|
+ begin
|
|
|
|
+ asmsearchsym(s,sym,srsymtable);
|
|
|
|
+ if assigned(sym) and (sym.typ=typesym) then
|
|
|
|
+ begin
|
|
|
|
+ size:=ttypesym(sym).restype.def.size;
|
|
|
|
+ s:=''
|
|
|
|
+ end;
|
|
|
|
+ end;
|
|
GetRecordOffsetSize:=(s='');
|
|
GetRecordOffsetSize:=(s='');
|
|
end;
|
|
end;
|
|
|
|
|