+ $IMPLICITEXCEPTIONS switch to turn on/off generation of the

implicit exception frames for procedures with initialized variables
    and for constructors. The default is on for compatibility
This commit is contained in:
peter 2002-10-16 19:01:43 +00:00
parent a8a89995bd
commit 83dae76625
7 changed files with 69 additions and 16 deletions

View File

@ -1095,7 +1095,7 @@ unit cgobj;
begin begin
{$ifdef FPC} {$ifdef FPC}
{$warning FIX ME!} {$warning FIX ME!}
{$endif} {$endif}
a_paramaddr_ref(list,dest,paramanager.getintparaloc(3)); a_paramaddr_ref(list,dest,paramanager.getintparaloc(3));
if loadref then if loadref then
a_param_ref(list,OS_ADDR,source,paramanager.getintparaloc(2)) a_param_ref(list,OS_ADDR,source,paramanager.getintparaloc(2))
@ -1408,7 +1408,8 @@ unit cgobj;
begin begin
if is_class(procinfo._class) then if is_class(procinfo._class) then
begin begin
procinfo.flags:=procinfo.flags or pi_needs_implicit_finally; if (cs_implicit_exceptions in aktmoduleswitches) then
procinfo.flags:=procinfo.flags or pi_needs_implicit_finally;
{ parameter 2 : self pointer / flag } { parameter 2 : self pointer / flag }
{!! this is a terrible hack, normally the helper should get three params : } {!! this is a terrible hack, normally the helper should get three params : }
{ one with self register, one with flag and one with VMT pointer } { one with self register, one with flag and one with VMT pointer }
@ -1603,7 +1604,12 @@ finalization
end. end.
{ {
$Log$ $Log$
Revision 1.61 2002-10-05 12:43:23 carl Revision 1.62 2002-10-16 19:01:43 peter
+ $IMPLICITEXCEPTIONS switch to turn on/off generation of the
implicit exception frames for procedures with initialized variables
and for constructors. The default is on for compatibility
Revision 1.61 2002/10/05 12:43:23 carl
* fixes for Delphi 6 compilation * fixes for Delphi 6 compilation
(warning : Some features do not work under Delphi) (warning : Some features do not work under Delphi)

View File

@ -10,6 +10,12 @@
{ This reduces the memory requirements a lot } { This reduces the memory requirements a lot }
{$PACKENUM 1} {$PACKENUM 1}
{ We don't use exceptions, so turn off the implicit
exceptions in the constructors }
{$ifndef VER1_0}
{$IMPLICITEXCEPTIONS OFF}
{$endif VER1_0}
{$define FPCPROCVAR} {$define FPCPROCVAR}
{$ifdef I386} {$ifdef I386}
{$define USEEXCEPT} {$define USEEXCEPT}
@ -48,7 +54,12 @@
{$endif alpha} {$endif alpha}
{ {
$Log$ $Log$
Revision 1.12 2002-10-05 12:43:24 carl Revision 1.13 2002-10-16 19:01:43 peter
+ $IMPLICITEXCEPTIONS switch to turn on/off generation of the
implicit exception frames for procedures with initialized variables
and for constructors. The default is on for compatibility
Revision 1.12 2002/10/05 12:43:24 carl
* fixes for Delphi 6 compilation * fixes for Delphi 6 compilation
(warning : Some features do not work under Delphi) (warning : Some features do not work under Delphi)

View File

@ -1418,7 +1418,7 @@ implementation
{ Init values } { Init values }
initmodeswitches:=fpcmodeswitches; initmodeswitches:=fpcmodeswitches;
initlocalswitches:=[cs_check_io,cs_typed_const_writable]; initlocalswitches:=[cs_check_io,cs_typed_const_writable];
initmoduleswitches:=[cs_extsyntax,cs_browser]; initmoduleswitches:=[cs_extsyntax,cs_browser,cs_implicit_exceptions];
initsourcecodepage:='8859-1'; initsourcecodepage:='8859-1';
initglobalswitches:=[cs_check_unit_name,cs_link_static{$ifdef INTERNALLINKER},cs_link_internal,cs_link_map{$endif}]; initglobalswitches:=[cs_check_unit_name,cs_link_static{$ifdef INTERNALLINKER},cs_link_internal,cs_link_map{$endif}];
initoutputformat:=target_asm.id; initoutputformat:=target_asm.id;
@ -1477,7 +1477,12 @@ begin
end. end.
{ {
$Log$ $Log$
Revision 1.66 2002-09-05 19:28:29 peter Revision 1.67 2002-10-16 19:01:43 peter
+ $IMPLICITEXCEPTIONS switch to turn on/off generation of the
implicit exception frames for procedures with initialized variables
and for constructors. The default is on for compatibility
Revision 1.66 2002/09/05 19:28:29 peter
* removed repetitive pass counting * removed repetitive pass counting
* display heapsize also for extdebug * display heapsize also for extdebug

View File

@ -53,7 +53,7 @@ interface
cs_support_c_operators,cs_static_keyword, cs_support_c_operators,cs_static_keyword,
{ generation } { generation }
cs_profile,cs_debuginfo,cs_browser,cs_local_browser,cs_compilesystem, cs_profile,cs_debuginfo,cs_browser,cs_local_browser,cs_compilesystem,
cs_lineinfo,cs_threading, cs_lineinfo,cs_threading,cs_implicit_exceptions,
{ linking } { linking }
cs_create_smart,cs_create_dynamic,cs_create_pic cs_create_smart,cs_create_dynamic,cs_create_pic
); );
@ -211,7 +211,12 @@ implementation
end. end.
{ {
$Log$ $Log$
Revision 1.33 2002-10-14 19:43:41 peter Revision 1.34 2002-10-16 19:01:43 peter
+ $IMPLICITEXCEPTIONS switch to turn on/off generation of the
implicit exception frames for procedures with initialized variables
and for constructors. The default is on for compatibility
Revision 1.33 2002/10/14 19:43:41 peter
* threading switch, defines the symbol FPC_THREADING * threading switch, defines the symbol FPC_THREADING
Revision 1.32 2002/10/05 12:43:24 carl Revision 1.32 2002/10/05 12:43:24 carl

View File

@ -935,7 +935,8 @@ implementation
not(is_class(tvarsym(p).vartype.def)) and not(is_class(tvarsym(p).vartype.def)) and
tvarsym(p).vartype.def.needs_inittable then tvarsym(p).vartype.def.needs_inittable then
begin begin
if assigned(procinfo) then if assigned(procinfo) and
(cs_implicit_exceptions in aktmoduleswitches) then
procinfo.flags:=procinfo.flags or pi_needs_implicit_finally; procinfo.flags:=procinfo.flags or pi_needs_implicit_finally;
if tsym(p).owner.symtabletype in [localsymtable,inlinelocalsymtable] then if tsym(p).owner.symtabletype in [localsymtable,inlinelocalsymtable] then
reference_reset_base(href,procinfo.framepointer,-tvarsym(p).address+tvarsym(p).owner.address_fixup) reference_reset_base(href,procinfo.framepointer,-tvarsym(p).address+tvarsym(p).owner.address_fixup)
@ -997,7 +998,8 @@ implementation
case tvarsym(p).varspez of case tvarsym(p).varspez of
vs_value : vs_value :
begin begin
procinfo.flags:=procinfo.flags or pi_needs_implicit_finally; if (cs_implicit_exceptions in aktmoduleswitches) then
procinfo.flags:=procinfo.flags or pi_needs_implicit_finally;
if assigned(tvarsym(p).localvarsym) then if assigned(tvarsym(p).localvarsym) then
reference_reset_base(href,procinfo.framepointer, reference_reset_base(href,procinfo.framepointer,
-tvarsym(p).localvarsym.address+tvarsym(p).localvarsym.owner.address_fixup) -tvarsym(p).localvarsym.address+tvarsym(p).localvarsym.owner.address_fixup)
@ -1055,7 +1057,8 @@ implementation
tt_widestring,tt_freewidestring, tt_widestring,tt_freewidestring,
tt_interfacecom,tt_freeinterfacecom] then tt_interfacecom,tt_freeinterfacecom] then
begin begin
procinfo.flags:=procinfo.flags or pi_needs_implicit_finally; if (cs_implicit_exceptions in aktmoduleswitches) then
procinfo.flags:=procinfo.flags or pi_needs_implicit_finally;
reference_reset_base(href,procinfo.framepointer,hp^.pos); reference_reset_base(href,procinfo.framepointer,hp^.pos);
cg.a_load_const_ref(list,OS_ADDR,0,href); cg.a_load_const_ref(list,OS_ADDR,0,href);
end; end;
@ -1273,7 +1276,8 @@ implementation
{ initialize return value } { initialize return value }
if (aktprocdef.rettype.def.needs_inittable) then if (aktprocdef.rettype.def.needs_inittable) then
begin begin
procinfo.flags:=procinfo.flags or pi_needs_implicit_finally; if (cs_implicit_exceptions in aktmoduleswitches) then
procinfo.flags:=procinfo.flags or pi_needs_implicit_finally;
reference_reset_base(href,procinfo.framepointer,procinfo.return_offset); reference_reset_base(href,procinfo.framepointer,procinfo.return_offset);
cg.g_initialize(list,aktprocdef.rettype.def,href,paramanager.ret_in_param(aktprocdef.rettype.def)); cg.g_initialize(list,aktprocdef.rettype.def,href,paramanager.ret_in_param(aktprocdef.rettype.def));
end; end;
@ -1842,7 +1846,12 @@ implementation
end. end.
{ {
$Log$ $Log$
Revision 1.55 2002-10-14 19:42:33 peter Revision 1.56 2002-10-16 19:01:43 peter
+ $IMPLICITEXCEPTIONS switch to turn on/off generation of the
implicit exception frames for procedures with initialized variables
and for constructors. The default is on for compatibility
Revision 1.55 2002/10/14 19:42:33 peter
* only use init tables for threadvars * only use init tables for threadvars
Revision 1.54 2002/10/06 19:41:30 peter Revision 1.54 2002/10/06 19:41:30 peter

View File

@ -295,6 +295,11 @@ implementation
do_setverbose('H'); do_setverbose('H');
end; end;
procedure dir_implicitexceptions;
begin
do_moduleswitch(cs_implicit_exceptions);
end;
procedure dir_includepath; procedure dir_includepath;
begin begin
if not current_module.in_global then if not current_module.in_global then
@ -901,6 +906,7 @@ implementation
AddDirective('HINT',{$ifdef FPCPROCVAR}@{$endif}dir_hint); AddDirective('HINT',{$ifdef FPCPROCVAR}@{$endif}dir_hint);
AddDirective('HINTS',{$ifdef FPCPROCVAR}@{$endif}dir_hints); AddDirective('HINTS',{$ifdef FPCPROCVAR}@{$endif}dir_hints);
AddDirective('IOCHECKS',{$ifdef FPCPROCVAR}@{$endif}dir_iochecks); AddDirective('IOCHECKS',{$ifdef FPCPROCVAR}@{$endif}dir_iochecks);
AddDirective('IMPLICITEXCEPTIONS',{$ifdef FPCPROCVAR}@{$endif}dir_implicitexceptions);
AddDirective('INCLUDEPATH',{$ifdef FPCPROCVAR}@{$endif}dir_includepath); AddDirective('INCLUDEPATH',{$ifdef FPCPROCVAR}@{$endif}dir_includepath);
AddDirective('INFO',{$ifdef FPCPROCVAR}@{$endif}dir_info); AddDirective('INFO',{$ifdef FPCPROCVAR}@{$endif}dir_info);
AddDirective('INLINE',{$ifdef FPCPROCVAR}@{$endif}dir_inline); AddDirective('INLINE',{$ifdef FPCPROCVAR}@{$endif}dir_inline);
@ -960,7 +966,12 @@ implementation
end. end.
{ {
$Log$ $Log$
Revision 1.20 2002-10-14 19:43:41 peter Revision 1.21 2002-10-16 19:01:43 peter
+ $IMPLICITEXCEPTIONS switch to turn on/off generation of the
implicit exception frames for procedures with initialized variables
and for constructors. The default is on for compatibility
Revision 1.20 2002/10/14 19:43:41 peter
* threading switch, defines the symbol FPC_THREADING * threading switch, defines the symbol FPC_THREADING
Revision 1.19 2002/08/13 18:01:52 carl Revision 1.19 2002/08/13 18:01:52 carl

View File

@ -1532,7 +1532,8 @@ unit cgx86;
begin begin
if is_class(procinfo._class) then if is_class(procinfo._class) then
begin begin
procinfo.flags:=procinfo.flags or pi_needs_implicit_finally; if (cs_implicit_exceptions in aktmoduleswitches) then
procinfo.flags:=procinfo.flags or pi_needs_implicit_finally;
a_call_name(list,'FPC_NEW_CLASS'); a_call_name(list,'FPC_NEW_CLASS');
list.concat(Taicpu.Op_cond_sym(A_Jcc,C_Z,S_NO,faillabel)); list.concat(Taicpu.Op_cond_sym(A_Jcc,C_Z,S_NO,faillabel));
end end
@ -1681,7 +1682,12 @@ unit cgx86;
end. end.
{ {
$Log$ $Log$
Revision 1.18 2002-10-05 12:43:30 carl Revision 1.19 2002-10-16 19:01:43 peter
+ $IMPLICITEXCEPTIONS switch to turn on/off generation of the
implicit exception frames for procedures with initialized variables
and for constructors. The default is on for compatibility
Revision 1.18 2002/10/05 12:43:30 carl
* fixes for Delphi 6 compilation * fixes for Delphi 6 compilation
(warning : Some features do not work under Delphi) (warning : Some features do not work under Delphi)