OLD | NEW |
---|---|
1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
2 # Copyright (c) 2013 The Chromium Authors. All rights reserved. | 2 # Copyright (c) 2013 The Chromium Authors. All rights reserved. |
3 # Use of this source code is governed by a BSD-style license that can be | 3 # Use of this source code is governed by a BSD-style license that can be |
4 # found in the LICENSE file. | 4 # found in the LICENSE file. |
5 | 5 |
6 """ Parser for PPAPI IDL """ | 6 """ Parser for PPAPI IDL """ |
7 | 7 |
8 # | 8 # |
9 # IDL Parser | 9 # IDL Parser |
10 # | 10 # |
(...skipping 711 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
722 def p_UnionMemberTypes(self, p): | 722 def p_UnionMemberTypes(self, p): |
723 """UnionMemberTypes : OR UnionMemberType UnionMemberTypes | 723 """UnionMemberTypes : OR UnionMemberType UnionMemberTypes |
724 |""" | 724 |""" |
725 | 725 |
726 # [77] Moved BYTESTRING, DOMSTRING, OBJECT, DATE, REGEXP to PrimitiveType | 726 # [77] Moved BYTESTRING, DOMSTRING, OBJECT, DATE, REGEXP to PrimitiveType |
727 # Moving all built-in types into PrimitiveType makes it easier to | 727 # Moving all built-in types into PrimitiveType makes it easier to |
728 # differentiate between them and 'identifier', since p[1] would be a string in | 728 # differentiate between them and 'identifier', since p[1] would be a string in |
729 # both cases. | 729 # both cases. |
730 def p_NonAnyType(self, p): | 730 def p_NonAnyType(self, p): |
731 """NonAnyType : PrimitiveType TypeSuffix | 731 """NonAnyType : PrimitiveType TypeSuffix |
732 | PromiseType Null | |
732 | identifier TypeSuffix | 733 | identifier TypeSuffix |
733 | SEQUENCE '<' Type '>' Null""" | 734 | SEQUENCE '<' Type '>' Null""" |
734 if len(p) == 3: | 735 if len(p) == 3: |
735 if type(p[1]) == str: | 736 if type(p[1]) == str: |
736 typeref = self.BuildNamed('Typeref', p, 1) | 737 typeref = self.BuildNamed('Typeref', p, 1) |
737 else: | 738 else: |
738 typeref = p[1] | 739 typeref = p[1] |
739 p[0] = ListFromConcat(typeref, p[2]) | 740 p[0] = ListFromConcat(typeref, p[2]) |
740 | 741 |
741 if len(p) == 6: | 742 if len(p) == 6: |
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
894 | 895 |
895 # [95] | 896 # [95] |
896 def p_ExtendedAttributeNamedArgList(self, p): | 897 def p_ExtendedAttributeNamedArgList(self, p): |
897 """ExtendedAttributeNamedArgList : identifier '=' identifier '(' ArgumentLis t ')'""" | 898 """ExtendedAttributeNamedArgList : identifier '=' identifier '(' ArgumentLis t ')'""" |
898 args = self.BuildProduction('Arguments', p, 4, p[5]) | 899 args = self.BuildProduction('Arguments', p, 4, p[5]) |
899 value = self.BuildNamed('Call', p, 3, args) | 900 value = self.BuildNamed('Call', p, 3, args) |
900 p[0] = self.BuildNamed('ExtAttribute', p, 1, value) | 901 p[0] = self.BuildNamed('ExtAttribute', p, 1, value) |
901 | 902 |
902 # [96] NOT IMPLEMENTED (ExtendedAttributeTypePair) | 903 # [96] NOT IMPLEMENTED (ExtendedAttributeTypePair) |
903 | 904 |
905 # [97] | |
Jens Widell
2014/10/15 07:22:17
Supposed to be [87]. Looks like a lot of these pro
noelallen1
2014/10/15 18:12:32
Agreed to both. If you change to a different vers
yhirano
2014/10/16 05:25:47
Done. I removed numbers from idl_ppapi_parser.py,
| |
906 def p_PromiseType(self, p): | |
907 """PromiseType : PROMISE '<' ReturnType '>' | |
908 | PROMISE""" | |
909 if len(p) == 2: | |
910 # Promise without resolution type is not specified in the Web IDL spec. | |
911 # As it is used in some specs and in the blink implementation, | |
912 # we allow that here. | |
913 type = self.BuildAttribute('ResolutionType', | |
914 self.BuildProduction('Any', p, 1)) | |
915 else: | |
916 type = self.BuildAttribute('ResolutionType', p[3]) | |
917 p[0] = self.BuildNamed('Promise', p, 1, type) | |
918 | |
904 # | 919 # |
905 # Parser Errors | 920 # Parser Errors |
906 # | 921 # |
907 # p_error is called whenever the parser can not find a pattern match for | 922 # p_error is called whenever the parser can not find a pattern match for |
908 # a set of items from the current state. The p_error function defined here | 923 # a set of items from the current state. The p_error function defined here |
909 # is triggered logging an error, and parsing recovery happens as the | 924 # is triggered logging an error, and parsing recovery happens as the |
910 # p_<type>_error functions defined above are called. This allows the parser | 925 # p_<type>_error functions defined above are called. This allows the parser |
911 # to continue so as to capture more than one error per file. | 926 # to continue so as to capture more than one error per file. |
912 # | 927 # |
913 def p_error(self, t): | 928 def p_error(self, t): |
(...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1113 | 1128 |
1114 print '\n'.join(ast.Tree(accept_props=['PROD'])) | 1129 print '\n'.join(ast.Tree(accept_props=['PROD'])) |
1115 if errors: | 1130 if errors: |
1116 print '\nFound %d errors.\n' % errors | 1131 print '\nFound %d errors.\n' % errors |
1117 | 1132 |
1118 return errors | 1133 return errors |
1119 | 1134 |
1120 | 1135 |
1121 if __name__ == '__main__': | 1136 if __name__ == '__main__': |
1122 sys.exit(main(sys.argv[1:])) | 1137 sys.exit(main(sys.argv[1:])) |
OLD | NEW |