| OLD | NEW |
| 1 # Copyright 2013 The Chromium Authors. All rights reserved. | 1 # Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
| 3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
| 4 | 4 |
| 5 # TODO(vtl): "data" is a pretty vague name. Rename it? | 5 # TODO(vtl): "data" is a pretty vague name. Rename it? |
| 6 | 6 |
| 7 import copy | 7 import copy |
| 8 | 8 |
| 9 import module as mojom | 9 import module as mojom |
| 10 | 10 |
| (...skipping 24 matching lines...) Expand all Loading... |
| 35 # pretty printing maintain the order. | 35 # pretty printing maintain the order. |
| 36 def istr(index, string): | 36 def istr(index, string): |
| 37 class IndexedString(str): | 37 class IndexedString(str): |
| 38 def __lt__(self, other): | 38 def __lt__(self, other): |
| 39 return self.__index__ < other.__index__ | 39 return self.__index__ < other.__index__ |
| 40 | 40 |
| 41 rv = IndexedString(string) | 41 rv = IndexedString(string) |
| 42 rv.__index__ = index | 42 rv.__index__ = index |
| 43 return rv | 43 return rv |
| 44 | 44 |
| 45 builtin_values = frozenset([ |
| 46 "double.INFINITY", |
| 47 "double.NEGATIVE_INFINITY", |
| 48 "double.NAN", |
| 49 "float.INFINITY", |
| 50 "float.NEGATIVE_INFINITY", |
| 51 "float.NAN"]) |
| 52 |
| 53 def IsBuiltinValue(value): |
| 54 return value in builtin_values |
| 55 |
| 45 def LookupKind(kinds, spec, scope): | 56 def LookupKind(kinds, spec, scope): |
| 46 """Tries to find which Kind a spec refers to, given the scope in which its | 57 """Tries to find which Kind a spec refers to, given the scope in which its |
| 47 referenced. Starts checking from the narrowest scope to most general. For | 58 referenced. Starts checking from the narrowest scope to most general. For |
| 48 example, given a struct field like | 59 example, given a struct field like |
| 49 Foo.Bar x; | 60 Foo.Bar x; |
| 50 Foo.Bar could refer to the type 'Bar' in the 'Foo' namespace, or an inner | 61 Foo.Bar could refer to the type 'Bar' in the 'Foo' namespace, or an inner |
| 51 type 'Bar' in the struct 'Foo' in the current namespace. | 62 type 'Bar' in the struct 'Foo' in the current namespace. |
| 52 | 63 |
| 53 |scope| is a tuple that looks like (namespace, struct/interface), referring | 64 |scope| is a tuple that looks like (namespace, struct/interface), referring |
| 54 to the location where the type is referenced.""" | 65 to the location where the type is referenced.""" |
| (...skipping 23 matching lines...) Expand all Loading... |
| 78 if test_spec: | 89 if test_spec: |
| 79 test_spec += '.' | 90 test_spec += '.' |
| 80 test_spec += name | 91 test_spec += name |
| 81 value = values.get(test_spec) | 92 value = values.get(test_spec) |
| 82 if value: | 93 if value: |
| 83 return value | 94 return value |
| 84 | 95 |
| 85 return values.get(name) | 96 return values.get(name) |
| 86 | 97 |
| 87 def FixupExpression(module, value, scope, kind): | 98 def FixupExpression(module, value, scope, kind): |
| 88 """Translates an IDENTIFIER into a structured Value object.""" | 99 """Translates an IDENTIFIER into a built-in value or structured NamedValue |
| 100 object.""" |
| 89 if isinstance(value, tuple) and value[0] == 'IDENTIFIER': | 101 if isinstance(value, tuple) and value[0] == 'IDENTIFIER': |
| 102 # Allow user defined values to shadow builtins. |
| 90 result = LookupValue(module.values, value[1], scope, kind) | 103 result = LookupValue(module.values, value[1], scope, kind) |
| 91 if result: | 104 if result: |
| 92 return result | 105 return result |
| 106 if IsBuiltinValue(value[1]): |
| 107 return mojom.BuiltinValue(value[1]) |
| 93 return value | 108 return value |
| 94 | 109 |
| 95 def KindToData(kind): | 110 def KindToData(kind): |
| 96 return kind.spec | 111 return kind.spec |
| 97 | 112 |
| 98 def KindFromData(kinds, data, scope): | 113 def KindFromData(kinds, data, scope): |
| 99 kind = LookupKind(kinds, data, scope) | 114 kind = LookupKind(kinds, data, scope) |
| 100 if kind: | 115 if kind: |
| 101 return kind | 116 return kind |
| 102 | 117 |
| (...skipping 247 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 350 | 365 |
| 351 def OrderedModuleFromData(data): | 366 def OrderedModuleFromData(data): |
| 352 module = ModuleFromData(data) | 367 module = ModuleFromData(data) |
| 353 for interface in module.interfaces: | 368 for interface in module.interfaces: |
| 354 next_ordinal = 0 | 369 next_ordinal = 0 |
| 355 for method in interface.methods: | 370 for method in interface.methods: |
| 356 if method.ordinal is None: | 371 if method.ordinal is None: |
| 357 method.ordinal = next_ordinal | 372 method.ordinal = next_ordinal |
| 358 next_ordinal = method.ordinal + 1 | 373 next_ordinal = method.ordinal + 1 |
| 359 return module | 374 return module |
| OLD | NEW |