Index: mojo/public/tools/bindings/pylib/mojom/generate/constant_resolver.py |
diff --git a/mojo/public/tools/bindings/pylib/mojom/generate/constant_resolver.py b/mojo/public/tools/bindings/pylib/mojom/generate/constant_resolver.py |
deleted file mode 100644 |
index 1e6564d16044cee7b9b283214680c04501b1a274..0000000000000000000000000000000000000000 |
--- a/mojo/public/tools/bindings/pylib/mojom/generate/constant_resolver.py |
+++ /dev/null |
@@ -1,96 +0,0 @@ |
-# Copyright 2015 The Chromium Authors. All rights reserved. |
-# Use of this source code is governed by a BSD-style license that can be |
-# found in the LICENSE file. |
- |
-"""Resolves the values used for constants and enums.""" |
- |
-from itertools import ifilter |
-import mojom.generate.module as mojom |
- |
-def ResolveConstants(module, expression_to_text): |
- in_progress = set() |
- computed = set() |
- |
- def GetResolvedValue(named_value): |
- assert isinstance(named_value, (mojom.EnumValue, mojom.ConstantValue)) |
- if isinstance(named_value, mojom.EnumValue): |
- field = next(ifilter(lambda field: field.name == named_value.name, |
- named_value.enum.fields), None) |
- if not field: |
- raise RuntimeError( |
- 'Unable to get computed value for field %s of enum %s' % |
- (named_value.name, named_value.enum.name)) |
- if field not in computed: |
- ResolveEnum(named_value.enum) |
- return field.resolved_value |
- else: |
- ResolveConstant(named_value.constant) |
- named_value.resolved_value = named_value.constant.resolved_value |
- return named_value.resolved_value |
- |
- def ResolveConstant(constant): |
- if constant in computed: |
- return |
- if constant in in_progress: |
- raise RuntimeError('Circular dependency for constant: %s' % constant.name) |
- in_progress.add(constant) |
- if isinstance(constant.value, (mojom.EnumValue, mojom.ConstantValue)): |
- resolved_value = GetResolvedValue(constant.value) |
- elif isinstance(constant.value, mojom.BuiltinValue): |
- resolved_value = expression_to_text(constant.value) |
- elif constant.kind in [mojom.FLOAT, mojom.DOUBLE]: |
- # Force float constants to have a decimal point. |
- resolved_value = expression_to_text(repr(float(constant.value))) |
- else: |
- resolved_value = expression_to_text(constant.value) |
- constant.resolved_value = resolved_value |
- in_progress.remove(constant) |
- computed.add(constant) |
- |
- def ResolveEnum(enum): |
- def ResolveEnumField(enum, field, default_value): |
- if field in computed: |
- return |
- if field in in_progress: |
- raise RuntimeError('Circular dependency for enum: %s' % enum.name) |
- in_progress.add(field) |
- if field.value: |
- if isinstance(field.value, mojom.EnumValue): |
- resolved_value = GetResolvedValue(field.value) |
- elif isinstance(field.value, str): |
- resolved_value = int(field.value, 0) |
- else: |
- raise RuntimeError('Unexpected value: %s' % field.value) |
- else: |
- resolved_value = default_value |
- field.resolved_value = resolved_value |
- in_progress.remove(field) |
- computed.add(field) |
- |
- current_value = 0 |
- for field in enum.fields: |
- ResolveEnumField(enum, field, current_value) |
- current_value = field.resolved_value + 1 |
- |
- for constant in module.constants: |
- ResolveConstant(constant) |
- |
- for enum in module.enums: |
- ResolveEnum(enum) |
- |
- for struct in module.structs: |
- for constant in struct.constants: |
- ResolveConstant(constant) |
- for enum in struct.enums: |
- ResolveEnum(enum) |
- for field in struct.fields: |
- if isinstance(field.default, (mojom.ConstantValue, mojom.EnumValue)): |
- field.default.resolved_value = GetResolvedValue(field.default) |
- |
- for interface in module.interfaces: |
- for constant in interface.constants: |
- ResolveConstant(constant) |
- for enum in interface.enums: |
- ResolveEnum(enum) |
- |
- return module |