コード例 #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)
コード例 #2
0
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]
コード例 #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')
コード例 #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)
コード例 #5
0
 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]
コード例 #6
0
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]
コード例 #7
0
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
コード例 #8
0
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]
コード例 #9
0
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]
コード例 #10
0
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)
コード例 #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"
コード例 #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
コード例 #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)
コード例 #14
0
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)
コード例 #15
0
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]
コード例 #16
0
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)
コード例 #17
0
def IsPointerArrayKind(kind):
    if not mojom.IsAnyArrayKind(kind):
        return False
    sub_kind = kind.kind
    return mojom.IsObjectKind(sub_kind)
コード例 #18
0
def IsArrayPointerField(field):
    return mojom.IsAnyArrayKind(field.kind)