diff --git a/compiler/cg386flw.pas b/compiler/cg386flw.pas index 6663f5814b..7cfccdc85e 100644 --- a/compiler/cg386flw.pas +++ b/compiler/cg386flw.pas @@ -77,8 +77,7 @@ implementation aktbreaklabel:=lbreak; cleartempgen; if assigned(p^.right) then - secondpass(p^.right); - + secondpass(p^.right); emitl(A_LABEL,lcont); otlabel:=truelabel; oflabel:=falselabel; @@ -738,7 +737,11 @@ do_jmp: end. { $Log$ - Revision 1.20 1998-10-06 17:16:42 pierre + Revision 1.21 1998-10-26 22:58:16 florian + * new introduded problem with classes fix, the parent class wasn't set + correct, if the class was defined forward before + + Revision 1.20 1998/10/06 17:16:42 pierre * some memory leaks fixed (thanks to Peter for heaptrc !) Revision 1.19 1998/09/28 12:13:53 peter diff --git a/compiler/compiler.pas b/compiler/compiler.pas index 912faa1c98..f49aeb3fac 100644 --- a/compiler/compiler.pas +++ b/compiler/compiler.pas @@ -104,7 +104,7 @@ var procedure RecoverStop;{$ifndef FPC}far;{$endif} begin - if assigned(recoverpospointer) then + if recoverpospointer<>nil then LongJmp(recoverpospointer^,1) else Halt(1); @@ -242,7 +242,11 @@ end; end. { $Log$ - Revision 1.13 1998-10-26 17:15:17 pierre + Revision 1.14 1998-10-26 22:58:17 florian + * new introduded problem with classes fix, the parent class wasn't set + correct, if the class was defined forward before + + Revision 1.13 1998/10/26 17:15:17 pierre + added two level of longjump to allow clean freeing of used memory on errors diff --git a/compiler/hcodegen.pas b/compiler/hcodegen.pas index ed5a58bdc2..135e3b471a 100644 --- a/compiler/hcodegen.pas +++ b/compiler/hcodegen.pas @@ -25,7 +25,7 @@ unit hcodegen; interface uses - verbose,aasm,tree,symtable + verbose,aasm,tree,symtable,cobjects {$ifdef i386} ,i386 {$endif} @@ -93,6 +93,15 @@ unit hcodegen; { local data is used for smartlink } end; + { some kind of temp. types needs to be destructed } + { for example ansistring, this is done using this } + { list } + ttemptodestroy = object(tlinkedlist_item) + typ : tdef; + address : treference; + constructor init(const a : treference;t : tdef); + end; + var { info about the current sub routine } procinfo : tprocinfo; @@ -158,10 +167,13 @@ unit hcodegen; const make_const_global : boolean = false; + var + temptoremove : tlinkedlist; + implementation uses - systems,comphook,cobjects,globals,files,strings; + systems,comphook,globals,files,strings; {***************************************************************************** override the message calls to set codegenerror @@ -379,12 +391,23 @@ implementation end; end; + constructor ttemptodestroy.init(const a : treference;t : tdef); + + begin + inherited init; + address:=a; + typ:=t; + end; end. { $Log$ - Revision 1.18 1998-10-06 17:16:50 pierre + Revision 1.19 1998-10-26 22:58:18 florian + * new introduded problem with classes fix, the parent class wasn't set + correct, if the class was defined forward before + + Revision 1.18 1998/10/06 17:16:50 pierre * some memory leaks fixed (thanks to Peter for heaptrc !) Revision 1.17 1998/09/17 09:42:37 peter diff --git a/compiler/pass_2.pas b/compiler/pass_2.pas index 247f44ab9b..f1b448a806 100644 --- a/compiler/pass_2.pas +++ b/compiler/pass_2.pas @@ -67,11 +67,12 @@ implementation secondpassproc = procedure(var p : ptree); procedure secondnothing(var p : ptree); + begin end; - procedure seconderror(var p : ptree); + begin p^.error:=true; codegenerror:=true; @@ -485,7 +486,11 @@ implementation end. { $Log$ - Revision 1.6 1998-09-23 09:58:52 peter + Revision 1.7 1998-10-26 22:58:19 florian + * new introduded problem with classes fix, the parent class wasn't set + correct, if the class was defined forward before + + Revision 1.6 1998/09/23 09:58:52 peter * first working array of const things Revision 1.5 1998/09/21 10:01:06 peter diff --git a/compiler/pdecl.pas b/compiler/pdecl.pas index 0307fada47..736aed0c30 100644 --- a/compiler/pdecl.pas +++ b/compiler/pdecl.pas @@ -1121,7 +1121,7 @@ unit pdecl; class_tobject:=aktclass; end else - aktclass:=new(pobjectdef,init(n,class_tobject)); + aktclass:=new(pobjectdef,init(n,nil)); aktclass^.options:=aktclass^.options or oo_is_class or oo_isforward; object_dec:=aktclass; exit; @@ -2082,7 +2082,11 @@ unit pdecl; end. { $Log$ - Revision 1.76 1998-10-25 23:31:18 peter + Revision 1.77 1998-10-26 22:58:20 florian + * new introduded problem with classes fix, the parent class wasn't set + correct, if the class was defined forward before + + Revision 1.76 1998/10/25 23:31:18 peter * procvar parsing updated just like psub.pas routine Revision 1.75 1998/10/21 08:39:59 florian diff --git a/compiler/symdef.inc b/compiler/symdef.inc index 0c6ef944e9..6093924b4a 100644 --- a/compiler/symdef.inc +++ b/compiler/symdef.inc @@ -2573,6 +2573,7 @@ tdef.init; deftype:=objectdef; options:=0; + childof:=nil; publicsyms:=new(psymtable,init(objectsymtable)); publicsyms^.name := stringdup(n); { create space for vmt !! } @@ -2613,7 +2614,7 @@ publicsyms^.datasize:=publicsyms^.datasize-target_os.size_of_pointer; { if parent has a vmt field then the offset is the same for the child PM } - if ((c^.options and oo_hasvmt)<>0) then + if ((c^.options and oo_hasvmt)<>0) or isclass then begin vmt_offset:=c^.vmt_offset; options:=options or oo_hasvmt; @@ -3199,7 +3200,11 @@ { $Log$ - Revision 1.65 1998-10-26 14:19:28 pierre + Revision 1.66 1998-10-26 22:58:22 florian + * new introduded problem with classes fix, the parent class wasn't set + correct, if the class was defined forward before + + Revision 1.65 1998/10/26 14:19:28 pierre + added options -lS and -lT for source and target os output (to have a easier way to test OS_SOURCE abd OS_TARGET in makefiles) * several problems with rtti data diff --git a/compiler/tpexcept.pas b/compiler/tpexcept.pas index 28e9a1cab6..fe04ccb8a1 100644 --- a/compiler/tpexcept.pas +++ b/compiler/tpexcept.pas @@ -49,8 +49,8 @@ type procedure longjmp(const rec : jmp_buf;return_value : longint); {$endif TP} - var - recoverpospointer : pjmp_buf; + const + recoverpospointer : pjmp_buf = nil; implementation @@ -335,7 +335,11 @@ implementation end. { $Log$ - Revision 1.3 1998-10-26 17:15:19 pierre + Revision 1.4 1998-10-26 22:58:24 florian + * new introduded problem with classes fix, the parent class wasn't set + correct, if the class was defined forward before + + Revision 1.3 1998/10/26 17:15:19 pierre + added two level of longjump to allow clean freeing of used memory on errors