Przeglądaj źródła

Fixed sleep with nicer Task statechart

Yentl Van Tendeloo 8 lat temu
rodzic
commit
bad62e51ec

+ 1 - 0
bootstrap/initial_code_manager.alc

@@ -14,5 +14,6 @@ Void function __main():
 	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"])
 	task_management()
 	return!

+ 1 - 0
bootstrap/initial_code_task.alc

@@ -19,5 +19,6 @@ Void mutable function __main():
 	exec(root["bootstrap/random.alc"]["initializers"])
 	exec(root["bootstrap/utils.alc"]["initializers"])
 	exec(root["bootstrap/services.alc"]["initializers"])
+	exec(root["bootstrap/io.alc"]["initializers"])
 	new_task()
 	return!

+ 4 - 4
bootstrap/primitives.alc

@@ -82,11 +82,11 @@ Boolean function is_physical_boolean(a: Element) = ?primitives/is_physical_boole
 Boolean function is_physical_action(a: Element) = ?primitives/is_physical_action
 Float function time() = ?primitives/time
 String function hash(a : String) = ?primitives/hash
-Float function __sleep(a : Float, b : Boolean) = ?primitives/__sleep
+Float function __sleep(a : Float) = ?primitives/__sleep
 
-Float function sleep(a : Float):
-	__sleep(a, False)
-	return a!
+Void function sleep(a : Float):
+	__sleep(a)
+	return!
 
 Element function exec(first_instr : Element):
 	// This does very ugly things, so beware!

+ 0 - 1
hybrid_server/classes/task.xml

@@ -39,7 +39,6 @@
                     reply = [mvs_operations[command[0]](*(command[1])) for command in commands]
                 return (0.0, False)
             except SleepKernel as e:
-                print("Got sleep for: " + str(e.timeout))
                 return (e.timeout, False)
             except:
                 import traceback

+ 4 - 2
interface/HUTN/hutn_compiler/semantics_visitor.py

@@ -569,8 +569,10 @@ class SemanticsVisitor(Visitor):
                 self.perform_implicit_cast(tree, expressions[i], arg_type,
                                            param_type)
 
-        if symbol.name in ["input", "output"]:
-            tree.head = symbol.name
+        if symbol.name == "__input":
+            tree.head = "input"
+        elif symbol.name == "__output":
+            tree.head = "output"
 
     def visit_input(self, tree):
         pass  # no need to visit it again

+ 3 - 3
kernel/modelverse_kernel/primitives.py

@@ -534,7 +534,7 @@ def hash(a, **remainder):
     b, = yield [("CNV", [b_value])]
     raise PrimitiveFinished(b)
 
-def __sleep(a, b, **remainder):
-    timeout, interruptable = yield [("RV", [a]), ("RV", [b])]
-    yield [("SLEEP", [timeout, interruptable])]
+def __sleep(a, **remainder):
+    timeout, = yield [("RV", [a])]
+    yield [("SLEEP", [timeout, False])]
     raise PrimitiveFinished(a)

+ 2 - 0
kernel/modelverse_kernel/request_handler.py

@@ -76,6 +76,8 @@ class RequestHandler(object):
                     gen["replies"] = None
                 return self.pop_requests()
 
+            except primitive_functions.SleepKernel:
+                raise
             except KnownRequestHandled:
                 pass
             except StopIteration: