mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-09 03:15:11 +00:00
Bug 636063, part 1: Frontend support for |compress|d messages. r=bent
This commit is contained in:
parent
3e50bbc9d9
commit
6da49bb1b7
@ -315,6 +315,7 @@ class MessageDecl(Node):
|
||||
self.direction = None
|
||||
self.inParams = [ ]
|
||||
self.outParams = [ ]
|
||||
self.compress = ''
|
||||
|
||||
def addInParams(self, inParamsList):
|
||||
self.inParams += inParamsList
|
||||
|
@ -121,6 +121,7 @@ reserved = set((
|
||||
'bridges',
|
||||
'call',
|
||||
'child',
|
||||
'compress',
|
||||
'__delete__',
|
||||
'delete', # reserve 'delete' to prevent its use
|
||||
'goto',
|
||||
@ -484,13 +485,15 @@ def p_MessageDecl(p):
|
||||
p[0] = msg
|
||||
|
||||
def p_MessageBody(p):
|
||||
"""MessageBody : MessageId MessageInParams MessageOutParams"""
|
||||
"""MessageBody : MessageId MessageInParams MessageOutParams OptionalMessageCompress"""
|
||||
# FIXME/cjones: need better loc info: use one of the quals
|
||||
loc, name = p[1]
|
||||
msg = MessageDecl(loc)
|
||||
msg.name = name
|
||||
msg.addInParams(p[2])
|
||||
msg.addOutParams(p[3])
|
||||
msg.compress = p[4]
|
||||
|
||||
p[0] = msg
|
||||
|
||||
def p_MessageId(p):
|
||||
@ -517,6 +520,14 @@ def p_MessageOutParams(p):
|
||||
else:
|
||||
p[0] = p[3]
|
||||
|
||||
def p_OptionalMessageCompress(p):
|
||||
"""OptionalMessageCompress : COMPRESS
|
||||
| """
|
||||
if 1 == len(p):
|
||||
p[0] = ''
|
||||
else:
|
||||
p[0] = 'compress'
|
||||
|
||||
##--------------------
|
||||
## State machine
|
||||
|
||||
|
@ -228,7 +228,7 @@ class StateType(IPDLType):
|
||||
|
||||
class MessageType(IPDLType):
|
||||
def __init__(self, sendSemantics, direction,
|
||||
ctor=False, dtor=False, cdtype=None):
|
||||
ctor=False, dtor=False, cdtype=None, compress=False):
|
||||
assert not (ctor and dtor)
|
||||
assert not (ctor or dtor) or type is not None
|
||||
|
||||
@ -239,6 +239,7 @@ class MessageType(IPDLType):
|
||||
self.ctor = ctor
|
||||
self.dtor = dtor
|
||||
self.cdtype = cdtype
|
||||
self.compress = compress
|
||||
def isMessage(self): return True
|
||||
|
||||
def isCtor(self): return self.ctor
|
||||
@ -1068,7 +1069,8 @@ class GatherDecls(TcheckVisitor):
|
||||
self.symtab.enterScope(md)
|
||||
|
||||
msgtype = MessageType(md.sendSemantics, md.direction,
|
||||
ctor=isctor, dtor=isdtor, cdtype=cdtype)
|
||||
ctor=isctor, dtor=isdtor, cdtype=cdtype,
|
||||
compress=(md.compress == 'compress'))
|
||||
|
||||
# replace inparam Param nodes with proper Decls
|
||||
def paramToDecl(param):
|
||||
@ -1458,6 +1460,13 @@ class CheckTypes(TcheckVisitor):
|
||||
"asynchronous message `%s' declares return values",
|
||||
mname)
|
||||
|
||||
if (mtype.compress and
|
||||
(not mtype.isAsync() or mtype.isCtor() or mtype.isDtor())):
|
||||
self.error(
|
||||
loc,
|
||||
"message `%s' in protocol `%s' requests compression but is not async or is special (ctor or dtor)",
|
||||
mname[:-len('constructor')], pname)
|
||||
|
||||
if mtype.isCtor() and not ptype.isManagerOf(mtype.constructedType()):
|
||||
self.error(
|
||||
loc,
|
||||
|
8
ipc/ipdl/test/ipdl/error/compressCtor.ipdl
Normal file
8
ipc/ipdl/test/ipdl/error/compressCtor.ipdl
Normal file
@ -0,0 +1,8 @@
|
||||
include protocol compressCtorManagee;
|
||||
|
||||
rpc protocol compressCtor {
|
||||
manages compressCtorManagee;
|
||||
|
||||
parent:
|
||||
async compressCtorManagee() compress;
|
||||
};
|
8
ipc/ipdl/test/ipdl/error/compressCtorManagee.ipdl
Normal file
8
ipc/ipdl/test/ipdl/error/compressCtorManagee.ipdl
Normal file
@ -0,0 +1,8 @@
|
||||
include protocol compressCtor;
|
||||
|
||||
rpc protocol compressCtorManagee {
|
||||
manager compressCtor;
|
||||
|
||||
child:
|
||||
async __delete__() compress;
|
||||
};
|
6
ipc/ipdl/test/ipdl/error/rpcMessageCompress.ipdl
Normal file
6
ipc/ipdl/test/ipdl/error/rpcMessageCompress.ipdl
Normal file
@ -0,0 +1,6 @@
|
||||
rpc protocol rpcMessageCompress {
|
||||
parent:
|
||||
rpc foo() compress;
|
||||
child:
|
||||
rpc bar() compress;
|
||||
};
|
4
ipc/ipdl/test/ipdl/error/syncMessageCompress.ipdl
Normal file
4
ipc/ipdl/test/ipdl/error/syncMessageCompress.ipdl
Normal file
@ -0,0 +1,4 @@
|
||||
sync protocol syncMessageCompress {
|
||||
parent:
|
||||
sync foo() compress;
|
||||
};
|
4
ipc/ipdl/test/ipdl/ok/messageCompress.ipdl
Normal file
4
ipc/ipdl/test/ipdl/ok/messageCompress.ipdl
Normal file
@ -0,0 +1,4 @@
|
||||
rpc protocol messageCompress {
|
||||
child:
|
||||
async foo() compress;
|
||||
};
|
Loading…
Reference in New Issue
Block a user