Переглянути джерело

Factor out qualifier checking code for later reuse.

tags/mesa-7.9-rc1
Kenneth Graunke 15 роки тому
джерело
коміт
abd40b1521
3 змінених файлів з 40 додано та 21 видалено
  1. 7
    21
      ast_to_hir.cpp
  2. 26
    0
      ir.cpp
  3. 7
    0
      ir.h

+ 7
- 21
ast_to_hir.cpp Переглянути файл

@@ -1952,27 +1952,13 @@ ast_function::hir(exec_list *instructions,
* definition.
*/
if (parameter_lists_match(& hir_parameters, & sig->parameters)) {
exec_list_iterator iter_a = hir_parameters.iterator();
exec_list_iterator iter_b = sig->parameters.iterator();

/* check that the qualifiers match. */
while (iter_a.has_next()) {
ir_variable *a = (ir_variable *)iter_a.get();
ir_variable *b = (ir_variable *)iter_b.get();

if (a->read_only != b->read_only ||
a->interpolation != b->interpolation ||
a->centroid != b->centroid) {
YYLTYPE loc = this->get_location();

_mesa_glsl_error(& loc, state,
"function `%s' parameter `%s' qualifiers "
"don't match prototype",
name, a->name);
}

iter_a.next();
iter_b.next();
const char *mismatch = sig->qualifiers_match(&hir_parameters);
if (mismatch != NULL) {
YYLTYPE loc = this->get_location();

_mesa_glsl_error(&loc, state, "function `%s' parameter `%s' "
"qualifiers don't match prototype",
name, mismatch);
}

if (sig->return_type != return_type) {

+ 26
- 0
ir.cpp Переглянути файл

@@ -338,6 +338,32 @@ ir_function_signature::ir_function_signature(const glsl_type *return_type)
}


const char *
ir_function_signature::qualifiers_match(exec_list *params)
{
exec_list_iterator iter_a = parameters.iterator();
exec_list_iterator iter_b = params->iterator();

/* check that the qualifiers match. */
while (iter_a.has_next()) {
ir_variable *a = (ir_variable *)iter_a.get();
ir_variable *b = (ir_variable *)iter_b.get();

if (a->read_only != b->read_only ||
a->interpolation != b->interpolation ||
a->centroid != b->centroid) {

/* parameter a's qualifiers don't match */
return a->name;
}

iter_a.next();
iter_b.next();
}
return NULL;
}


ir_function::ir_function(const char *name)
: name(name)
{

+ 7
- 0
ir.h Переглянути файл

@@ -206,6 +206,13 @@ public:
*/
const char *function_name() const;

/**
* Check whether the qualifiers match between this signature's parameters
* and the supplied parameter list. If not, returns the name of the first
* parameter with mismatched qualifiers (for use in error messages).
*/
const char *qualifiers_match(exec_list *params);

/**
* Function return type.
*

Завантаження…
Відмінити
Зберегти