mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-05-25 09:42:37 +02:00

* -Oa argument supports more alignment settings that can be specified per type: PROC,LOOP,VARMIN,VARMAX,CONSTMIN,CONSTMAX,RECORDMIN RECORDMAX,LOCALMIN,LOCALMAX. It is possible to set the mimimum required alignment and the maximum usefull alignment. The final alignment will be choosen per variable size dependent on these settings
256 lines
7.8 KiB
ObjectPascal
256 lines
7.8 KiB
ObjectPascal
{
|
|
$Id$
|
|
Copyright (c) 1998-2000 by Florian Klaempfl, Pierre Muller
|
|
|
|
Global types
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation; either version 2 of the License, or
|
|
(at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program; if not, write to the Free Software
|
|
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
|
****************************************************************************
|
|
}
|
|
unit globtype;
|
|
|
|
{$i defines.inc}
|
|
|
|
interface
|
|
|
|
const
|
|
maxidlen = 64;
|
|
|
|
type
|
|
{ System independent float names }
|
|
{$ifdef i386}
|
|
bestreal = extended;
|
|
ts32real = single;
|
|
ts64real = double;
|
|
ts80real = extended;
|
|
ts64comp = extended;
|
|
{$endif}
|
|
{$ifdef m68k}
|
|
bestreal = real;
|
|
ts32real = single;
|
|
ts64real = double;
|
|
ts80real = extended;
|
|
ts64comp = comp;
|
|
{$endif}
|
|
{$ifdef alpha}
|
|
bestreal = extended;
|
|
ts32real = single;
|
|
ts64real = double;
|
|
ts80real = extended;
|
|
ts64comp = comp;
|
|
{$endif}
|
|
{$ifdef powerpc}
|
|
bestreal = double;
|
|
ts32real = single;
|
|
ts64real = double;
|
|
ts80real = extended;
|
|
ts64comp = comp;
|
|
{$endif powerpc}
|
|
{$ifdef ia64}
|
|
bestreal = extended;
|
|
ts32real = single;
|
|
ts64real = double;
|
|
ts80real = extended;
|
|
{ on the ia64 comp will be mapped to int64 }
|
|
ts64comp = comp;
|
|
{$endif}
|
|
|
|
pbestreal=^bestreal;
|
|
|
|
{ Switches which can be changed locally }
|
|
tlocalswitch = (cs_localnone,
|
|
{ codegen }
|
|
cs_check_overflow,cs_check_range,cs_check_object_ext,
|
|
cs_check_io,cs_check_stack,
|
|
cs_omitstackframe,cs_do_assertion,cs_generate_rtti,
|
|
cs_full_boolean_eval,
|
|
{ mmx }
|
|
cs_mmx,cs_mmx_saturation,
|
|
{ parser }
|
|
cs_typed_addresses,cs_strict_var_strings,cs_ansistrings
|
|
);
|
|
tlocalswitches = set of tlocalswitch;
|
|
|
|
{ Switches which can be changed only at the beginning of a new module }
|
|
tmoduleswitch = (cs_modulenone,
|
|
{ parser }
|
|
cs_fp_emulation,cs_extsyntax,cs_openstring,
|
|
{ support }
|
|
cs_support_inline,cs_support_goto,cs_support_macro,
|
|
cs_support_c_operators,cs_static_keyword,
|
|
cs_typed_const_not_changeable,
|
|
{ generation }
|
|
cs_profile,cs_debuginfo,cs_browser,cs_local_browser,cs_compilesystem,
|
|
cs_lineinfo,
|
|
{ linking }
|
|
cs_create_smart,cs_create_dynamic
|
|
);
|
|
tmoduleswitches = set of tmoduleswitch;
|
|
|
|
{ Switches which can be changed only for a whole program/compilation,
|
|
mostly set with commandline }
|
|
tglobalswitch = (cs_globalnone,
|
|
{ parameter switches }
|
|
cs_check_unit_name,cs_constructor_name,
|
|
{ units }
|
|
cs_load_objpas_unit,
|
|
cs_load_gpc_unit,
|
|
{ optimizer }
|
|
cs_regalloc,cs_uncertainopts,cs_littlesize,cs_optimize,
|
|
cs_fastoptimize, cs_slowoptimize,
|
|
{ browser }
|
|
cs_browser_log,
|
|
{ debugger }
|
|
cs_gdb_dbx,cs_gdb_gsym,cs_gdb_heaptrc,cs_gdb_lineinfo,cs_checkpointer,
|
|
{ assembling }
|
|
cs_asm_leave,cs_asm_extern,cs_asm_pipe,cs_asm_source,
|
|
cs_asm_regalloc,cs_asm_tempalloc,
|
|
{ linking }
|
|
cs_link_extern,cs_link_static,cs_link_smart,cs_link_shared,cs_link_deffile,
|
|
cs_link_strip,cs_link_staticflag
|
|
);
|
|
tglobalswitches = set of tglobalswitch;
|
|
|
|
{ Switches which can be changed by a mode (fpc,tp7,delphi) }
|
|
tmodeswitch = (m_none,m_all, { needed for keyword }
|
|
{ generic }
|
|
m_fpc,m_objfpc,m_delphi,m_tp,m_tp7,m_gpc,
|
|
{ more specific }
|
|
m_class, { delphi class model }
|
|
m_objpas, { load objpas unit }
|
|
m_result, { result in functions }
|
|
m_string_pchar, { pchar 2 string conversion }
|
|
m_cvar_support, { cvar variable directive }
|
|
m_nested_comment, { nested comments }
|
|
m_tp_procvar, { tp style procvars (no @ needed) }
|
|
m_repeat_forward, { repeating forward declarations is needed }
|
|
m_pointer_2_procedure, { allows the assignement of pointers to
|
|
procedure variables }
|
|
m_autoderef, { does auto dereferencing of struct. vars }
|
|
m_initfinal, { initialization/finalization for units }
|
|
m_add_pointer, { allow pointer add/sub operations }
|
|
m_default_ansistring, { ansistring turned on by default }
|
|
m_out, { support the calling convention OUT }
|
|
m_default_para, { support default parameters }
|
|
m_hintdirective { support hint directives }
|
|
);
|
|
tmodeswitches = set of tmodeswitch;
|
|
|
|
{ win32 & OS/2 application types }
|
|
tapptype = (app_none,
|
|
app_gui,app_cui,app_fs
|
|
);
|
|
|
|
{ interface types }
|
|
tinterfacetypes = (
|
|
it_interfacecom,
|
|
it_interfacecorba
|
|
);
|
|
|
|
{ currently parsed block type }
|
|
tblock_type = (bt_none,
|
|
bt_general,bt_type,bt_const,bt_except
|
|
);
|
|
|
|
type
|
|
stringid = string[maxidlen];
|
|
|
|
tnormalset = set of byte; { 256 elements set }
|
|
pnormalset = ^tnormalset;
|
|
|
|
pdouble = ^double;
|
|
pbyte = ^byte;
|
|
pword = ^word;
|
|
plongint = ^longint;
|
|
|
|
Tconstant=record
|
|
case signed:boolean of
|
|
false:
|
|
(valueu:cardinal);
|
|
true:
|
|
(values:longint);
|
|
end;
|
|
|
|
{$ifndef Delphi}
|
|
{$ifndef xFPC}
|
|
type
|
|
tguid = packed record
|
|
D1: LongWord;
|
|
D2: Word;
|
|
D3: Word;
|
|
D4: array[0..7] of Byte;
|
|
end;
|
|
{$endif}
|
|
{$endif}
|
|
|
|
const
|
|
{ link options }
|
|
link_none = $0;
|
|
link_allways = $1;
|
|
link_static = $2;
|
|
link_smart = $4;
|
|
link_shared = $8;
|
|
|
|
implementation
|
|
|
|
end.
|
|
{
|
|
$Log$
|
|
Revision 1.13 2001-07-01 20:16:15 peter
|
|
* alignmentinfo record added
|
|
* -Oa argument supports more alignment settings that can be specified
|
|
per type: PROC,LOOP,VARMIN,VARMAX,CONSTMIN,CONSTMAX,RECORDMIN
|
|
RECORDMAX,LOCALMIN,LOCALMAX. It is possible to set the mimimum
|
|
required alignment and the maximum usefull alignment. The final
|
|
alignment will be choosen per variable size dependent on these
|
|
settings
|
|
|
|
Revision 1.12 2001/06/03 21:57:35 peter
|
|
+ hint directive parsing support
|
|
|
|
Revision 1.11 2001/01/20 18:32:52 hajny
|
|
+ APPTYPE support under OS/2, app_fs, GetEnvPChar for OS/2
|
|
|
|
Revision 1.10 2000/11/29 00:30:30 florian
|
|
* unused units removed from uses clause
|
|
* some changes for widestrings
|
|
|
|
Revision 1.9 2000/11/12 22:20:37 peter
|
|
* create generic toutputsection for binary writers
|
|
|
|
Revision 1.8 2000/11/04 14:25:19 florian
|
|
+ merged Attila's changes for interfaces, not tested yet
|
|
|
|
Revision 1.7 2000/09/24 15:06:16 peter
|
|
* use defines.inc
|
|
|
|
Revision 1.6 2000/09/21 11:30:49 jonas
|
|
+ support for full boolean evaluation (b+/b-), default remains short
|
|
circuit boolean evaluation
|
|
|
|
Revision 1.5 2000/08/05 13:25:06 peter
|
|
* packenum 1 fixes (merged)
|
|
|
|
Revision 1.4 2000/08/02 19:49:59 peter
|
|
* first things for default parameters
|
|
|
|
Revision 1.3 2000/07/13 12:08:25 michael
|
|
+ patched to 1.1.0 with former 1.09patch from peter
|
|
|
|
Revision 1.2 2000/07/13 11:32:41 michael
|
|
+ removed logs
|
|
|
|
}
|