Bug 1096487 - part 2 - make ipdl message constructors take their routing id; r=bent

Similarly to part, there's no need to say we don't know the routing id
when constructing a message, and then turn around and set the routing id
immediately afterwards.  Just let the constructor do its work.
This commit is contained in:
Nathan Froyd 2014-11-10 13:05:59 -05:00
Родитель 357e2a0e8c
Коммит 3f89e62115
1 изменённых файлов: 12 добавлений и 14 удалений

Просмотреть файл

@ -1840,10 +1840,11 @@ def _generateMessageClass(clsname, msgid, priority, prettyName, compress):
else: else:
assert priority == ipdl.ast.URGENT_PRIORITY assert priority == ipdl.ast.URGENT_PRIORITY
priorityEnum = 'IPC::Message::PRIORITY_URGENT' priorityEnum = 'IPC::Message::PRIORITY_URGENT'
routingId = ExprVar('routingId')
ctor = ConstructorDefn( ctor = ConstructorDefn(
ConstructorDecl(clsname), ConstructorDecl(clsname, params=[ Decl(Type('int32_t'), routingId.name) ]),
memberinits=[ ExprMemberInit(ExprVar('IPC::Message'), memberinits=[ ExprMemberInit(ExprVar('IPC::Message'),
[ ExprVar('MSG_ROUTING_NONE'), [ routingId,
ExprVar('ID'), ExprVar('ID'),
ExprVar(priorityEnum), ExprVar(priorityEnum),
compression, compression,
@ -5165,17 +5166,19 @@ class _GenerateProtocolActorCode(ipdl.ast.Visitor):
if md.decl.type.isDtor(): this = md.actorDecl().var() if md.decl.type.isDtor(): this = md.actorDecl().var()
stmts = ([ StmtDecl(Decl(Type(md.pqMsgClass(), ptr=1), msgvar.name), stmts = ([ StmtDecl(Decl(Type(md.pqMsgClass(), ptr=1), msgvar.name),
init=ExprNew(Type(md.pqMsgClass()))) ] init=ExprNew(Type(md.pqMsgClass()),
args=[ routingId ])) ]
+ [ Whitespace.NL ] + [ Whitespace.NL ]
+ [ StmtExpr(self.write(p.ipdltype, p.var(), msgvar, this)) + [ StmtExpr(self.write(p.ipdltype, p.var(), msgvar, this))
for p in md.params ] for p in md.params ]
+ [ Whitespace.NL ] + [ Whitespace.NL ]
+ self.setMessageFlags(md, msgvar, reply=0, + self.setMessageFlags(md, msgvar, reply=0))
routingId=routingId))
return msgvar, stmts return msgvar, stmts
def makeReply(self, md, errfn, routingId): def makeReply(self, md, errfn, routingId):
if routingId is None:
routingId = self.protocol.routingId()
# TODO special cases for async ctor/dtor replies # TODO special cases for async ctor/dtor replies
if not md.decl.type.hasReply(): if not md.decl.type.hasReply():
return [ ] return [ ]
@ -5183,21 +5186,16 @@ class _GenerateProtocolActorCode(ipdl.ast.Visitor):
replyvar = self.replyvar replyvar = self.replyvar
return ( return (
[ StmtExpr(ExprAssn( [ StmtExpr(ExprAssn(
replyvar, ExprNew(Type(md.pqReplyClass()), args=[ ]))), replyvar, ExprNew(Type(md.pqReplyClass()), args=[ routingId ]))),
Whitespace.NL ] Whitespace.NL ]
+ [ StmtExpr(self.write(r.ipdltype, r.var(), replyvar)) + [ StmtExpr(self.write(r.ipdltype, r.var(), replyvar))
for r in md.returns ] for r in md.returns ]
+ self.setMessageFlags(md, replyvar, reply=1, routingId=routingId) + self.setMessageFlags(md, replyvar, reply=1)
+ [ self.logMessage(md, md.replyCast(replyvar), 'Sending reply ') ]) + [ self.logMessage(md, md.replyCast(replyvar), 'Sending reply ') ])
def setMessageFlags(self, md, var, reply, routingId=None): def setMessageFlags(self, md, var, reply):
if routingId is None: stmts = [ ]
routingId = self.protocol.routingId()
stmts = [ StmtExpr(ExprCall(
ExprSelect(var, '->', 'set_routing_id'),
args=[ routingId ])) ]
if md.decl.type.isSync(): if md.decl.type.isSync():
stmts.append(StmtExpr(ExprCall( stmts.append(StmtExpr(ExprCall(