mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2026-01-07 15:01:27 +01:00
* fix for mantis 16344 (quoted filename in $include ) + testparser example from that series of bugreports.
git-svn-id: trunk@15182 -
This commit is contained in:
parent
19a47dbf9d
commit
faf2bdfd62
1
.gitattributes
vendored
1
.gitattributes
vendored
@ -2054,6 +2054,7 @@ packages/fcl-net/src/win/resolve.inc svneol=native#text/plain
|
||||
packages/fcl-net/src/xmlrpc.pp svneol=native#text/plain
|
||||
packages/fcl-passrc/Makefile svneol=native#text/plain
|
||||
packages/fcl-passrc/Makefile.fpc svneol=native#text/plain
|
||||
packages/fcl-passrc/examples/test_parser.pp svneol=native#text/plain
|
||||
packages/fcl-passrc/fpmake.pp svneol=native#text/plain
|
||||
packages/fcl-passrc/src/pastree.pp svneol=native#text/plain
|
||||
packages/fcl-passrc/src/paswrite.pp svneol=native#text/plain
|
||||
|
||||
61
packages/fcl-passrc/examples/test_parser.pp
Normal file
61
packages/fcl-passrc/examples/test_parser.pp
Normal file
@ -0,0 +1,61 @@
|
||||
{$mode objfpc}{$H+}
|
||||
|
||||
uses SysUtils, Classes, PParser, PasTree;
|
||||
|
||||
type
|
||||
{ We have to override abstract TPasTreeContainer methods.
|
||||
See utils/fpdoc/dglobals.pp for an implementation of TFPDocEngine,
|
||||
a "real" engine. }
|
||||
TSimpleEngine = class(TPasTreeContainer)
|
||||
public
|
||||
function CreateElement(AClass: TPTreeElement; const AName: String;
|
||||
AParent: TPasElement; AVisibility: TPasMemberVisibility;
|
||||
const ASourceFilename: String; ASourceLinenumber: Integer): TPasElement;
|
||||
override;
|
||||
function FindElement(const AName: String): TPasElement; override;
|
||||
end;
|
||||
|
||||
function TSimpleEngine.CreateElement(AClass: TPTreeElement; const AName: String;
|
||||
AParent: TPasElement; AVisibility: TPasMemberVisibility;
|
||||
const ASourceFilename: String; ASourceLinenumber: Integer): TPasElement;
|
||||
begin
|
||||
Result := AClass.Create(AName, AParent);
|
||||
Result.Visibility := AVisibility;
|
||||
Result.SourceFilename := ASourceFilename;
|
||||
Result.SourceLinenumber := ASourceLinenumber;
|
||||
end;
|
||||
|
||||
function TSimpleEngine.FindElement(const AName: String): TPasElement;
|
||||
begin
|
||||
{ dummy implementation, see TFPDocEngine.FindElement for a real example }
|
||||
Result := nil;
|
||||
end;
|
||||
|
||||
var
|
||||
M: TPasModule;
|
||||
E: TPasTreeContainer;
|
||||
I: Integer;
|
||||
Decls: TList;
|
||||
begin
|
||||
if Paramcount<1 then
|
||||
begin
|
||||
// remember to put the whole cmdline in quotes, and
|
||||
// to always add some path options. Even if only -Fu. -Fi.
|
||||
writeln('usage: test_parser <commandline>');
|
||||
halt;
|
||||
end;
|
||||
E := TSimpleEngine.Create;
|
||||
try
|
||||
M := ParseSource(E, ParamStr(1), 'linux', 'i386');
|
||||
|
||||
{ Cool, we successfully parsed the unit.
|
||||
Now output some info about it. }
|
||||
Decls := M.InterfaceSection.Declarations;
|
||||
for I := 0 to Decls.Count - 1 do
|
||||
Writeln('Interface item ', I, ': ', (TObject(Decls[I]) as TPasElement).Name);
|
||||
|
||||
FreeAndNil(M);
|
||||
finally
|
||||
FreeAndNil(E)
|
||||
end;
|
||||
end.
|
||||
@ -986,6 +986,12 @@ begin
|
||||
IncludeStackItem.Row := CurRow;
|
||||
IncludeStackItem.TokenStr := TokenStr;
|
||||
FIncludeStack.Add(IncludeStackItem);
|
||||
if Length(Param)>1 then
|
||||
begin
|
||||
if (Param[1]=#39) and (Param[length(Param)]=#39) then
|
||||
param:=copy(param,2,length(param)-2);
|
||||
end;
|
||||
|
||||
FCurSourceFile := FileResolver.FindIncludeFile(Param);
|
||||
if not Assigned(CurSourceFile) then
|
||||
Error(SErrIncludeFileNotFound, [Param]);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user