mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-09 17:06:04 +02:00
+ $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:
parent
a8a89995bd
commit
83dae76625
@ -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)
|
||||||
|
|
||||||
|
@ -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)
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user