Browse Source

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

Yentl Van Tendeloo 7 years ago
parent
commit
a359ed9329

+ 30 - 8
bootstrap/bootstrap.py

@@ -8,8 +8,8 @@ def bootstrap():
     root = ["__hierarchy"]
     root = ["__hierarchy"]
 
 
     task_manager = "task_manager"
     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",
     task_data = [   "input",
                     "output",
                     "output",
@@ -217,24 +217,46 @@ def bootstrap():
                     # Compile the subfile
                     # Compile the subfile
                     bootstrap_file = bootstrap_file.replace("\\", "/")
                     bootstrap_file = bootstrap_file.replace("\\", "/")
                     print("[ALC] %s" % bootstrap_file)
                     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
                     # 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
                 # Create code for initial task
                 print("[BOOT] task_manager")
                 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('Node __phase("init")\n', both=False)
                 f.write('Dict (task_frame, "phase", __phase)\n', both=False)
                 f.write('Dict (task_frame, "phase", __phase)\n', both=False)
 
 
                 # Create code for new tasks to start at
                 # Create code for new tasks to start at
                 print("[BOOT] new_task")
                 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:
     except:
         os.remove("bootstrap/bootstrap.m.gz")
         os.remove("bootstrap/bootstrap.m.gz")
         os.remove("bootstrap/minimal.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"]),
                                    ("CNV", ["finish"]),
                                   ]
                                   ]
             if variable is None:
             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)
                 raise Exception(jit_runtime.GLOBAL_NOT_FOUND_MESSAGE_FORMAT % var_name)
 
 
             # Resolved a global, so this is a string
             # 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)
 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 author: Yentl Van Tendeloo
 Model name:   MvK Server
 Model name:   MvK Server