|
@@ -54,43 +54,6 @@ def set_copy(a, **remainder):
|
|
_ = yield [("CE", [b, i[1]]) for i in exp_links]
|
|
_ = yield [("CE", [b, i[1]]) for i in exp_links]
|
|
raise PrimitiveFinished(b)
|
|
raise PrimitiveFinished(b)
|
|
|
|
|
|
-def check_symbols(a, b, c, **remainder):
|
|
|
|
- symbols = {}
|
|
|
|
- function_name, = yield [("RV", [b])]
|
|
|
|
- symbols[function_name] = False
|
|
|
|
- object_links, = yield [("RO", [c])]
|
|
|
|
- set_elements = yield [("RE", [i]) for i in object_links]
|
|
|
|
- set_elements = [i[1] for i in set_elements]
|
|
|
|
- set_values = yield [("RV", [i]) for i in set_elements]
|
|
|
|
- set_elements = yield [("RD", [a, i]) for i in set_values]
|
|
|
|
- symbols_set = yield [("RD", [i, "symbols"]) for i in set_elements]
|
|
|
|
- all_keys = yield [("RDK", [i]) for i in symbols_set]
|
|
|
|
- for i, s in zip(all_keys, symbols_set):
|
|
|
|
- # For each object we have found
|
|
|
|
- keys = yield [("RV", [j]) for j in i]
|
|
|
|
- values = yield [("RD", [s, j]) for j in keys]
|
|
|
|
- values = yield [("RV", [j]) for j in values]
|
|
|
|
- for key, value in zip(keys, values):
|
|
|
|
- k = key
|
|
|
|
- v = value
|
|
|
|
- if v and symbols.get(k, False):
|
|
|
|
- result, = yield [("CNV", ["ERROR: multiple definition of symbol " + str(key)])]
|
|
|
|
- raise PrimitiveFinished(result)
|
|
|
|
- elif v and not symbols.get(k, False):
|
|
|
|
- symbols[k] = True
|
|
|
|
- elif not v and k not in symbols:
|
|
|
|
- symbols[k] = False
|
|
|
|
-
|
|
|
|
- for i, j in symbols.items():
|
|
|
|
- if i == "input" or i == "output":
|
|
|
|
- continue
|
|
|
|
- if not j:
|
|
|
|
- result, = yield [("CNV", ["ERROR: undefined symbol " + str(i)])]
|
|
|
|
- raise PrimitiveFinished(result)
|
|
|
|
-
|
|
|
|
- result, = yield [("CNV", ["OK"])]
|
|
|
|
- raise PrimitiveFinished(result)
|
|
|
|
-
|
|
|
|
def construct_const(**remainder):
|
|
def construct_const(**remainder):
|
|
v, = yield [("CNV", [{"value": "constant"}])]
|
|
v, = yield [("CNV", [{"value": "constant"}])]
|
|
|
|
|