Browse Source

Fixed updating of objects for constructors as well; added
CachedException

Yentl Van Tendeloo 8 years ago
parent
commit
4bbc8f483f

+ 3 - 0
interface/HUTN/hutn_compiler/cached_exception.py

@@ -0,0 +1,3 @@
+class CachedException(Exception):
+    def __init__(self):
+        Exception.__init__(self)

+ 8 - 4
interface/HUTN/hutn_compiler/compiler.py

@@ -5,6 +5,7 @@ import sys
 from grammar_compiler_visitor import GrammarCompilerVisitor
 from grammar_compiler_visitor import GrammarCompilerVisitor
 from hutnparser import Parser, Tree
 from hutnparser import Parser, Tree
 from meta_grammar import Grammar
 from meta_grammar import Grammar
+from cached_exception import CachedException
 
 
 global parsers
 global parsers
 parsers = {}
 parsers = {}
@@ -159,10 +160,13 @@ def main(input_file, grammar_file, mode, args=[], symbols=None):
         "M" : [ModelVisitor],
         "M" : [ModelVisitor],
         "MO" : [ModelObjectVisitor],
         "MO" : [ModelObjectVisitor],
     }
     }
-    visitors = [v(args) for v in modes[mode]]
-    result = do_compile(input_file, grammar_file, visitors)
-    if symbols is not None and getattr(visitors[-1], "object_symbols", None) is not None:
-        symbols.update(visitors[-1].object_symbols)
+    try:
+        visitors = [v(args) for v in modes[mode]]
+        result = do_compile(input_file, grammar_file, visitors)
+        if symbols is not None and mode == "BS":
+            symbols.update(visitors[-1].object_symbols)
+    except CachedException:
+        return True
     return result
     return result
 
 
 if __name__ == "__main__":
 if __name__ == "__main__":

+ 2 - 5
interface/HUTN/hutn_compiler/constructors_object_visitor.py

@@ -1,4 +1,5 @@
 from constructors_visitor import ConstructorsVisitor
 from constructors_visitor import ConstructorsVisitor
+from cached_exception import CachedException
 
 
 import urllib
 import urllib
 import urllib2
 import urllib2
@@ -42,13 +43,9 @@ class ConstructorsObjectVisitor(ConstructorsVisitor):
             # Is defined already, so let's compare hashes
             # Is defined already, so let's compare hashes
             if v != self.hash_file:
             if v != self.hash_file:
                 print("[COMPILE] %s" % simple_filename)
                 print("[COMPILE] %s" % simple_filename)
-
-                # Remove in Modelverse and recompile
-                flush_data([3, "remove_obj", self.obj_file])
             else:
             else:
-                self.visit = lambda i: i
-                self.dump = lambda: True
                 print("[CACHED] %s" % simple_filename)
                 print("[CACHED] %s" % simple_filename)
+                raise CachedException()
 
 
     def dump(self):
     def dump(self):
         v = ConstructorsVisitor.dump(self)
         v = ConstructorsVisitor.dump(self)

+ 2 - 2
interface/HUTN/hutn_compiler/primitives_object_visitor.py

@@ -1,5 +1,6 @@
 import string
 import string
 from primitives_visitor import PrimitivesVisitor
 from primitives_visitor import PrimitivesVisitor
+from cached_exception import CachedException
 
 
 import urllib
 import urllib
 import urllib2
 import urllib2
@@ -43,9 +44,8 @@ class PrimitivesObjectVisitor(PrimitivesVisitor):
             if v != self.hash_file:
             if v != self.hash_file:
                 print("[COMPILE] %s" % simple_filename)
                 print("[COMPILE] %s" % simple_filename)
             else:
             else:
-                self.visit = lambda i: i
-                self.dump = lambda: True
                 print("[CACHED] %s" % simple_filename)
                 print("[CACHED] %s" % simple_filename)
+                raise CachedException()
 
 
     def dump(self):
     def dump(self):
         v = PrimitivesVisitor.dump(self)
         v = PrimitivesVisitor.dump(self)