fix dangling pointer issues in ext2dr
[lunaix-os.git] / lunaix-os / scripts / build-tools / lcfg / common.py
index b409f1d9b7a17423c739f5333d0d072ba9c8e633..383d1ecc9e737366298bfca71be8f5a8c8ad9c35 100644 (file)
@@ -1,7 +1,7 @@
 import os.path as path
 import ast, json
 
-from .lcnodes import LCModuleNode
+from .lcnodes import LCModuleNode, LCTermNode
 from .api import (
     ConfigLoadException, 
     Renderable
@@ -75,7 +75,8 @@ class DependencyGraph:
             if current in self._edges:
                 for x in self._edges[current]:
                     q.append(x)
-            current.evaluate()
+            if current != start:
+                current.evaluate()
 
 class ConfigTypeFactory:
     def __init__(self) -> None:
@@ -113,7 +114,7 @@ class LConfigEnvironment(Renderable):
         super().__init__()
         
         self.__ws_path = path.abspath(workspace)
-        self.__exec_globl = globals()
+        self.__exec_globl = {}
         self.__eval_stack = []
         self.__lc_modules = []
         self.__config_val = {}
@@ -188,6 +189,14 @@ class LConfigEnvironment(Renderable):
     def lookup_value(self, key):
         return self.__config_val[key]
     
+    def resolve_symbol(self, sym):
+        term_node = self.__node_table[sym]
+        if isinstance(term_node, LCTermNode):
+            if not term_node.is_ready():
+                term_node.evaluate()
+            return term_node.get_value()
+        raise Exception(f"fail to resolve symbol: {sym}, not resolvable")
+        
     def dependency(self):
         return self.__deps_graph