* farpointerdef moved into pointerdef.is_far

This commit is contained in:
peter 1999-04-26 18:29:54 +00:00
parent c36956fffe
commit 49786e5fe5
8 changed files with 58 additions and 57 deletions

View File

@ -312,7 +312,7 @@ implementation
p^.location.reference.base:=hr; p^.location.reference.base:=hr;
end; end;
end; end;
if p^.left^.resulttype^.deftype=farpointerdef then if ppointerdef(p^.left^.resulttype)^.is_far then
p^.location.reference.segment:=R_FS; p^.location.reference.segment:=R_FS;
end; end;
@ -635,7 +635,7 @@ implementation
emitrangecheck(p^.right,p^.left^.resulttype); emitrangecheck(p^.right,p^.left^.resulttype);
end; end;
end; end;
case p^.right^.location.loc of case p^.right^.location.loc of
LOC_REGISTER: LOC_REGISTER:
begin begin
@ -882,7 +882,10 @@ implementation
end. end.
{ {
$Log$ $Log$
Revision 1.33 1999-03-26 11:43:26 pierre Revision 1.34 1999-04-26 18:29:54 peter
* farpointerdef moved into pointerdef.is_far
Revision 1.33 1999/03/26 11:43:26 pierre
* bug0236 fixed * bug0236 fixed
Revision 1.32 1999/03/24 23:16:53 peter Revision 1.32 1999/03/24 23:16:53 peter

View File

@ -1201,7 +1201,7 @@ unit pexpr;
CARET: CARET:
begin begin
consume(CARET); consume(CARET);
if not(pd^.deftype in [pointerdef,farpointerdef]) then if (pd^.deftype<>pointerdef) then
begin begin
{ ^ as binary operator is a problem!!!! (FK) } { ^ as binary operator is a problem!!!! (FK) }
again:=false; again:=false;
@ -1972,7 +1972,10 @@ unit pexpr;
end. end.
{ {
$Log$ $Log$
Revision 1.97 1999-04-19 09:27:48 peter Revision 1.98 1999-04-26 18:29:56 peter
* farpointerdef moved into pointerdef.is_far
Revision 1.97 1999/04/19 09:27:48 peter
* removed my property fix * removed my property fix
Revision 1.96 1999/04/19 09:13:47 peter Revision 1.96 1999/04/19 09:13:47 peter

View File

@ -384,7 +384,7 @@ unit pmodules;
st : punitsymtable; st : punitsymtable;
second_time : boolean; second_time : boolean;
old_current_ppu : pppufile; old_current_ppu : pppufile;
old_current_module,hp,hp2 : pmodule; old_current_module,hp,hp2,hp3 : pmodule;
name : string;{ necessary because name : string;{ necessary because
current_module^.mainsource^ is reset in compile !! } current_module^.mainsource^ is reset in compile !! }
scanner : pscannerfile; scanner : pscannerfile;
@ -505,7 +505,7 @@ unit pmodules;
if hp2^.do_reload then if hp2^.do_reload then
begin begin
hp2^.do_reload:=false; hp2^.do_reload:=false;
loadunit(hp^.modulename^,false); hp3:=loadunit(hp^.modulename^,false);
end; end;
hp2:=pmodule(hp2^.next); hp2:=pmodule(hp2^.next);
end; end;
@ -1357,7 +1357,10 @@ unit pmodules;
end. end.
{ {
$Log$ $Log$
Revision 1.114 1999-04-26 13:31:39 peter Revision 1.115 1999-04-26 18:29:58 peter
* farpointerdef moved into pointerdef.is_far
Revision 1.114 1999/04/26 13:31:39 peter
* release storenumber,double_checksum * release storenumber,double_checksum
Revision 1.113 1999/04/25 17:32:14 peter Revision 1.113 1999/04/25 17:32:14 peter

View File

@ -110,7 +110,6 @@ const
iblongstringdef = 54; iblongstringdef = 54;
ibansistringdef = 55; ibansistringdef = 55;
ibwidestringdef = 56; ibwidestringdef = 56;
ibfarpointerdef = 57;
{ unit flags } { unit flags }
uf_init = $1; uf_init = $1;
@ -869,7 +868,10 @@ end;
end. end.
{ {
$Log$ $Log$
Revision 1.29 1999-04-26 13:31:41 peter Revision 1.30 1999-04-26 18:30:00 peter
* farpointerdef moved into pointerdef.is_far
Revision 1.29 1999/04/26 13:31:41 peter
* release storenumber,double_checksum * release storenumber,double_checksum
Revision 1.28 1999/04/26 09:33:07 peter Revision 1.28 1999/04/26 09:33:07 peter

View File

@ -1283,6 +1283,17 @@
inherited init; inherited init;
deftype:=pointerdef; deftype:=pointerdef;
definition:=def; definition:=def;
is_far:=false;
savesize:=target_os.size_of_pointer;
end;
constructor tpointerdef.initfar(def : pdef);
begin
inherited init;
deftype:=pointerdef;
definition:=def;
is_far:=true;
savesize:=target_os.size_of_pointer; savesize:=target_os.size_of_pointer;
end; end;
@ -1293,6 +1304,7 @@
deftype:=pointerdef; deftype:=pointerdef;
{ the real address in memory is calculated later (deref) } { the real address in memory is calculated later (deref) }
definition:=readdefref; definition:=readdefref;
is_far:=(readbyte<>0);
savesize:=target_os.size_of_pointer; savesize:=target_os.size_of_pointer;
end; end;
@ -1307,6 +1319,7 @@
begin begin
inherited write; inherited write;
writedefref(definition); writedefref(definition);
writebyte(byte(is_far));
current_ppu^.writeentry(ibpointerdef); current_ppu^.writeentry(ibpointerdef);
end; end;
@ -1366,34 +1379,6 @@
{$endif GDB} {$endif GDB}
{****************************************************************************
TFARPOINTERDEF
****************************************************************************}
constructor tfarpointerdef.init(def : pdef);
begin
inherited init(def);
deftype:=farpointerdef;
savesize:=target_os.size_of_pointer;
end;
constructor tfarpointerdef.load;
begin
inherited load;
deftype:=farpointerdef;
savesize:=target_os.size_of_pointer;
end;
procedure tfarpointerdef.write;
begin
tdef.write;
writedefref(definition);
current_ppu^.writeentry(ibfarpointerdef);
end;
{**************************************************************************** {****************************************************************************
TCLASSREFDEF TCLASSREFDEF
****************************************************************************} ****************************************************************************}
@ -1419,6 +1404,7 @@
{ be careful, tclassdefref inherits from tpointerdef } { be careful, tclassdefref inherits from tpointerdef }
tdef.write; tdef.write;
writedefref(definition); writedefref(definition);
writebyte(byte(is_far));
current_ppu^.writeentry(ibclassrefdef); current_ppu^.writeentry(ibclassrefdef);
end; end;
@ -3465,7 +3451,10 @@ Const local_symtable_index : longint = $8001;
{ {
$Log$ $Log$
Revision 1.105 1999-04-26 13:31:47 peter Revision 1.106 1999-04-26 18:30:01 peter
* farpointerdef moved into pointerdef.is_far
Revision 1.105 1999/04/26 13:31:47 peter
* release storenumber,double_checksum * release storenumber,double_checksum
Revision 1.104 1999/04/21 09:43:50 peter Revision 1.104 1999/04/21 09:43:50 peter

View File

@ -28,7 +28,7 @@
tdeftype = (abstractdef,arraydef,recorddef,pointerdef,orddef, tdeftype = (abstractdef,arraydef,recorddef,pointerdef,orddef,
stringdef,enumdef,procdef,objectdef,errordef, stringdef,enumdef,procdef,objectdef,errordef,
filedef,formaldef,setdef,procvardef,floatdef, filedef,formaldef,setdef,procvardef,floatdef,
classrefdef,farpointerdef); classrefdef);
pdef = ^tdef; pdef = ^tdef;
{$ifndef OLDPPU} {$ifndef OLDPPU}
@ -157,25 +157,19 @@
tpointerdef = object(tdef) tpointerdef = object(tdef)
definition : pdef; definition : pdef;
defsym : ptypesym; defsym : ptypesym;
is_far : boolean;
constructor init(def : pdef); constructor init(def : pdef);
constructor initfar(def : pdef);
constructor load; constructor load;
procedure write;virtual; procedure write;virtual;
{$ifdef GDB} {$ifdef GDB}
function stabstring : pchar;virtual; function stabstring : pchar;virtual;
procedure concatstabto(asmlist : paasmoutput);virtual; procedure concatstabto(asmlist : paasmoutput);virtual;
{$endif GDB} {$endif GDB}
procedure deref;virtual; procedure deref;virtual;
end; end;
pfarpointerdef = ^tfarpointerdef;
tfarpointerdef = object(tpointerdef)
constructor init(def : pdef);
constructor load;
procedure write;virtual;
end;
pobjectdef = ^tobjectdef; pobjectdef = ^tobjectdef;
tobjectdef = object(tdef) tobjectdef = object(tdef)
childof : pobjectdef; childof : pobjectdef;
@ -512,7 +506,10 @@
{ {
$Log$ $Log$
Revision 1.22 1999-04-26 13:31:49 peter Revision 1.23 1999-04-26 18:30:02 peter
* farpointerdef moved into pointerdef.is_far
Revision 1.22 1999/04/26 13:31:49 peter
* release storenumber,double_checksum * release storenumber,double_checksum
Revision 1.21 1999/04/21 09:43:52 peter Revision 1.21 1999/04/21 09:43:52 peter

View File

@ -293,7 +293,7 @@ unit symtable;
voidpointerdef : ppointerdef; { pointer for Void-Pointerdef } voidpointerdef : ppointerdef; { pointer for Void-Pointerdef }
charpointerdef : ppointerdef; { pointer for Char-Pointerdef } charpointerdef : ppointerdef; { pointer for Char-Pointerdef }
voidfarpointerdef : pfarpointerdef; voidfarpointerdef : ppointerdef;
voiddef : porddef; { Pointer to Void (procedure) } voiddef : porddef; { Pointer to Void (procedure) }
cchardef : porddef; { Pointer to Char } cchardef : porddef; { Pointer to Char }
@ -318,6 +318,8 @@ unit symtable;
cwidestringdef : pstringdef; { pointer to type of wide string const } cwidestringdef : pstringdef; { pointer to type of wide string const }
openshortstringdef : pstringdef; { pointer to type of an open shortstring, openshortstringdef : pstringdef; { pointer to type of an open shortstring,
needed for readln() } needed for readln() }
openchararraydef : parraydef; { pointer to type of an open array of char,
needed for readln() }
cfiledef : pfiledef; { get the same definition for all file } cfiledef : pfiledef; { get the same definition for all file }
{ uses for stabs } { uses for stabs }
@ -1222,7 +1224,6 @@ const localsymtablestack : psymtable = nil;
ibprocvardef : hp:=new(pprocvardef,load); ibprocvardef : hp:=new(pprocvardef,load);
ibfiledef : hp:=new(pfiledef,load); ibfiledef : hp:=new(pfiledef,load);
ibclassrefdef : hp:=new(pclassrefdef,load); ibclassrefdef : hp:=new(pclassrefdef,load);
ibfarpointerdef : hp:=new(pfarpointerdef,load);
ibformaldef : hp:=new(pformaldef,load); ibformaldef : hp:=new(pformaldef,load);
ibenddefs : break; ibenddefs : break;
ibend : Message(unit_f_ppu_read_error); ibend : Message(unit_f_ppu_read_error);
@ -3202,8 +3203,8 @@ const localsymtablestack : psymtable = nil;
end. end.
{ {
$Log$ $Log$
Revision 1.2 1999-04-26 15:12:25 peter Revision 1.3 1999-04-26 18:30:03 peter
* reinstered * farpointerdef moved into pointerdef.is_far
Revision 1.151 1999/04/26 13:31:54 peter Revision 1.151 1999/04/26 13:31:54 peter
* release storenumber,double_checksum * release storenumber,double_checksum

View File

@ -229,7 +229,7 @@ implementation
if not(cs_typed_addresses in aktlocalswitches) then if not(cs_typed_addresses in aktlocalswitches) then
p^.resulttype:=voidfarpointerdef p^.resulttype:=voidfarpointerdef
else else
p^.resulttype:=new(pfarpointerdef,init(p^.left^.resulttype)); p^.resulttype:=new(ppointerdef,initfar(p^.left^.resulttype));
end end
else else
begin begin
@ -311,7 +311,7 @@ implementation
p^.registersmmx:=p^.left^.registersmmx; p^.registersmmx:=p^.left^.registersmmx;
{$endif SUPPORT_MMX} {$endif SUPPORT_MMX}
if not(p^.left^.resulttype^.deftype in [pointerdef,farpointerdef]) then if p^.left^.resulttype^.deftype<>pointerdef then
CGMessage(cg_e_invalid_qualifier); CGMessage(cg_e_invalid_qualifier);
p^.resulttype:=ppointerdef(p^.left^.resulttype)^.definition; p^.resulttype:=ppointerdef(p^.left^.resulttype)^.definition;
@ -555,7 +555,10 @@ implementation
end. end.
{ {
$Log$ $Log$
Revision 1.12 1999-03-02 18:24:24 peter Revision 1.13 1999-04-26 18:30:05 peter
* farpointerdef moved into pointerdef.is_far
Revision 1.12 1999/03/02 18:24:24 peter
* fixed overloading of array of char * fixed overloading of array of char
Revision 1.11 1999/02/22 02:15:54 peter Revision 1.11 1999/02/22 02:15:54 peter