mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-19 19:49:20 +02:00
* scannerdirectives to TFPHashObjectList
git-svn-id: trunk@5153 -
This commit is contained in:
parent
0043aff24d
commit
aee2da566d
@ -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);
|
||||||
|
Loading…
Reference in New Issue
Block a user