Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / mojo / public / tools / bindings / generators / mojom_js_generator.py
index 1fa3510..5b83974 100644 (file)
@@ -10,42 +10,48 @@ import mojom.generate.pack as pack
 from mojom.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:       "null",
-  mojom.DCPIPE:       "null",
-  mojom.DPPIPE:       "null",
-  mojom.MSGPIPE:      "null",
-  mojom.SHAREDBUFFER: "null",
-  mojom.INT64:        "0",
-  mojom.UINT64:       "0",
-  mojom.DOUBLE:       "0",
-  mojom.STRING:       '""',
+  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:                "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.INT64:                 "0",
+  mojom.UINT64:                "0",
+  mojom.DOUBLE:                "0",
+  mojom.STRING:                '""',
+  mojom.NULLABLE_STRING:       '""'
 }
 
 
 def JavaScriptDefaultValue(field):
   if field.default:
-    if isinstance(field.kind, mojom.Struct):
+    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 isinstance(field.kind, mojom.Struct):
+  if mojom.IsStructKind(field.kind):
     return "null"
-  if isinstance(field.kind, mojom.Array):
-    return "[]"
-  if isinstance(field.kind, mojom.Interface) or \
-     isinstance(field.kind, mojom.InterfaceRequest):
+  if mojom.IsArrayKind(field.kind):
+    return "null"
+  if mojom.IsInterfaceKind(field.kind) or \
+     mojom.IsInterfaceRequestKind(field.kind):
     return _kind_to_javascript_default_value[mojom.MSGPIPE]
-  if isinstance(field.kind, mojom.Enum):
+  if mojom.IsEnumKind(field.kind):
     return "0"
 
 
@@ -60,37 +66,44 @@ 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.INT64:        "codec.Int64",
-  mojom.UINT64:       "codec.Uint64",
-  mojom.DOUBLE:       "codec.Double",
-  mojom.STRING:       "codec.String",
+  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.Handle",
+  mojom.NULLABLE_DCPIPE:       "codec.Handle",
+  mojom.NULLABLE_DPPIPE:       "codec.Handle",
+  mojom.NULLABLE_MSGPIPE:      "codec.Handle",
+  mojom.NULLABLE_SHAREDBUFFER: "codec.Handle",
+  mojom.INT64:                 "codec.Int64",
+  mojom.UINT64:                "codec.Uint64",
+  mojom.DOUBLE:                "codec.Double",
+  mojom.STRING:                "codec.String",
+  mojom.NULLABLE_STRING:       "codec.String",
 }
 
 
 def CodecType(kind):
   if kind in mojom.PRIMITIVES:
     return _kind_to_codec_type[kind]
-  if isinstance(kind, mojom.Struct):
+  if mojom.IsStructKind(kind):
     return "new codec.PointerTo(%s)" % CodecType(kind.name)
-  if isinstance(kind, mojom.Array):
+  if mojom.IsArrayKind(kind) and mojom.IsBoolKind(kind.kind):
+    return "new codec.ArrayOf(new codec.ArrayOf(codec.PackedBool))"
+  if mojom.IsArrayKind(kind):
     return "new codec.ArrayOf(%s)" % CodecType(kind.kind)
-  if isinstance(kind, mojom.Interface) or \
-     isinstance(kind, mojom.InterfaceRequest):
+  if mojom.IsInterfaceKind(kind) or mojom.IsInterfaceRequestKind(kind):
     return CodecType(mojom.MSGPIPE)
-  if isinstance(kind, mojom.Enum):
+  if mojom.IsEnumKind(kind):
     return _kind_to_codec_type[mojom.INT32]
   return kind
 
@@ -98,28 +111,30 @@ def CodecType(kind):
 def JavaScriptDecodeSnippet(kind):
   if kind in mojom.PRIMITIVES:
     return "decodeStruct(%s)" % CodecType(kind)
-  if isinstance(kind, mojom.Struct):
+  if mojom.IsStructKind(kind):
     return "decodeStructPointer(%s)" % CodecType(kind.name)
-  if isinstance(kind, mojom.Array):
+  if mojom.IsArrayKind(kind) and mojom.IsBoolKind(kind.kind):
+    return "decodeArrayPointer(new codec.ArrayOf(codec.PackedBool))"
+  if mojom.IsArrayKind(kind):
     return "decodeArrayPointer(%s)" % CodecType(kind.kind)
-  if isinstance(kind, mojom.Interface) or \
-     isinstance(kind, mojom.InterfaceRequest):
+  if mojom.IsInterfaceKind(kind) or mojom.IsInterfaceRequestKind(kind):
     return JavaScriptDecodeSnippet(mojom.MSGPIPE)
-  if isinstance(kind, mojom.Enum):
+  if mojom.IsEnumKind(kind):
     return JavaScriptDecodeSnippet(mojom.INT32)
 
 
 def JavaScriptEncodeSnippet(kind):
   if kind in mojom.PRIMITIVES:
     return "encodeStruct(%s, " % CodecType(kind)
-  if isinstance(kind, mojom.Struct):
+  if mojom.IsStructKind(kind):
     return "encodeStructPointer(%s, " % CodecType(kind.name)
-  if isinstance(kind, mojom.Array):
+  if mojom.IsArrayKind(kind) and mojom.IsBoolKind(kind.kind):
+    return "encodeArrayPointer(new codec.ArrayOf(codec.PackedBool), ";
+  if mojom.IsAnyArrayKind(kind):
     return "encodeArrayPointer(%s, " % CodecType(kind.kind)
-  if isinstance(kind, mojom.Interface) or \
-     isinstance(kind, mojom.InterfaceRequest):
+  if mojom.IsInterfaceKind(kind) or mojom.IsInterfaceRequestKind(kind):
     return JavaScriptEncodeSnippet(mojom.MSGPIPE)
-  if isinstance(kind, mojom.Enum):
+  if mojom.IsEnumKind(kind):
     return JavaScriptEncodeSnippet(mojom.INT32)