* bugfixes from fix branch

This commit is contained in:
carl 1998-09-24 17:54:15 +00:00
parent 53794c1c88
commit a4630b4f2b

View File

@ -1036,7 +1036,7 @@ end;
Var Offset: longint; operandnum: byte):boolean;
{ search and returns the offset of records/objects of the base }
{ with field name setup in field. }
{ returns 0 if not found. }
{ returns FALSE if not found. }
{ used when base is a variable or a typed constant name. }
var
sym:psym;
@ -1081,6 +1081,38 @@ end;
GetVarOffset := TRUE;
Exit;
end;
end
else
if (sym^.typ=varsym) and (pvarsym(sym)^.definition^.deftype=objectdef) then
begin
if assigned(pobjectdef(pvarsym(sym)^.definition)^.publicsyms) then
begin
p:=pvarsym(pobjectdef(pvarsym(sym)^.definition)^.publicsyms^.search(field));
if assigned(pvarsym(p)) then
Begin
Offset := pvarsym(p)^.address;
{ the current size is NOT overriden if it already }
{ exists, such as in the case of a byte ptr, in }
{ front of the identifier. }
if (instr.operands[operandnum].size = S_NO) or (instr.operands[operandnum].overriden = FALSE) then
Begin
case pvarsym(p)^.getsize of
1: instr.operands[operandnum].size := S_B;
2: instr.operands[operandnum].size := S_W{ could be S_IS};
4: instr.operands[operandnum].size := S_L{ could be S_IL or S_FS};
8: instr.operands[operandnum].size := S_IQ{ could be S_D or S_FL};
extended_size: instr.operands[operandnum].size := S_FX;
else
{ this is in the case where the instruction is LEA }
{ or something like that, in that case size is not }
{ important. }
instr.operands[operandnum].size := S_NO;
end; { end case }
end;
GetVarOffset := TRUE;
Exit;
end;
end;
end;
end
else
@ -1120,10 +1152,42 @@ end;
end;
Exit;
end;
end; { endif }
end; {endif }
end; { endif }
end;
end { endif }
else
if (sym^.typ=varsym) and (pvarsym(sym)^.definition^.deftype=objectdef) then
begin
if assigned(pobjectdef(pvarsym(sym)^.definition)^.publicsyms) then
begin
p:=pvarsym(pobjectdef(pvarsym(sym)^.definition)^.publicsyms^.search(field));
if assigned(pvarsym(p)) then
Begin
Offset := pvarsym(p)^.address;
{ the current size is NOT overriden if it already }
{ exists, such as in the case of a byte ptr, in }
{ front of the identifier. }
if (instr.operands[operandnum].size = S_NO) or (instr.operands[operandnum].overriden = FALSE) then
Begin
case pvarsym(p)^.getsize of
1: instr.operands[operandnum].size := S_B;
2: instr.operands[operandnum].size := S_W{ could be S_IS};
4: instr.operands[operandnum].size := S_L{ could be S_IL or S_FS};
8: instr.operands[operandnum].size := S_IQ{ could be S_D or S_FL};
extended_size: instr.operands[operandnum].size := S_FX;
else
{ this is in the case where the instruction is LEA }
{ or something like that, in that case size is not }
{ important. }
instr.operands[operandnum].size := S_NO;
end; { end case }
end;
GetVarOffset := TRUE;
Exit;
end;
end;
end;
end;
end;
end; { endif assigned(aktprocsym) }
{ not found.. .now look for global variables. }
getsym(base,false);
@ -1190,6 +1254,38 @@ end;
Exit;
end;
end
else
if (sym^.typ=varsym) and (pvarsym(sym)^.definition^.deftype=objectdef) then
begin
if assigned(pobjectdef(pvarsym(sym)^.definition)^.publicsyms) then
begin
p:=pvarsym(pobjectdef(pvarsym(sym)^.definition)^.publicsyms^.search(field));
if assigned(pvarsym(p)) then
Begin
Offset := pvarsym(p)^.address;
{ the current size is NOT overriden if it already }
{ exists, such as in the case of a byte ptr, in }
{ front of the identifier. }
if (instr.operands[operandnum].size = S_NO) or (instr.operands[operandnum].overriden = FALSE) then
Begin
case pvarsym(p)^.getsize of
1: instr.operands[operandnum].size := S_B;
2: instr.operands[operandnum].size := S_W{ could be S_IS};
4: instr.operands[operandnum].size := S_L{ could be S_IL or S_FS};
8: instr.operands[operandnum].size := S_IQ{ could be S_D or S_FL};
extended_size: instr.operands[operandnum].size := S_FX;
else
{ this is in the case where the instruction is LEA }
{ or something like that, in that case size is not }
{ important. }
instr.operands[operandnum].size := S_NO;
end; { end case }
end;
GetVarOffset := TRUE;
Exit;
end;
end;
end;
end; { end looking for global variables .. }
end;
@ -1776,7 +1872,13 @@ end;
end.
{
$Log$
Revision 1.8 1998-08-27 00:43:06 carl
Revision 1.9 1998-09-24 17:54:15 carl
* bugfixes from fix branch
Revision 1.8.2.1 1998/09/24 17:46:25 carl
* support for objects in asm statements
Revision 1.8 1998/08/27 00:43:06 carl
+} now record offsets searches set the operand sizes
Revision 1.7 1998/08/18 20:51:32 peter