浏览代码

Update set_add's compiled function

Yentl Van Tendeloo 8 年之前
父节点
当前提交
f3e6434ac5
共有 2 个文件被更改,包括 6 次插入14 次删除
  1. 1 0
      bootstrap/semi_primitives.alc
  2. 5 14
      kernel/modelverse_kernel/compiled.py

+ 1 - 0
bootstrap/semi_primitives.alc

@@ -52,6 +52,7 @@ Element function list_append(a : Element, b : Element):
 
 Element function set_add(a : Element, b : Element):
 	if (bool_not(set_in(a, b))):
+		// Treat set as a dictionary with a mock-value
 		dict_add(a, b, a)
 	return a!
 

+ 5 - 14
kernel/modelverse_kernel/compiled.py

@@ -171,20 +171,11 @@ def dict_len(a, **remainder):
     raise PrimitiveFinished(result)
 
 def set_add(a, b, **remainder):
-    outgoing, b_value = yield [("RO", [a]), ("RV", [b])]
-    if outgoing:
-        elements = yield [("RE", [i]) for i in outgoing]
-        values = yield [("RV", [i[1]]) for i in elements]
-        if b_value is not None and b_value in values:
-            raise PrimitiveFinished(a)
-        elif b_value is None and b in elements:
-            raise PrimitiveFinished(a)
-        else:
-            yield [("CE", [a, b])]
-            raise PrimitiveFinished(a)
-    else:
-        yield [("CE", [a, b])]
-        raise PrimitiveFinished(a)
+    v, =        yield [("RV", [b])]
+    is_in, =    yield [("RD", [a, b])]
+    if not is_in:
+        _, =    yield [("CD", [a, v, a])]
+    raise PrimitiveFinished(a)
 
 def set_pop(a, **remainder):
     outgoing, = yield [("RO", [a])]