瀏覽代碼

Merged revisions 535,537 via svnmerge from
/trunk

git-svn-id: branches/fixes_2_0@660 -

peter 20 年之前
父節點
當前提交
85954aecee
共有 5 個文件被更改,包括 45 次插入1 次删除
  1. 2 0
      .gitattributes
  2. 1 1
      compiler/parabase.pas
  3. 13 0
      compiler/symdef.pas
  4. 18 0
      tests/webtbs/tw4140.pp
  5. 11 0
      tests/webtbs/uw4140.pp

+ 2 - 0
.gitattributes

@@ -5948,6 +5948,7 @@ tests/webtbs/tw4089.pp svneol=native#text/plain
 tests/webtbs/tw4093.pp svneol=native#text/plain
 tests/webtbs/tw4115.pp svneol=native#text/plain
 tests/webtbs/tw4119.pp svneol=native#text/plain
+tests/webtbs/tw4140.pp svneol=native#text/plain
 tests/webtbs/tw4150.pp svneol=native#text/plain
 tests/webtbs/tw4155.pp svneol=native#text/plain
 tests/webtbs/tw4188.pp svneol=native#text/plain
@@ -5987,6 +5988,7 @@ tests/webtbs/uw3429.pp svneol=native#text/plain
 tests/webtbs/uw3474a.pp svneol=native#text/plain
 tests/webtbs/uw3474b.pp svneol=native#text/plain
 tests/webtbs/uw3968.pp svneol=native#text/plain
+tests/webtbs/uw4140.pp svneol=native#text/plain
 utils/Makefile svneol=native#text/plain
 utils/Makefile.fpc svneol=native#text/plain
 utils/README -text

+ 1 - 1
compiler/parabase.pas

@@ -237,7 +237,7 @@ implementation
         I1 : tparavarsym absolute Item1;
         I2 : tparavarsym absolute Item2;
       begin
-        Result:=I1.paranr-I2.paranr;
+        Result:=longint(I1.paranr)-longint(I2.paranr);
       end;
 
 

+ 13 - 0
compiler/symdef.pas

@@ -684,6 +684,7 @@ interface
           procedure ppuwrite(ppufile:tcompilerppufile);override;
           procedure buildderef;override;
           procedure deref;override;
+          procedure derefimpl;override;
           function  gettypename:string;override;
           function  is_publishable : boolean;override;
           procedure calcsavesize;
@@ -1779,6 +1780,18 @@ implementation
       end;
 
 
+    procedure tenumdef.derefimpl;
+      begin
+        if assigned(basedef) and
+           (firstenum=nil) then
+          begin
+            firstenum:=basedef.firstenum;
+            while assigned(firstenum) and (tenumsym(firstenum).value<>minval) do
+              firstenum:=tenumsym(firstenum).nextenum;
+          end;
+      end;
+
+
     destructor tenumdef.destroy;
       begin
         inherited destroy;

+ 18 - 0
tests/webtbs/tw4140.pp

@@ -0,0 +1,18 @@
+{ %recompile }
+unit tw4140;
+
+interface
+
+implementation
+
+uses uw4140;
+
+procedure Foo;
+var Enum: TMySubEnum;
+begin
+  { Any of two lines below causes "Internal error 309993" }
+  Writeln(Ord(Low(TMySubEnum)));
+  Writeln(Ord(Low(Enum)));
+end;
+
+end.

+ 11 - 0
tests/webtbs/uw4140.pp

@@ -0,0 +1,11 @@
+unit uw4140;
+
+interface
+
+type
+  TMyEnum = (meOne, meTwo, meThree);
+  TMySubEnum = meOne .. meTwo;
+
+implementation
+
+end.