Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(257)

Unified Diff: tools/idl_parser/idl_parser.py

Issue 803933003: IDL: various adjustments to match Web IDL specification better (Closed) Base URL: https://chromium.googlesource.com/chromium/src@master
Patch Set: Created 6 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « tools/idl_parser/idl_lexer.py ('k') | tools/idl_parser/idl_ppapi_parser.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/idl_parser/idl_parser.py
diff --git a/tools/idl_parser/idl_parser.py b/tools/idl_parser/idl_parser.py
index 16ecc6e93615e572ee9a62fc0cfc112dbb295996..af0bd0555eeff9f9f11e15f785e32d547e6404bb 100755
--- a/tools/idl_parser/idl_parser.py
+++ b/tools/idl_parser/idl_parser.py
@@ -259,18 +259,17 @@ class IDLParser(object):
p[2].AddChildren(p[1])
p[0] = ListFromConcat(p[2], p[3])
- # [10]
+ # [10] Removed unsupported: Serializer
def p_InterfaceMember(self, p):
"""InterfaceMember : Const
- | AttributeOrOperationOrIterator"""
- p[0] = p[1]
-
- # [10.1] Removed unsupported: Serializer
- def p_AttributeOrOperationOrIterator(self, p):
- """AttributeOrOperationOrIterator : Stringifier
- | StaticMember
- | ReadWriteAttribute
- | OperationOrIterator"""
+ | Operation
+ | Stringifier
+ | StaticMember
+ | Iterable
+ | ReadonlyMember
+ | ReadWriteAttribute
+ | ReadWriteMaplike
+ | ReadWriteSetlike"""
p[0] = p[1]
# [11]
@@ -480,7 +479,7 @@ class IDLParser(object):
# [38]
def p_StaticMemberRest(self, p):
- """StaticMemberRest : AttributeRest
+ """StaticMemberRest : ReadOnly AttributeRest
| ReturnType OperationRest"""
if len(p) == 2:
p[0] = p[1]
@@ -488,35 +487,47 @@ class IDLParser(object):
p[2].AddChildren(p[1])
p[0] = p[2]
- # [39] NOT IMPLEMENTED (ReadOnlyMember)
- # [40] NOT IMPLEMENTED (ReadOnlyMemberReset)
-
- # [41]
- def p_ReadWriteAttribute(self, p):
- """ReadWriteAttribute : Inherit AttributeRest"""
- p[2].AddChildren(ListFromConcat(p[1]))
+ # [39]
+ def p_ReadonlyMember(self, p):
+ """ReadonlyMember : READONLY ReadonlyMemberRest"""
+ p[2].AddChildren(self.BuildTrue('READONLY'))
p[0] = p[2]
- # [41] Deprecated - Remove this entry after blink stops using it.
- def p_Attribute(self, p):
- """Attribute : ReadWriteAttribute"""
+ # [40]
+ def p_ReadonlyMemberRest(self, p):
+ """ReadonlyMemberRest : AttributeRest
+ | MaplikeRest
+ | SetlikeRest"""
p[0] = p[1]
+ # [41]
+ def p_ReadWriteAttribute(self, p):
+ """ReadWriteAttribute : INHERIT ReadOnly AttributeRest
+ | AttributeRest"""
+ if len(p) > 2:
+ inherit = self.BuildTrue('INHERIT')
+ p[3].AddChildren(ListFromConcat(inherit, p[2]))
+ p[0] = p[3]
+ else:
+ p[0] = p[1]
+
# [42]
def p_AttributeRest(self, p):
- """AttributeRest : ReadOnly ATTRIBUTE Type identifier ';'"""
- p[0] = self.BuildNamed('Attribute', p, 4,
- ListFromConcat(p[1], p[3]))
+ """AttributeRest : ATTRIBUTE Type AttributeName ';'"""
+ p[0] = self.BuildNamed('Attribute', p, 3, p[2])
- # [43] NOT IMPLEMENTED (AttributeName)
- # [44] NOT IMPLEMENTED (AttributeNameKeyword)
+ # [43]
+ def p_AttributeName(self, p):
+ """AttributeName : AttributeNameKeyword
+ | identifier"""
+ p[0] = p[1]
- # [45]
- def p_Inherit(self, p):
- """Inherit : INHERIT
- |"""
- if len(p) > 1:
- p[0] = self.BuildTrue('INHERIT')
+ # [44]
+ def p_AttributeNameKeyword(self, p):
+ """AttributeNameKeyword : REQUIRED"""
+ p[0] = p[1]
haraken 2014/12/15 15:11:13 p[0] = self.BuildTrue('REQUIRED') ?
Jens Widell 2014/12/15 15:30:32 No, this is simply a grammar workaround to allow a
+
+ # [45] Unreferenced in the specification
Jens Widell 2014/12/15 11:35:15 This is: [45] Inherit → "inherit"
# [46]
def p_ReadOnly(self, p):
@@ -526,9 +537,9 @@ class IDLParser(object):
p[0] = self.BuildTrue('READONLY')
# [47]
- def p_OperationOrIterator(self, p):
- """OperationOrIterator : ReturnType OperationOrIteratorRest
- | SpecialOperation"""
+ def p_Operation(self, p):
+ """Operation : ReturnType OperationRest
+ | SpecialOperation"""
if len(p) == 3:
p[2].AddChildren(p[1])
p[0] = p[2]
@@ -558,11 +569,6 @@ class IDLParser(object):
p[0] = self.BuildTrue(p[1].upper())
# [51]
- def p_OperationOrIteratorRest(self, p):
- """OperationOrIteratorRest : OperationRest"""
- p[0] = p[1]
-
- # [51]
def p_OperationRest(self, p):
"""OperationRest : OptionalIdentifier '(' ArgumentList ')' ';'"""
arguments = self.BuildProduction('Arguments', p, 2, p[3])
@@ -648,12 +654,43 @@ class IDLParser(object):
"""ExceptionField : error"""
p[0] = self.BuildError(p, 'ExceptionField')
- # [59] NOT IMPLEMENTED (Iterable)
- # [60] NOT IMPLEMENTED (OptionalType)
- # [61] NOT IMPLEMENTED (ReadWriteMaplike)
- # [62] NOT IMPLEMENTED (ReadWriteSetlike)
- # [63] NOT IMPLEMENTED (MaplikeRest)
- # [64] NOT IMPLEMENTED (SetlikeRest)
+ # [59]
+ def p_Iterable(self, p):
+ """Iterable : ITERABLE '<' Type OptionalType '>' ';'
+ | LEGACYITERABLE '<' Type '>' ';'"""
+ if len(p) > 6:
+ childlist = ListFromConcat(p[3], p[4])
+ p[0] = self.BuildProduction('Iterable', p, 2, childlist)
+ else:
+ p[0] = self.BuildProduction('LegacyIterable', p, 2, p[3])
+
+ # [60]
+ def p_OptionalType(self, p):
+ """OptionalType : ',' Type
+ |"""
+ if len(p) > 1:
haraken 2014/12/15 15:11:13 if len(p) > 2:
Jens Widell 2014/12/15 15:30:32 The pattern in cases like this is "len(p) > 1". Se
+ p[0] = p[2]
+
+ # [61]
+ def p_ReadWriteMaplike(self, p):
+ """ReadWriteMaplike : MaplikeRest"""
+ p[0] = p[1]
+
+ # [62]
+ def p_ReadWriteSetlike(self, p):
+ """ReadWriteSetlike : SetlikeRest"""
+ p[0] = p[1]
+
+ # [63]
+ def p_MaplikeRest(self, p):
+ """MaplikeRest : MAPLIKE '<' Type ',' Type '>' ';'"""
+ childlist = ListFromConcat(p[3], p[5])
+ p[0] = self.BuildProduction('Maplike', p, 2, childlist)
+
+ # [64]
+ def p_SetlikeRest(self, p):
+ """SetlikeRest : SETLIKE '<' Type '>' ';'"""
+ p[0] = self.BuildProduction('Setlike', p, 2, p[3])
# [65] No comment version for mid statement attributes.
def p_ExtendedAttributeListNoComments(self, p):
« no previous file with comments | « tools/idl_parser/idl_lexer.py ('k') | tools/idl_parser/idl_ppapi_parser.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698