diff --git a/ipc/ipdl/ipdl/lower.py b/ipc/ipdl/ipdl/lower.py index 7b6fe747d5b8777e610f578b104adf2a6c871d34..67011b6d635590d639b242cea75a65a608e03377 100644 --- a/ipc/ipdl/ipdl/lower.py +++ b/ipc/ipdl/ipdl/lower.py @@ -4733,9 +4733,8 @@ class _GenerateProtocolActorCode(ipdl.ast.Visitor): return helper def genAsyncDtor(self, md): - actor = md.actorDecl() - actorvar = actor.var() - method = MethodDefn(self.makeDtorMethodDecl(md)) + actorvar = ExprVar("actor") + method = MethodDefn(self.makeDtorMethodDecl(md, actorvar)) method.addstmt(self.dtorPrologue(actorvar)) @@ -4745,7 +4744,7 @@ class _GenerateProtocolActorCode(ipdl.ast.Visitor): stmts + sendstmts + [Whitespace.NL] - + self.dtorEpilogue(md, actor.var()) + + self.dtorEpilogue(md, actorvar) + [StmtReturn(sendok)] ) @@ -4758,9 +4757,8 @@ class _GenerateProtocolActorCode(ipdl.ast.Visitor): return method, (lbl, case) def genBlockingDtorMethod(self, md): - actor = md.actorDecl() - actorvar = actor.var() - method = MethodDefn(self.makeDtorMethodDecl(md)) + actorvar = ExprVar("actor") + method = MethodDefn(self.makeDtorMethodDecl(md, actorvar)) method.addstmt(self.dtorPrologue(actorvar)) @@ -4786,7 +4784,7 @@ class _GenerateProtocolActorCode(ipdl.ast.Visitor): method.addstmt(ifsendok) method.addstmts( - self.dtorEpilogue(md, actor.var()) + [Whitespace.NL, StmtReturn(sendok)] + self.dtorEpilogue(md, actorvar) + [Whitespace.NL, StmtReturn(sendok)] ) return method @@ -4903,10 +4901,10 @@ class _GenerateProtocolActorCode(ipdl.ast.Visitor): return method, movemethod, promisemethod, (lbl, case) - def genBlockingSendMethod(self, md, fromActor=None): + def genBlockingSendMethod(self, md): method = MethodDefn(self.makeSendMethodDecl(md)) - msgvar, serstmts = self.makeMessage(md, errfnSend, fromActor) + msgvar, serstmts = self.makeMessage(md, errfnSend) replyvar = self.replyvar sendok, sendstmts = self.sendBlocking(md, msgvar, replyvar) @@ -4975,12 +4973,12 @@ class _GenerateProtocolActorCode(ipdl.ast.Visitor): StmtDecl(Decl(r.bareType(self.side), r.var().name), initargs=[]) for r in md.returns ] - + self.invokeRecvHandler(md, implicit=False) + + self.invokeRecvHandler(md) + [Whitespace.NL] + saveIdStmts + self.makeReply(md, errfnRecv, routingId=idvar) + [Whitespace.NL] - + self.dtorEpilogue(md, md.actorDecl().var()) + + self.dtorEpilogue(md, ExprVar.THIS) + [Whitespace.NL, StmtReturn(_Result.Processed)] ) @@ -5019,9 +5017,7 @@ class _GenerateProtocolActorCode(ipdl.ast.Visitor): msgvar = self.msgvar writervar = ExprVar("writer__") routingId = self.protocol.routingId(fromActor) - this = ExprVar.THIS - if md.decl.type.isDtor(): - this = md.actorDecl().var() + this = fromActor or ExprVar.THIS stmts = ( [ @@ -5508,7 +5504,7 @@ class _GenerateProtocolActorCode(ipdl.ast.Visitor): return StmtDecl(Decl(actortype, md.actorDecl().var().name), init=callalloc) - def invokeRecvHandler(self, md, implicit=True): + def invokeRecvHandler(self, md): retsems = "in" if md.decl.type.isAsync() and md.returns: retsems = "resolver" @@ -5520,7 +5516,6 @@ class _GenerateProtocolActorCode(ipdl.ast.Visitor): paramsems="move", retsems=retsems, retcallsems="out", - implicit=implicit, ), ), ) @@ -5536,8 +5531,19 @@ class _GenerateProtocolActorCode(ipdl.ast.Visitor): ) return [okdecl, failif] - def makeDtorMethodDecl(self, md): + def makeDtorMethodDecl(self, md, actorvar): decl = self.makeSendMethodDecl(md) + decl.params.insert( + 0, + Decl( + _cxxInType( + ipdl.type.ActorType(md.decl.type.constructedType()), + side=self.side, + direction="send", + ), + actorvar.name, + ), + ) decl.methodspec = MethodSpec.STATIC return decl diff --git a/ipc/ipdl/ipdl/type.py b/ipc/ipdl/ipdl/type.py index f9f843b644df2fe6c1cd985c33d33fed62cc6687..ed0ea4831df615783240f7781fb781b7f24dd675 100644 --- a/ipc/ipdl/ipdl/type.py +++ b/ipc/ipdl/ipdl/type.py @@ -390,7 +390,7 @@ class MessageType(SendSemanticsType): return len(self.returns) or self.isSync() or self.isInterrupt() def hasImplicitActorParam(self): - return self.isCtor() or self.isDtor() + return self.isCtor() class ProtocolType(SendSemanticsType):