bug 518032: fix messed-up dtor code gen

This commit is contained in:
Chris Jones 2009-09-22 11:03:54 -05:00
Родитель 52d43cdb40
Коммит afb0f0a529
1 изменённых файлов: 9 добавлений и 9 удалений

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

@ -1996,15 +1996,13 @@ class GenerateProtocolActorHeader(Visitor):
static=1),
'got reply ')
elif md.decl.type.isDtor():
# TODO implement two-phase dtors for protocols with unavoidably
# racy dtor messages
if md.decl.type.isDtor():
impl.addstmt(cxx.StmtExpr(
cxx.ExprCall(cxx.ExprVar('Unregister'), [ objid ])))
impl.addstmt(cxx.StmtExpr(
cxx.ExprAssn(objid, cxx.ExprLiteral.ZERO)))
impl.addstmt(cxx.StmtExpr(
cxx.ExprAssn(
cxx.ExprSelect(objvar, '->', 'mManager'),
cxx.ExprLiteral.ZERO)))
calldtor = cxx.ExprCall(
cxx.ExprVar(md._cxx.method.name),
@ -2221,6 +2219,12 @@ class GenerateProtocolActorHeader(Visitor):
block.addstmt(cxx.Whitespace.NL)
if md.decl.type.isDtor():
block.addstmt(cxx.StmtExpr(
cxx.ExprCall(cxx.ExprVar('Unregister'), [ routevar ])))
block.addstmt(cxx.StmtExpr(
cxx.ExprAssn(cxx.ExprSelect(objvar, '->', 'mId'),
cxx.ExprLiteral.ZERO)))
calldtor = cxx.ExprCall(
cxx.ExprVar(md._cxx.method.name),
([ objvar ]
@ -2230,10 +2234,6 @@ class GenerateProtocolActorHeader(Visitor):
failif = cxx.StmtIf(cxx.ExprPrefixUnop(calldtor, '!'))
failif.ifb.addstmt(cxx.StmtReturn(cxx.ExprVar('MsgValueError')))
block.addstmt(failif)
block.addstmt(cxx.StmtExpr(
cxx.ExprCall(cxx.ExprVar('Unregister'), [ routevar ])))
block.addstmt(cxx.StmtExpr(
cxx.ExprAssn(routevar, cxx.ExprLiteral.ZERO)))
if md.decl.type.hasReply():
if not md.decl.type.hasReply():