| 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
|
| deleted file mode 100644
|
| index b3d572f27cfe2d25d9624c29c577a7051289c62d..0000000000000000000000000000000000000000
|
| --- a/mojo/public/bindings/generators/mojom_js_generator.py
|
| +++ /dev/null
|
| @@ -1,227 +0,0 @@
|
| -# Copyright 2013 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.
|
| -
|
| -"""Generates JavaScript source files from a mojom.Module."""
|
| -
|
| -from generate import mojom
|
| -from generate import mojom_pack
|
| -from generate import mojom_generator
|
| -
|
| -from generate.template_expander import UseJinja
|
| -
|
| -_kind_to_javascript_default_value = {
|
| - mojom.BOOL: "false",
|
| - mojom.INT8: "0",
|
| - mojom.UINT8: "0",
|
| - mojom.INT16: "0",
|
| - mojom.UINT16: "0",
|
| - mojom.INT32: "0",
|
| - mojom.UINT32: "0",
|
| - mojom.FLOAT: "0",
|
| - mojom.HANDLE: "core.kInvalidHandle",
|
| - mojom.DCPIPE: "core.kInvalidHandle",
|
| - mojom.DPPIPE: "core.kInvalidHandle",
|
| - mojom.MSGPIPE: "core.kInvalidHandle",
|
| - mojom.SHAREDBUFFER: "core.kInvalidHandle",
|
| - mojom.INT64: "0",
|
| - mojom.UINT64: "0",
|
| - mojom.DOUBLE: "0",
|
| - mojom.STRING: '""',
|
| -}
|
| -
|
| -
|
| -def JavaScriptDefaultValue(field):
|
| - if field.default:
|
| - raise Exception("Default values should've been handled in jinja.")
|
| - if field.kind in mojom.PRIMITIVES:
|
| - return _kind_to_javascript_default_value[field.kind]
|
| - if isinstance(field.kind, mojom.Struct):
|
| - return "null";
|
| - if isinstance(field.kind, mojom.Array):
|
| - return "[]";
|
| - if isinstance(field.kind, mojom.Interface):
|
| - return _kind_to_javascript_default_value[mojom.MSGPIPE]
|
| - if isinstance(field.kind, mojom.Enum):
|
| - return "0"
|
| -
|
| -
|
| -def JavaScriptPayloadSize(packed):
|
| - packed_fields = packed.packed_fields
|
| - if not packed_fields:
|
| - return 0;
|
| - last_field = packed_fields[-1]
|
| - offset = last_field.offset + last_field.size
|
| - pad = mojom_pack.GetPad(offset, 8)
|
| - return offset + pad;
|
| -
|
| -
|
| -_kind_to_javascript_type = {
|
| - mojom.BOOL: "codec.Uint8",
|
| - mojom.INT8: "codec.Int8",
|
| - mojom.UINT8: "codec.Uint8",
|
| - mojom.INT16: "codec.Int16",
|
| - mojom.UINT16: "codec.Uint16",
|
| - mojom.INT32: "codec.Int32",
|
| - mojom.UINT32: "codec.Uint32",
|
| - mojom.FLOAT: "codec.Float",
|
| - mojom.HANDLE: "codec.Handle",
|
| - mojom.DCPIPE: "codec.Handle",
|
| - mojom.DPPIPE: "codec.Handle",
|
| - mojom.MSGPIPE: "codec.Handle",
|
| - mojom.SHAREDBUFFER: "codec.Handle",
|
| - mojom.INT64: "codec.Int64",
|
| - mojom.UINT64: "codec.Uint64",
|
| - mojom.DOUBLE: "codec.Double",
|
| - mojom.STRING: "codec.String",
|
| -}
|
| -
|
| -
|
| -def GetJavaScriptType(kind):
|
| - if kind in mojom.PRIMITIVES:
|
| - return _kind_to_javascript_type[kind]
|
| - if isinstance(kind, mojom.Struct):
|
| - return "new codec.PointerTo(%s)" % GetJavaScriptType(kind.name)
|
| - if isinstance(kind, mojom.Array):
|
| - return "new codec.ArrayOf(%s)" % GetJavaScriptType(kind.kind)
|
| - if isinstance(kind, mojom.Interface):
|
| - return GetJavaScriptType(mojom.MSGPIPE)
|
| - if isinstance(kind, mojom.Enum):
|
| - return _kind_to_javascript_type[mojom.INT32]
|
| - return kind
|
| -
|
| -
|
| -_kind_to_javascript_decode_snippet = {
|
| - mojom.BOOL: "read8() & 1",
|
| - mojom.INT8: "read8()",
|
| - mojom.UINT8: "read8()",
|
| - mojom.INT16: "read16()",
|
| - mojom.UINT16: "read16()",
|
| - mojom.INT32: "read32()",
|
| - mojom.UINT32: "read32()",
|
| - mojom.FLOAT: "decodeFloat()",
|
| - mojom.HANDLE: "decodeHandle()",
|
| - mojom.DCPIPE: "decodeHandle()",
|
| - mojom.DPPIPE: "decodeHandle()",
|
| - mojom.MSGPIPE: "decodeHandle()",
|
| - mojom.SHAREDBUFFER: "decodeHandle()",
|
| - mojom.INT64: "read64()",
|
| - mojom.UINT64: "read64()",
|
| - mojom.DOUBLE: "decodeDouble()",
|
| - mojom.STRING: "decodeStringPointer()",
|
| -}
|
| -
|
| -
|
| -def JavaScriptDecodeSnippet(kind):
|
| - if kind in mojom.PRIMITIVES:
|
| - return _kind_to_javascript_decode_snippet[kind]
|
| - if isinstance(kind, mojom.Struct):
|
| - return "decodeStructPointer(%s)" % GetJavaScriptType(kind.name);
|
| - if isinstance(kind, mojom.Array):
|
| - return "decodeArrayPointer(%s)" % GetJavaScriptType(kind.kind);
|
| - if isinstance(kind, mojom.Interface):
|
| - return JavaScriptDecodeSnippet(mojom.MSGPIPE)
|
| - if isinstance(kind, mojom.Enum):
|
| - return _kind_to_javascript_decode_snippet[mojom.INT32]
|
| -
|
| -
|
| -_kind_to_javascript_encode_snippet = {
|
| - mojom.BOOL: "write8(1 & ",
|
| - mojom.INT8: "write8(",
|
| - mojom.UINT8: "write8(",
|
| - mojom.INT16: "write16(",
|
| - mojom.UINT16: "write16(",
|
| - mojom.INT32: "write32(",
|
| - mojom.UINT32: "write32(",
|
| - mojom.FLOAT: "encodeFloat(",
|
| - mojom.HANDLE: "encodeHandle(",
|
| - mojom.DCPIPE: "encodeHandle(",
|
| - mojom.DPPIPE: "encodeHandle(",
|
| - mojom.MSGPIPE: "encodeHandle(",
|
| - mojom.SHAREDBUFFER: "encodeHandle(",
|
| - mojom.INT64: "write64(",
|
| - mojom.UINT64: "write64(",
|
| - mojom.DOUBLE: "encodeDouble(",
|
| - mojom.STRING: "encodeStringPointer(",
|
| -}
|
| -
|
| -
|
| -def JavaScriptEncodeSnippet(kind):
|
| - if kind in mojom.PRIMITIVES:
|
| - return _kind_to_javascript_encode_snippet[kind]
|
| - if isinstance(kind, mojom.Struct):
|
| - return "encodeStructPointer(%s, " % GetJavaScriptType(kind.name);
|
| - if isinstance(kind, mojom.Array):
|
| - return "encodeArrayPointer(%s, " % GetJavaScriptType(kind.kind);
|
| - if isinstance(kind, mojom.Interface):
|
| - return JavaScriptEncodeSnippet(mojom.MSGPIPE)
|
| - if isinstance(kind, mojom.Enum):
|
| - return _kind_to_javascript_encode_snippet[mojom.INT32]
|
| -
|
| -def TranslateConstants(token, module):
|
| - if isinstance(token, mojom.Constant):
|
| - # Enum constants are constructed like:
|
| - # NamespaceUid.Struct_Enum.FIELD_NAME
|
| - name = []
|
| - if token.imported_from:
|
| - name.append(token.imported_from["unique_name"])
|
| - if token.parent_kind:
|
| - name.append(token.parent_kind.name + "_" + token.name[0])
|
| - else:
|
| - name.append(token.name[0])
|
| - name.append(token.name[1])
|
| - return ".".join(name)
|
| - return token
|
| -
|
| -
|
| -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
|
| - return kind.name
|
| -
|
| -
|
| -class Generator(mojom_generator.Generator):
|
| -
|
| - js_filters = {
|
| - "default_value": JavaScriptDefaultValue,
|
| - "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,
|
| - "verify_token_type": mojom_generator.VerifyTokenType,
|
| - }
|
| -
|
| - @UseJinja("js_templates/module.js.tmpl", filters=js_filters)
|
| - def GenerateJsModule(self):
|
| - return {
|
| - "imports": self.GetImports(),
|
| - "kinds": self.module.kinds,
|
| - "enums": self.module.enums,
|
| - "module": self.module,
|
| - "structs": self.GetStructs() + self.GetStructsFromMethods(),
|
| - "interfaces": self.module.interfaces,
|
| - }
|
| -
|
| - def GenerateFiles(self):
|
| - self.Write(self.GenerateJsModule(), "%s.js" % self.module.name)
|
| -
|
| - def GetImports(self):
|
| - # Since each import is assigned a variable in JS, they need to have unique
|
| - # names.
|
| - counter = 1
|
| - for each in self.module.imports:
|
| - each["unique_name"] = "import" + str(counter)
|
| - counter += 1
|
| - return self.module.imports
|
|
|