Bug 986317 - Stop exposing urgent semantics in IPDL files (r=bent)

This commit is contained in:
Bill McCloskey 2014-04-03 13:29:11 -07:00
parent ed9575b3aa
commit f38a7de260
10 changed files with 44 additions and 84 deletions

View File

@ -214,8 +214,6 @@ class INTR(PrettyPrinted):
pretty = 'intr'
class SYNC(PrettyPrinted):
pretty = 'sync'
class URGENT(PrettyPrinted):
pretty = 'urgent'
class RPC(PrettyPrinted):
pretty = 'rpc'
@ -223,26 +221,8 @@ class INOUT(PrettyPrinted):
pretty = 'inout'
class IN(PrettyPrinted):
pretty = 'in'
@staticmethod
def prettySS(cls, ss): return _prettyTable['in'][ss.pretty]
class OUT(PrettyPrinted):
pretty = 'out'
@staticmethod
def prettySS(ss): return _prettyTable['out'][ss.pretty]
_prettyTable = {
IN : { 'async': 'AsyncRecv',
'sync': 'SyncRecv',
'intr': 'IntrAnswer',
'rpc': 'RPCAnswer',
'urgent': 'UrgentAnswer' },
OUT : { 'async': 'AsyncSend',
'sync': 'SyncSend',
'intr': 'IntrCall',
'rpc': 'RPCCall',
'urgent': 'UrgentCall' }
# inout doesn't make sense here
}
class Namespace(Node):

View File

@ -5,7 +5,7 @@
import os, sys
from ipdl.ast import Visitor
from ipdl.ast import IN, OUT, INOUT, ASYNC, SYNC, INTR, URGENT
from ipdl.ast import IN, OUT, INOUT, ASYNC, SYNC, INTR
class CodePrinter:
def __init__(self, outf=sys.stdout, indentCols=4):

View File

@ -277,13 +277,13 @@ def _putInNamespaces(cxxthing, namespaces):
def _sendPrefix(msgtype):
"""Prefix of the name of the C++ method that sends |msgtype|."""
if msgtype.isInterrupt() or msgtype.isUrgent() or msgtype.isRpc():
if msgtype.isInterrupt() or msgtype.isRpc():
return 'Call'
return 'Send'
def _recvPrefix(msgtype):
"""Prefix of the name of the C++ method that handles |msgtype|."""
if msgtype.isInterrupt() or msgtype.isUrgent() or msgtype.isRpc():
if msgtype.isInterrupt() or msgtype.isRpc():
return 'Answer'
return 'Recv'
@ -4776,7 +4776,7 @@ class _GenerateProtocolActorCode(ipdl.ast.Visitor):
self.asyncSwitch.addcase(lbl, case)
elif sems is ipdl.ast.SYNC:
self.syncSwitch.addcase(lbl, case)
elif sems is ipdl.ast.INTR or sems is ipdl.ast.URGENT or sems is ipdl.ast.RPC:
elif sems is ipdl.ast.INTR or sems is ipdl.ast.RPC:
self.interruptSwitch.addcase(lbl, case)
else: assert 0
@ -5171,15 +5171,20 @@ class _GenerateProtocolActorCode(ipdl.ast.Visitor):
if md.decl.type.isSync():
stmts.append(StmtExpr(ExprCall(
ExprSelect(var, '->', 'set_sync'))))
elif md.decl.type.isUrgent():
stmts.append(StmtExpr(ExprCall(
ExprSelect(var, '->', 'set_urgent'))))
elif md.decl.type.isRpc():
# We use urgent messages from the parent to the child and
# RPC messages from the child to the parent. However,
# replies should always be sent using the same semantics
# as the original message, so we need to flip.
if (self.side == 'parent') ^ reply:
stmts.append(StmtExpr(ExprCall(
ExprSelect(var, '->', 'set_urgent'))))
else:
stmts.append(StmtExpr(ExprCall(
ExprSelect(var, '->', 'set_rpc'))))
elif md.decl.type.isInterrupt():
stmts.append(StmtExpr(ExprCall(
ExprSelect(var, '->', 'set_interrupt'))))
elif md.decl.type.isRpc():
stmts.append(StmtExpr(ExprCall(
ExprSelect(var, '->', 'set_rpc'))))
if reply:
stmts.append(StmtExpr(ExprCall(

View File

@ -147,7 +147,6 @@ reserved = set((
'struct',
'sync',
'union',
'urgent',
'using'))
tokens = [
'COLONCOLON', 'ID', 'STRING'
@ -626,13 +625,11 @@ def p_SendSemanticsQual(p):
"""SendSemanticsQual : ASYNC
| INTR
| RPC
| URGENT
| SYNC"""
s = p[1]
if 'async' == s: p[0] = ASYNC
elif 'intr' == s: p[0] = INTR
elif 'sync' == s: p[0] = SYNC
elif 'urgent' == s: p[0] = URGENT
elif 'rpc' == s: p[0] = RPC
else:
assert 0

View File

@ -7,7 +7,7 @@ import os, sys
from ipdl.ast import CxxInclude, Decl, Loc, QualifiedId, State, StructDecl, TransitionStmt
from ipdl.ast import TypeSpec, UnionDecl, UsingStmt, Visitor, ASYNC, SYNC, INTR
from ipdl.ast import IN, OUT, INOUT, ANSWER, CALL, RECV, SEND, URGENT, RPC
from ipdl.ast import IN, OUT, INOUT, ANSWER, CALL, RECV, SEND, RPC
import ipdl.builtin as builtin
_DELETE_MSG = '__delete__'
@ -207,7 +207,6 @@ class IPDLType(Type):
def isAsync(self): return self.sendSemantics is ASYNC
def isSync(self): return self.sendSemantics is SYNC
def isInterrupt(self): return self.sendSemantics is INTR
def isUrgent(self): return self.sendSemantics is URGENT
def isRpc(self): return self.sendSemantics is RPC
def talksAsync(self): return True
@ -217,13 +216,12 @@ class IPDLType(Type):
def hasReply(self): return (self.isSync()
or self.isInterrupt()
or self.isUrgent()
or self.isRpc())
def needsMoreJuiceThan(self, o):
return (o.isAsync() and not self.isAsync()
or o.isSync() and (self.isUrgent() or self.isRpc())
or (o.isUrgent() or o.isRpc()) and self.isInterrupt())
or o.isSync() and self.isRpc()
or o.isRpc() and self.isInterrupt())
class StateType(IPDLType):
def __init__(self, protocol, name, start=False):
@ -1465,18 +1463,6 @@ class CheckTypes(TcheckVisitor):
"sync parent-to-child messages are verboten (here, message `%s' in protocol `%s')",
mname, pname)
if mtype.isUrgent() and (mtype.isIn() or mtype.isInout()):
self.error(
loc,
"urgent child-to-parent messages are verboten (here, message `%s' in protocol `%s')",
mname, pname)
if mtype.isRpc() and (mtype.isOut() or mtype.isInout()):
self.error(
loc,
"rpc parent-to-child messages are verboten (here, message' `%s' in protocol `%s')",
mname, pname)
if mtype.needsMoreJuiceThan(ptype):
self.error(
loc,

View File

@ -15,12 +15,12 @@ parent:
child:
async Start();
urgent Test1_InnerQuery() returns (uint32_t result);
urgent Test1_NoReenter() returns (uint32_t result);
urgent Test2_FirstUrgent();
urgent Test2_SecondUrgent();
urgent Test3_WakeUp() returns (uint32_t result);
urgent Test4_WakeUp() returns (uint32_t result);
rpc Test1_InnerQuery() returns (uint32_t result);
rpc Test1_NoReenter() returns (uint32_t result);
rpc Test2_FirstUrgent();
rpc Test2_SecondUrgent();
rpc Test3_WakeUp() returns (uint32_t result);
rpc Test4_WakeUp() returns (uint32_t result);
};
} // namespace _ipdltest

View File

@ -11,9 +11,9 @@ parent:
child:
async Start();
urgent Reply1() returns (uint32_t result);
urgent Reply2() returns (uint32_t result);
urgent FinalTest_Hang();
rpc Reply1() returns (uint32_t result);
rpc Reply2() returns (uint32_t result);
rpc FinalTest_Hang();
};
} // namespace _ipdltest

View File

@ -1,8 +1,6 @@
sync protocol tooWeakRpcSync {
// it's an error to declare a sync protocol with an rpc or urgent message
// it's an error to declare a sync protocol with an rpc message
parent:
rpc Msg();
child:
urgent Msg2();
};

View File

@ -1,6 +0,0 @@
intr protocol urgentChildToParent {
// can't declare urgent child-to-parent messages
parent: ugrent Msg();
};

View File

@ -23,25 +23,25 @@ child:
async DropObject(uint64_t objId);
// These roughly map to the ProxyHandler hooks that CPOWs need.
urgent PreventExtensions(uint64_t objId) returns (ReturnStatus rs);
urgent GetPropertyDescriptor(uint64_t objId, nsString id, uint32_t flags) returns (ReturnStatus rs, PPropertyDescriptor result);
urgent GetOwnPropertyDescriptor(uint64_t objId, nsString id, uint32_t flags) returns (ReturnStatus rs, PPropertyDescriptor result);
urgent DefineProperty(uint64_t objId, nsString id, PPropertyDescriptor descriptor) returns (ReturnStatus rs);
urgent Delete(uint64_t objId, nsString id) returns (ReturnStatus rs, bool successful);
rpc PreventExtensions(uint64_t objId) returns (ReturnStatus rs);
rpc GetPropertyDescriptor(uint64_t objId, nsString id, uint32_t flags) returns (ReturnStatus rs, PPropertyDescriptor result);
rpc GetOwnPropertyDescriptor(uint64_t objId, nsString id, uint32_t flags) returns (ReturnStatus rs, PPropertyDescriptor result);
rpc DefineProperty(uint64_t objId, nsString id, PPropertyDescriptor descriptor) returns (ReturnStatus rs);
rpc Delete(uint64_t objId, nsString id) returns (ReturnStatus rs, bool successful);
urgent Has(uint64_t objId, nsString id) returns (ReturnStatus rs, bool has);
urgent HasOwn(uint64_t objId, nsString id) returns (ReturnStatus rs, bool has);
urgent Get(uint64_t objId, uint64_t receiverId, nsString id) returns (ReturnStatus rs, JSVariant result);
urgent Set(uint64_t objId, uint64_t receiverId, nsString id, bool strict, JSVariant value) returns (ReturnStatus rs, JSVariant result);
rpc Has(uint64_t objId, nsString id) returns (ReturnStatus rs, bool has);
rpc HasOwn(uint64_t objId, nsString id) returns (ReturnStatus rs, bool has);
rpc Get(uint64_t objId, uint64_t receiverId, nsString id) returns (ReturnStatus rs, JSVariant result);
rpc Set(uint64_t objId, uint64_t receiverId, nsString id, bool strict, JSVariant value) returns (ReturnStatus rs, JSVariant result);
urgent IsExtensible(uint64_t objId) returns (ReturnStatus rs, bool result);
urgent Call(uint64_t objId, JSParam[] argv) returns (ReturnStatus rs, JSVariant result, JSParam[] outparams);
urgent ObjectClassIs(uint64_t objId, uint32_t classValue) returns (bool result);
urgent ClassName(uint64_t objId) returns (nsString name);
rpc IsExtensible(uint64_t objId) returns (ReturnStatus rs, bool result);
rpc Call(uint64_t objId, JSParam[] argv) returns (ReturnStatus rs, JSVariant result, JSParam[] outparams);
rpc ObjectClassIs(uint64_t objId, uint32_t classValue) returns (bool result);
rpc ClassName(uint64_t objId) returns (nsString name);
urgent GetPropertyNames(uint64_t objId, uint32_t flags) returns (ReturnStatus rs, nsString[] names);
urgent InstanceOf(uint64_t objId, JSIID iid) returns (ReturnStatus rs, bool instanceof);
urgent DOMInstanceOf(uint64_t objId, int prototypeID, int depth) returns (ReturnStatus rs, bool instanceof);
rpc GetPropertyNames(uint64_t objId, uint32_t flags) returns (ReturnStatus rs, nsString[] names);
rpc InstanceOf(uint64_t objId, JSIID iid) returns (ReturnStatus rs, bool instanceof);
rpc DOMInstanceOf(uint64_t objId, int prototypeID, int depth) returns (ReturnStatus rs, bool instanceof);
parent:
async __delete__();