You've already forked lazarus-ccr
precompiler added
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@389 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
@ -14,10 +14,53 @@ program Project1;
|
||||
uses
|
||||
Classes, SysUtils, ObjCParserUtils, ObjCParserTypes;
|
||||
|
||||
type
|
||||
// this object is used only for precomile directives handling
|
||||
TPrecompileHandler = class(TObject)
|
||||
public
|
||||
hdr : TObjCHeader;
|
||||
procedure OnPrecompile(Sender: TObject);
|
||||
constructor Create(AHeader: TObjCHeader);
|
||||
end;
|
||||
|
||||
procedure TPrecompileHandler.OnPrecompile(Sender: TObject);
|
||||
var
|
||||
parser : TTextParser;
|
||||
preEntity : TPrecompiler;
|
||||
lst : TEntity;
|
||||
prc : TNotifyEvent;
|
||||
begin
|
||||
parser := Sender as TTextParser;
|
||||
//todo: change for something nicier =)
|
||||
prc := parser.OnPrecompile;
|
||||
parser.OnPrecompile := nil;
|
||||
try
|
||||
if parser.Stack.Count > 0 then
|
||||
lst := TEntity(parser.Stack[parser.Stack.Count-1])
|
||||
else
|
||||
lst := nil;
|
||||
|
||||
preEntity := TPrecompiler.Create(lst);
|
||||
preEntity.Parse(parser);
|
||||
//writeln('added to: ', lst.ClassName, ' ', preEntity._Directive + preEntity._Params);
|
||||
lst.Items.Add(preEntity);
|
||||
//write('// debug: ');
|
||||
//writeln('precompile: ', preEntity._Directive, ', params:', preEntity._Params);
|
||||
finally
|
||||
parser.OnPrecompile := prc;
|
||||
end;
|
||||
end;
|
||||
|
||||
constructor TPrecompileHandler.Create(AHeader: TObjCHeader);
|
||||
begin
|
||||
hdr := AHeader;
|
||||
end;
|
||||
|
||||
procedure ReadAndParseFile(const FileName: AnsiString; outdata: TStrings);
|
||||
var
|
||||
hdr : TObjCHeader;
|
||||
txt : TTextParser;
|
||||
prec : TPrecompileHandler;
|
||||
s : AnsiString;
|
||||
begin
|
||||
if not FileExists(FileName) then
|
||||
@ -25,11 +68,15 @@ begin
|
||||
|
||||
s := StrFromFile(FileName);
|
||||
hdr := TObjCHeader.Create;
|
||||
prec := TPrecompileHandler.Create(hdr);
|
||||
txt := TTextParser.Create;
|
||||
txt.TokenTable := CreateObjCTokenTable;
|
||||
|
||||
try
|
||||
txt.Buf := s;
|
||||
try
|
||||
txt.TokenTable.Precompile := '#';
|
||||
txt.OnPrecompile := prec.OnPrecompile;
|
||||
hdr._FileName := ExtractFileName(FileName);
|
||||
hdr.Parse(txt);
|
||||
except
|
||||
@ -39,6 +86,7 @@ begin
|
||||
hdr.Free;
|
||||
txt.TokenTable.Free;
|
||||
txt.Free;
|
||||
prec.Free;
|
||||
end;
|
||||
end;
|
||||
|
||||
|
Reference in New Issue
Block a user