Просмотр исходного кода

Fix cycling of the compiler by ensuring that "(parent)helperdef" in "_with_statement" is Nil if search_last_objectpascal_helper failed.

git-svn-id: branches/svenbarth/classhelpers@17876 -
svenbarth 14 лет назад
Родитель
Сommit
c3d3f5b53d
1 измененных файлов с 4 добавлено и 2 удалено
  1. 4 2
      compiler/pstatmnt.pas

+ 4 - 2
compiler/pstatmnt.pas

@@ -530,7 +530,8 @@ implementation
            pushobjchild(withdef,obj.childof);
            pushobjchild(withdef,obj.childof);
            { we need to look for helpers that were defined for the parent
            { we need to look for helpers that were defined for the parent
              class as well }
              class as well }
-           search_last_objectpascal_helper(obj,current_structdef,parenthelperdef);
+           if not search_last_objectpascal_helper(obj,current_structdef,parenthelperdef) then
+             parenthelperdef:=nil;
            { push the symtables of the helper's parents in reverse order }
            { push the symtables of the helper's parents in reverse order }
            if assigned(parenthelperdef) then
            if assigned(parenthelperdef) then
              pushobjchild(withdef,parenthelperdef.childof);
              pushobjchild(withdef,parenthelperdef.childof);
@@ -647,7 +648,8 @@ implementation
               extendeddef:=tobjectdef(tclassrefdef(p.resultdef).pointeddef)
               extendeddef:=tobjectdef(tclassrefdef(p.resultdef).pointeddef)
             else
             else
               extendeddef:=tabstractrecorddef(p.resultdef);
               extendeddef:=tabstractrecorddef(p.resultdef);
-            search_last_objectpascal_helper(extendeddef,current_structdef,helperdef);
+            if not search_last_objectpascal_helper(extendeddef,current_structdef,helperdef) then
+              helperdef:=nil;
             { Note: the symtable of the helper is pushed after the following
             { Note: the symtable of the helper is pushed after the following
                     "case", the symtables of the helper's parents are passed in
                     "case", the symtables of the helper's parents are passed in
                     the "case" branches }
                     the "case" branches }