X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/d15268ba6eadf89a38087995ff407f50418485fb..9d4cc53314b8e2a236401733ac6c7093c97d4351:/lunaix-os/scripts/build-tools/lcfg2/nodes.py diff --git a/lunaix-os/scripts/build-tools/lcfg2/nodes.py b/lunaix-os/scripts/build-tools/lcfg2/nodes.py index 703b8f9..3b42394 100644 --- a/lunaix-os/scripts/build-tools/lcfg2/nodes.py +++ b/lunaix-os/scripts/build-tools/lcfg2/nodes.py @@ -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}"