diff --git a/compiler/scandir.pas b/compiler/scandir.pas index 8ac1dfcccc..34e2ed3313 100644 --- a/compiler/scandir.pas +++ b/compiler/scandir.pas @@ -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 diff --git a/compiler/scanner.pas b/compiler/scanner.pas index 36c31ad769..f679df17e6 100644 --- a/compiler/scanner.pas +++ b/compiler/scanner.pas @@ -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