def check_param_types (types, params): # check param size if params.get_size() <> types.get_size(): raise ValueError ("Parameter list must have '%d' matching values, " \ "'%d' was given" % (types.get_size(), params.get_size())) # check param types for i in range(0, len(params)): # get types param_type = params[i].get_type() expected_type = Type.from_pointer (types[i].get_pointer().get_raw()) # get real pointer type from generic pointer if param_type.get_atom() == Type.type_pointer(): param_type = params[i].get_pointer().get_type() # make sure we have the same type atom if param_type.get_atom() != expected_type.get_atom(): raise TypeError ("Parameter '%d' does not match the appropriate " \ "type. Expected '%s', got '%s'" % (i + 1, expected_type.get_name(), param_type.get_name())) # reference parameter types must be a pointer if expected_type.is_reference() and not param_type.is_pointer(): raise TypeError ("Parameter '%d' is a reference type '%s' but " \ "the expected type is not a pointer, " \ "instead '%s' was given" % (i + 1, expected_type.get_name(), param_type.get_name()))