DEADSOFTWARE

changed license to GPLv3 only; sorry, no trust to FSF anymore
[d2df-sdl.git] / src / shared / exoma.pas
index ec9bbf8b40d0d83f62e97ef3577ce54bf40ba535..be3de720219d9935d04be0aea6aa633322688127 100644 (file)
@@ -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