X-Git-Url: http://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Fshared%2Fexoma.pas;h=be3de720219d9935d04be0aea6aa633322688127;hb=a0e1ce4f7986812acc44a4169d2daf8559c89973;hp=ec9bbf8b40d0d83f62e97ef3577ce54bf40ba535;hpb=31d174a428ef1235e1708b0738804b47e006cf5c;p=d2df-sdl.git diff --git a/src/shared/exoma.pas b/src/shared/exoma.pas index ec9bbf8..be3de72 100644 --- a/src/shared/exoma.pas +++ b/src/shared/exoma.pas @@ -1,9 +1,8 @@ -(* Copyright (C) DooM 2D:Forever Developers +(* Copyright (C) Doom 2D: Forever Developers * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * the Free Software Foundation, version 3 of the License ONLY. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -19,7 +18,9 @@ unit exoma; interface uses - typinfo, SysUtils, Variants, mempool, hashtable, xparser; + {$IFDEF USE_MEMPOOL}mempool,{$ENDIF} + typinfo, SysUtils, Variants, + hashtable, xparser; // ////////////////////////////////////////////////////////////////////////// // @@ -41,7 +42,7 @@ type // ////////////////////////////////////////////////////////////////////////// // type - TPropHash = class(TPoolObject) + TPropHash = class{$IFDEF USE_MEMPOOL}(TPoolObject){$ENDIF} private mClass: TClass; mNames: THashStrInt; @@ -59,7 +60,7 @@ type // ////////////////////////////////////////////////////////////////////////// // type - TExprConstList = class(TPoolObject) + TExprConstList = class{$IFDEF USE_MEMPOOL}(TPoolObject){$ENDIF} public function valid (const cname: AnsiString): Boolean; virtual; abstract; function get (const cname: AnsiString; out v: Variant): Boolean; virtual; abstract; @@ -68,7 +69,7 @@ type // ////////////////////////////////////////////////////////////////////////// // type - TExprScope = class(TPoolObject) + TExprScope = class{$IFDEF USE_MEMPOOL}(TPoolObject){$ENDIF} public class procedure error (const amsg: AnsiString); class procedure errorfmt (const afmt: AnsiString; const args: array of const); @@ -78,7 +79,7 @@ type procedure setField (obj: TObject; const afldname: AnsiString; var aval: Variant); virtual; end; - TExprBase = class(TPoolObject) + TExprBase = class{$IFDEF USE_MEMPOOL}(TPoolObject){$ENDIF} public class function coerce2bool (var v0: Variant): Boolean; class function toInt (var v: Variant): LongInt; @@ -345,7 +346,7 @@ var n: AnsiString; begin mClass := aklass; - mNames := hashNewStrInt(); + mNames := THashStrInt.Create(); pi := aklass.ClassInfo; pt := GetTypeData(pi); GetMem(pl, pt^.PropCount*sizeof(Pointer)); @@ -931,7 +932,7 @@ begin try while true do begin - while pr.eatTT(pr.TTSemi) do begin end; + while pr.eatDelim(';') do begin end; if (pr.tokType = pr.TTEOF) then break; e := parse(clist, pr, true); if (e = nil) then break; @@ -940,7 +941,7 @@ begin if (pr.tokType = pr.TTEOF) then break; //writeln('tt=', pr.tokType, ' <', pr.tokStr, '>'); //writeln(r.toString()); - pr.expectTT(pr.TTSemi); + pr.expectDelim(';'); end; result := r; r := nil; @@ -1130,7 +1131,7 @@ class function TExprBase.parse (clist: TExprConstList; pr: TTextParser; allowAss e := doLogOr(); if neg then e := TUnExprNeg.Create(e); if allowAssign and pr.eatDelim('=') then e := TBinAssign.Create(e, expr()); - if not pr.eatTT(pr.TTComma) then + if not pr.eatDelim(',') then begin if (result = nil) then result := e else list.append(e); break; @@ -1162,7 +1163,7 @@ class function TExprBase.parse (clist: TExprConstList; pr: TTextParser; allowAss c.mCond := result; try c.mTrue := expr(); - pr.expectTT(pr.TTColon); + pr.expectDelim(':'); c.mFalse := expr(); result := c; except @@ -1172,16 +1173,16 @@ class function TExprBase.parse (clist: TExprConstList; pr: TTextParser; allowAss end; var - oas: Boolean; + oas: TTextParser.TOptions; begin if (pr = nil) or (pr.tokType = pr.TTEOF) then begin result := nil; exit; end; - oas := pr.allowSignedNumbers; + oas := pr.options; try - pr.allowSignedNumbers := false; + pr.options := pr.options-[pr.TOption.SignedNumbers]; try result := expr(); finally - pr.allowSignedNumbers := oas; + pr.options := oas; end; except on e: TExomaException do