From 49786e5fe52a775c06ca92f171a25db9dd0cd1d4 Mon Sep 17 00:00:00 2001 From: peter Date: Mon, 26 Apr 1999 18:29:54 +0000 Subject: [PATCH] * farpointerdef moved into pointerdef.is_far --- compiler/cg386mem.pas | 9 ++++++--- compiler/pexpr.pas | 7 +++++-- compiler/pmodules.pas | 9 ++++++--- compiler/ppu.pas | 6 ++++-- compiler/symdef.inc | 47 +++++++++++++++++-------------------------- compiler/symdefh.inc | 19 ++++++++--------- compiler/symtable.pas | 9 +++++---- compiler/tcmem.pas | 9 ++++++--- 8 files changed, 58 insertions(+), 57 deletions(-) diff --git a/compiler/cg386mem.pas b/compiler/cg386mem.pas index 7c6572bca0..844859f817 100644 --- a/compiler/cg386mem.pas +++ b/compiler/cg386mem.pas @@ -312,7 +312,7 @@ implementation p^.location.reference.base:=hr; end; end; - if p^.left^.resulttype^.deftype=farpointerdef then + if ppointerdef(p^.left^.resulttype)^.is_far then p^.location.reference.segment:=R_FS; end; @@ -635,7 +635,7 @@ implementation emitrangecheck(p^.right,p^.left^.resulttype); end; end; - + case p^.right^.location.loc of LOC_REGISTER: begin @@ -882,7 +882,10 @@ implementation end. { $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 Revision 1.32 1999/03/24 23:16:53 peter diff --git a/compiler/pexpr.pas b/compiler/pexpr.pas index 34e33fae45..ce84cb2c15 100644 --- a/compiler/pexpr.pas +++ b/compiler/pexpr.pas @@ -1201,7 +1201,7 @@ unit pexpr; CARET: begin consume(CARET); - if not(pd^.deftype in [pointerdef,farpointerdef]) then + if (pd^.deftype<>pointerdef) then begin { ^ as binary operator is a problem!!!! (FK) } again:=false; @@ -1972,7 +1972,10 @@ unit pexpr; end. { $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 Revision 1.96 1999/04/19 09:13:47 peter diff --git a/compiler/pmodules.pas b/compiler/pmodules.pas index 15de191f7c..6317fd0529 100644 --- a/compiler/pmodules.pas +++ b/compiler/pmodules.pas @@ -384,7 +384,7 @@ unit pmodules; st : punitsymtable; second_time : boolean; old_current_ppu : pppufile; - old_current_module,hp,hp2 : pmodule; + old_current_module,hp,hp2,hp3 : pmodule; name : string;{ necessary because current_module^.mainsource^ is reset in compile !! } scanner : pscannerfile; @@ -505,7 +505,7 @@ unit pmodules; if hp2^.do_reload then begin hp2^.do_reload:=false; - loadunit(hp^.modulename^,false); + hp3:=loadunit(hp^.modulename^,false); end; hp2:=pmodule(hp2^.next); end; @@ -1357,7 +1357,10 @@ unit pmodules; end. { $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 Revision 1.113 1999/04/25 17:32:14 peter diff --git a/compiler/ppu.pas b/compiler/ppu.pas index bc64e84cc2..d5e6619989 100644 --- a/compiler/ppu.pas +++ b/compiler/ppu.pas @@ -110,7 +110,6 @@ const iblongstringdef = 54; ibansistringdef = 55; ibwidestringdef = 56; - ibfarpointerdef = 57; { unit flags } uf_init = $1; @@ -869,7 +868,10 @@ end; end. { $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 Revision 1.28 1999/04/26 09:33:07 peter diff --git a/compiler/symdef.inc b/compiler/symdef.inc index b3f0bf7768..f4ca95af2c 100644 --- a/compiler/symdef.inc +++ b/compiler/symdef.inc @@ -1283,6 +1283,17 @@ inherited init; deftype:=pointerdef; 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; end; @@ -1293,6 +1304,7 @@ deftype:=pointerdef; { the real address in memory is calculated later (deref) } definition:=readdefref; + is_far:=(readbyte<>0); savesize:=target_os.size_of_pointer; end; @@ -1307,6 +1319,7 @@ begin inherited write; writedefref(definition); + writebyte(byte(is_far)); current_ppu^.writeentry(ibpointerdef); end; @@ -1366,34 +1379,6 @@ {$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 ****************************************************************************} @@ -1419,6 +1404,7 @@ { be careful, tclassdefref inherits from tpointerdef } tdef.write; writedefref(definition); + writebyte(byte(is_far)); current_ppu^.writeentry(ibclassrefdef); end; @@ -3465,7 +3451,10 @@ Const local_symtable_index : longint = $8001; { $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 Revision 1.104 1999/04/21 09:43:50 peter diff --git a/compiler/symdefh.inc b/compiler/symdefh.inc index 523020e3d8..ef62fed4aa 100644 --- a/compiler/symdefh.inc +++ b/compiler/symdefh.inc @@ -28,7 +28,7 @@ tdeftype = (abstractdef,arraydef,recorddef,pointerdef,orddef, stringdef,enumdef,procdef,objectdef,errordef, filedef,formaldef,setdef,procvardef,floatdef, - classrefdef,farpointerdef); + classrefdef); pdef = ^tdef; {$ifndef OLDPPU} @@ -157,25 +157,19 @@ tpointerdef = object(tdef) definition : pdef; defsym : ptypesym; + is_far : boolean; constructor init(def : pdef); + constructor initfar(def : pdef); constructor load; procedure write;virtual; {$ifdef GDB} - function stabstring : pchar;virtual; + function stabstring : pchar;virtual; procedure concatstabto(asmlist : paasmoutput);virtual; {$endif GDB} procedure deref;virtual; end; - pfarpointerdef = ^tfarpointerdef; - tfarpointerdef = object(tpointerdef) - constructor init(def : pdef); - constructor load; - procedure write;virtual; - end; - - pobjectdef = ^tobjectdef; tobjectdef = object(tdef) childof : pobjectdef; @@ -512,7 +506,10 @@ { $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 Revision 1.21 1999/04/21 09:43:52 peter diff --git a/compiler/symtable.pas b/compiler/symtable.pas index 5dba4522c1..554d522ea0 100644 --- a/compiler/symtable.pas +++ b/compiler/symtable.pas @@ -293,7 +293,7 @@ unit symtable; voidpointerdef : ppointerdef; { pointer for Void-Pointerdef } charpointerdef : ppointerdef; { pointer for Char-Pointerdef } - voidfarpointerdef : pfarpointerdef; + voidfarpointerdef : ppointerdef; voiddef : porddef; { Pointer to Void (procedure) } cchardef : porddef; { Pointer to Char } @@ -318,6 +318,8 @@ unit symtable; cwidestringdef : pstringdef; { pointer to type of wide string const } openshortstringdef : pstringdef; { pointer to type of an open shortstring, 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 } { uses for stabs } @@ -1222,7 +1224,6 @@ const localsymtablestack : psymtable = nil; ibprocvardef : hp:=new(pprocvardef,load); ibfiledef : hp:=new(pfiledef,load); ibclassrefdef : hp:=new(pclassrefdef,load); - ibfarpointerdef : hp:=new(pfarpointerdef,load); ibformaldef : hp:=new(pformaldef,load); ibenddefs : break; ibend : Message(unit_f_ppu_read_error); @@ -3202,8 +3203,8 @@ const localsymtablestack : psymtable = nil; end. { $Log$ - Revision 1.2 1999-04-26 15:12:25 peter - * reinstered + Revision 1.3 1999-04-26 18:30:03 peter + * farpointerdef moved into pointerdef.is_far Revision 1.151 1999/04/26 13:31:54 peter * release storenumber,double_checksum diff --git a/compiler/tcmem.pas b/compiler/tcmem.pas index 6ac625663e..a4faa1cfd6 100644 --- a/compiler/tcmem.pas +++ b/compiler/tcmem.pas @@ -229,7 +229,7 @@ implementation if not(cs_typed_addresses in aktlocalswitches) then p^.resulttype:=voidfarpointerdef else - p^.resulttype:=new(pfarpointerdef,init(p^.left^.resulttype)); + p^.resulttype:=new(ppointerdef,initfar(p^.left^.resulttype)); end else begin @@ -311,7 +311,7 @@ implementation p^.registersmmx:=p^.left^.registersmmx; {$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); p^.resulttype:=ppointerdef(p^.left^.resulttype)^.definition; @@ -555,7 +555,10 @@ implementation end. { $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 Revision 1.11 1999/02/22 02:15:54 peter