migrate stock user space build to new build system
[lunaix-os.git] / lunaix-os / scripts / build-tools / lcfg2 / nodes.py
index 703b8f96a6a25c5bfa7238c8706cc827b9abff45..3b423949d006859b17c2108d2595738603a2f028 100644 (file)
@@ -1,10 +1,14 @@
 import ast
 
-from lib.utils  import SourceLogger, Schema
+from lib.utils   import SourceLogger, Schema
 from .common     import NodeProperty, ConfigNodeError, NodeDependency
 from .lazy       import LazyLookup
 from .rewriter   import ConfigNodeASTRewriter
 
+from .ast_validator import NodeValidator
+from .rules import SyntaxRule
+
+validator = NodeValidator(SyntaxRule())
 
 class ConfigDecorator:
     Label       = Schema(ast.Constant)
@@ -36,8 +40,16 @@ class ConfigNode:
         NodeProperty.Readonly[self] = False
         NodeProperty.Status[self]   = "Empty"
 
-    def set_node_body(self, ast_nodes, rewriter = ConfigNodeASTRewriter):
-        new_ast = rewriter(self).visit(ast.Module(ast_nodes))
+    def set_node_body(self, ast_nodes):
+        self.__exec = ast.Module(ast_nodes, [])
+        
+    def apply_node_body(self, rewriter = ConfigNodeASTRewriter):
+        assert isinstance(self.__exec, ast.Module)
+
+        new_ast = self.__exec
+        validator.validate(self, new_ast)
+        
+        new_ast = rewriter(self).rewrite(new_ast)
         NodeDependency.try_create(self)
 
         fn_name = f"__fn_{self._name}"