Browse Source

* Reworked raise parsing, now also supports raise X at Addr

git-svn-id: trunk@22082 -
michael 13 years ago
parent
commit
4c47beb7b7
2 changed files with 26 additions and 0 deletions
  1. 14 0
      packages/fcl-passrc/src/pastree.pp
  2. 12 0
      packages/fcl-passrc/src/pparser.pp

+ 14 - 0
packages/fcl-passrc/src/pastree.pp

@@ -1084,6 +1084,11 @@ type
   { TPasImplRaise }
 
   TPasImplRaise = class(TPasImplStatement)
+  public
+    destructor Destroy; override;
+  Public
+    ExceptObject,
+    ExceptAddr : TPasExpr;
   end;
 
   { TPassTreeVisitor }
@@ -1128,6 +1133,15 @@ implementation
 
 uses SysUtils;
 
+{ TPasImplRaise }
+
+destructor TPasImplRaise.Destroy;
+begin
+  FreeAndNil(ExceptObject);
+  FreeAndNil(ExceptAddr);
+  Inherited;
+end;
+
 { TPasImplRepeatUntil }
 
 destructor TPasImplRepeatUntil.Destroy;

+ 12 - 0
packages/fcl-passrc/src/pparser.pp

@@ -3301,6 +3301,18 @@ begin
       begin
       el:=TPasImplRaise(CreateElement(TPasImplRaise,'',CurBlock));
       CreateBlock(TPasImplRaise(el));
+      NextToken;
+      If Curtoken=tkSemicolon then
+        UnGetToken
+      else
+        begin
+        TPasImplRaise(el).ExceptObject:=DoParseExpression(el);
+        if (CurToken=tkIdentifier) and (Uppercase(CurtokenString)='AT') then
+          begin
+          NextToken;
+          TPasImplRaise(el).ExceptAddr:=DoParseExpression(el);
+          end;
+        end;
       end;
     tkend:
       begin