def _ConvertArgumentTypes(self, stmts_emitter, arguments, argument_count, info): temp_version = [0] converted_arguments = [] target_parameters = [] calling_parameters = [] for position, arg in enumerate(arguments[:argument_count]): callBackInfo = self._CallbackConvert( arg.type.id, info) # Returns callback arity (# of parameters) if callBackInfo is None: conversion = self._InputConversion(arg.type.id, info.declared_name) else: conversion = self._InputConversion('Callback', info.declared_name) param_name = arguments[position].id if conversion: temp_version[0] += 1 temp_name = '%s_%s' % (param_name, temp_version[0]) temp_type = conversion.output_type stmts_emitter.Emit( '$(INDENT)$TYPE $NAME = $CONVERT($ARG);\n' if callBackInfo is None else '$(INDENT)$TYPE $NAME = $CONVERT($ARG, $ARITY);\n', TYPE=TypeOrVar(temp_type), NAME=temp_name, CONVERT=conversion.function_name, ARG=info.param_infos[position].name, ARITY=callBackInfo) converted_arguments.append(temp_name) param_type = temp_type verified_type = temp_type # verified by assignment in checked mode. else: converted_arguments.append(info.param_infos[position].name) if self._database.HasTypeDef(arg.type.id): param_type = 'dynamic' else: param_type = self._NarrowInputType(arg.type.id) # Verified by argument checking on entry to the dispatcher. verified_type = self._InputType( info.param_infos[position].type_id, info) # The native method does not need an argument type if we know the type. # But we do need the native methods to have correct function types, so # be conservative. if param_type == verified_type: if param_type in [ 'String', 'num', 'int', 'double', 'bool', 'Object' ]: param_type = 'dynamic' target_parameters.append('%s%s' % (TypeOrNothing(param_type), param_name)) calling_parameters.append(',%s ' % param_name) return target_parameters, converted_arguments, calling_parameters
def AddConstant(self, constant): const_name = self._renamer.RenameMember(self._interface.id, constant, constant.id, 'get:', dartify_name=False) if not const_name: return type = TypeOrNothing(self._DartType(constant.type.id), constant.type.id) self._members_emitter.Emit('\n static const $TYPE$NAME = $VALUE;\n', NAME=const_name, TYPE=type, VALUE=constant.value)
def AddConstant(self, constant): const_name = self._renamer.RenameMember( self._interface.id, constant, constant.id, 'get:', dartify_name=False) if not const_name: return annotations = self._metadata.GetFormattedMetadata( self._library_name, self._interface, constant.id, ' ') type = TypeOrNothing(self._DartType(constant.type.id), constant.type.id) self._members_emitter.Emit( '\n $(ANNOTATIONS)static const $TYPE$NAME = $VALUE;\n', ANNOTATIONS=annotations, NAME=const_name, TYPE=type, VALUE=constant.value)