diff --git a/python-semantics-assignment.k b/python-semantics-assignment.k
index a67a24b..865b0db 100644
--- a/python-semantics-assignment.k
+++ b/python-semantics-assignment.k
@@ -9,8 +9,8 @@ module PYTHON-SEMANTICS-ASSIGNMENT
rule (. => bind(X:Id, ref(B:ObjId))) ~> ((X)::Target = Ts:AssignTargets => Ts) = obj(B,_)
rule (. => bindList(Listify(Ts2), O, false)) ~> (tuple(Ts2:Targets) = Ts:AssignTargets => Ts) = O:Object
rule (. => bindList(Listify(Ts2), O, false)) ~> ([ Ts2 ] = Ts:AssignTargets => Ts) = O
- rule (. => ref("setattr")(O, Id2String(X), O2) ;) ~> (O:Object . X:Id = Ts:AssignTargets => Ts) = O2:Object
- rule (. => (getmember(O, "__setitem__", true, false, false) -> raiseInternal("TypeError", "object does not support item assignment")) (Key:Object, Value:Object) ;) ~> (O:Object [ Key:Object ] = Ts:AssignTargets => Ts) = Value
+ rule (. => 'Expr(ref("setattr")(O, Id2String(X), O2))) ~> (O:Object . X:Id = Ts:AssignTargets => Ts) = O2:Object
+ rule (. => 'Expr((getmember(O, "__setitem__", true, false, false) -> raiseInternal("TypeError", "object does not support item assignment")) (Key:Object, Value:Object))) ~> (O:Object [ Key:Object ] = Ts:AssignTargets => Ts) = Value
rule .AssignTargets = _ => .
context HOLE . _:Id = _ = K:Exp when isKResult(K)
@@ -20,8 +20,8 @@ module PYTHON-SEMANTICS-ASSIGNMENT
rule (. => unbind(X:Id)) ~> del (X , Ts:NeTargets => Ts)
rule (. => unbindList(Listify(Ts2))) ~> del (tuple(Ts2) , Ts => Ts)
rule (. => unbindList(Listify(Ts2))) ~> del ([ Ts2 ] , Ts => Ts)
- rule (. => (getmember(O, "__delattr__", true, false, true) (Id2String(X)) ;)) ~> del (O:Object . X:Id , Ts => Ts)
- rule (. => (getmember(O, "__delitem__", true, false, false) -> raiseInternal("TypeError", "object does not support item deletion")) (Key) ;) ~> del (O:Object [ Key:Object ] , Ts => Ts)
+ rule (. => 'Expr(getmember(O, "__delattr__", true, false, true) (Id2String(X)))) ~> del (O:Object . X:Id , Ts => Ts)
+ rule (. => 'Expr((getmember(O, "__delitem__", true, false, false) -> raiseInternal("TypeError", "object does not support item deletion")) (Key))) ~> del (O:Object [ Key:Object ] , Ts => Ts)
rule del .NeTargets => .
context del HOLE . _:Id , _
diff --git a/python-semantics-attribute-ref.k b/python-semantics-attribute-ref.k
index 058fda2..bedc712 100644
--- a/python-semantics-attribute-ref.k
+++ b/python-semantics-attribute-ref.k
@@ -16,9 +16,9 @@ module PYTHON-SEMANTICS-ATTRIBUTE-REF
rule [attribute]: O:Object . X:Id => ref("getattr")(O, Id2String(X))
- rule invokeBuiltin(obj("getattr",_), ListItem(O) ListItem(S:Object), .) => checkAttribute(S) ~> try: (getmember(O, "__getattribute__", true, false, true) (S)) except ref("AttributeError") : (getmember(O, "__getattr__", true, false, false) (S) -> raise) else: pass
- rule invokeBuiltin(obj("getattr",_), ListItem(O:Object) ListItem(S:Object) ListItem(Default), .) => checkAttribute(S) ~> try: ref("getattr")(O, S) except ref("AttributeError") : Default else: pass
- rule invokeBuiltin(obj("hasattr",_), ListItem(O:Object) ListItem(S:Object), .) => checkAttribute(S) ~> try: (ref("getattr")(O, S) ; ~> ref("True")) except ref("AttributeError") : ref("False") else: pass
+ rule invokeBuiltin(obj("getattr",_), ListItem(O) ListItem(S:Object), .) => checkAttribute(S) ~> try: returnInternal(getmember(O, "__getattribute__", true, false, true) (S)) except ref("AttributeError") : returnInternal(getmember(O, "__getattr__", true, false, false) (S) -> raise) else: .K
+ rule invokeBuiltin(obj("getattr",_), ListItem(O:Object) ListItem(S:Object) ListItem(Default), .) => checkAttribute(S) ~> try: returnInternal(ref("getattr")(O, S)) except ref("AttributeError") : returnInternal(Default) else: .K
+ rule invokeBuiltin(obj("hasattr",_), ListItem(O:Object) ListItem(S:Object), .) => checkAttribute(S) ~> try: returnInternal('Expr((ref("getattr")(O, S)) ~> ref("True"))) except ref("AttributeError") : returnInternal(ref("False")) else: .K
rule invokeBuiltin(obj("getattribute_object",_), ListItem(O) ListItem(O2:Object), .) => checkAttribute(O2) ~> checkData(getmember(O, O2, false, false, false), O) -> mapLookup(O, O2) -> getmember(O, O2, true, false, true)
rule invokeBuiltin(obj("getattribute_type",_), ListItem(O) ListItem(O2), .) => checkAttribute(O2) ~> checkData(getmember(O, O2, false, false, false), O) -> getmember(O, O2, true, true, true)
@@ -44,7 +44,7 @@ module PYTHON-SEMANTICS-ATTRIBUTE-REF
rule hasmember(O:Object, O2:Object) => getmember(O, O2, false, false, false) =/=Obj .Obj
- rule mapLookup(obj(B,_), O) => try: K[O] except ref("KeyError") : .Obj else: pass ...
+ rule mapLookup(obj(B,_), O) => try: returnInternal(K[O]) except ref("KeyError") : returnInternal(.Obj) else: .K ...
- rule invokeBuiltin(obj("iter_next",_), ListItem(obj(B,_)), .) => try: (getmember(B2, "__getitem__", true, false, true) (I:Int)) except ref("IndexError"): (setx(.Obj) ~> raise ref("StopIteration")) else: pass ...
+ rule invokeBuiltin(obj("iter_next",_), ListItem(obj(B,_)), .) => try: (getmember(B2, "__getitem__", true, false, true) (I:Int)) except ref("IndexError"): (setx(.Obj) ~> raise ref("StopIteration")) else: .K ...