Bläddra i källkod

Split of the read_symbols, which became a compiled function

Yentl Van Tendeloo 9 år sedan
förälder
incheckning
20e9846a73

+ 18 - 14
bootstrap/compilation_manager.alc

@@ -1,6 +1,23 @@
 include "primitives.alh"
 include "constructors.alh"
 
+Element function read_symbols(root : Element, object_name : String):
+	Element keys
+	Element node
+	String rv
+	String key
+
+	node = root[object_name]["symbols"]
+	keys = dict_keys(node)
+	rv = ""
+	while (0 < read_nr_out(keys)):
+		key = set_pop(keys)
+		if (node[key]):
+			rv = (rv + key) + ":1\n"
+		else:
+			rv = (rv + key) + ":0\n"
+	return rv
+
 Element function compilation_manager():
 	String operation
 	String object_name
@@ -33,20 +50,7 @@ Element function compilation_manager():
 		while (input()):
 			dict_add(symbols, input(), input())
 	elif (operation == "read_symbols"):
-		Element keys
-		object_name = input()
-		node = root[object_name]["symbols"]
-		keys = dict_keys(node)
-		String rv
-		rv = ""
-		String key
-		while (0 < read_nr_out(keys)):
-			key = set_pop(keys)
-			if (node[key]):
-				rv = (rv + key) + ":1\n"
-			else:
-				rv = (rv + key) + ":0\n"
-		output(rv)
+		output(read_symbols(root, input()))
 	elif (operation == "read_initializers"):
 		node = root[input()]["initializers"]
 		output(node)

+ 3 - 0
interface/HUTN/hutn_compiler/linker.py

@@ -27,7 +27,9 @@ def link(address, username, objects):
         v = urllib2.urlopen(urllib2.Request(address, urllib.urlencode({"op": "get_output", "username": username}))).read()
         lst = v.rsplit("=", 1)[1]
         lst = lst.split("\n")
+        print("Split in " + str(lst))
         for e in lst:
+            print("Check " + str(e))
             if len(e) > 1:
                 name, defined = e.rsplit(":", 1)
                 if defined == "1":
@@ -38,6 +40,7 @@ def link(address, username, objects):
                     users.setdefault(name, []).append(obj)
                     if name not in definers:
                         definers[name] = None
+        print("Finished list!")
 
     # Check for undefined symbols with this linking set
     for symbol in definers:

+ 14 - 0
kernel/modelverse_kernel/compiled.py

@@ -398,3 +398,17 @@ def selectPossibleOutgoing(a, b, c, **remainder):
             yield [("CE", [result, limit_set_names[i]])]
 
     raise PrimitiveFinished(result)
+
+def read_symbols(a, b, **remainder):
+    b_v =       yield [("RV", [b])]
+    obj =       yield [("RD", [a, b_v])]
+    node =      yield [("RD", [obj, "symbols"])]
+    keys =      yield [("RDK", [node])]
+    keys_v =    yield [("RV", [i]) for i in keys]
+    is_in =     yield [("RD", [node, i]) for i in keys_v]
+    is_in_v =   yield [("RV", [i]) for i in is_in]
+
+    result_v = ["%s:%s\n" % (key, "1" if value else "0") for key, value in zip(keys_v, is_in_v)]
+    result_v = "".join(result_v)
+    result =    yield [("CNV", [result_v])]
+    raise PrimitiveFinished(result)