Index: mojo/public/tools/bindings/generators/mojom_js_generator.py |
diff --git a/mojo/public/tools/bindings/generators/mojom_js_generator.py b/mojo/public/tools/bindings/generators/mojom_js_generator.py |
index 49620ad0345800408cb7b94e84e67e744dd6308b..20a2b23fd431a9bad41f536820daf9086b47848a 100644 |
--- a/mojo/public/tools/bindings/generators/mojom_js_generator.py |
+++ b/mojo/public/tools/bindings/generators/mojom_js_generator.py |
@@ -36,56 +36,6 @@ _kind_to_javascript_default_value = { |
mojom.NULLABLE_STRING: "null" |
} |
- |
-def JavaScriptType(kind): |
- name = [] |
- if kind.imported_from: |
- name.append(kind.imported_from["unique_name"]) |
- if kind.parent_kind: |
- name.append(kind.parent_kind.name) |
- name.append(kind.name) |
- return ".".join(name) |
- |
- |
-def JavaScriptDefaultValue(field): |
- if field.default: |
- if mojom.IsStructKind(field.kind): |
- assert field.default == "default" |
- return "new %s()" % JavaScriptType(field.kind) |
- return ExpressionToText(field.default) |
- if field.kind in mojom.PRIMITIVES: |
- return _kind_to_javascript_default_value[field.kind] |
- if mojom.IsStructKind(field.kind): |
- return "null" |
- if mojom.IsUnionKind(field.kind): |
- return "null" |
- if mojom.IsArrayKind(field.kind): |
- return "null" |
- if mojom.IsMapKind(field.kind): |
- return "null" |
- if mojom.IsInterfaceKind(field.kind): |
- return "new %sPtr()" % JavaScriptType(field.kind) |
- if mojom.IsInterfaceRequestKind(field.kind): |
- return "new bindings.InterfaceRequest()" |
- if mojom.IsAssociatedInterfaceKind(field.kind): |
- return "new associatedBindings.AssociatedInterfacePtrInfo()" |
- if mojom.IsAssociatedInterfaceRequestKind(field.kind): |
- return "new associatedBindings.AssociatedInterfaceRequest()" |
- if mojom.IsEnumKind(field.kind): |
- return "0" |
- raise Exception("No valid default: %s" % field) |
- |
- |
-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 = pack.GetPad(offset, 8) |
- return offset + pad |
- |
- |
_kind_to_codec_type = { |
mojom.BOOL: "codec.Uint8", |
mojom.INT8: "codec.Int8", |
@@ -113,110 +63,20 @@ _kind_to_codec_type = { |
} |
-def CodecType(kind): |
- if kind in mojom.PRIMITIVES: |
- return _kind_to_codec_type[kind] |
- if mojom.IsStructKind(kind): |
- pointer_type = "NullablePointerTo" if mojom.IsNullableKind(kind) \ |
- else "PointerTo" |
- return "new codec.%s(%s)" % (pointer_type, JavaScriptType(kind)) |
- if mojom.IsUnionKind(kind): |
- return JavaScriptType(kind) |
- if mojom.IsArrayKind(kind): |
- array_type = "NullableArrayOf" if mojom.IsNullableKind(kind) else "ArrayOf" |
- array_length = "" if kind.length is None else ", %d" % kind.length |
- element_type = ElementCodecType(kind.kind) |
- return "new codec.%s(%s%s)" % (array_type, element_type, array_length) |
- if mojom.IsInterfaceKind(kind): |
- return "new codec.%s(%sPtr)" % ( |
- "NullableInterface" if mojom.IsNullableKind(kind) else "Interface", |
- JavaScriptType(kind)) |
- if mojom.IsInterfaceRequestKind(kind): |
- return "codec.%s" % ( |
- "NullableInterfaceRequest" if mojom.IsNullableKind(kind) |
- else "InterfaceRequest") |
- if mojom.IsAssociatedInterfaceKind(kind): |
- return "codec.%s" % ( |
- "NullableAssociatedInterfacePtrInfo" if mojom.IsNullableKind(kind) |
- else "AssociatedInterfacePtrInfo") |
- if mojom.IsAssociatedInterfaceRequestKind(kind): |
- return "codec.%s" % ( |
- "NullableAssociatedInterfaceRequest" if mojom.IsNullableKind(kind) |
- else "AssociatedInterfaceRequest") |
- if mojom.IsEnumKind(kind): |
- return "new codec.Enum(%s)" % JavaScriptType(kind) |
- if mojom.IsMapKind(kind): |
- map_type = "NullableMapOf" if mojom.IsNullableKind(kind) else "MapOf" |
- key_type = ElementCodecType(kind.key_kind) |
- value_type = ElementCodecType(kind.value_kind) |
- return "new codec.%s(%s, %s)" % (map_type, key_type, value_type) |
- raise Exception("No codec type for %s" % kind) |
- |
- |
-def ElementCodecType(kind): |
- return "codec.PackedBool" if mojom.IsBoolKind(kind) else CodecType(kind) |
- |
- |
-def JavaScriptDecodeSnippet(kind): |
- if (kind in mojom.PRIMITIVES or mojom.IsUnionKind(kind) or |
- mojom.IsAnyInterfaceKind(kind)): |
- return "decodeStruct(%s)" % CodecType(kind) |
- if mojom.IsStructKind(kind): |
- return "decodeStructPointer(%s)" % JavaScriptType(kind) |
- if mojom.IsMapKind(kind): |
- return "decodeMapPointer(%s, %s)" % \ |
- (ElementCodecType(kind.key_kind), ElementCodecType(kind.value_kind)) |
- if mojom.IsArrayKind(kind) and mojom.IsBoolKind(kind.kind): |
- return "decodeArrayPointer(codec.PackedBool)" |
- if mojom.IsArrayKind(kind): |
- return "decodeArrayPointer(%s)" % CodecType(kind.kind) |
- if mojom.IsUnionKind(kind): |
- return "decodeUnion(%s)" % CodecType(kind) |
- if mojom.IsEnumKind(kind): |
- return JavaScriptDecodeSnippet(mojom.INT32) |
- raise Exception("No decode snippet for %s" % kind) |
- |
- |
-def JavaScriptEncodeSnippet(kind): |
- if (kind in mojom.PRIMITIVES or mojom.IsUnionKind(kind) or |
- mojom.IsAnyInterfaceKind(kind)): |
- return "encodeStruct(%s, " % CodecType(kind) |
- if mojom.IsUnionKind(kind): |
- return "encodeStruct(%s, " % JavaScriptType(kind) |
- if mojom.IsStructKind(kind): |
- return "encodeStructPointer(%s, " % JavaScriptType(kind) |
- if mojom.IsMapKind(kind): |
- return "encodeMapPointer(%s, %s, " % \ |
- (ElementCodecType(kind.key_kind), ElementCodecType(kind.value_kind)) |
- if mojom.IsArrayKind(kind) and mojom.IsBoolKind(kind.kind): |
- return "encodeArrayPointer(codec.PackedBool, "; |
- if mojom.IsArrayKind(kind): |
- return "encodeArrayPointer(%s, " % CodecType(kind.kind) |
- if mojom.IsEnumKind(kind): |
- return JavaScriptEncodeSnippet(mojom.INT32) |
- raise Exception("No encode snippet for %s" % kind) |
- |
- |
-def JavaScriptUnionDecodeSnippet(kind): |
- if mojom.IsUnionKind(kind): |
- return "decodeStructPointer(%s)" % JavaScriptType(kind) |
- return JavaScriptDecodeSnippet(kind) |
- |
- |
-def JavaScriptUnionEncodeSnippet(kind): |
- if mojom.IsUnionKind(kind): |
- return "encodeStructPointer(%s, " % JavaScriptType(kind) |
- return JavaScriptEncodeSnippet(kind) |
+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 = pack.GetPad(offset, 8) |
+ return offset + pad |
def JavaScriptFieldOffset(packed_field): |
return "offset + codec.kStructHeaderSize + %s" % packed_field.offset |
-def JavaScriptNullableParam(field): |
- return "true" if mojom.IsNullableKind(field.kind) else "false" |
- |
- |
def GetArrayExpectedDimensionSizes(kind): |
expected_dimension_sizes = [] |
while mojom.IsArrayKind(kind): |
@@ -228,115 +88,6 @@ def GetArrayExpectedDimensionSizes(kind): |
return expected_dimension_sizes |
-def JavaScriptValidateArrayParams(field): |
- nullable = JavaScriptNullableParam(field) |
- element_kind = field.kind.kind |
- element_size = pack.PackedField.GetSizeForKind(element_kind) |
- expected_dimension_sizes = GetArrayExpectedDimensionSizes( |
- field.kind) |
- element_type = ElementCodecType(element_kind) |
- return "%s, %s, %s, %s, 0" % \ |
- (element_size, element_type, nullable, |
- expected_dimension_sizes) |
- |
- |
-def JavaScriptValidateEnumParams(field): |
- return JavaScriptType(field.kind) |
- |
-def JavaScriptValidateStructParams(field): |
- nullable = JavaScriptNullableParam(field) |
- struct_type = JavaScriptType(field.kind) |
- return "%s, %s" % (struct_type, nullable) |
- |
-def JavaScriptValidateUnionParams(field): |
- nullable = JavaScriptNullableParam(field) |
- union_type = JavaScriptType(field.kind) |
- return "%s, %s" % (union_type, nullable) |
- |
-def JavaScriptValidateMapParams(field): |
- nullable = JavaScriptNullableParam(field) |
- keys_type = ElementCodecType(field.kind.key_kind) |
- values_kind = field.kind.value_kind; |
- values_type = ElementCodecType(values_kind) |
- values_nullable = "true" if mojom.IsNullableKind(values_kind) else "false" |
- return "%s, %s, %s, %s" % \ |
- (nullable, keys_type, values_type, values_nullable) |
- |
- |
-def TranslateConstants(token): |
- if isinstance(token, (mojom.EnumValue, mojom.NamedValue)): |
- # Both variable and enum constants are constructed like: |
- # NamespaceUid.Struct[.Enum].CONSTANT_NAME |
- name = [] |
- if token.imported_from: |
- name.append(token.imported_from["unique_name"]) |
- if token.parent_kind: |
- name.append(token.parent_kind.name) |
- if isinstance(token, mojom.EnumValue): |
- name.append(token.enum.name) |
- name.append(token.name) |
- return ".".join(name) |
- |
- if isinstance(token, mojom.BuiltinValue): |
- if token.value == "double.INFINITY" or token.value == "float.INFINITY": |
- return "Infinity"; |
- if token.value == "double.NEGATIVE_INFINITY" or \ |
- token.value == "float.NEGATIVE_INFINITY": |
- return "-Infinity"; |
- if token.value == "double.NAN" or token.value == "float.NAN": |
- return "NaN"; |
- |
- return token |
- |
- |
-def ExpressionToText(value): |
- return TranslateConstants(value) |
- |
-def IsArrayPointerField(field): |
- return mojom.IsArrayKind(field.kind) |
- |
-def IsEnumField(field): |
- return mojom.IsEnumKind(field.kind) |
- |
-def IsStringPointerField(field): |
- return mojom.IsStringKind(field.kind) |
- |
-def IsStructPointerField(field): |
- return mojom.IsStructKind(field.kind) |
- |
-def IsMapPointerField(field): |
- return mojom.IsMapKind(field.kind) |
- |
-def IsHandleField(field): |
- return mojom.IsAnyHandleKind(field.kind) |
- |
-def IsInterfaceField(field): |
- return mojom.IsInterfaceKind(field.kind) |
- |
-def IsInterfaceRequestField(field): |
- return mojom.IsInterfaceRequestKind(field.kind) |
- |
-def IsAssociatedInterfaceField(field): |
- return mojom.IsAssociatedInterfaceKind(field.kind) |
- |
-def IsAssociatedInterfaceRequestField(field): |
- return mojom.IsAssociatedInterfaceRequestKind(field.kind) |
- |
-def IsUnionField(field): |
- return mojom.IsUnionKind(field.kind) |
- |
-def IsBoolField(field): |
- return mojom.IsBoolKind(field.kind) |
- |
-def IsObjectField(field): |
- return mojom.IsObjectKind(field.kind) |
- |
-def IsAnyHandleOrInterfaceField(field): |
- return mojom.IsAnyHandleOrInterfaceKind(field.kind) |
- |
-def IsEnumField(field): |
- return mojom.IsEnumKind(field.kind) |
- |
def GetRelativePath(module, base_module): |
return os.path.relpath(module.path, os.path.dirname(base_module.path)) |
@@ -362,40 +113,40 @@ class Generator(generator.Generator): |
def GetFilters(self): |
js_filters = { |
- "decode_snippet": JavaScriptDecodeSnippet, |
- "default_value": JavaScriptDefaultValue, |
- "encode_snippet": JavaScriptEncodeSnippet, |
- "expression_to_text": ExpressionToText, |
+ "decode_snippet": self._JavaScriptDecodeSnippet, |
+ "default_value": self._JavaScriptDefaultValue, |
+ "encode_snippet": self._JavaScriptEncodeSnippet, |
+ "expression_to_text": self._ExpressionToText, |
"field_offset": JavaScriptFieldOffset, |
"has_callbacks": mojom.HasCallbacks, |
- "is_any_handle_or_interface_field": IsAnyHandleOrInterfaceField, |
- "is_array_pointer_field": IsArrayPointerField, |
- "is_associated_interface_field": IsAssociatedInterfaceField, |
- "is_associated_interface_request_field": |
- IsAssociatedInterfaceRequestField, |
- "is_bool_field": IsBoolField, |
- "is_enum_field": IsEnumField, |
- "is_handle_field": IsHandleField, |
- "is_interface_field": IsInterfaceField, |
- "is_interface_request_field": IsInterfaceRequestField, |
- "is_map_pointer_field": IsMapPointerField, |
- "is_object_field": IsObjectField, |
- "is_string_pointer_field": IsStringPointerField, |
- "is_struct_pointer_field": IsStructPointerField, |
- "is_union_field": IsUnionField, |
- "js_type": JavaScriptType, |
+ "is_any_handle_or_interface_kind": mojom.IsAnyHandleOrInterfaceKind, |
+ "is_array_kind": mojom.IsArrayKind, |
+ "is_associated_interface_kind": mojom.IsAssociatedInterfaceKind, |
+ "is_associated_interface_request_kind": |
+ mojom.IsAssociatedInterfaceRequestKind, |
+ "is_bool_kind": mojom.IsBoolKind, |
+ "is_enum_kind": mojom.IsEnumKind, |
+ "is_any_handle_kind": mojom.IsAnyHandleKind, |
+ "is_interface_kind": mojom.IsInterfaceKind, |
+ "is_interface_request_kind": mojom.IsInterfaceRequestKind, |
+ "is_map_kind": mojom.IsMapKind, |
+ "is_object_kind": mojom.IsObjectKind, |
+ "is_string_kind": mojom.IsStringKind, |
+ "is_struct_kind": mojom.IsStructKind, |
+ "is_union_kind": mojom.IsUnionKind, |
+ "js_type": self._JavaScriptType, |
"method_passes_associated_kinds": mojom.MethodPassesAssociatedKinds, |
"payload_size": JavaScriptPayloadSize, |
"get_relative_path": GetRelativePath, |
"stylize_method": generator.StudlyCapsToCamel, |
- "union_decode_snippet": JavaScriptUnionDecodeSnippet, |
- "union_encode_snippet": JavaScriptUnionEncodeSnippet, |
- "validate_array_params": JavaScriptValidateArrayParams, |
- "validate_enum_params": JavaScriptValidateEnumParams, |
- "validate_map_params": JavaScriptValidateMapParams, |
- "validate_nullable_params": JavaScriptNullableParam, |
- "validate_struct_params": JavaScriptValidateStructParams, |
- "validate_union_params": JavaScriptValidateUnionParams, |
+ "union_decode_snippet": self._JavaScriptUnionDecodeSnippet, |
+ "union_encode_snippet": self._JavaScriptUnionEncodeSnippet, |
+ "validate_array_params": self._JavaScriptValidateArrayParams, |
+ "validate_enum_params": self._JavaScriptValidateEnumParams, |
+ "validate_map_params": self._JavaScriptValidateMapParams, |
+ "validate_nullable_params": self._JavaScriptNullableParam, |
+ "validate_struct_params": self._JavaScriptValidateStructParams, |
+ "validate_union_params": self._JavaScriptValidateUnionParams, |
} |
return js_filters |
@@ -411,9 +162,10 @@ class Generator(generator.Generator): |
self.MatchMojomFilePath("%s.js" % self.module.name)) |
def _GetImports(self): |
+ # TODO(yzshen): Remove this method once the old JS bindings go away. |
used_names = set() |
for each_import in self.module.imports: |
- simple_name = each_import["module_name"].split(".")[0] |
+ simple_name = each_import.name.split(".")[0] |
# Since each import is assigned a variable in JS, they need to have unique |
# names. |
@@ -424,15 +176,208 @@ class Generator(generator.Generator): |
unique_name = simple_name + str(counter) |
used_names.add(unique_name) |
- each_import["unique_name"] = unique_name + "$" |
+ each_import.unique_name = unique_name + "$" |
counter += 1 |
return self.module.imports |
def _GetImportedInterfaces(self): |
interface_to_import = {}; |
for each_import in self.module.imports: |
- for each_interface in each_import["module"].interfaces: |
+ for each_interface in each_import.interfaces: |
name = each_interface.name |
- interface_to_import[name] = each_import["unique_name"] + "." + name |
+ interface_to_import[name] = each_import.unique_name + "." + name |
return interface_to_import; |
+ def _JavaScriptType(self, kind): |
+ name = [] |
+ if kind.module and kind.module.path != self.module.path: |
+ name.append(kind.module.unique_name) |
+ if kind.parent_kind: |
+ name.append(kind.parent_kind.name) |
+ name.append(kind.name) |
+ return ".".join(name) |
+ |
+ def _JavaScriptDefaultValue(self, field): |
+ if field.default: |
+ if mojom.IsStructKind(field.kind): |
+ assert field.default == "default" |
+ return "new %s()" % self._JavaScriptType(field.kind) |
+ return self._ExpressionToText(field.default) |
+ if field.kind in mojom.PRIMITIVES: |
+ return _kind_to_javascript_default_value[field.kind] |
+ if mojom.IsStructKind(field.kind): |
+ return "null" |
+ if mojom.IsUnionKind(field.kind): |
+ return "null" |
+ if mojom.IsArrayKind(field.kind): |
+ return "null" |
+ if mojom.IsMapKind(field.kind): |
+ return "null" |
+ if mojom.IsInterfaceKind(field.kind): |
+ return "new %sPtr()" % self._JavaScriptType(field.kind) |
+ if mojom.IsInterfaceRequestKind(field.kind): |
+ return "new bindings.InterfaceRequest()" |
+ if mojom.IsAssociatedInterfaceKind(field.kind): |
+ return "new associatedBindings.AssociatedInterfacePtrInfo()" |
+ if mojom.IsAssociatedInterfaceRequestKind(field.kind): |
+ return "new associatedBindings.AssociatedInterfaceRequest()" |
+ if mojom.IsEnumKind(field.kind): |
+ return "0" |
+ raise Exception("No valid default: %s" % field) |
+ |
+ def _CodecType(self, kind): |
+ if kind in mojom.PRIMITIVES: |
+ return _kind_to_codec_type[kind] |
+ if mojom.IsStructKind(kind): |
+ pointer_type = "NullablePointerTo" if mojom.IsNullableKind(kind) \ |
+ else "PointerTo" |
+ return "new codec.%s(%s)" % (pointer_type, self._JavaScriptType(kind)) |
+ if mojom.IsUnionKind(kind): |
+ return self._JavaScriptType(kind) |
+ if mojom.IsArrayKind(kind): |
+ array_type = ("NullableArrayOf" if mojom.IsNullableKind(kind) |
+ else "ArrayOf") |
+ array_length = "" if kind.length is None else ", %d" % kind.length |
+ element_type = self._ElementCodecType(kind.kind) |
+ return "new codec.%s(%s%s)" % (array_type, element_type, array_length) |
+ if mojom.IsInterfaceKind(kind): |
+ return "new codec.%s(%sPtr)" % ( |
+ "NullableInterface" if mojom.IsNullableKind(kind) else "Interface", |
+ self._JavaScriptType(kind)) |
+ if mojom.IsInterfaceRequestKind(kind): |
+ return "codec.%s" % ( |
+ "NullableInterfaceRequest" if mojom.IsNullableKind(kind) |
+ else "InterfaceRequest") |
+ if mojom.IsAssociatedInterfaceKind(kind): |
+ return "codec.%s" % ("NullableAssociatedInterfacePtrInfo" |
+ if mojom.IsNullableKind(kind) else "AssociatedInterfacePtrInfo") |
+ if mojom.IsAssociatedInterfaceRequestKind(kind): |
+ return "codec.%s" % ("NullableAssociatedInterfaceRequest" |
+ if mojom.IsNullableKind(kind) else "AssociatedInterfaceRequest") |
+ if mojom.IsEnumKind(kind): |
+ return "new codec.Enum(%s)" % self._JavaScriptType(kind) |
+ if mojom.IsMapKind(kind): |
+ map_type = "NullableMapOf" if mojom.IsNullableKind(kind) else "MapOf" |
+ key_type = self._ElementCodecType(kind.key_kind) |
+ value_type = self._ElementCodecType(kind.value_kind) |
+ return "new codec.%s(%s, %s)" % (map_type, key_type, value_type) |
+ raise Exception("No codec type for %s" % kind) |
+ |
+ def _ElementCodecType(self, kind): |
+ return ("codec.PackedBool" if mojom.IsBoolKind(kind) |
+ else self._CodecType(kind)) |
+ |
+ def _JavaScriptDecodeSnippet(self, kind): |
+ if (kind in mojom.PRIMITIVES or mojom.IsUnionKind(kind) or |
+ mojom.IsAnyInterfaceKind(kind)): |
+ return "decodeStruct(%s)" % self._CodecType(kind) |
+ if mojom.IsStructKind(kind): |
+ return "decodeStructPointer(%s)" % self._JavaScriptType(kind) |
+ if mojom.IsMapKind(kind): |
+ return "decodeMapPointer(%s, %s)" % ( |
+ self._ElementCodecType(kind.key_kind), |
+ self._ElementCodecType(kind.value_kind)) |
+ if mojom.IsArrayKind(kind) and mojom.IsBoolKind(kind.kind): |
+ return "decodeArrayPointer(codec.PackedBool)" |
+ if mojom.IsArrayKind(kind): |
+ return "decodeArrayPointer(%s)" % self._CodecType(kind.kind) |
+ if mojom.IsUnionKind(kind): |
+ return "decodeUnion(%s)" % self._CodecType(kind) |
+ if mojom.IsEnumKind(kind): |
+ return self._JavaScriptDecodeSnippet(mojom.INT32) |
+ raise Exception("No decode snippet for %s" % kind) |
+ |
+ def _JavaScriptEncodeSnippet(self, kind): |
+ if (kind in mojom.PRIMITIVES or mojom.IsUnionKind(kind) or |
+ mojom.IsAnyInterfaceKind(kind)): |
+ return "encodeStruct(%s, " % self._CodecType(kind) |
+ if mojom.IsUnionKind(kind): |
+ return "encodeStruct(%s, " % self._JavaScriptType(kind) |
+ if mojom.IsStructKind(kind): |
+ return "encodeStructPointer(%s, " % self._JavaScriptType(kind) |
+ if mojom.IsMapKind(kind): |
+ return "encodeMapPointer(%s, %s, " % ( |
+ self._ElementCodecType(kind.key_kind), |
+ self._ElementCodecType(kind.value_kind)) |
+ if mojom.IsArrayKind(kind) and mojom.IsBoolKind(kind.kind): |
+ return "encodeArrayPointer(codec.PackedBool, "; |
+ if mojom.IsArrayKind(kind): |
+ return "encodeArrayPointer(%s, " % self._CodecType(kind.kind) |
+ if mojom.IsEnumKind(kind): |
+ return self._JavaScriptEncodeSnippet(mojom.INT32) |
+ raise Exception("No encode snippet for %s" % kind) |
+ |
+ def _JavaScriptUnionDecodeSnippet(self, kind): |
+ if mojom.IsUnionKind(kind): |
+ return "decodeStructPointer(%s)" % self._JavaScriptType(kind) |
+ return self._JavaScriptDecodeSnippet(kind) |
+ |
+ def _JavaScriptUnionEncodeSnippet(self, kind): |
+ if mojom.IsUnionKind(kind): |
+ return "encodeStructPointer(%s, " % self._JavaScriptType(kind) |
+ return self._JavaScriptEncodeSnippet(kind) |
+ |
+ def _JavaScriptNullableParam(self, field): |
+ return "true" if mojom.IsNullableKind(field.kind) else "false" |
+ |
+ def _JavaScriptValidateArrayParams(self, field): |
+ nullable = self._JavaScriptNullableParam(field) |
+ element_kind = field.kind.kind |
+ element_size = pack.PackedField.GetSizeForKind(element_kind) |
+ expected_dimension_sizes = GetArrayExpectedDimensionSizes( |
+ field.kind) |
+ element_type = self._ElementCodecType(element_kind) |
+ return "%s, %s, %s, %s, 0" % \ |
+ (element_size, element_type, nullable, |
+ expected_dimension_sizes) |
+ |
+ def _JavaScriptValidateEnumParams(self, field): |
+ return self._JavaScriptType(field.kind) |
+ |
+ def _JavaScriptValidateStructParams(self, field): |
+ nullable = self._JavaScriptNullableParam(field) |
+ struct_type = self._JavaScriptType(field.kind) |
+ return "%s, %s" % (struct_type, nullable) |
+ |
+ def _JavaScriptValidateUnionParams(self, field): |
+ nullable = self._JavaScriptNullableParam(field) |
+ union_type = self._JavaScriptType(field.kind) |
+ return "%s, %s" % (union_type, nullable) |
+ |
+ def _JavaScriptValidateMapParams(self, field): |
+ nullable = self._JavaScriptNullableParam(field) |
+ keys_type = self._ElementCodecType(field.kind.key_kind) |
+ values_kind = field.kind.value_kind; |
+ values_type = self._ElementCodecType(values_kind) |
+ values_nullable = "true" if mojom.IsNullableKind(values_kind) else "false" |
+ return "%s, %s, %s, %s" % \ |
+ (nullable, keys_type, values_type, values_nullable) |
+ |
+ def _TranslateConstants(self, token): |
+ if isinstance(token, (mojom.EnumValue, mojom.NamedValue)): |
+ # Both variable and enum constants are constructed like: |
+ # NamespaceUid.Struct[.Enum].CONSTANT_NAME |
+ name = [] |
+ if token.module and token.module.path != self.module.path: |
+ name.append(token.module.unique_name) |
+ if token.parent_kind: |
+ name.append(token.parent_kind.name) |
+ if isinstance(token, mojom.EnumValue): |
+ name.append(token.enum.name) |
+ name.append(token.name) |
+ return ".".join(name) |
+ |
+ if isinstance(token, mojom.BuiltinValue): |
+ if token.value == "double.INFINITY" or token.value == "float.INFINITY": |
+ return "Infinity"; |
+ if token.value == "double.NEGATIVE_INFINITY" or \ |
+ token.value == "float.NEGATIVE_INFINITY": |
+ return "-Infinity"; |
+ if token.value == "double.NAN" or token.value == "float.NAN": |
+ return "NaN"; |
+ |
+ return token |
+ |
+ def _ExpressionToText(self, value): |
+ return self._TranslateConstants(value) |
+ |