|
@@ -2,7 +2,6 @@ include "modelling.alh"
|
|
|
include "primitives.alh"
|
|
|
include "object_operations.alh"
|
|
|
include "model_management.alh"
|
|
|
-include "random.alh"
|
|
|
|
|
|
String function JSON_print(model : Element):
|
|
|
String result
|
|
@@ -135,94 +134,3 @@ Element function alphabet():
|
|
|
list_append(chars, "y")
|
|
|
list_append(chars, "z")
|
|
|
return chars!
|
|
|
-
|
|
|
-String function spawn_TODO(function : Element, arguments : Element):
|
|
|
- // Define a new task, with all the required stack information
|
|
|
- // This is taken from the "task_management" code
|
|
|
- Element task_root
|
|
|
- Element task_frame
|
|
|
- Element output_value
|
|
|
- Element input_value
|
|
|
-
|
|
|
- task_root = create_node()
|
|
|
- task_frame = create_node()
|
|
|
- output_value = create_node()
|
|
|
- input_value = create_node()
|
|
|
- dict_add_fast(task_root, "frame", task_frame)
|
|
|
- dict_add_fast(task_root, "globals", create_node())
|
|
|
- dict_add_fast(task_root, "output", output_value)
|
|
|
- dict_add_fast(task_root, "last_output", output_value)
|
|
|
- dict_add_fast(task_root, "input", input_value)
|
|
|
- dict_add_fast(task_root, "last_input", input_value)
|
|
|
- dict_add_fast(task_frame, "evalstack", create_node())
|
|
|
- dict_add_fast(task_frame, "returnvalue", create_node())
|
|
|
- dict_add_fast(task_frame, "phase", "init")
|
|
|
- dict_add_fast(task_frame, "IP", dict_read(dict_read(read_root(), "__hierarchy"), "__IP"))
|
|
|
- dict_add_fast(task_frame, "symbols", create_node())
|
|
|
-
|
|
|
- log("Setting IP to " + cast_value(function["body"]))
|
|
|
- log("Has outputs: " + set_to_string(dict_keys(function)))
|
|
|
-
|
|
|
- if (dict_in(function, "params")):
|
|
|
- // And add the arguments to the symbol table
|
|
|
- Element symbols
|
|
|
- String arg_names_call
|
|
|
- Element param_dict
|
|
|
- Integer arg_i
|
|
|
-
|
|
|
- symbols = task_frame["symbols"]
|
|
|
- arg_names_call = "abcdefghijklmnopqrstuvwxyz"
|
|
|
- arg_i = 0
|
|
|
- param_dict = function["params"]
|
|
|
-
|
|
|
- arguments = list_copy(arguments)
|
|
|
- Element t
|
|
|
- while (list_len(arguments) > 0):
|
|
|
- t = create_edge(symbols, list_pop(arguments, 0))
|
|
|
- create_edge(t, param_dict[arg_names_call[arg_i]])
|
|
|
- arg_i = arg_i + 1
|
|
|
-
|
|
|
- // Add this only at the end, as otherwise the task will already be detected and executed
|
|
|
- String taskname
|
|
|
- taskname = random_string(30)
|
|
|
- while (dict_in(read_root(), taskname)):
|
|
|
- taskname = random_string(30)
|
|
|
- dict_add_fast(read_root(), taskname, task_root)
|
|
|
-
|
|
|
- return taskname!
|
|
|
-
|
|
|
-String function spawn(function : Element, arguments : Element):
|
|
|
- // Define a new task, with all the required stack information
|
|
|
- // This is taken from the "task_management" code
|
|
|
- Element task_root
|
|
|
- Element task_frame
|
|
|
- Element output_value
|
|
|
- Element input_value
|
|
|
-
|
|
|
- task_root = create_node()
|
|
|
- task_frame = create_node()
|
|
|
- output_value = create_node()
|
|
|
- input_value = create_node()
|
|
|
- dict_add_fast(task_root, "frame", task_frame)
|
|
|
- dict_add_fast(task_root, "globals", create_node())
|
|
|
- dict_add_fast(task_root, "output", output_value)
|
|
|
- dict_add_fast(task_root, "last_output", output_value)
|
|
|
- dict_add_fast(task_root, "input", input_value)
|
|
|
- dict_add_fast(task_root, "last_input", input_value)
|
|
|
- dict_add_fast(task_frame, "evalstack", create_node())
|
|
|
- dict_add_fast(task_frame, "returnvalue", create_node())
|
|
|
- dict_add_fast(task_frame, "phase", "init")
|
|
|
- dict_add_fast(task_frame, "IP", dict_read(dict_read(read_root(), "__hierarchy"), "__IP"))
|
|
|
- dict_add_fast(task_frame, "symbols", create_node())
|
|
|
-
|
|
|
- dict_add_fast(task_root["globals"], "initial_function", function)
|
|
|
- dict_add_fast(task_root["globals"], "initial_arguments", arguments)
|
|
|
-
|
|
|
- // Add this only at the end, as otherwise the task will already be detected and executed
|
|
|
- String taskname
|
|
|
- taskname = random_string(30)
|
|
|
- while (dict_in(read_root(), taskname)):
|
|
|
- taskname = random_string(30)
|
|
|
- dict_add_fast(read_root(), taskname, task_root)
|
|
|
-
|
|
|
- return taskname!
|