| Index: mojo/public/bindings/generators/mojom_js_generator.py
|
| diff --git a/mojo/public/bindings/generators/mojom_js_generator.py b/mojo/public/bindings/generators/mojom_js_generator.py
|
| index bfa443a9b778151127b88451aad333aed17fe36d..252e4ce831b8a1578feb686523a0a9ae2b2404bd 100644
|
| --- a/mojo/public/bindings/generators/mojom_js_generator.py
|
| +++ b/mojo/public/bindings/generators/mojom_js_generator.py
|
| @@ -10,7 +10,6 @@ from generate import mojom_generator
|
|
|
| from generate.template_expander import UseJinja
|
|
|
| -
|
| _kind_to_javascript_default_value = {
|
| mojom.BOOL: "false",
|
| mojom.INT8: "0",
|
| @@ -148,13 +147,59 @@ def JavaScriptEncodeSnippet(kind):
|
| return JavaScriptEncodeSnippet(mojom.MSGPIPE)
|
|
|
|
|
| -def SubstituteNamespace(value, imports):
|
| - for import_item in imports:
|
| - value = value.replace(import_item["namespace"] + ".",
|
| - import_item["unique_name"] + ".")
|
| +def GetConstants(module):
|
| + """Returns a generator that enumerates all constants that can be referenced
|
| + from this module."""
|
| + class Constant:
|
| + pass
|
| +
|
| + for enum in module.enums:
|
| + for field in enum.fields:
|
| + constant = Constant()
|
| + constant.namespace = module.namespace
|
| + constant.is_current_namespace = True
|
| + constant.import_item = None
|
| + constant.name = (enum.name, field.name)
|
| + yield constant
|
| +
|
| + for each in module.imports:
|
| + for enum in each["module"].enums:
|
| + for field in enum.fields:
|
| + constant = Constant()
|
| + constant.namespace = each["namespace"]
|
| + constant.is_current_namespace = constant.namespace == module.namespace
|
| + constant.import_item = each
|
| + constant.name = (enum.name, field.name)
|
| + yield constant
|
| +
|
| +
|
| +def TranslateConstants(value, module):
|
| + # We're assuming we're dealing with an identifier, but that may not be
|
| + # the case. If we're not, we just won't find any matches.
|
| + if value.find(".") != -1:
|
| + namespace, identifier = value.split(".")
|
| + else:
|
| + namespace, identifier = "", value
|
| +
|
| + for constant in GetConstants(module):
|
| + if namespace == constant.namespace or (
|
| + namespace == "" and constant.is_current_namespace):
|
| + if constant.name[1] == identifier:
|
| + if constant.import_item:
|
| + return "%s.%s.%s" % (constant.import_item["unique_name"],
|
| + constant.name[0], constant.name[1])
|
| + else:
|
| + return "%s.%s" % (constant.name[0], constant.name[1])
|
| return value
|
|
|
|
|
| +def ExpressionToText(value, module):
|
| + if value[0] != "EXPRESSION":
|
| + raise Exception("Expected EXPRESSION, got" + value)
|
| + return "".join(mojom_generator.ExpressionMapper(value,
|
| + lambda token: TranslateConstants(token, module)))
|
| +
|
| +
|
| def JavascriptType(kind):
|
| if kind.imported_from:
|
| return kind.imported_from["unique_name"] + "." + kind.name
|
| @@ -169,12 +214,12 @@ class Generator(mojom_generator.Generator):
|
| "payload_size": JavaScriptPayloadSize,
|
| "decode_snippet": JavaScriptDecodeSnippet,
|
| "encode_snippet": JavaScriptEncodeSnippet,
|
| + "expression_to_text": ExpressionToText,
|
| "is_object_kind": mojom_generator.IsObjectKind,
|
| "is_string_kind": mojom_generator.IsStringKind,
|
| "is_array_kind": lambda kind: isinstance(kind, mojom.Array),
|
| "js_type": JavascriptType,
|
| "stylize_method": mojom_generator.StudlyCapsToCamel,
|
| - "substitute_namespace": SubstituteNamespace,
|
| "verify_token_type": mojom_generator.VerifyTokenType,
|
| }
|
|
|
| @@ -184,6 +229,7 @@ class Generator(mojom_generator.Generator):
|
| "imports": self.GetImports(),
|
| "kinds": self.module.kinds,
|
| "enums": self.module.enums,
|
| + "module": self.module,
|
| "structs": self.GetStructs() + self.GetStructsFromMethods(),
|
| "interfaces": self.module.interfaces,
|
| }
|
|
|