|
@@ -42,187 +42,197 @@ EXCEPTION_RETURN_KEY = "__exception_return"
|
|
|
exception with the return value instead of injecting the return value in the caller's frame."""
|
|
|
|
|
|
def integer_subtraction(a, b, **remainder):
|
|
|
- a_value, b_value = yield [("RV", [a]), ("RV", [b])]
|
|
|
- result, = yield [("CNV", [a_value - b_value])]
|
|
|
- raise PrimitiveFinished(result)
|
|
|
+ if 'value' not in a:
|
|
|
+ a['value'], = yield [("RV", [a['id']])]
|
|
|
+ if 'value' not in b:
|
|
|
+ b['value'], = yield [("RV", [b['id']])]
|
|
|
+ raise PrimitiveFinished({'value': a['value'] - b['value']})
|
|
|
|
|
|
def integer_addition(a, b, **remainder):
|
|
|
- a_value, b_value = yield [("RV", [a]), ("RV", [b])]
|
|
|
- result, = yield [("CNV", [a_value + b_value])]
|
|
|
- raise PrimitiveFinished(result)
|
|
|
+ if 'value' not in a:
|
|
|
+ a['value'], = yield [("RV", [a['id']])]
|
|
|
+ if 'value' not in b:
|
|
|
+ b['value'], = yield [("RV", [b['id']])]
|
|
|
+ raise PrimitiveFinished({'value': a['value'] + b['value']})
|
|
|
|
|
|
def integer_multiplication(a, b, **remainder):
|
|
|
- a_value, b_value = yield [("RV", [a]), ("RV", [b])]
|
|
|
- result, = yield [("CNV", [a_value * b_value])]
|
|
|
- raise PrimitiveFinished(result)
|
|
|
+ if 'value' not in a:
|
|
|
+ a['value'], = yield [("RV", [a['id']])]
|
|
|
+ if 'value' not in b:
|
|
|
+ b['value'], = yield [("RV", [b['id']])]
|
|
|
+ raise PrimitiveFinished({'value': a['value'] * b['value']})
|
|
|
|
|
|
def integer_division(a, b, **remainder):
|
|
|
- a_value, b_value = yield [("RV", [a]), ("RV", [b])]
|
|
|
- result, = yield [("CNV", [int(a_value) // b_value])]
|
|
|
- raise PrimitiveFinished(result)
|
|
|
+ if 'value' not in a:
|
|
|
+ a['value'], = yield [("RV", [a['id']])]
|
|
|
+ if 'value' not in b:
|
|
|
+ b['value'], = yield [("RV", [b['id']])]
|
|
|
+ raise PrimitiveFinished({'value': int(a['value']) // b['value']})
|
|
|
|
|
|
def integer_lt(a, b, **remainder):
|
|
|
- a_value, b_value = yield [("RV", [a]), ("RV", [b])]
|
|
|
- result, = yield [("CNV", [a_value < b_value])]
|
|
|
- raise PrimitiveFinished(result)
|
|
|
+ if 'value' not in a:
|
|
|
+ a['value'], = yield [("RV", [a['id']])]
|
|
|
+ if 'value' not in b:
|
|
|
+ b['value'], = yield [("RV", [b['id']])]
|
|
|
+ raise PrimitiveFinished({'value': a['value'] < b['value']})
|
|
|
|
|
|
def bool_and(a, b, **remainder):
|
|
|
- a_value, b_value = yield [("RV", [a]), ("RV", [b])]
|
|
|
- result, = yield [("CNV", [a_value and b_value])]
|
|
|
- raise PrimitiveFinished(result)
|
|
|
+ if 'value' not in a:
|
|
|
+ a['value'], = yield [("RV", [a['id']])]
|
|
|
+ if 'value' not in b:
|
|
|
+ b['value'], = yield [("RV", [b['id']])]
|
|
|
+ raise PrimitiveFinished({'value': a['value'] and b['value']})
|
|
|
|
|
|
def bool_or(a, b, **remainder):
|
|
|
- a_value, b_value = yield [("RV", [a]), ("RV", [b])]
|
|
|
- result, = yield [("CNV", [a_value or b_value])]
|
|
|
- raise PrimitiveFinished(result)
|
|
|
+ if 'value' not in a:
|
|
|
+ a['value'], = yield [("RV", [a['id']])]
|
|
|
+ if 'value' not in b:
|
|
|
+ b['value'], = yield [("RV", [b['id']])]
|
|
|
+ raise PrimitiveFinished({'value': a['value'] or b['value']})
|
|
|
|
|
|
def bool_not(a, **remainder):
|
|
|
- a_value, = yield [("RV", [a])]
|
|
|
- result, = yield [("CNV", [not a_value])]
|
|
|
- raise PrimitiveFinished(result)
|
|
|
+ if 'value' not in a:
|
|
|
+ a['value'], = yield [("RV", [a['id']])]
|
|
|
+ raise PrimitiveFinished({'value': not a['value']})
|
|
|
|
|
|
def float_subtraction(a, b, **remainder):
|
|
|
- a_value, b_value = yield [("RV", [a]), ("RV", [b])]
|
|
|
- result, = yield [("CNV", [a_value - b_value])]
|
|
|
- raise PrimitiveFinished(result)
|
|
|
+ if 'value' not in a:
|
|
|
+ a['value'], = yield [("RV", [a['id']])]
|
|
|
+ if 'value' not in b:
|
|
|
+ b['value'], = yield [("RV", [b['id']])]
|
|
|
+ raise PrimitiveFinished({'value': a['value'] - b['value']})
|
|
|
|
|
|
def float_addition(a, b, **remainder):
|
|
|
- a_value, b_value = yield [("RV", [a]), ("RV", [b])]
|
|
|
- result, = yield [("CNV", [a_value + b_value])]
|
|
|
- raise PrimitiveFinished(result)
|
|
|
+ if 'value' not in a:
|
|
|
+ a['value'], = yield [("RV", [a['id']])]
|
|
|
+ if 'value' not in b:
|
|
|
+ b['value'], = yield [("RV", [b['id']])]
|
|
|
+ raise PrimitiveFinished({'value': a['value'] + b['value']})
|
|
|
|
|
|
def float_multiplication(a, b, **remainder):
|
|
|
- a_value, b_value = yield [("RV", [a]), ("RV", [b])]
|
|
|
- result, = yield [("CNV", [a_value * b_value])]
|
|
|
- raise PrimitiveFinished(result)
|
|
|
+ if 'value' not in a:
|
|
|
+ a['value'], = yield [("RV", [a['id']])]
|
|
|
+ if 'value' not in b:
|
|
|
+ b['value'], = yield [("RV", [b['id']])]
|
|
|
+ raise PrimitiveFinished({'value': a['value'] * b['value']})
|
|
|
|
|
|
def float_division(a, b, **remainder):
|
|
|
- a_value, b_value = yield [("RV", [a]), ("RV", [b])]
|
|
|
- result, = yield [("CNV", [float(a_value) / float(b_value)])]
|
|
|
- raise PrimitiveFinished(result)
|
|
|
+ if 'value' not in a:
|
|
|
+ a['value'], = yield [("RV", [a['id']])]
|
|
|
+ if 'value' not in b:
|
|
|
+ b['value'], = yield [("RV", [b['id']])]
|
|
|
+ raise PrimitiveFinished({'value': float(a['value']) / float(b['value'])})
|
|
|
|
|
|
def float_lt(a, b, **remainder):
|
|
|
- a_value, b_value = yield [("RV", [a]), ("RV", [b])]
|
|
|
- result, = yield [("CNV", [a_value < b_value])]
|
|
|
- raise PrimitiveFinished(result)
|
|
|
+ if 'value' not in a:
|
|
|
+ a['value'], = yield [("RV", [a['id']])]
|
|
|
+ if 'value' not in b:
|
|
|
+ b['value'], = yield [("RV", [b['id']])]
|
|
|
+ raise PrimitiveFinished({'value': a['value'] < b['value']})
|
|
|
|
|
|
def string_join(a, b, **remainder):
|
|
|
- a_value, b_value = yield [("RV", [a]), ("RV", [b])]
|
|
|
- result, = yield [("CNV", [str(a_value) + str(b_value)])]
|
|
|
- raise PrimitiveFinished(result)
|
|
|
+ if 'value' not in a:
|
|
|
+ a['value'], = yield [("RV", [a['id']])]
|
|
|
+ if 'value' not in b:
|
|
|
+ b['value'], = yield [("RV", [b['id']])]
|
|
|
+ raise PrimitiveFinished({'value': str(a['value']) + str(b['value'])})
|
|
|
|
|
|
def string_split(a, b, **remainder):
|
|
|
# TODO make non-primitive, though compiled
|
|
|
- a_value, b_value = yield [("RV", [a]), ("RV", [b])]
|
|
|
- result = a_value.split(b_value)
|
|
|
+ if 'value' not in a:
|
|
|
+ a['value'], = yield [("RV", [a['id']])]
|
|
|
+ if 'value' not in b:
|
|
|
+ b['value'], = yield [("RV", [b['id']])]
|
|
|
+ result = a['value'].split(b['value'])
|
|
|
elems = yield [("CN", [])] + [("CNV", [v]) for v in result]
|
|
|
new_val = elems[0]
|
|
|
yield [("CD", [new_val, i, v]) for i, v in enumerate(elems[1:])]
|
|
|
- raise PrimitiveFinished(new_val)
|
|
|
+ raise PrimitiveFinished({'id': new_val})
|
|
|
|
|
|
def string_get(a, b, **remainder):
|
|
|
- a_value, b_value = yield [("RV", [a]), ("RV", [b])]
|
|
|
- result, = yield [("CNV", [a_value[b_value]])]
|
|
|
- raise PrimitiveFinished(result)
|
|
|
+ if 'value' not in a:
|
|
|
+ a['value'], = yield [("RV", [a['id']])]
|
|
|
+ if 'value' not in b:
|
|
|
+ b['value'], = yield [("RV", [b['id']])]
|
|
|
+ raise PrimitiveFinished({'value': a['value'][b['value']]})
|
|
|
|
|
|
def string_len(a, **remainder):
|
|
|
- a_value, = yield [("RV", [a])]
|
|
|
- result, = yield [("CNV", [len(a_value)])]
|
|
|
- raise PrimitiveFinished(result)
|
|
|
+ if 'value' not in a:
|
|
|
+ a['value'], = yield [("RV", [a['id']])]
|
|
|
+ raise PrimitiveFinished({'value': len(a['value'])})
|
|
|
|
|
|
def value_eq(a, b, **remainder):
|
|
|
- a_value, b_value = yield [("RV", [a]), ("RV", [b])]
|
|
|
- result, = yield [("CNV", [a_value == b_value])]
|
|
|
- raise PrimitiveFinished(result)
|
|
|
+ if 'value' not in a:
|
|
|
+ a['value'], = yield [("RV", [a['id']])]
|
|
|
+ if 'value' not in b:
|
|
|
+ b['value'], = yield [("RV", [b['id']])]
|
|
|
+ raise PrimitiveFinished({'value': a['value'] == b['value']})
|
|
|
|
|
|
def element_eq(a, b, **remainder):
|
|
|
- result, = yield [("CNV", [a == b])]
|
|
|
- raise PrimitiveFinished(result)
|
|
|
+ if "id" not in a:
|
|
|
+ print("MATERIALIZING A element_eq")
|
|
|
+ a['id'], = yield [("CNV", [a['value']])]
|
|
|
+ if "id" not in b:
|
|
|
+ print("MATERIALIZING B element_eq")
|
|
|
+ b['id'], = yield [("CNV", [b['value']])]
|
|
|
+ raise PrimitiveFinished({'value': a['id'] == b['id']})
|
|
|
|
|
|
def cast_string(a, **remainder):
|
|
|
- a_value, = yield [("RV", [a])]
|
|
|
+ if 'value' not in a:
|
|
|
+ a['value'], = yield [("RV", [a['id']])]
|
|
|
if isinstance(a_value, dict):
|
|
|
- result, = yield [("CNV", [str(a_value["value"])])]
|
|
|
+ raise PrimitiveFinished({'value': str(a['value']['value'])})
|
|
|
else:
|
|
|
- result, = yield [("CNV", [str(a_value)])]
|
|
|
- raise PrimitiveFinished(result)
|
|
|
+ raise PrimitiveFinished({'value': str(a['value'])})
|
|
|
|
|
|
def cast_float(a, **remainder):
|
|
|
- a_value, = yield [("RV", [a])]
|
|
|
- result, = yield [("CNV", [float(a_value)])]
|
|
|
- raise PrimitiveFinished(result)
|
|
|
+ if 'value' not in a:
|
|
|
+ a['value'], = yield [("RV", [a['id']])]
|
|
|
+ raise PrimitiveFinished({'value': float(a['value'])})
|
|
|
|
|
|
def cast_boolean(a, **remainder):
|
|
|
- a_value, = yield [("RV", [a])]
|
|
|
- result, = yield [("CNV", [bool(a_value)])]
|
|
|
- raise PrimitiveFinished(result)
|
|
|
+ if 'value' not in a:
|
|
|
+ a['value'], = yield [("RV", [a['id']])]
|
|
|
+ raise PrimitiveFinished({'value': bool(a['value'])})
|
|
|
|
|
|
def cast_integer(a, **remainder):
|
|
|
- a_value, = yield [("RV", [a])]
|
|
|
- result, = yield [("CNV", [int(a_value)])]
|
|
|
- raise PrimitiveFinished(result)
|
|
|
+ if 'value' not in a:
|
|
|
+ a['value'], = yield [("RV", [a['id']])]
|
|
|
+ raise PrimitiveFinished({'value': int(a['value'])})
|
|
|
|
|
|
def cast_value(a, **remainder):
|
|
|
- a_value, = yield [("RV", [a])]
|
|
|
+ if 'value' not in a:
|
|
|
+ a['value'], = yield [("RV", [a['id']])]
|
|
|
if isinstance(a_value, dict):
|
|
|
- # Action or type
|
|
|
- value = a_value["value"]
|
|
|
+ raise PrimitiveFinished({'value': str(a['value']['value'])})
|
|
|
else:
|
|
|
- value = json.dumps(a_value)
|
|
|
- result, = yield [("CNV", [value])]
|
|
|
- raise PrimitiveFinished(result)
|
|
|
+ raise PrimitiveFinished({'value': json.dumps(a['value'])})
|
|
|
|
|
|
def cast_id(a, **remainder):
|
|
|
- result, = yield [("CNV", ["%s" % (a)])]
|
|
|
- raise PrimitiveFinished(result)
|
|
|
-
|
|
|
-def list_insert(a, b, c, **remainder):
|
|
|
- # TODO make non-primitive, though compiled
|
|
|
- a_outgoing, c_value = yield [("RO", [a]), ("RV", [c])]
|
|
|
- links = yield [("RD", [a, i]) for i in range(c_value, len(a_outgoing))] + \
|
|
|
- [("RDE", [a, i]) for i in range(c_value, len(a_outgoing))]
|
|
|
-
|
|
|
- if sys.version_info[0] < 3:
|
|
|
- values = links[:len(links)/2]
|
|
|
- edges = links[len(links)/2:]
|
|
|
- else:
|
|
|
- values = links[:len(links) // 2]
|
|
|
- edges = links[len(links) // 2:]
|
|
|
-
|
|
|
- yield [("CD", [a, c_value, b])] + \
|
|
|
- [("CD", [a, c_value + 1 + index, value]) for index, value in enumerate(values)] + \
|
|
|
- [("DE", [i]) for i in edges]
|
|
|
- raise PrimitiveFinished(a)
|
|
|
-
|
|
|
-def list_delete(a, b, **remainder):
|
|
|
- # TODO make non-primitive, though compiled
|
|
|
- a_outgoing, b_value = yield [("RO", [a]), ("RV", [b])]
|
|
|
- links = yield [("RD", [a, i]) for i in range(b_value, len(a_outgoing))] + \
|
|
|
- [("RDE", [a, i]) for i in range(b_value, len(a_outgoing))]
|
|
|
-
|
|
|
- if sys.version_info[0] < 3:
|
|
|
- values = links[:len(links) / 2]
|
|
|
- edges = links[len(links) / 2:]
|
|
|
- else:
|
|
|
- values = links[:len(links) // 2]
|
|
|
- edges = links[len(links) // 2:]
|
|
|
-
|
|
|
- yield [("CD", [a, b_value + index, value]) for index, value in enumerate(values[1:])] + \
|
|
|
- [("DE", [i]) for i in edges]
|
|
|
- raise PrimitiveFinished(a)
|
|
|
+ if "id" not in a:
|
|
|
+ print("MATERIALIZING A cast_id")
|
|
|
+ a['id'], = yield [("CNV", [a['value']])]
|
|
|
+ raise PrimitiveFinished({'value': str(a['id'])})
|
|
|
|
|
|
def dict_add_fast(a, b, c, **remainder):
|
|
|
# TODO deprecate, as dict_add is now also efficient
|
|
|
- v, = yield [("RV", [b])]
|
|
|
- yield [("CD", [a, v, c])]
|
|
|
+ if "value" not in b:
|
|
|
+ b['value'], = yield [("RV", [b['id']])]
|
|
|
+ if "id" not in c:
|
|
|
+ print("MATERIALIZING C dict_add_fast")
|
|
|
+ c['id'], = yield [("CNV", [c['value']])]
|
|
|
+
|
|
|
+ yield [("CD", [a['id'], b['value'], c['id']])]
|
|
|
raise PrimitiveFinished(a)
|
|
|
|
|
|
def dict_delete(a, b, **remainder):
|
|
|
- b_value, = yield [("RV", [b])]
|
|
|
- edge, = yield [("RDE", [a, b_value])]
|
|
|
+ if "value" not in b:
|
|
|
+ b['value'], = yield [("RV", [b['id']])]
|
|
|
+
|
|
|
+ edge, = yield [("RDE", [a['id'], b['value']])]
|
|
|
if edge is None:
|
|
|
- print("Failed dict_delete for value '%s'!" % b_value)
|
|
|
- keys, = yield [("RDK", [a])]
|
|
|
+ print("Failed dict_delete for value '%s'!" % b['value'])
|
|
|
+ keys, = yield [("RDK", [a['id']])]
|
|
|
keys = yield [("RV", [i]) for i in keys]
|
|
|
print("Keys: " + str(keys))
|
|
|
raise Exception()
|
|
@@ -230,171 +240,198 @@ def dict_delete(a, b, **remainder):
|
|
|
raise PrimitiveFinished(a)
|
|
|
|
|
|
def dict_delete_node(a, b, **remainder):
|
|
|
- edge, = yield [("RDNE", [a, b])]
|
|
|
+ edge, = yield [("RDNE", [a['id'], b['id']])]
|
|
|
if edge is None:
|
|
|
print("Failed dict_delete_node!")
|
|
|
yield [("DE", [edge])]
|
|
|
raise PrimitiveFinished(a)
|
|
|
|
|
|
def dict_read(a, b, **remainder):
|
|
|
- b_value, = yield [("RV", [b])]
|
|
|
- result, = yield [("RD", [a, b_value])]
|
|
|
- raise PrimitiveFinished(result)
|
|
|
+ if "value" not in b:
|
|
|
+ b['value'], = yield [("RV", [b['id']])]
|
|
|
+ result, = yield [("RD", [a['id'], b['value']])]
|
|
|
+ raise PrimitiveFinished({'id': result})
|
|
|
|
|
|
def dict_read_edge(a, b, **remainder):
|
|
|
- b_value, = yield [("RV", [b])]
|
|
|
- result, = yield [("RDE", [a, b_value])]
|
|
|
- raise PrimitiveFinished(result)
|
|
|
+ if "value" not in b:
|
|
|
+ b['value'], = yield [("RV", [b['id']])]
|
|
|
+ result, = yield [("RDE", [a['id'], b['value']])]
|
|
|
+ raise PrimitiveFinished({'id': result})
|
|
|
|
|
|
def dict_read_node(a, b, **remainder):
|
|
|
- result, = yield [("RDN", [a, b])]
|
|
|
- raise PrimitiveFinished(result)
|
|
|
+ result, = yield [("RDN", [a['id'], b['id']])]
|
|
|
+ raise PrimitiveFinished({'id': result})
|
|
|
|
|
|
def dict_in(a, b, **remainder):
|
|
|
- b_value, = yield [("RV", [b])]
|
|
|
- value, = yield [("RD", [a, b_value])]
|
|
|
- is_in = value is not None
|
|
|
- result, = yield [("CNV", [is_in])]
|
|
|
- raise PrimitiveFinished(result)
|
|
|
+ if "value" not in b:
|
|
|
+ b['value'], = yield [("RV", [b['id']])]
|
|
|
+ value, = yield [("RD", [a['id'], b['value']])]
|
|
|
+ raise PrimitiveFinished({'value': value is not None})
|
|
|
|
|
|
def dict_in_node(a, b, **remainder):
|
|
|
- value, = yield [("RDN", [a, b])]
|
|
|
- result, = yield [("CNV", [value is not None])]
|
|
|
- raise PrimitiveFinished(result)
|
|
|
+ if "id" not in b:
|
|
|
+ # Not even allocated the node, so it is certain not to be in the dictionary
|
|
|
+ raise PrimitiveFinished({'value': False})
|
|
|
+ value, = yield [("RDN", [a['id'], b['id']])]
|
|
|
+ raise PrimitiveFinished({'value': value is not None})
|
|
|
|
|
|
def dict_keys(a, **remainder):
|
|
|
- keys, result = yield [("RDK", [a]), ("CN", [])]
|
|
|
+ keys, result = yield [("RDK", [a['id']]), ("CN", [])]
|
|
|
edges = yield [("CE", [result, result]) for _ in keys]
|
|
|
_ = yield [("CE", [edge, key]) for edge, key in zip(edges, keys)]
|
|
|
- raise PrimitiveFinished(result)
|
|
|
+ raise PrimitiveFinished({'id': result})
|
|
|
|
|
|
def is_physical_int(a, **remainder):
|
|
|
- t, = yield [("RV", [a])]
|
|
|
+ if "value" not in a:
|
|
|
+ a['value'], = yield [("RV", [a['id']])]
|
|
|
try:
|
|
|
- result, = yield [("CNV", [isinstance(t, int) or isinstance(t, long)])]
|
|
|
+ raise PrimitiveFinished({'value': isinstance(a['value'], int) or isinstance(a['value'], long)})
|
|
|
except NameError:
|
|
|
- result, = yield [("CNV", [isinstance(t, int)])]
|
|
|
-
|
|
|
- raise PrimitiveFinished(result)
|
|
|
+ raise PrimitiveFinished({'value': isinstance(a['value'], int)})
|
|
|
|
|
|
def is_physical_string(a, **remainder):
|
|
|
- t, = yield [("RV", [a])]
|
|
|
+ if "value" not in a:
|
|
|
+ a['value'], = yield [("RV", [a['id']])]
|
|
|
try:
|
|
|
- result, = yield [("CNV", [isinstance(t, str) or isinstance(t, unicode)])]
|
|
|
+ raise PrimitiveFinished({'value': isinstance(a['value'], str) or isinstance(a['value'], unicode)})
|
|
|
except NameError:
|
|
|
- result, = yield [("CNV", [isinstance(t, str)])]
|
|
|
-
|
|
|
- raise PrimitiveFinished(result)
|
|
|
+ raise PrimitiveFinished({'value': isinstance(a['value'], str)})
|
|
|
|
|
|
def is_physical_float(a, **remainder):
|
|
|
- t, = yield [("RV", [a])]
|
|
|
- result, = yield [("CNV", [isinstance(t, float)])]
|
|
|
- raise PrimitiveFinished(result)
|
|
|
+ if "value" not in a:
|
|
|
+ a['value'], = yield [("RV", [a['id']])]
|
|
|
+ raise PrimitiveFinished({'value': isinstance(a['value'], float)})
|
|
|
|
|
|
def is_physical_boolean(a, **remainder):
|
|
|
- t, = yield [("RV", [a])]
|
|
|
- result, = yield [("CNV", [isinstance(t, bool)])]
|
|
|
- raise PrimitiveFinished(result)
|
|
|
+ if "value" not in a:
|
|
|
+ a['value'], = yield [("RV", [a['id']])]
|
|
|
+ raise PrimitiveFinished({'value': isinstance(a['value'], bool)})
|
|
|
|
|
|
def is_physical_action(a, **remainder):
|
|
|
- t, = yield [("RV", [a])]
|
|
|
- result, = yield [("CNV", [isinstance(t, dict) and t["value"] in ["if", "while", "assign", "call", "break", "continue", "return", "resolve", "access", "constant", "global", "declare"]])]
|
|
|
- raise PrimitiveFinished(result)
|
|
|
+ if "value" not in a:
|
|
|
+ a['value'], = yield [("RV", [a['id']])]
|
|
|
+ raise PrimitiveFinished({'value': isinstance(a['value'], dict) and a['value']["value"] in ["if", "while", "assign", "call", "break", "continue", "return", "resolve", "access", "constant", "global", "declare"]})
|
|
|
|
|
|
def is_physical_none(a, **remainder):
|
|
|
- t, = yield [("RV", [a])]
|
|
|
- result, = yield [("CNV", [isinstance(t, dict) and t["value"] == "none"])]
|
|
|
- raise PrimitiveFinished(result)
|
|
|
+ if "value" not in a:
|
|
|
+ a['value'], = yield [("RV", [a['id']])]
|
|
|
+ raise PrimitiveFinished({'value': isinstance(a['value'], dict) and a['value']["value"] == "none"})
|
|
|
|
|
|
def create_node(**remainder):
|
|
|
result, = yield [("CN", [])]
|
|
|
- raise PrimitiveFinished(result)
|
|
|
+ raise PrimitiveFinished({'id': result})
|
|
|
|
|
|
def create_edge(a, b, **remainder):
|
|
|
- result, = yield [("CE", [a, b])]
|
|
|
- raise PrimitiveFinished(result)
|
|
|
+ if "id" not in a:
|
|
|
+ print("MATERIALIZING A create_edge")
|
|
|
+ a['id'], = yield [("CNV", [a['value']])]
|
|
|
+ if "id" not in b:
|
|
|
+ print("MATERIALIZING B create_edge")
|
|
|
+ b['id'], = yield [("CNV", [b['value']])]
|
|
|
+ result, = yield [("CE", [a['id'], b['id']])]
|
|
|
+ raise PrimitiveFinished({'id': result})
|
|
|
|
|
|
def create_value(a, **remainder):
|
|
|
- a_value, = yield [("RV", [a])]
|
|
|
- result, = yield [("CNV", [a_value])]
|
|
|
- raise PrimitiveFinished(result)
|
|
|
+ if "value" not in a:
|
|
|
+ a['value'], = yield [("RV", [a])]
|
|
|
+ raise PrimitiveFinished({'value': a['value']})
|
|
|
|
|
|
def read_nr_out(a, **remainder):
|
|
|
- outgoing, = yield [("RO", [a])]
|
|
|
- result, = yield [("CNV", [len(outgoing)])]
|
|
|
- raise PrimitiveFinished(result)
|
|
|
+ if "id" not in a:
|
|
|
+ a['id'], = yield [("CNV", [a['value']])]
|
|
|
+ outgoing, = yield [("RO", [a['id']])]
|
|
|
+ raise PrimitiveFinished({'value': len(outgoing)})
|
|
|
|
|
|
def read_out(a, b, root, **remainder):
|
|
|
- outgoing, b_value = yield [("RO", [a]), ("RV", [b])]
|
|
|
- raise PrimitiveFinished(sorted(outgoing)[b_value] if len(outgoing) > b_value else root)
|
|
|
+ if "id" not in a:
|
|
|
+ a['id'], = yield [("CNV", [a['value']])]
|
|
|
+ if "value" not in b:
|
|
|
+ b['value'], = yield [("RV", [b['id']])]
|
|
|
+
|
|
|
+ outgoing, = yield [("RO", [a['id']])]
|
|
|
+ raise PrimitiveFinished({'id': sorted(outgoing)[b['value']] if len(outgoing) > b['value'] else root})
|
|
|
|
|
|
def read_nr_in(a, **remainder):
|
|
|
- incoming, = yield [("RI", [a])]
|
|
|
- result, = yield [("CNV", [len(incoming)])]
|
|
|
- raise PrimitiveFinished(result)
|
|
|
+ if "id" not in a:
|
|
|
+ a['id'], = yield [("CNV", [a['value']])]
|
|
|
+ incoming, = yield [("RI", [a['id']])]
|
|
|
+ raise PrimitiveFinished({'value': len(incoming)})
|
|
|
|
|
|
def read_in(a, b, root, **remainder):
|
|
|
- incoming, b_value = yield [("RI", [a]), ("RV", [b])]
|
|
|
- raise PrimitiveFinished(sorted(incoming)[b_value] if len(incoming) > b_value else root)
|
|
|
+ if "id" not in a:
|
|
|
+ a['id'], = yield [("CNV", [a['value']])]
|
|
|
+ if "value" not in b:
|
|
|
+ b['value'], = yield [("RV", [b['id']])]
|
|
|
+
|
|
|
+ incoming, = yield [("RI", [a['id']])]
|
|
|
+ raise PrimitiveFinished({'id': sorted(incoming)[b['value']] if len(incoming) > b['value'] else root})
|
|
|
|
|
|
def read_edge_src(a, **remainder):
|
|
|
- result, = yield [("RE", [a])]
|
|
|
- raise PrimitiveFinished(result[0])
|
|
|
+ result, = yield [("RE", [a['id']])]
|
|
|
+ raise PrimitiveFinished({'id': result[0]})
|
|
|
|
|
|
def read_edge_dst(a, **remainder):
|
|
|
- result, = yield [("RE", [a])]
|
|
|
- raise PrimitiveFinished(result[1])
|
|
|
+ result, = yield [("RE", [a['id']])]
|
|
|
+ raise PrimitiveFinished({'id': result[1]})
|
|
|
|
|
|
def delete_element(a, **remainder):
|
|
|
- edge, = yield [("RE", [a])]
|
|
|
+ if "id" not in a:
|
|
|
+ raise PrimitiveFinished({'value': False})
|
|
|
+
|
|
|
+ edge, = yield [("RE", [a['id']])]
|
|
|
if edge[0] is None:
|
|
|
# Not an edge:
|
|
|
- yield [("DN", [a])]
|
|
|
- result, = yield [("CNV", [False])]
|
|
|
- raise PrimitiveFinished(result)
|
|
|
+ yield [("DN", [a['id']])]
|
|
|
+ raise PrimitiveFinished({'value': False})
|
|
|
else:
|
|
|
- yield [("DE", [a])]
|
|
|
- result, = yield [("CNV", [True])]
|
|
|
- raise PrimitiveFinished(result)
|
|
|
+ yield [("DE", [a['id']])]
|
|
|
+ raise PrimitiveFinished({'value': True})
|
|
|
|
|
|
def read_root(root, **remainder):
|
|
|
- raise PrimitiveFinished(root)
|
|
|
+ raise PrimitiveFinished({'id': root})
|
|
|
|
|
|
def is_edge(a, **remainder):
|
|
|
- edge, = yield [("RE", [a])]
|
|
|
- result, = yield [("CNV", [edge[0] is not None])]
|
|
|
- raise PrimitiveFinished(result)
|
|
|
+ if "id" not in a:
|
|
|
+ raise PrimitiveFinished({'value': False})
|
|
|
+
|
|
|
+ edge, = yield [("RE", [a['id']])]
|
|
|
+ raise PrimitiveFinished({'value': edge[0] is not None})
|
|
|
|
|
|
def log(a, **remainder):
|
|
|
- a_value, = yield [("RV", [a])]
|
|
|
- print("== LOG == " + str(a_value))
|
|
|
+ if "value" not in a:
|
|
|
+ a['value'], = yield [("RV", [a['id']])]
|
|
|
+ print("== LOG == " + str(a['value']))
|
|
|
raise PrimitiveFinished(a)
|
|
|
|
|
|
def read_taskroot(task_root, **remainder):
|
|
|
- raise PrimitiveFinished(task_root)
|
|
|
+ raise PrimitiveFinished({'id': task_root})
|
|
|
|
|
|
def time(**remainder):
|
|
|
- a, = yield [("CNV", [python_time.time()])]
|
|
|
- raise PrimitiveFinished(a)
|
|
|
+ raise PrimitiveFinished({'value': python_time.time()})
|
|
|
|
|
|
def hash(a, **remainder):
|
|
|
- a_value, = yield [("RV", [a])]
|
|
|
+ if "value" not in a:
|
|
|
+ a['value'], = yield [("RV", [a['id']])]
|
|
|
import hashlib
|
|
|
+
|
|
|
try:
|
|
|
- b_value = hashlib.sha512(a_value).hexdigest()
|
|
|
+ value = hashlib.sha512(a_value).hexdigest()
|
|
|
except TypeError:
|
|
|
- b_value = hashlib.sha512(a_value.encode()).hexdigest()
|
|
|
- b, = yield [("CNV", [b_value])]
|
|
|
- raise PrimitiveFinished(b)
|
|
|
+ value = hashlib.sha512(a_value.encode()).hexdigest()
|
|
|
+ raise PrimitiveFinished({'value': value})
|
|
|
|
|
|
def __sleep(a, b, **remainder):
|
|
|
- timeout, interruptable = yield [("RV", [a]), ("RV", [b])]
|
|
|
+ if "value" not in a:
|
|
|
+ a['value'], = yield [("RV", [a])]
|
|
|
+ if "value" not in b:
|
|
|
+ b['value'], = yield [("RV", [b])]
|
|
|
+ timeout = a['value']
|
|
|
+ interruptable = b['value']
|
|
|
yield [("SLEEP", [timeout, interruptable])]
|
|
|
raise PrimitiveFinished(a)
|
|
|
|
|
|
def is_error(a, **remainder):
|
|
|
- if a is None:
|
|
|
- result, = yield [("CNV", [True])]
|
|
|
+ if a['id'] is None:
|
|
|
+ raise PrimitiveFinished({'value': True})
|
|
|
else:
|
|
|
- result, = yield [("CNV", [False])]
|
|
|
- raise PrimitiveFinished(result)
|
|
|
+ raise PrimitiveFinished({'value': False})
|