mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-11-02 19:43:15 +01:00
+ support for a different set of compiler directives under $MODE MAC
+ added mac directives $SETC $IFC $ELSEC $ENDC
This commit is contained in:
parent
f891435ca0
commit
6f78eac09f
@ -898,84 +898,84 @@ implementation
|
||||
|
||||
procedure InitScannerDirectives;
|
||||
begin
|
||||
AddDirective('ALIGN',{$ifdef FPCPROCVAR}@{$endif}dir_align);
|
||||
AddDirective('ALIGN',directive_all, {$ifdef FPCPROCVAR}@{$endif}dir_align);
|
||||
{$ifdef m68k}
|
||||
AddDirective('APPID',{$ifdef FPCPROCVAR}@{$endif}dir_appid);
|
||||
AddDirective('APPNAME',{$ifdef FPCPROCVAR}@{$endif}dir_appname);
|
||||
AddDirective('APPID',directive_all, {$ifdef FPCPROCVAR}@{$endif}dir_appid);
|
||||
AddDirective('APPNAME',directive_all, {$ifdef FPCPROCVAR}@{$endif}dir_appname);
|
||||
{$endif m68k}
|
||||
AddDirective('APPTYPE',{$ifdef FPCPROCVAR}@{$endif}dir_apptype);
|
||||
AddDirective('ASMMODE',{$ifdef FPCPROCVAR}@{$endif}dir_asmmode);
|
||||
AddDirective('ASSERTIONS',{$ifdef FPCPROCVAR}@{$endif}dir_assertions);
|
||||
AddDirective('BOOLEVAL',{$ifdef FPCPROCVAR}@{$endif}dir_booleval);
|
||||
AddDirective('CALLING',{$ifdef FPCPROCVAR}@{$endif}dir_calling);
|
||||
AddDirective('CODEPAGE',{$ifdef FPCPROCVAR}@{$endif}dir_codepage);
|
||||
AddDirective('COPYRIGHT',{$ifdef FPCPROCVAR}@{$endif}dir_copyright);
|
||||
AddDirective('D',{$ifdef FPCPROCVAR}@{$endif}dir_description);
|
||||
AddDirective('DEBUGINFO',{$ifdef FPCPROCVAR}@{$endif}dir_debuginfo);
|
||||
AddDirective('DESCRIPTION',{$ifdef FPCPROCVAR}@{$endif}dir_description);
|
||||
AddDirective('ERROR',{$ifdef FPCPROCVAR}@{$endif}dir_error);
|
||||
AddDirective('EXTENDEDSYNTAX',{$ifdef FPCPROCVAR}@{$endif}dir_extendedsyntax);
|
||||
AddDirective('EXTERNALSYM',{$ifdef FPCPROCVAR}@{$endif}dir_externalsym);
|
||||
AddDirective('FATAL',{$ifdef FPCPROCVAR}@{$endif}dir_fatal);
|
||||
AddDirective('GOTO',{$ifdef FPCPROCVAR}@{$endif}dir_goto);
|
||||
AddDirective('HINT',{$ifdef FPCPROCVAR}@{$endif}dir_hint);
|
||||
AddDirective('HINTS',{$ifdef FPCPROCVAR}@{$endif}dir_hints);
|
||||
AddDirective('IOCHECKS',{$ifdef FPCPROCVAR}@{$endif}dir_iochecks);
|
||||
AddDirective('IMPLICITEXCEPTIONS',{$ifdef FPCPROCVAR}@{$endif}dir_implicitexceptions);
|
||||
AddDirective('INCLUDEPATH',{$ifdef FPCPROCVAR}@{$endif}dir_includepath);
|
||||
AddDirective('INFO',{$ifdef FPCPROCVAR}@{$endif}dir_info);
|
||||
AddDirective('INLINE',{$ifdef FPCPROCVAR}@{$endif}dir_inline);
|
||||
AddDirective('INTERFACES',{$ifdef FPCPROCVAR}@{$endif}dir_interfaces);
|
||||
AddDirective('L',{$ifdef FPCPROCVAR}@{$endif}dir_link);
|
||||
AddDirective('LIBRARYPATH',{$ifdef FPCPROCVAR}@{$endif}dir_librarypath);
|
||||
AddDirective('LINK',{$ifdef FPCPROCVAR}@{$endif}dir_link);
|
||||
AddDirective('LINKLIB',{$ifdef FPCPROCVAR}@{$endif}dir_linklib);
|
||||
AddDirective('LOCALSYMBOLS',{$ifdef FPCPROCVAR}@{$endif}dir_localsymbols);
|
||||
AddDirective('LONGSTRINGS',{$ifdef FPCPROCVAR}@{$endif}dir_longstrings);
|
||||
AddDirective('M',{$ifdef FPCPROCVAR}@{$endif}dir_memory);
|
||||
AddDirective('MACRO',{$ifdef FPCPROCVAR}@{$endif}dir_macro);
|
||||
AddDirective('MAXFPUREGISTERS',{$ifdef FPCPROCVAR}@{$endif}dir_maxfpuregisters);
|
||||
AddDirective('MEMORY',{$ifdef FPCPROCVAR}@{$endif}dir_memory);
|
||||
AddDirective('MESSAGE',{$ifdef FPCPROCVAR}@{$endif}dir_message);
|
||||
AddDirective('MINENUMSIZE',{$ifdef FPCPROCVAR}@{$endif}dir_packenum);
|
||||
AddDirective('MMX',{$ifdef FPCPROCVAR}@{$endif}dir_mmx);
|
||||
AddDirective('MODE',{$ifdef FPCPROCVAR}@{$endif}dir_mode);
|
||||
AddDirective('NOTE',{$ifdef FPCPROCVAR}@{$endif}dir_note);
|
||||
AddDirective('NOTES',{$ifdef FPCPROCVAR}@{$endif}dir_notes);
|
||||
AddDirective('OBJECTCHECKS',{$ifdef FPCPROCVAR}@{$endif}dir_objectchecks);
|
||||
AddDirective('OBJECTPATH',{$ifdef FPCPROCVAR}@{$endif}dir_objectpath);
|
||||
AddDirective('OPENSTRINGS',{$ifdef FPCPROCVAR}@{$endif}dir_openstrings);
|
||||
AddDirective('OUTPUT_FORMAT',{$ifdef FPCPROCVAR}@{$endif}dir_output_format);
|
||||
AddDirective('OVERFLOWCHECKS',{$ifdef FPCPROCVAR}@{$endif}dir_overflowchecks);
|
||||
AddDirective('PACKENUM',{$ifdef FPCPROCVAR}@{$endif}dir_packenum);
|
||||
AddDirective('PACKRECORDS',{$ifdef FPCPROCVAR}@{$endif}dir_packrecords);
|
||||
AddDirective('APPTYPE',directive_all, {$ifdef FPCPROCVAR}@{$endif}dir_apptype);
|
||||
AddDirective('ASMMODE',directive_all, {$ifdef FPCPROCVAR}@{$endif}dir_asmmode);
|
||||
AddDirective('ASSERTIONS',directive_all, {$ifdef FPCPROCVAR}@{$endif}dir_assertions);
|
||||
AddDirective('BOOLEVAL',directive_all, {$ifdef FPCPROCVAR}@{$endif}dir_booleval);
|
||||
AddDirective('CALLING',directive_all, {$ifdef FPCPROCVAR}@{$endif}dir_calling);
|
||||
AddDirective('CODEPAGE',directive_all, {$ifdef FPCPROCVAR}@{$endif}dir_codepage);
|
||||
AddDirective('COPYRIGHT',directive_all, {$ifdef FPCPROCVAR}@{$endif}dir_copyright);
|
||||
AddDirective('D',directive_all, {$ifdef FPCPROCVAR}@{$endif}dir_description);
|
||||
AddDirective('DEBUGINFO',directive_all, {$ifdef FPCPROCVAR}@{$endif}dir_debuginfo);
|
||||
AddDirective('DESCRIPTION',directive_all, {$ifdef FPCPROCVAR}@{$endif}dir_description);
|
||||
AddDirective('ERROR',directive_all, {$ifdef FPCPROCVAR}@{$endif}dir_error);
|
||||
AddDirective('EXTENDEDSYNTAX',directive_all, {$ifdef FPCPROCVAR}@{$endif}dir_extendedsyntax);
|
||||
AddDirective('EXTERNALSYM',directive_all, {$ifdef FPCPROCVAR}@{$endif}dir_externalsym);
|
||||
AddDirective('FATAL',directive_all, {$ifdef FPCPROCVAR}@{$endif}dir_fatal);
|
||||
AddDirective('GOTO',directive_all, {$ifdef FPCPROCVAR}@{$endif}dir_goto);
|
||||
AddDirective('HINT',directive_all, {$ifdef FPCPROCVAR}@{$endif}dir_hint);
|
||||
AddDirective('HINTS',directive_all, {$ifdef FPCPROCVAR}@{$endif}dir_hints);
|
||||
AddDirective('IOCHECKS',directive_all, {$ifdef FPCPROCVAR}@{$endif}dir_iochecks);
|
||||
AddDirective('IMPLICITEXCEPTIONS',directive_all, {$ifdef FPCPROCVAR}@{$endif}dir_implicitexceptions);
|
||||
AddDirective('INCLUDEPATH',directive_all, {$ifdef FPCPROCVAR}@{$endif}dir_includepath);
|
||||
AddDirective('INFO',directive_all, {$ifdef FPCPROCVAR}@{$endif}dir_info);
|
||||
AddDirective('INLINE',directive_all, {$ifdef FPCPROCVAR}@{$endif}dir_inline);
|
||||
AddDirective('INTERFACES',directive_all, {$ifdef FPCPROCVAR}@{$endif}dir_interfaces);
|
||||
AddDirective('L',directive_all, {$ifdef FPCPROCVAR}@{$endif}dir_link);
|
||||
AddDirective('LIBRARYPATH',directive_all, {$ifdef FPCPROCVAR}@{$endif}dir_librarypath);
|
||||
AddDirective('LINK',directive_all, {$ifdef FPCPROCVAR}@{$endif}dir_link);
|
||||
AddDirective('LINKLIB',directive_all, {$ifdef FPCPROCVAR}@{$endif}dir_linklib);
|
||||
AddDirective('LOCALSYMBOLS',directive_all, {$ifdef FPCPROCVAR}@{$endif}dir_localsymbols);
|
||||
AddDirective('LONGSTRINGS',directive_all, {$ifdef FPCPROCVAR}@{$endif}dir_longstrings);
|
||||
AddDirective('M',directive_all, {$ifdef FPCPROCVAR}@{$endif}dir_memory);
|
||||
AddDirective('MACRO',directive_all, {$ifdef FPCPROCVAR}@{$endif}dir_macro);
|
||||
AddDirective('MAXFPUREGISTERS',directive_all, {$ifdef FPCPROCVAR}@{$endif}dir_maxfpuregisters);
|
||||
AddDirective('MEMORY',directive_all, {$ifdef FPCPROCVAR}@{$endif}dir_memory);
|
||||
AddDirective('MESSAGE',directive_all, {$ifdef FPCPROCVAR}@{$endif}dir_message);
|
||||
AddDirective('MINENUMSIZE',directive_all, {$ifdef FPCPROCVAR}@{$endif}dir_packenum);
|
||||
AddDirective('MMX',directive_all, {$ifdef FPCPROCVAR}@{$endif}dir_mmx);
|
||||
AddDirective('MODE',directive_all, {$ifdef FPCPROCVAR}@{$endif}dir_mode);
|
||||
AddDirective('NOTE',directive_all, {$ifdef FPCPROCVAR}@{$endif}dir_note);
|
||||
AddDirective('NOTES',directive_all, {$ifdef FPCPROCVAR}@{$endif}dir_notes);
|
||||
AddDirective('OBJECTCHECKS',directive_all, {$ifdef FPCPROCVAR}@{$endif}dir_objectchecks);
|
||||
AddDirective('OBJECTPATH',directive_all, {$ifdef FPCPROCVAR}@{$endif}dir_objectpath);
|
||||
AddDirective('OPENSTRINGS',directive_all, {$ifdef FPCPROCVAR}@{$endif}dir_openstrings);
|
||||
AddDirective('OUTPUT_FORMAT',directive_all, {$ifdef FPCPROCVAR}@{$endif}dir_output_format);
|
||||
AddDirective('OVERFLOWCHECKS',directive_all, {$ifdef FPCPROCVAR}@{$endif}dir_overflowchecks);
|
||||
AddDirective('PACKENUM',directive_all, {$ifdef FPCPROCVAR}@{$endif}dir_packenum);
|
||||
AddDirective('PACKRECORDS',directive_all, {$ifdef FPCPROCVAR}@{$endif}dir_packrecords);
|
||||
{$IFDEF TestVarsets}
|
||||
AddDirective('PACKSET',{$ifdef FPCPROCVAR}@{$endif}dir_packset);
|
||||
AddDirective('PACKSET',directive_all, {$ifdef FPCPROCVAR}@{$endif}dir_packset);
|
||||
{$ENDIF}
|
||||
AddDirective('PROFILE',{$ifdef FPCPROCVAR}@{$endif}dir_profile);
|
||||
AddDirective('R',{$ifdef FPCPROCVAR}@{$endif}dir_resource);
|
||||
AddDirective('RANGECHECKS',{$ifdef FPCPROCVAR}@{$endif}dir_rangechecks);
|
||||
AddDirective('REFERENCEINFO',{$ifdef FPCPROCVAR}@{$endif}dir_referenceinfo);
|
||||
AddDirective('SATURATION',{$ifdef FPCPROCVAR}@{$endif}dir_saturation);
|
||||
AddDirective('SCREENNAME',{$ifdef FPCPROCVAR}@{$endif}dir_screenname);
|
||||
AddDirective('SMARTLINK',{$ifdef FPCPROCVAR}@{$endif}dir_smartlink);
|
||||
AddDirective('STACKFRAMES',{$ifdef FPCPROCVAR}@{$endif}dir_stackframes);
|
||||
AddDirective('STATIC',{$ifdef FPCPROCVAR}@{$endif}dir_static);
|
||||
AddDirective('STOP',{$ifdef FPCPROCVAR}@{$endif}dir_stop);
|
||||
AddDirective('THREADING',{$ifdef FPCPROCVAR}@{$endif}dir_threading);
|
||||
AddDirective('THREADNAME',{$ifdef FPCPROCVAR}@{$endif}dir_threadname);
|
||||
AddDirective('TYPEDADDRESS',{$ifdef FPCPROCVAR}@{$endif}dir_typedaddress);
|
||||
AddDirective('TYPEINFO',{$ifdef FPCPROCVAR}@{$endif}dir_typeinfo);
|
||||
AddDirective('UNITPATH',{$ifdef FPCPROCVAR}@{$endif}dir_unitpath);
|
||||
AddDirective('VARSTRINGCHECKS',{$ifdef FPCPROCVAR}@{$endif}dir_varstringchecks);
|
||||
AddDirective('VERSION',{$ifdef FPCPROCVAR}@{$endif}dir_version);
|
||||
AddDirective('WAIT',{$ifdef FPCPROCVAR}@{$endif}dir_wait);
|
||||
AddDirective('WARNING',{$ifdef FPCPROCVAR}@{$endif}dir_warning);
|
||||
AddDirective('WARNINGS',{$ifdef FPCPROCVAR}@{$endif}dir_warnings);
|
||||
AddDirective('WRITEABLECONST',{$ifdef FPCPROCVAR}@{$endif}dir_writeableconst);
|
||||
AddDirective('Z1',{$ifdef FPCPROCVAR}@{$endif}dir_z1);
|
||||
AddDirective('Z2',{$ifdef FPCPROCVAR}@{$endif}dir_z2);
|
||||
AddDirective('Z4',{$ifdef FPCPROCVAR}@{$endif}dir_z4);
|
||||
AddDirective('PROFILE',directive_all, {$ifdef FPCPROCVAR}@{$endif}dir_profile);
|
||||
AddDirective('R',directive_all, {$ifdef FPCPROCVAR}@{$endif}dir_resource);
|
||||
AddDirective('RANGECHECKS',directive_all, {$ifdef FPCPROCVAR}@{$endif}dir_rangechecks);
|
||||
AddDirective('REFERENCEINFO',directive_all, {$ifdef FPCPROCVAR}@{$endif}dir_referenceinfo);
|
||||
AddDirective('SATURATION',directive_all, {$ifdef FPCPROCVAR}@{$endif}dir_saturation);
|
||||
AddDirective('SCREENNAME',directive_all, {$ifdef FPCPROCVAR}@{$endif}dir_screenname);
|
||||
AddDirective('SMARTLINK',directive_all, {$ifdef FPCPROCVAR}@{$endif}dir_smartlink);
|
||||
AddDirective('STACKFRAMES',directive_all, {$ifdef FPCPROCVAR}@{$endif}dir_stackframes);
|
||||
AddDirective('STATIC',directive_all, {$ifdef FPCPROCVAR}@{$endif}dir_static);
|
||||
AddDirective('STOP',directive_all, {$ifdef FPCPROCVAR}@{$endif}dir_stop);
|
||||
AddDirective('THREADING',directive_all, {$ifdef FPCPROCVAR}@{$endif}dir_threading);
|
||||
AddDirective('THREADNAME',directive_all, {$ifdef FPCPROCVAR}@{$endif}dir_threadname);
|
||||
AddDirective('TYPEDADDRESS',directive_all, {$ifdef FPCPROCVAR}@{$endif}dir_typedaddress);
|
||||
AddDirective('TYPEINFO',directive_all, {$ifdef FPCPROCVAR}@{$endif}dir_typeinfo);
|
||||
AddDirective('UNITPATH',directive_all, {$ifdef FPCPROCVAR}@{$endif}dir_unitpath);
|
||||
AddDirective('VARSTRINGCHECKS',directive_all, {$ifdef FPCPROCVAR}@{$endif}dir_varstringchecks);
|
||||
AddDirective('VERSION',directive_all, {$ifdef FPCPROCVAR}@{$endif}dir_version);
|
||||
AddDirective('WAIT',directive_all, {$ifdef FPCPROCVAR}@{$endif}dir_wait);
|
||||
AddDirective('WARNING',directive_all, {$ifdef FPCPROCVAR}@{$endif}dir_warning);
|
||||
AddDirective('WARNINGS',directive_all, {$ifdef FPCPROCVAR}@{$endif}dir_warnings);
|
||||
AddDirective('WRITEABLECONST',directive_all, {$ifdef FPCPROCVAR}@{$endif}dir_writeableconst);
|
||||
AddDirective('Z1',directive_all, {$ifdef FPCPROCVAR}@{$endif}dir_z1);
|
||||
AddDirective('Z2',directive_all, {$ifdef FPCPROCVAR}@{$endif}dir_z2);
|
||||
AddDirective('Z4',directive_all, {$ifdef FPCPROCVAR}@{$endif}dir_z4);
|
||||
end;
|
||||
|
||||
|
||||
@ -983,7 +983,11 @@ implementation
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.25 2003-03-23 23:20:38 hajny
|
||||
Revision 1.26 2003-09-17 22:30:19 olle
|
||||
+ support for a different set of compiler directives under $MODE MAC
|
||||
+ added mac directives $SETC $IFC $ELSEC $ENDC
|
||||
|
||||
Revision 1.25 2003/03/23 23:20:38 hajny
|
||||
+ emx target added
|
||||
|
||||
Revision 1.24 2003/01/03 21:25:01 peter
|
||||
|
||||
@ -180,15 +180,16 @@ interface
|
||||
|
||||
current_scanner : tscannerfile; { current scanner in use }
|
||||
|
||||
scannerdirectives : tdictionary; { dictionary with the supported directives }
|
||||
|
||||
aktcommentstyle : tcommentstyle; { needed to use read_comment from directives }
|
||||
{$ifdef PREPROCWRITE}
|
||||
preprocfile : tpreprocfile; { used with only preprocessing }
|
||||
{$endif PREPROCWRITE}
|
||||
|
||||
procedure adddirective(const s:string;p:tdirectiveproc);
|
||||
procedure addconditional(const s:string;p:tdirectiveproc);
|
||||
type
|
||||
tdirectivemode = (directive_all, directive_turbo, directive_mac);
|
||||
|
||||
procedure AddDirective(const s:string; dm: tdirectivemode; p:tdirectiveproc);
|
||||
procedure AddConditional(const s:string; dm: tdirectivemode; p:tdirectiveproc);
|
||||
|
||||
procedure InitScanner;
|
||||
procedure DoneScanner;
|
||||
@ -207,6 +208,12 @@ implementation
|
||||
switches,
|
||||
fmodule;
|
||||
|
||||
var
|
||||
{ dictionaries with the supported directives }
|
||||
turbo_scannerdirectives : tdictionary; { for other modes }
|
||||
mac_scannerdirectives : tdictionary; { for mode mac }
|
||||
|
||||
|
||||
{*****************************************************************************
|
||||
Helper routines
|
||||
*****************************************************************************}
|
||||
@ -309,7 +316,7 @@ implementation
|
||||
end;
|
||||
|
||||
|
||||
procedure dir_if;
|
||||
function parse_compiler_expr:string;
|
||||
|
||||
function read_expr : string; forward;
|
||||
|
||||
@ -522,16 +529,21 @@ implementation
|
||||
read_expr:='0';
|
||||
end;
|
||||
|
||||
var
|
||||
hs : string;
|
||||
begin
|
||||
begin
|
||||
current_scanner.skipspace;
|
||||
{ start preproc expression scanner }
|
||||
current_scanner.preproc_token:=current_scanner.readpreproc;
|
||||
hs:=read_expr;
|
||||
current_scanner.addpreprocstack(pp_if,hs<>'0',hs,scan_c_if_found);
|
||||
parse_compiler_expr:=read_expr;
|
||||
end;
|
||||
|
||||
procedure dir_if;
|
||||
|
||||
var
|
||||
hs : string;
|
||||
begin
|
||||
hs:=parse_compiler_expr;
|
||||
current_scanner.addpreprocstack(pp_if,hs<>'0',hs,scan_c_if_found);
|
||||
end;
|
||||
|
||||
procedure dir_define;
|
||||
var
|
||||
@ -625,6 +637,68 @@ implementation
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure dir_setc;
|
||||
var
|
||||
hs : string;
|
||||
mac : tmacro;
|
||||
begin
|
||||
current_scanner.skipspace;
|
||||
hs:=current_scanner.readid;
|
||||
mac:=tmacro(current_scanner.macros.search(hs));
|
||||
if not assigned(mac) then
|
||||
begin
|
||||
mac:=tmacro.create(hs);
|
||||
mac.defined:=true;
|
||||
Message1(parser_c_macro_defined,mac.name);
|
||||
current_scanner.macros.insert(mac);
|
||||
end
|
||||
else
|
||||
begin
|
||||
Message1(parser_c_macro_defined,mac.name);
|
||||
mac.defined:=true;
|
||||
{ delete old definition }
|
||||
if assigned(mac.buftext) then
|
||||
begin
|
||||
freemem(mac.buftext,mac.buflen);
|
||||
mac.buftext:=nil;
|
||||
end;
|
||||
end;
|
||||
mac.is_used:=true;
|
||||
|
||||
|
||||
{ key words are never substituted }
|
||||
if is_keyword(hs) then
|
||||
Message(scan_e_keyword_cant_be_a_macro);
|
||||
{ !!!!!! handle macro params, need we this? }
|
||||
current_scanner.skipspace;
|
||||
{ may be a macro? }
|
||||
|
||||
//both versions with := and = are allowed
|
||||
if c=':' then
|
||||
current_scanner.readchar;
|
||||
|
||||
if c='=' then
|
||||
begin
|
||||
current_scanner.readchar;
|
||||
hs:= parse_compiler_expr;
|
||||
if length(hs) <> 0 then
|
||||
begin
|
||||
{ free buffer of macro ?}
|
||||
if assigned(mac.buftext) then
|
||||
freemem(mac.buftext,mac.buflen);
|
||||
{ get new mem }
|
||||
getmem(mac.buftext,length(hs));
|
||||
mac.buflen:=length(hs);
|
||||
{ copy the text }
|
||||
move(hs[1],mac.buftext^,mac.buflen);
|
||||
end
|
||||
else
|
||||
Message(scan_e_preproc_syntax_error);
|
||||
end
|
||||
else
|
||||
Message(scan_e_preproc_syntax_error);
|
||||
end;
|
||||
|
||||
|
||||
procedure dir_undef;
|
||||
var
|
||||
@ -1376,7 +1450,10 @@ implementation
|
||||
Message(scan_c_skipping_until);
|
||||
repeat
|
||||
current_scanner.skipuntildirective;
|
||||
p:=tdirectiveitem(scannerdirectives.search(current_scanner.readid));
|
||||
if not (m_mac in aktmodeswitches) then
|
||||
p:=tdirectiveitem(turbo_scannerdirectives.search(current_scanner.readid))
|
||||
else
|
||||
p:=tdirectiveitem(mac_scannerdirectives.search(current_scanner.readid));
|
||||
until assigned(p) and (p.is_conditional);
|
||||
current_scanner.gettokenpos;
|
||||
Message1(scan_d_handling_switch,'$'+p.name);
|
||||
@ -1448,7 +1525,11 @@ implementation
|
||||
{ directives may follow switches after a , }
|
||||
if hs<>'' then
|
||||
begin
|
||||
t:=tdirectiveitem(scannerdirectives.search(hs));
|
||||
if not (m_mac in aktmodeswitches) then
|
||||
t:=tdirectiveitem(turbo_scannerdirectives.search(hs))
|
||||
else
|
||||
t:=tdirectiveitem(mac_scannerdirectives.search(hs));
|
||||
|
||||
if assigned(t) then
|
||||
begin
|
||||
if t.is_conditional then
|
||||
@ -2767,18 +2848,22 @@ exit_label:
|
||||
Helpers
|
||||
*****************************************************************************}
|
||||
|
||||
procedure adddirective(const s:string;p:tdirectiveproc);
|
||||
procedure AddDirective(const s:string; dm: tdirectivemode; p:tdirectiveproc);
|
||||
begin
|
||||
scannerdirectives.insert(tdirectiveitem.create(s,p));
|
||||
if dm in [directive_all, directive_turbo] then
|
||||
turbo_scannerdirectives.insert(tdirectiveitem.create(s,p));
|
||||
if dm in [directive_all, directive_mac] then
|
||||
mac_scannerdirectives.insert(tdirectiveitem.create(s,p));
|
||||
end;
|
||||
|
||||
|
||||
procedure addconditional(const s:string;p:tdirectiveproc);
|
||||
procedure AddConditional(const s:string; dm: tdirectivemode; p:tdirectiveproc);
|
||||
begin
|
||||
scannerdirectives.insert(tdirectiveitem.createcond(s,p));
|
||||
if dm in [directive_all, directive_turbo] then
|
||||
turbo_scannerdirectives.insert(tdirectiveitem.createcond(s,p));
|
||||
if dm in [directive_all, directive_mac] then
|
||||
mac_scannerdirectives.insert(tdirectiveitem.createcond(s,p));
|
||||
end;
|
||||
|
||||
|
||||
{*****************************************************************************
|
||||
Initialization
|
||||
*****************************************************************************}
|
||||
@ -2786,25 +2871,34 @@ exit_label:
|
||||
procedure InitScanner;
|
||||
begin
|
||||
InitWideString(patternw);
|
||||
scannerdirectives:=TDictionary.Create;
|
||||
{ Default directives }
|
||||
AddDirective('DEFINE',{$ifdef FPCPROCVAR}@{$endif}dir_define);
|
||||
AddDirective('UNDEF',{$ifdef FPCPROCVAR}@{$endif}dir_undef);
|
||||
AddDirective('I',{$ifdef FPCPROCVAR}@{$endif}dir_include);
|
||||
AddDirective('INCLUDE',{$ifdef FPCPROCVAR}@{$endif}dir_include);
|
||||
{ Default conditionals }
|
||||
AddConditional('ELSE',{$ifdef FPCPROCVAR}@{$endif}dir_else);
|
||||
AddConditional('ENDIF',{$ifdef FPCPROCVAR}@{$endif}dir_endif);
|
||||
AddConditional('IF',{$ifdef FPCPROCVAR}@{$endif}dir_if);
|
||||
AddConditional('IFDEF',{$ifdef FPCPROCVAR}@{$endif}dir_ifdef);
|
||||
AddConditional('IFNDEF',{$ifdef FPCPROCVAR}@{$endif}dir_ifndef);
|
||||
AddConditional('IFOPT',{$ifdef FPCPROCVAR}@{$endif}dir_ifopt);
|
||||
turbo_scannerdirectives:=TDictionary.Create;
|
||||
mac_scannerdirectives:=TDictionary.Create;
|
||||
|
||||
{ Default Turbo directives and conditionals }
|
||||
AddDirective('DEFINE',directive_turbo, {$ifdef FPCPROCVAR}@{$endif}dir_define);
|
||||
AddDirective('UNDEF',directive_turbo, {$ifdef FPCPROCVAR}@{$endif}dir_undef);
|
||||
AddDirective('I',directive_turbo, {$ifdef FPCPROCVAR}@{$endif}dir_include);
|
||||
AddDirective('INCLUDE',directive_turbo, {$ifdef FPCPROCVAR}@{$endif}dir_include);
|
||||
|
||||
AddConditional('ELSE',directive_turbo, {$ifdef FPCPROCVAR}@{$endif}dir_else);
|
||||
AddConditional('ENDIF',directive_turbo, {$ifdef FPCPROCVAR}@{$endif}dir_endif);
|
||||
AddConditional('IF',directive_turbo, {$ifdef FPCPROCVAR}@{$endif}dir_if);
|
||||
AddConditional('IFDEF',directive_turbo, {$ifdef FPCPROCVAR}@{$endif}dir_ifdef);
|
||||
AddConditional('IFNDEF',directive_turbo, {$ifdef FPCPROCVAR}@{$endif}dir_ifndef);
|
||||
AddConditional('IFOPT',directive_turbo, {$ifdef FPCPROCVAR}@{$endif}dir_ifopt);
|
||||
|
||||
{ Default Mac directives and conditionals: }
|
||||
AddDirective('SETC',directive_mac, {$ifdef FPCPROCVAR}@{$endif}dir_setc);
|
||||
AddConditional('IFC',directive_mac, {$ifdef FPCPROCVAR}@{$endif}dir_if);
|
||||
AddConditional('ELSEC',directive_mac, {$ifdef FPCPROCVAR}@{$endif}dir_else);
|
||||
AddConditional('ENDC',directive_mac, {$ifdef FPCPROCVAR}@{$endif}dir_endif);
|
||||
end;
|
||||
|
||||
|
||||
procedure DoneScanner;
|
||||
begin
|
||||
scannerdirectives.Free;
|
||||
turbo_scannerdirectives.Free;
|
||||
mac_scannerdirectives.Free;
|
||||
DoneWideString(patternw);
|
||||
end;
|
||||
|
||||
@ -2812,7 +2906,11 @@ exit_label:
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.61 2003-09-03 11:18:37 florian
|
||||
Revision 1.62 2003-09-17 22:30:19 olle
|
||||
+ support for a different set of compiler directives under $MODE MAC
|
||||
+ added mac directives $SETC $IFC $ELSEC $ENDC
|
||||
|
||||
Revision 1.61 2003/09/03 11:18:37 florian
|
||||
* fixed arm concatcopy
|
||||
+ arm support in the common compiler sources added
|
||||
* moved some generic cg code around
|
||||
|
||||
Loading…
Reference in New Issue
Block a user