* 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:
marco 2010-04-26 13:17:26 +00:00
parent 19a47dbf9d
commit faf2bdfd62
3 changed files with 68 additions and 0 deletions

1
.gitattributes vendored
View File

@ -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

View 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.

View File

@ -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]);