瀏覽代碼

New bootstrapping process: no more exec with initializers in a dictionary, but instead directly invoke the global assignment

Yentl Van Tendeloo 7 年之前
父節點
當前提交
a359ed9329

+ 30 - 8
bootstrap/bootstrap.py

@@ -8,8 +8,8 @@ def bootstrap():
     root = ["__hierarchy"]
 
     task_manager = "task_manager"
-    initial_code_manager = "bootstrap/initial_code_manager.alc"
-    initial_code_task = "bootstrap/initial_code_task.alc"
+    main_file = "bootstrap/main.alc"
+    primitive_file = "bootstrap/primitives.alc"
 
     task_data = [   "input",
                     "output",
@@ -217,24 +217,46 @@ def bootstrap():
                     # Compile the subfile
                     bootstrap_file = bootstrap_file.replace("\\", "/")
                     print("[ALC] %s" % bootstrap_file)
-                    f.write(compile_code_AL(bootstrap_file, "initial_IP", prepend=bootstrap_file, main = bootstrap_file in [initial_code_manager, initial_code_task]), both=False)
+                    f.write(compile_code_AL(bootstrap_file, "initial_IP", prepend=bootstrap_file, main=bootstrap_file==main_file), both=False)
+
+                    # TODO all assigns stored in:
+                    #       bootstrap_file + "_initial_IP"
 
                     # Now link the code with the compilation manager structure
-                    f.write("Node elem()\n", both=False)
 
-                    f.write('Dict (__objects, "%s", elem)\n' % bootstrap_file, both=False)
-                    f.write('Dict (elem, "initializers", %s_initial_IP)\n' % bootstrap_file, both=False)
+                # Stitch all IPs together
+                print("[LINK]")
+                counter = 0
+                f.write('Node true(constant)\n', both=False)
+                f.write('Node t(True)\n', both=False)
+                f.write('Dict (true, "node", t)\n', both=False)
+
+                first = True
+                for bootstrap_file in [primitive_file] + [i for i in bootstrap_files if i not in [main_file, primitive_file]]:
+                    f.write('Node _if_%s(if)\n' % counter, both=False)
+                    f.write('Dict (_if_%s, "cond", true)\n' % counter, both=False)
+                    f.write('Dict (_if_%s, "then", %s_initial_IP)\n' % (counter, bootstrap_file), both=False)
+
+                    if first:
+                        first = False
+                    else:
+                        f.write('Dict (%s, "next", _if_%s)\n' % (prev, counter), both=False)
+
+                    prev = "_if_%s" % counter
+                    counter += 1
+
+                f.write('Dict (%s, "next", %s_initial_IP)\n' % (prev, main_file), both=False)
 
                 # Create code for initial task
                 print("[BOOT] task_manager")
-                f.write('Dict (task_frame, "IP", %s_initial_IP)\n' % (initial_code_manager), both=False)
+                f.write('Dict (task_frame, "IP", _if_0)\n', both=False)
 
                 f.write('Node __phase("init")\n', both=False)
                 f.write('Dict (task_frame, "phase", __phase)\n', both=False)
 
                 # Create code for new tasks to start at
                 print("[BOOT] new_task")
-                f.write('Dict (__hierarchy, "__IP", %s_initial_IP)\n' % initial_code_task, both=False)
+                f.write('Dict (__hierarchy, "__IP", _if_0)\n', both=False)
     except:
         os.remove("bootstrap/bootstrap.m.gz")
         os.remove("bootstrap/minimal.m.gz")

+ 0 - 21
bootstrap/initial_code_manager.alc

@@ -1,21 +0,0 @@
-include "bootstrap/primitives.alc"
-include "bootstrap/semi_primitives.alc"
-include "task_manager.alh"
-
-Void function __main():
-	Element root
-	root = read_root()
-	root = root["__hierarchy"]["objects"]
-	exec(root["bootstrap/constructors.alc"]["initializers"])
-	exec(root["bootstrap/library.alc"]["initializers"])
-	exec(root["bootstrap/object_operations.alc"]["initializers"])
-	exec(root["bootstrap/conformance_scd.alc"]["initializers"])
-	exec(root["bootstrap/.metamodels.alc"]["initializers"])
-	exec(root["bootstrap/modelling.alc"]["initializers"])
-	exec(root["bootstrap/task_manager.alc"]["initializers"])
-	exec(root["bootstrap/core_algorithm.alc"]["initializers"])
-	exec(root["bootstrap/utils.alc"]["initializers"])
-	exec(root["bootstrap/io.alc"]["initializers"])
-	exec(root["bootstrap/typing.alc"]["initializers"])
-	task_management()
-	return!

+ 0 - 30
bootstrap/initial_code_task.alc

@@ -1,30 +0,0 @@
-include "bootstrap/primitives.alc"
-include "bootstrap/semi_primitives.alc"
-include "core_algorithm.alh"
-
-Void mutable function __main():
-	Element root
-	root = read_root()
-	root = root["__hierarchy"]["objects"]
-	exec(root["bootstrap/.metamodels.alc"]["initializers"])
-	exec(root["bootstrap/mini_modify.alc"]["initializers"])
-	exec(root["bootstrap/core_algorithm.alc"]["initializers"])
-	exec(root["bootstrap/modelling.alc"]["initializers"])
-	exec(root["bootstrap/library.alc"]["initializers"])
-	exec(root["bootstrap/constructors.alc"]["initializers"])
-	exec(root["bootstrap/object_operations.alc"]["initializers"])
-	exec(root["bootstrap/model_management.alc"]["initializers"])
-	exec(root["bootstrap/ramify.alc"]["initializers"])
-	exec(root["bootstrap/transform.alc"]["initializers"])
-	exec(root["bootstrap/conformance_scd.alc"]["initializers"])
-	exec(root["bootstrap/random.alc"]["initializers"])
-	exec(root["bootstrap/utils.alc"]["initializers"])
-	exec(root["bootstrap/services.alc"]["initializers"])
-	exec(root["bootstrap/io.alc"]["initializers"])
-	exec(root["bootstrap/conformance_finding.alc"]["initializers"])
-	exec(root["bootstrap/typing.alc"]["initializers"])
-	exec(root["bootstrap/compiler.alc"]["initializers"])
-	exec(root["bootstrap/json.alc"]["initializers"])
-	exec(root["bootstrap/files.alc"]["initializers"])
-	new_task()
-	return!

+ 4 - 0
kernel/modelverse_kernel/main.py

@@ -583,6 +583,10 @@ class ModelverseKernel(object):
                                    ("CNV", ["finish"]),
                                   ]
             if variable is None:
+                globs, = yield [("RDK", [_globals])]
+                print("Globals: " + str(globs))
+                globs = yield [("RV", [i]) for i in globs]
+                print("Resolved globals: " + str(globs))
                 raise Exception(jit_runtime.GLOBAL_NOT_FOUND_MESSAGE_FORMAT % var_name)
 
             # Resolved a global, so this is a string

+ 1 - 1
wrappers/modelverse_SCCD.py

@@ -1,7 +1,7 @@
 """
 Generated by Statechart compiler by Glenn De Jonghe, Joeri Exelmans, Simon Van Mierlo, and Yentl Van Tendeloo (for the inspiration)
 
-Date:   Thu Apr  5 09:43:06 2018
+Date:   Thu Apr  5 16:36:37 2018
 
 Model author: Yentl Van Tendeloo
 Model name:   MvK Server