Example #1
0
def JavaScriptEncodeSnippet(kind):
    if kind in mojom.PRIMITIVES:
        return "encodeStruct(%s, " % CodecType(kind)
    if mojom.IsStructKind(kind):
        return "encodeStructPointer(%s, " % JavaScriptType(kind)
    if mojom.IsAnyArrayKind(kind) and mojom.IsBoolKind(kind.kind):
        return "encodeArrayPointer(codec.PackedBool, "
    if mojom.IsAnyArrayKind(kind):
        return "encodeArrayPointer(%s, " % CodecType(kind.kind)
    if mojom.IsInterfaceKind(kind) or mojom.IsInterfaceRequestKind(kind):
        return JavaScriptEncodeSnippet(mojom.MSGPIPE)
    if mojom.IsEnumKind(kind):
        return JavaScriptEncodeSnippet(mojom.INT32)
def GetCppConstWrapperType(kind):
    if mojom.IsStructKind(kind):
        return "%sPtr" % GetNameForKind(kind)
    if mojom.IsAnyArrayKind(kind):
        return "mojo::Array<%s>" % GetCppArrayArgWrapperType(kind.kind)
    if mojom.IsInterfaceKind(kind):
        return "%sPtr" % GetNameForKind(kind)
    if mojom.IsInterfaceRequestKind(kind):
        return "mojo::InterfaceRequest<%s>" % GetNameForKind(kind.kind)
    if mojom.IsEnumKind(kind):
        return GetNameForKind(kind)
    if mojom.IsStringKind(kind):
        return "const mojo::String&"
    if mojom.IsHandleKind(kind):
        return "mojo::ScopedHandle"
    if mojom.IsDataPipeConsumerKind(kind):
        return "mojo::ScopedDataPipeConsumerHandle"
    if mojom.IsDataPipeProducerKind(kind):
        return "mojo::ScopedDataPipeProducerHandle"
    if mojom.IsMessagePipeKind(kind):
        return "mojo::ScopedMessagePipeHandle"
    if mojom.IsSharedBufferKind(kind):
        return "mojo::ScopedSharedBufferHandle"
    if not kind in _kind_to_cpp_type:
        print "missing:", kind.spec
    return _kind_to_cpp_type[kind]
Example #3
0
def GetFieldType(kind, field=None):
    if mojom.IsAnyArrayKind(kind):
        arguments = []
        if kind.kind in _kind_to_typecode_for_native_array:
            arguments.append('%r' %
                             _kind_to_typecode_for_native_array[kind.kind])
        elif kind.kind != mojom.BOOL:
            arguments.append(GetFieldType(kind.kind))
        if mojom.IsNullableKind(kind):
            arguments.append('nullable=True')
        if mojom.IsFixedArrayKind(kind):
            arguments.append('length=%d' % kind.length)
        array_type = 'GenericArrayType'
        if kind.kind == mojom.BOOL:
            array_type = 'BooleanArrayType'
        elif kind.kind in _kind_to_typecode_for_native_array:
            array_type = 'NativeArrayType'
        return '_descriptor.%s(%s)' % (array_type, ', '.join(arguments))

    if mojom.IsStructKind(kind):
        arguments = [GetStructClass(kind)]
        if mojom.IsNullableKind(kind):
            arguments.append('nullable=True')
        return '_descriptor.StructType(%s)' % ', '.join(arguments)

    if mojom.IsEnumKind(kind):
        return GetFieldType(mojom.INT32)

    return _kind_to_type.get(kind, '_descriptor.TYPE_NONE')
Example #4
0
def EncodeMethod(context, kind, variable, offset, bit):
    additionalParams = ''
    if (kind == mojom.BOOL):
        additionalParams = ', %d' % bit
    if mojom.IsInterfaceKind(kind):
        additionalParams = ', %s.BUILDER' % GetJavaType(context, kind)
    if mojom.IsAnyArrayKind(kind) and mojom.IsInterfaceKind(kind.kind):
        additionalParams = ', %s.BUILDER' % GetJavaType(context, kind.kind)
    return 'encode(%s, %s%s)' % (variable, offset, additionalParams)
 def _DecodeMethodName(kind):
     if mojom.IsAnyArrayKind(kind):
         return _DecodeMethodName(kind.kind) + 's'
     if mojom.IsEnumKind(kind):
         return _DecodeMethodName(mojom.INT32)
     if mojom.IsInterfaceRequestKind(kind):
         return 'readInterfaceRequest'
     if mojom.IsInterfaceKind(kind):
         return 'readServiceInterface'
     return _spec_to_decode_method[kind.spec]
def GetCppType(kind):
    if mojom.IsStructKind(kind):
        return "%s_Data*" % GetNameForKind(kind, internal=True)
    if mojom.IsAnyArrayKind(kind):
        return "mojo::internal::Array_Data<%s>*" % GetCppType(kind.kind)
    if mojom.IsInterfaceKind(kind) or mojom.IsInterfaceRequestKind(kind):
        return "mojo::MessagePipeHandle"
    if mojom.IsEnumKind(kind):
        return "int32_t"
    if mojom.IsStringKind(kind):
        return "mojo::internal::String_Data*"
    return _kind_to_cpp_type[kind]
def AppendEncodeDecodeParams(initial_params, context, kind, bit):
    """ Appends standard parameters shared between encode and decode calls. """
    params = list(initial_params)
    if (kind == mojom.BOOL):
        params.append(str(bit))
    if mojom.IsReferenceKind(kind):
        if mojom.IsAnyArrayKind(kind):
            params.append(GetArrayNullabilityFlags(kind))
        else:
            params.append(GetJavaTrueFalse(mojom.IsNullableKind(kind)))
    if mojom.IsAnyArrayKind(kind):
        if mojom.IsFixedArrayKind(kind):
            params.append(str(kind.length))
        else:
            params.append(
                'org.chromium.mojo.bindings.BindingsHelper.UNSPECIFIED_ARRAY_LENGTH'
            )
    if mojom.IsInterfaceKind(kind):
        params.append('%s.MANAGER' % GetJavaType(context, kind))
    if mojom.IsAnyArrayKind(kind) and mojom.IsInterfaceKind(kind.kind):
        params.append('%s.MANAGER' % GetJavaType(context, kind.kind))
    return params
def GetJavaType(context, kind, boxed=False):
    if boxed:
        return GetBoxedJavaType(context, kind)
    if mojom.IsStructKind(kind) or mojom.IsInterfaceKind(kind):
        return GetNameForKind(context, kind)
    if mojom.IsInterfaceRequestKind(kind):
        return ('org.chromium.mojo.bindings.InterfaceRequest<%s>' %
                GetNameForKind(context, kind.kind))
    if mojom.IsAnyArrayKind(kind):
        return '%s[]' % GetJavaType(context, kind.kind)
    if mojom.IsEnumKind(kind):
        return 'int'
    return _spec_to_java_type[kind.spec]
def GetCppFieldType(kind):
    if mojom.IsStructKind(kind):
        return ("mojo::internal::StructPointer<%s_Data>" %
                GetNameForKind(kind, internal=True))
    if mojom.IsAnyArrayKind(kind):
        return "mojo::internal::ArrayPointer<%s>" % GetCppType(kind.kind)
    if mojom.IsInterfaceKind(kind) or mojom.IsInterfaceRequestKind(kind):
        return "mojo::MessagePipeHandle"
    if mojom.IsEnumKind(kind):
        return GetNameForKind(kind)
    if mojom.IsStringKind(kind):
        return "mojo::internal::StringPointer"
    return _kind_to_cpp_type[kind]
def GetArrayValidateParams(kind):
    if not mojom.IsAnyArrayKind(kind) and not mojom.IsStringKind(kind):
        return "mojo::internal::NoValidateParams"

    if mojom.IsStringKind(kind):
        expected_num_elements = 0
        element_nullable = False
        element_validate_params = "mojo::internal::NoValidateParams"
    else:
        expected_num_elements = generator.ExpectedArraySize(kind)
        element_nullable = mojom.IsNullableKind(kind.kind)
        element_validate_params = GetArrayValidateParams(kind.kind)

    return "mojo::internal::ArrayValidateParams<%d, %s,\n%s> " % (
        expected_num_elements, 'true' if element_nullable else 'false',
        element_validate_params)
Example #11
0
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.IsAnyArrayKind(field.kind):
        return "null"
    if mojom.IsInterfaceKind(field.kind) or \
       mojom.IsInterfaceRequestKind(field.kind):
        return _kind_to_javascript_default_value[mojom.MSGPIPE]
    if mojom.IsEnumKind(field.kind):
        return "0"
Example #12
0
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.IsAnyArrayKind(kind):
        array_type = "NullableArrayOf" if mojom.IsNullableKind(
            kind) else "ArrayOf"
        element_type = "codec.PackedBool" if mojom.IsBoolKind(kind.kind) \
            else CodecType(kind.kind)
        return "new codec.%s(%s)" % (array_type, element_type)
    if mojom.IsInterfaceKind(kind) or mojom.IsInterfaceRequestKind(kind):
        return CodecType(mojom.MSGPIPE)
    if mojom.IsEnumKind(kind):
        return _kind_to_codec_type[mojom.INT32]
    return kind
Example #13
0
def DecodeMethod(context, kind, offset, bit):
    def _DecodeMethodName(kind):
        if mojom.IsAnyArrayKind(kind):
            return _DecodeMethodName(kind.kind) + 's'
        if mojom.IsEnumKind(kind):
            return _DecodeMethodName(mojom.INT32)
        if mojom.IsInterfaceRequestKind(kind):
            return "readInterfaceRequest"
        if mojom.IsInterfaceKind(kind):
            return "readServiceInterface"
        return _spec_to_decode_method[kind.spec]

    methodName = _DecodeMethodName(kind)
    additionalParams = ''
    if (kind == mojom.BOOL):
        additionalParams = ', %d' % bit
    if mojom.IsInterfaceKind(kind):
        additionalParams = ', %s.BUILDER' % GetJavaType(context, kind)
    if mojom.IsAnyArrayKind(kind) and mojom.IsInterfaceKind(kind.kind):
        additionalParams = ', %s.BUILDER' % GetJavaType(context, kind.kind)
    return '%s(%s%s)' % (methodName, offset, additionalParams)
def GetArrayNullabilityFlags(kind):
    """Returns nullability flags for an array type, see Decoder.java.

    As we have dedicated decoding functions for arrays, we have to pass
    nullability information about both the array itself, as well as the array
    element type there.
    """
    assert mojom.IsAnyArrayKind(kind)
    ARRAY_NULLABLE   = \
        'org.chromium.mojo.bindings.BindingsHelper.ARRAY_NULLABLE'
    ELEMENT_NULLABLE = \
        'org.chromium.mojo.bindings.BindingsHelper.ELEMENT_NULLABLE'
    NOTHING_NULLABLE = \
        'org.chromium.mojo.bindings.BindingsHelper.NOTHING_NULLABLE'

    flags_to_set = []
    if mojom.IsNullableKind(kind):
        flags_to_set.append(ARRAY_NULLABLE)
    if mojom.IsNullableKind(kind.kind):
        flags_to_set.append(ELEMENT_NULLABLE)

    if not flags_to_set:
        flags_to_set = [NOTHING_NULLABLE]
    return ' | '.join(flags_to_set)
def GetCppArrayArgWrapperType(kind):
    if mojom.IsEnumKind(kind):
        return GetNameForKind(kind)
    if mojom.IsStructKind(kind):
        return "%sPtr" % GetNameForKind(kind)
    if mojom.IsAnyArrayKind(kind):
        return "mojo::Array<%s> " % GetCppArrayArgWrapperType(kind.kind)
    if mojom.IsInterfaceKind(kind):
        raise Exception("Arrays of interfaces not yet supported!")
    if mojom.IsInterfaceRequestKind(kind):
        raise Exception("Arrays of interface requests not yet supported!")
    if mojom.IsStringKind(kind):
        return "mojo::String"
    if mojom.IsHandleKind(kind):
        return "mojo::ScopedHandle"
    if mojom.IsDataPipeConsumerKind(kind):
        return "mojo::ScopedDataPipeConsumerHandle"
    if mojom.IsDataPipeProducerKind(kind):
        return "mojo::ScopedDataPipeProducerHandle"
    if mojom.IsMessagePipeKind(kind):
        return "mojo::ScopedMessagePipeHandle"
    if mojom.IsSharedBufferKind(kind):
        return "mojo::ScopedSharedBufferHandle"
    return _kind_to_cpp_type[kind]
def NewArray(context, kind, size):
    if mojom.IsAnyArrayKind(kind.kind):
        return NewArray(context, kind.kind, size) + '[]'
    return 'new %s[%s]' % (GetJavaType(context, kind.kind), size)
def IsPointerArrayKind(kind):
    if not mojom.IsAnyArrayKind(kind):
        return False
    sub_kind = kind.kind
    return mojom.IsObjectKind(sub_kind)
Example #18
0
def IsArrayPointerField(field):
    return mojom.IsAnyArrayKind(field.kind)