Index: mojo/public/tools/bindings/generators/mojom_dart_generator.py |
diff --git a/mojo/public/tools/bindings/generators/mojom_js_generator.py b/mojo/public/tools/bindings/generators/mojom_dart_generator.py |
similarity index 54% |
copy from mojo/public/tools/bindings/generators/mojom_js_generator.py |
copy to mojo/public/tools/bindings/generators/mojom_dart_generator.py |
index 47fea232a0df698ac78a081bd1943309339c5dc6..5dc826079c974e027b48c06fcf5fdf22108b336e 100644 |
--- a/mojo/public/tools/bindings/generators/mojom_js_generator.py |
+++ b/mojo/public/tools/bindings/generators/mojom_dart_generator.py |
@@ -2,14 +2,14 @@ |
# 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.""" |
+"""Generates Dart source files from a mojom.Module.""" |
import mojom.generate.generator as generator |
import mojom.generate.module as mojom |
import mojom.generate.pack as pack |
from mojom.generate.template_expander import UseJinja |
-_kind_to_javascript_default_value = { |
+_kind_to_dart_default_value = { |
mojom.BOOL: "false", |
mojom.INT8: "0", |
mojom.UINT8: "0", |
@@ -18,16 +18,16 @@ _kind_to_javascript_default_value = { |
mojom.INT32: "0", |
mojom.UINT32: "0", |
mojom.FLOAT: "0", |
- mojom.HANDLE: "null", |
- mojom.DCPIPE: "null", |
- mojom.DPPIPE: "null", |
- mojom.MSGPIPE: "null", |
- mojom.SHAREDBUFFER: "null", |
- mojom.NULLABLE_HANDLE: "null", |
- mojom.NULLABLE_DCPIPE: "null", |
- mojom.NULLABLE_DPPIPE: "null", |
- mojom.NULLABLE_MSGPIPE: "null", |
- mojom.NULLABLE_SHAREDBUFFER: "null", |
+ mojom.HANDLE: "0", |
+ mojom.DCPIPE: "0", |
+ mojom.DPPIPE: "0", |
+ mojom.MSGPIPE: "0", |
+ mojom.SHAREDBUFFER: "0", |
+ mojom.NULLABLE_HANDLE: "0", |
+ mojom.NULLABLE_DCPIPE: "0", |
+ mojom.NULLABLE_DPPIPE: "0", |
+ mojom.NULLABLE_MSGPIPE: "0", |
+ mojom.NULLABLE_SHAREDBUFFER: "0", |
mojom.INT64: "0", |
mojom.UINT64: "0", |
mojom.DOUBLE: "0", |
@@ -36,20 +36,47 @@ _kind_to_javascript_default_value = { |
} |
-def JavaScriptType(kind): |
+_kind_to_dart_decl_type = { |
+ mojom.BOOL: "bool", |
+ mojom.INT8: "int", |
+ mojom.UINT8: "int", |
+ mojom.INT16: "int", |
+ mojom.UINT16: "int", |
+ mojom.INT32: "int", |
+ mojom.UINT32: "int", |
+ mojom.FLOAT: "double", |
+ mojom.HANDLE: "int", |
+ mojom.DCPIPE: "int", |
+ mojom.DPPIPE: "int", |
+ mojom.MSGPIPE: "int", |
+ mojom.SHAREDBUFFER: "int", |
+ mojom.NULLABLE_HANDLE: "int", |
+ mojom.NULLABLE_DCPIPE: "int", |
+ mojom.NULLABLE_DPPIPE: "int", |
+ mojom.NULLABLE_MSGPIPE: "int", |
+ mojom.NULLABLE_SHAREDBUFFER: "int", |
+ mojom.INT64: "int", |
+ mojom.UINT64: "int", |
+ mojom.DOUBLE: "double", |
+ mojom.STRING: "String", |
+ mojom.NULLABLE_STRING: "String" |
+} |
+ |
+ |
+def DartType(kind): |
if kind.imported_from: |
return kind.imported_from["unique_name"] + "." + kind.name |
return kind.name |
-def JavaScriptDefaultValue(field): |
+def DartDefaultValue(field): |
if field.default: |
if mojom.IsStructKind(field.kind): |
assert field.default == "default" |
- return "new %s()" % JavaScriptType(field.kind) |
+ return "new %s()" % DartType(field.kind) |
return ExpressionToText(field.default) |
if field.kind in mojom.PRIMITIVES: |
- return _kind_to_javascript_default_value[field.kind] |
+ return _kind_to_dart_default_value[field.kind] |
if mojom.IsStructKind(field.kind): |
return "null" |
if mojom.IsArrayKind(field.kind): |
@@ -58,12 +85,30 @@ def JavaScriptDefaultValue(field): |
return "null" |
if mojom.IsInterfaceKind(field.kind) or \ |
mojom.IsInterfaceRequestKind(field.kind): |
- return _kind_to_javascript_default_value[mojom.MSGPIPE] |
+ return _kind_to_dart_default_value[mojom.MSGPIPE] |
if mojom.IsEnumKind(field.kind): |
return "0" |
-def JavaScriptPayloadSize(packed): |
+def DartDeclType(kind): |
+ if kind in mojom.PRIMITIVES: |
+ return _kind_to_dart_decl_type[kind] |
+ if mojom.IsStructKind(kind): |
+ return DartType(kind) |
+ if mojom.IsArrayKind(kind): |
+ array_type = DartDeclType(kind.kind) |
+ return "List<" + array_type + ">" |
+ if mojom.IsMapKind(kind): |
+ key_type = DartDeclType(kind.key_kind) |
+ value_type = DartDeclType(kind.value_kind) |
+ return "Map<"+ key_type + ", " + value_type + ">" |
+ if mojom.IsInterfaceKind(kind) or \ |
+ mojom.IsInterfaceRequestKind(kind): |
+ return _kind_to_dart_decl_type[mojom.MSGPIPE] |
+ if mojom.IsEnumKind(kind): |
+ return "int" |
+ |
+def DartPayloadSize(packed): |
packed_fields = packed.packed_fields |
if not packed_fields: |
return 0 |
@@ -74,29 +119,29 @@ def JavaScriptPayloadSize(packed): |
_kind_to_codec_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.NULLABLE_HANDLE: "codec.NullableHandle", |
- mojom.NULLABLE_DCPIPE: "codec.NullableHandle", |
- mojom.NULLABLE_DPPIPE: "codec.NullableHandle", |
- mojom.NULLABLE_MSGPIPE: "codec.NullableHandle", |
- mojom.NULLABLE_SHAREDBUFFER: "codec.NullableHandle", |
- mojom.INT64: "codec.Int64", |
- mojom.UINT64: "codec.Uint64", |
- mojom.DOUBLE: "codec.Double", |
- mojom.STRING: "codec.String", |
- mojom.NULLABLE_STRING: "codec.NullableString", |
+ mojom.BOOL: "bindings.Uint8", |
+ mojom.INT8: "bindings.Int8", |
+ mojom.UINT8: "bindings.Uint8", |
+ mojom.INT16: "bindings.Int16", |
+ mojom.UINT16: "bindings.Uint16", |
+ mojom.INT32: "bindings.Int32", |
+ mojom.UINT32: "bindings.Uint32", |
+ mojom.FLOAT: "bindings.Float", |
+ mojom.HANDLE: "bindings.Handle", |
+ mojom.DCPIPE: "bindings.Handle", |
+ mojom.DPPIPE: "bindings.Handle", |
+ mojom.MSGPIPE: "bindings.Handle", |
+ mojom.SHAREDBUFFER: "bindings.Handle", |
+ mojom.NULLABLE_HANDLE: "bindings.NullableHandle", |
+ mojom.NULLABLE_DCPIPE: "bindings.NullableHandle", |
+ mojom.NULLABLE_DPPIPE: "bindings.NullableHandle", |
+ mojom.NULLABLE_MSGPIPE: "bindings.NullableHandle", |
+ mojom.NULLABLE_SHAREDBUFFER: "bindings.NullableHandle", |
+ mojom.INT64: "bindings.Int64", |
+ mojom.UINT64: "bindings.Uint64", |
+ mojom.DOUBLE: "bindings.Double", |
+ mojom.STRING: "bindings.MojoString", |
+ mojom.NULLABLE_STRING: "bindings.NullableMojoString", |
} |
@@ -106,13 +151,13 @@ def CodecType(kind): |
if mojom.IsStructKind(kind): |
pointer_type = "NullablePointerTo" if mojom.IsNullableKind(kind) \ |
else "PointerTo" |
- return "new codec.%s(%s)" % (pointer_type, JavaScriptType(kind)) |
+ return "new bindings.%s(%s)" % (pointer_type, DartType(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 = "codec.PackedBool" if mojom.IsBoolKind(kind.kind) \ |
+ element_type = "bindings.PackedBool" if mojom.IsBoolKind(kind.kind) \ |
else CodecType(kind.kind) |
- return "new codec.%s(%s%s)" % (array_type, element_type, array_length) |
+ return "new bindings.%s(%s%s)" % (array_type, element_type, array_length) |
if mojom.IsInterfaceKind(kind) or mojom.IsInterfaceRequestKind(kind): |
return CodecType(mojom.MSGPIPE) |
if mojom.IsEnumKind(kind): |
@@ -120,49 +165,49 @@ def CodecType(kind): |
return kind |
def MapCodecType(kind): |
- return "codec.PackedBool" if mojom.IsBoolKind(kind) else CodecType(kind) |
+ return "bindings.PackedBool" if mojom.IsBoolKind(kind) else CodecType(kind) |
-def JavaScriptDecodeSnippet(kind): |
+def DartDecodeSnippet(kind): |
if kind in mojom.PRIMITIVES: |
return "decodeStruct(%s)" % CodecType(kind) |
if mojom.IsStructKind(kind): |
- return "decodeStructPointer(%s)" % JavaScriptType(kind) |
+ return "decodeStructPointer(%s)" % DartType(kind) |
if mojom.IsMapKind(kind): |
return "decodeMapPointer(%s, %s)" % \ |
(MapCodecType(kind.key_kind), MapCodecType(kind.value_kind)) |
if mojom.IsArrayKind(kind) and mojom.IsBoolKind(kind.kind): |
- return "decodeArrayPointer(codec.PackedBool)" |
+ return "decodeArrayPointer(bindings.PackedBool)" |
if mojom.IsArrayKind(kind): |
return "decodeArrayPointer(%s)" % CodecType(kind.kind) |
if mojom.IsInterfaceKind(kind) or mojom.IsInterfaceRequestKind(kind): |
- return JavaScriptDecodeSnippet(mojom.MSGPIPE) |
+ return DartDecodeSnippet(mojom.MSGPIPE) |
if mojom.IsEnumKind(kind): |
- return JavaScriptDecodeSnippet(mojom.INT32) |
+ return DartDecodeSnippet(mojom.INT32) |
-def JavaScriptEncodeSnippet(kind): |
+def DartEncodeSnippet(kind): |
if kind in mojom.PRIMITIVES: |
return "encodeStruct(%s, " % CodecType(kind) |
if mojom.IsStructKind(kind): |
- return "encodeStructPointer(%s, " % JavaScriptType(kind) |
+ return "encodeStructPointer(%s, " % DartType(kind) |
if mojom.IsMapKind(kind): |
return "encodeMapPointer(%s, %s, " % \ |
(MapCodecType(kind.key_kind), MapCodecType(kind.value_kind)) |
if mojom.IsArrayKind(kind) and mojom.IsBoolKind(kind.kind): |
- return "encodeArrayPointer(codec.PackedBool, "; |
+ return "encodeArrayPointer(bindings.PackedBool, "; |
if mojom.IsArrayKind(kind): |
return "encodeArrayPointer(%s, " % CodecType(kind.kind) |
if mojom.IsInterfaceKind(kind) or mojom.IsInterfaceRequestKind(kind): |
- return JavaScriptEncodeSnippet(mojom.MSGPIPE) |
+ return DartEncodeSnippet(mojom.MSGPIPE) |
if mojom.IsEnumKind(kind): |
- return JavaScriptEncodeSnippet(mojom.INT32) |
+ return DartEncodeSnippet(mojom.INT32) |
-def JavaScriptFieldOffset(packed_field): |
- return "offset + codec.kStructHeaderSize + %s" % packed_field.offset |
+def DartFieldOffset(packed_field): |
+ return "offset + bindings.kStructHeaderSize + %s" % packed_field.offset |
-def JavaScriptNullableParam(packed_field): |
+def DartNullableParam(packed_field): |
return "true" if mojom.IsNullableKind(packed_field.field.kind) else "false" |
@@ -177,30 +222,30 @@ def GetArrayExpectedDimensionSizes(kind): |
return expected_dimension_sizes |
-def JavaScriptValidateArrayParams(packed_field): |
- nullable = JavaScriptNullableParam(packed_field) |
- field_offset = JavaScriptFieldOffset(packed_field) |
+def DartValidateArrayParams(packed_field): |
+ nullable = DartNullableParam(packed_field) |
+ field_offset = DartFieldOffset(packed_field) |
element_kind = packed_field.field.kind.kind |
element_size = pack.PackedField.GetSizeForKind(element_kind) |
expected_dimension_sizes = GetArrayExpectedDimensionSizes( |
packed_field.field.kind) |
- element_type = "codec.PackedBool" if mojom.IsBoolKind(element_kind) \ |
+ element_type = "bindings.PackedBool" if mojom.IsBoolKind(element_kind) \ |
else CodecType(element_kind) |
return "%s, %s, %s, %s, %s, 0" % \ |
(field_offset, element_size, element_type, nullable, |
expected_dimension_sizes) |
-def JavaScriptValidateStructParams(packed_field): |
- nullable = JavaScriptNullableParam(packed_field) |
- field_offset = JavaScriptFieldOffset(packed_field) |
- struct_type = JavaScriptType(packed_field.field.kind) |
+def DartValidateStructParams(packed_field): |
+ nullable = DartNullableParam(packed_field) |
+ field_offset = DartFieldOffset(packed_field) |
+ struct_type = DartType(packed_field.field.kind) |
return "%s, %s, %s" % (field_offset, struct_type, nullable) |
-def JavaScriptValidateMapParams(packed_field): |
- nullable = JavaScriptNullableParam(packed_field) |
- field_offset = JavaScriptFieldOffset(packed_field) |
+def DartValidateMapParams(packed_field): |
+ nullable = DartNullableParam(packed_field) |
+ field_offset = DartFieldOffset(packed_field) |
keys_type = MapCodecType(packed_field.field.kind.key_kind) |
values_kind = packed_field.field.kind.value_kind; |
values_type = MapCodecType(values_kind) |
@@ -209,14 +254,14 @@ def JavaScriptValidateMapParams(packed_field): |
(field_offset, nullable, keys_type, values_type, values_nullable) |
-def JavaScriptValidateStringParams(packed_field): |
- nullable = JavaScriptNullableParam(packed_field) |
- return "%s, %s" % (JavaScriptFieldOffset(packed_field), nullable) |
+def DartValidateStringParams(packed_field): |
+ nullable = DartNullableParam(packed_field) |
+ return "%s, %s" % (DartFieldOffset(packed_field), nullable) |
-def JavaScriptValidateHandleParams(packed_field): |
- nullable = JavaScriptNullableParam(packed_field) |
- field_offset = JavaScriptFieldOffset(packed_field) |
+def DartValidateHandleParams(packed_field): |
+ nullable = DartNullableParam(packed_field) |
+ field_offset = DartFieldOffset(packed_field) |
return "%s, %s" % (field_offset, nullable) |
@@ -224,24 +269,23 @@ def TranslateConstants(token): |
if isinstance(token, (mojom.EnumValue, mojom.NamedValue)): |
# Both variable and enum constants are constructed like: |
# NamespaceUid.Struct[.Enum].CONSTANT_NAME |
- name = [] |
+ name = "" |
if token.imported_from: |
- name.append(token.imported_from["unique_name"]) |
+ name = token.imported_from["unique_name"] + "." |
if token.parent_kind: |
- name.append(token.parent_kind.name) |
+ name = name + token.parent_kind.name + "." |
if isinstance(token, mojom.EnumValue): |
- name.append(token.enum.name) |
- name.append(token.name) |
- return ".".join(name) |
+ name = name + token.enum.name + "_" |
+ return name + token.name |
if isinstance(token, mojom.BuiltinValue): |
if token.value == "double.INFINITY" or token.value == "float.INFINITY": |
- return "Infinity"; |
+ return "double.INFINITY"; |
if token.value == "double.NEGATIVE_INFINITY" or \ |
token.value == "float.NEGATIVE_INFINITY": |
- return "-Infinity"; |
+ return "double.NEGATIVE_INFINITY"; |
if token.value == "double.NAN" or token.value == "float.NAN": |
- return "NaN"; |
+ return "double.NAN"; |
return token |
@@ -249,7 +293,6 @@ def TranslateConstants(token): |
def ExpressionToText(value): |
return TranslateConstants(value) |
- |
def IsArrayPointerField(field): |
return mojom.IsArrayKind(field.kind) |
@@ -268,26 +311,27 @@ def IsHandleField(field): |
class Generator(generator.Generator): |
- js_filters = { |
- "default_value": JavaScriptDefaultValue, |
- "payload_size": JavaScriptPayloadSize, |
- "decode_snippet": JavaScriptDecodeSnippet, |
- "encode_snippet": JavaScriptEncodeSnippet, |
+ dart_filters = { |
+ "default_value": DartDefaultValue, |
+ "payload_size": DartPayloadSize, |
+ "decode_snippet": DartDecodeSnippet, |
+ "encode_snippet": DartEncodeSnippet, |
"expression_to_text": ExpressionToText, |
- "field_offset": JavaScriptFieldOffset, |
+ "field_offset": DartFieldOffset, |
"has_callbacks": mojom.HasCallbacks, |
"is_array_pointer_field": IsArrayPointerField, |
"is_map_pointer_field": IsMapPointerField, |
"is_struct_pointer_field": IsStructPointerField, |
"is_string_pointer_field": IsStringPointerField, |
"is_handle_field": IsHandleField, |
- "js_type": JavaScriptType, |
+ "dart_type": DartType, |
+ "dart_decl_type": DartDeclType, |
"stylize_method": generator.StudlyCapsToCamel, |
- "validate_array_params": JavaScriptValidateArrayParams, |
- "validate_handle_params": JavaScriptValidateHandleParams, |
- "validate_map_params": JavaScriptValidateMapParams, |
- "validate_string_params": JavaScriptValidateStringParams, |
- "validate_struct_params": JavaScriptValidateStructParams, |
+ "validate_array_params": DartValidateArrayParams, |
+ "validate_handle_params": DartValidateHandleParams, |
+ "validate_map_params": DartValidateMapParams, |
+ "validate_string_params": DartValidateStringParams, |
+ "validate_struct_params": DartValidateStructParams, |
} |
def GetParameters(self): |
@@ -302,19 +346,13 @@ class Generator(generator.Generator): |
"imported_interfaces": self.GetImportedInterfaces(), |
} |
- @UseJinja("js_templates/module.amd.tmpl", filters=js_filters) |
- def GenerateAMDModule(self): |
- return self.GetParameters() |
- |
- @UseJinja("js_templates/module.sky.tmpl", filters=js_filters) |
- def GenerateHTMLModule(self): |
+ @UseJinja("dart_templates/module.lib.tmpl", filters=dart_filters) |
+ def GenerateLibModule(self): |
return self.GetParameters() |
def GenerateFiles(self, args): |
- self.Write(self.GenerateAMDModule(), |
- self.MatchMojomFilePath("%s.js" % self.module.name)) |
- self.Write(self.GenerateHTMLModule(), |
- self.MatchMojomFilePath("%s.sky" % self.module.name)) |
+ self.Write(self.GenerateLibModule(), |
+ self.MatchMojomFilePath("%s.dart" % self.module.name)) |
def GetImports(self): |
used_names = set() |