* scannerdirectives to TFPHashObjectList

git-svn-id: trunk@5153 -
This commit is contained in:
peter 2006-11-01 16:32:13 +00:00
parent 0043aff24d
commit aee2da566d

View File

@ -57,12 +57,12 @@ interface
tdirectiveproc=procedure; tdirectiveproc=procedure;
tdirectiveitem = class(TNamedIndexItem) tdirectiveitem = class(TFPHashObject)
public public
is_conditional : boolean; is_conditional : boolean;
proc : tdirectiveproc; proc : tdirectiveproc;
constructor Create(const n:string;p:tdirectiveproc); constructor Create(AList:TFPHashObjectList;const n:string;p:tdirectiveproc);
constructor CreateCond(const n:string;p:tdirectiveproc); constructor CreateCond(AList:TFPHashObjectList;const n:string;p:tdirectiveproc);
end; end;
tcompile_time_predicate = function(var valuedescr: String) : Boolean; tcompile_time_predicate = function(var valuedescr: String) : Boolean;
@ -214,8 +214,8 @@ implementation
var var
{ dictionaries with the supported directives } { dictionaries with the supported directives }
turbo_scannerdirectives : tdictionary; { for other modes } turbo_scannerdirectives : TFPHashObjectList; { for other modes }
mac_scannerdirectives : tdictionary; { for mode mac } mac_scannerdirectives : TFPHashObjectList; { for mode mac }
{***************************************************************************** {*****************************************************************************
@ -1660,17 +1660,17 @@ In case not, the value returned can be arbitrary.
TDirectiveItem TDirectiveItem
*****************************************************************************} *****************************************************************************}
constructor TDirectiveItem.Create(const n:string;p:tdirectiveproc); constructor TDirectiveItem.Create(AList:TFPHashObjectList;const n:string;p:tdirectiveproc);
begin begin
inherited CreateName(n); inherited Create(AList,n);
is_conditional:=false; is_conditional:=false;
proc:=p; proc:=p;
end; end;
constructor TDirectiveItem.CreateCond(const n:string;p:tdirectiveproc); constructor TDirectiveItem.CreateCond(AList:TFPHashObjectList;const n:string;p:tdirectiveproc);
begin begin
inherited CreateName(n); inherited Create(AList,n);
is_conditional:=true; is_conditional:=true;
proc:=p; proc:=p;
end; end;
@ -2351,9 +2351,9 @@ In case not, the value returned can be arbitrary.
repeat repeat
current_scanner.skipuntildirective; current_scanner.skipuntildirective;
if not (m_mac in current_settings.modeswitches) then if not (m_mac in current_settings.modeswitches) then
p:=tdirectiveitem(turbo_scannerdirectives.search(current_scanner.readid)) p:=tdirectiveitem(turbo_scannerdirectives.Find(current_scanner.readid))
else else
p:=tdirectiveitem(mac_scannerdirectives.search(current_scanner.readid)); p:=tdirectiveitem(mac_scannerdirectives.Find(current_scanner.readid));
until assigned(p) and (p.is_conditional); until assigned(p) and (p.is_conditional);
current_scanner.gettokenpos; current_scanner.gettokenpos;
Message1(scan_d_handling_switch,'$'+p.name); Message1(scan_d_handling_switch,'$'+p.name);
@ -2426,9 +2426,9 @@ In case not, the value returned can be arbitrary.
if hs<>'' then if hs<>'' then
begin begin
if not (m_mac in current_settings.modeswitches) then if not (m_mac in current_settings.modeswitches) then
t:=tdirectiveitem(turbo_scannerdirectives.search(hs)) t:=tdirectiveitem(turbo_scannerdirectives.Find(hs))
else else
t:=tdirectiveitem(mac_scannerdirectives.search(hs)); t:=tdirectiveitem(mac_scannerdirectives.Find(hs));
if assigned(t) then if assigned(t) then
begin begin
@ -3993,17 +3993,17 @@ exit_label:
procedure AddDirective(const s:string; dm: tdirectivemode; p:tdirectiveproc); procedure AddDirective(const s:string; dm: tdirectivemode; p:tdirectiveproc);
begin begin
if dm in [directive_all, directive_turbo] then if dm in [directive_all, directive_turbo] then
turbo_scannerdirectives.insert(tdirectiveitem.create(s,p)); tdirectiveitem.create(turbo_scannerdirectives,s,p);
if dm in [directive_all, directive_mac] then if dm in [directive_all, directive_mac] then
mac_scannerdirectives.insert(tdirectiveitem.create(s,p)); tdirectiveitem.create(mac_scannerdirectives,s,p);
end; end;
procedure AddConditional(const s:string; dm: tdirectivemode; p:tdirectiveproc); procedure AddConditional(const s:string; dm: tdirectivemode; p:tdirectiveproc);
begin begin
if dm in [directive_all, directive_turbo] then if dm in [directive_all, directive_turbo] then
turbo_scannerdirectives.insert(tdirectiveitem.createcond(s,p)); tdirectiveitem.createcond(turbo_scannerdirectives,s,p);
if dm in [directive_all, directive_mac] then if dm in [directive_all, directive_mac] then
mac_scannerdirectives.insert(tdirectiveitem.createcond(s,p)); tdirectiveitem.createcond(mac_scannerdirectives,s,p);
end; end;
{***************************************************************************** {*****************************************************************************
@ -4013,8 +4013,8 @@ exit_label:
procedure InitScanner; procedure InitScanner;
begin begin
InitWideString(patternw); InitWideString(patternw);
turbo_scannerdirectives:=TDictionary.Create; turbo_scannerdirectives:=TFPHashObjectList.Create;
mac_scannerdirectives:=TDictionary.Create; mac_scannerdirectives:=TFPHashObjectList.Create;
{ Common directives and conditionals } { Common directives and conditionals }
AddDirective('I',directive_all, @dir_include); AddDirective('I',directive_all, @dir_include);