Bladeren bron

Input_timeout should try for input anyway, even if the timeout is too small

Yentl Van Tendeloo 8 jaren geleden
bovenliggende
commit
9f09eba65c
2 gewijzigde bestanden met toevoegingen van 11 en 3 verwijderingen
  1. 5 1
      bootstrap/utils.alc
  2. 6 2
      kernel/modelverse_kernel/primitives.py

+ 5 - 1
bootstrap/utils.alc

@@ -62,6 +62,11 @@ Element function input_timeout(timeout : Float):
 	Float start
 	start = time()
 
+	// Do this first, such that we will always get at least the chance to push input in
+	if (has_input()):
+		return input()!
+
+	// Now just try this again from time to time
 	while (time() - start < timeout):
 		if (has_input()):
 			return input()!
@@ -70,4 +75,3 @@ Element function input_timeout(timeout : Float):
 			sleep(0.01)
 
 	return read_root()!
-

+ 6 - 2
kernel/modelverse_kernel/primitives.py

@@ -458,8 +458,12 @@ def set_add(a, b, **remainder):
 
 def set_pop(a, **remainder):
     outgoing, = yield [("RO", [a])]
-    v, _ = yield [("RE", [outgoing[0]]), ("DE", [outgoing[0]])]
-    raise PrimitiveFinished(v[1])
+    if outgoing:
+        v, _ = yield [("RE", [outgoing[0]]), ("DE", [outgoing[0]])]
+        raise PrimitiveFinished(v[1])
+    else:
+        print("Pop from empty set!")
+        raise PrimitiveFinished(remainder["root"])
 
 def set_remove(a, b, **remainder):
     outgoing, b_value = yield [("RO", [a]), ("RV", [b])]