浏览代码

Merge branch 'master' into testing

Yentl Van Tendeloo 8 年之前
父节点
当前提交
b89f748bb9

+ 1 - 0
bootstrap/bootstrap.py

@@ -75,6 +75,7 @@ def bootstrap():
                     "create_edge": ["Element", "Element", "Element"],
                     "create_value": ["Element", "Element"],
                     "is_edge": ["Boolean", "Element"],
+                    "is_error": ["Boolean", "Element"],
                     "read_nr_out": ["Integer", "Element"],
                     "read_out": ["Element", "Element", "Integer"],
                     "read_nr_in": ["Integer", "Element"],

+ 1 - 0
bootstrap/core_algorithm.alc

@@ -281,6 +281,7 @@ String function get_entry_id(name : String):
 	return ""!
 
 String function get_service_id(name : String):
+	core = import_node(core_model_location)
 	Element services
 	String service
 

+ 1 - 0
bootstrap/primitives.alc

@@ -67,3 +67,4 @@ 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
+Boolean function is_error() = ?primitives/is_error

+ 4 - 0
bootstrap/services.alc

@@ -68,6 +68,10 @@ Element function comm_get(comm : String):
 String function comm_connect(service : String):
 	// Connect to an existing service
 	service = get_service_id(service)
+
+	if (service == ""):
+		return ""!
+
 	service = read_attribute(core, service, "port")
 
 	String port

+ 3 - 0
bootstrap/transform.alc

@@ -437,6 +437,9 @@ Void function rewrite(host_model : Element, schedule_model : Element, RHS : Stri
 				elif (has_value(result)):
 					// New value defined, so assign!
 					instantiate_attribute(host_model, new_mapping[label], string_substr(attribute, string_len("value_"), string_len(attribute) + 1), result)
+				elif (is_error(result)):
+					log("Error in evaluation of attribute " + attribute)
+					log("On element with label " + label)
 				else:
 					// Try to interpret as code
 					instantiate_attribute_code(host_model, new_mapping[label], string_substr(attribute, string_len("value_"), string_len(attribute) + 1), result)

+ 1 - 0
interface/HUTN/includes/primitives.alh

@@ -123,3 +123,4 @@ Element function dict_create()
 String function reverseKeyLookup(a: Element, b: Element)
 Element function reverseKeyLookupMulti(a: Element, b: Element)
 Element function dict_values(dict : Element)
+Boolean function is_error(a : Element)

+ 13 - 6
kernel/modelverse_kernel/primitives.py

@@ -1,4 +1,5 @@
 import time as python_time
+import json
 
 class PrimitiveFinished(Exception):
     """Exception to indicate the result value of a primitive, as a return cannot be used."""
@@ -209,13 +210,12 @@ def cast_e2s(a, **remainder):
 
 def cast_v2s(a, **remainder):
     a_value, = yield [("RV", [a])]
-    if isinstance(a_value, (str, unicode)):
-        # String should be encoded to distinguish between 3 and "3"
-        a_value = '"%s"' % a_value
-    elif isinstance(a_value, dict):
+    if isinstance(a_value, dict):
         # Action or type
-        a_value = a_value["value"]
-    result, = yield [("CNV", ["%s" % (a_value)])]
+        value = a_value["value"]
+    else:
+        value = json.dumps(a_value)
+    result, = yield [("CNV", [value])]
     raise PrimitiveFinished(result)
 
 def cast_id2s(a, **remainder):
@@ -409,3 +409,10 @@ def __sleep(a, b, **remainder):
     timeout, interruptable = yield [("RV", [a]), ("RV", [b])]
     yield [("SLEEP", [timeout, interruptable])]
     raise PrimitiveFinished(a)
+
+def is_error(a, **remainder):
+    if a is None:
+        result, = yield [("CNV", [True])]
+    else:
+        result, = yield [("CNV", [False])]
+    raise PrimitiveFinished(result)

+ 1 - 1
kernel/test/primitives/test_cast.py

@@ -107,7 +107,7 @@ class TestCast(unittest.TestCase):
         self.helper_primitives_1_params("cast_v2s", "3", "\"3\"")
 
     def test_cast_v2s_bool(self):
-        self.helper_primitives_1_params("cast_v2s", True, "True")
+        self.helper_primitives_1_params("cast_v2s", True, "true")
 
     def test_cast_v2s_action(self):
         self.helper_primitives_1_params("cast_v2s", {"value": "call"}, "call")

+ 3 - 2
unit/test_all.py

@@ -287,6 +287,7 @@ class TestModelverse(unittest.TestCase):
         model_delete("type mappings/tracability")
 
     def test_SCCD_basic(self):
+        return
         model_add("test/SCCD", "formalisms/SimpleClassDiagrams", open("models/SCCD.mvc", 'r').read())
         model_add("test/SCCD_Trace", "formalisms/SimpleClassDiagrams", open("models/SCCD_Trace.mvc", 'r').read())
 
@@ -303,8 +304,8 @@ class TestModelverse(unittest.TestCase):
         print(result)
 
         assert result == [(5.0, "updateTimerColour", "red"),
-                          (6.0, "updateTimer", 59), ...
-        ]
+                          (6.0, "updateTimer", 59),
+                         ]
 
     def test_switch_MM(self):
         model_add("test/PetriNet", "formalisms/SimpleClassDiagrams", open("integration/code/pn_design.mvc", "r").read())