diff options
author | Brian <[email protected]> | 2007-02-02 16:10:02 -0700 |
---|---|---|
committer | Brian <[email protected]> | 2007-02-02 16:10:02 -0700 |
commit | 1f9def3163e26310b688336ef6dd513b99506151 (patch) | |
tree | 8cdb2f31eae88f9ed7df50042dbd3e3795faa2a1 /src/mesa | |
parent | 9cfee527f6ff5ff3e4de43b46ef098cb86211d2d (diff) |
move _slang_locate_function()
Diffstat (limited to 'src/mesa')
-rw-r--r-- | src/mesa/shader/slang/slang_codegen.c | 52 | ||||
-rw-r--r-- | src/mesa/shader/slang/slang_typeinfo.c | 52 | ||||
-rw-r--r-- | src/mesa/shader/slang/slang_typeinfo.h | 3 |
3 files changed, 53 insertions, 54 deletions
diff --git a/src/mesa/shader/slang/slang_codegen.c b/src/mesa/shader/slang/slang_codegen.c index 295292e0761..17d1a6bb82f 100644 --- a/src/mesa/shader/slang/slang_codegen.c +++ b/src/mesa/shader/slang/slang_codegen.c @@ -1264,58 +1264,6 @@ _slang_first_function(struct slang_function_scope_ *scope, const char *name) -slang_function * -_slang_locate_function(const slang_function_scope * funcs, slang_atom a_name, - const slang_operation * args, GLuint num_args, - const slang_name_space * space, - slang_atom_pool * atoms) -{ - GLuint i; - - for (i = 0; i < funcs->num_functions; i++) { - slang_function *f = &funcs->functions[i]; - const GLuint haveRetValue = _slang_function_has_return_value(f); - GLuint j; - - if (a_name != f->header.a_name) - continue; - if (f->param_count - haveRetValue != num_args) - continue; - - /* compare parameter / argument types */ - for (j = 0; j < num_args; j++) { - slang_typeinfo ti; - - if (!slang_typeinfo_construct(&ti)) - return NULL; - if (!_slang_typeof_operation_(&args[j], space, &ti, atoms)) { - slang_typeinfo_destruct(&ti); - return NULL; - } - if (!slang_type_specifier_equal(&ti.spec, - &f->parameters->variables[j/* + haveRetValue*/]->type.specifier)) { - slang_typeinfo_destruct(&ti); - break; - } - slang_typeinfo_destruct(&ti); - - /* "out" and "inout" formal parameter requires the actual parameter to be l-value */ - if (!ti.can_be_referenced && - (f->parameters->variables[j/* + haveRetValue*/]->type.qualifier == slang_qual_out || - f->parameters->variables[j/* + haveRetValue*/]->type.qualifier == slang_qual_inout)) - break; - } - if (j == num_args) - return f; - } - if (funcs->outer_scope != NULL) - return _slang_locate_function(funcs->outer_scope, a_name, args, - num_args, space, atoms); - return NULL; -} - - - /** * Assemble a function call, given a particular function name. * \param name the function's name (operators like '*' are possible). diff --git a/src/mesa/shader/slang/slang_typeinfo.c b/src/mesa/shader/slang/slang_typeinfo.c index cfed54276d7..8bedb40435a 100644 --- a/src/mesa/shader/slang/slang_typeinfo.c +++ b/src/mesa/shader/slang/slang_typeinfo.c @@ -604,6 +604,58 @@ _slang_typeof_operation_(const slang_operation * op, +slang_function * +_slang_locate_function(const slang_function_scope * funcs, slang_atom a_name, + const slang_operation * args, GLuint num_args, + const slang_name_space * space, + slang_atom_pool * atoms) +{ + GLuint i; + + for (i = 0; i < funcs->num_functions; i++) { + slang_function *f = &funcs->functions[i]; + const GLuint haveRetValue = _slang_function_has_return_value(f); + GLuint j; + + if (a_name != f->header.a_name) + continue; + if (f->param_count - haveRetValue != num_args) + continue; + + /* compare parameter / argument types */ + for (j = 0; j < num_args; j++) { + slang_typeinfo ti; + + if (!slang_typeinfo_construct(&ti)) + return NULL; + if (!_slang_typeof_operation_(&args[j], space, &ti, atoms)) { + slang_typeinfo_destruct(&ti); + return NULL; + } + if (!slang_type_specifier_equal(&ti.spec, + &f->parameters->variables[j/* + haveRetValue*/]->type.specifier)) { + slang_typeinfo_destruct(&ti); + break; + } + slang_typeinfo_destruct(&ti); + + /* "out" and "inout" formal parameter requires the actual parameter to be l-value */ + if (!ti.can_be_referenced && + (f->parameters->variables[j/* + haveRetValue*/]->type.qualifier == slang_qual_out || + f->parameters->variables[j/* + haveRetValue*/]->type.qualifier == slang_qual_inout)) + break; + } + if (j == num_args) + return f; + } + if (funcs->outer_scope != NULL) + return _slang_locate_function(funcs->outer_scope, a_name, args, + num_args, space, atoms); + return NULL; +} + + + /** * Determine the return type of a function. * \param a_name the function name diff --git a/src/mesa/shader/slang/slang_typeinfo.h b/src/mesa/shader/slang/slang_typeinfo.h index 2b565dfd242..6e27079ff89 100644 --- a/src/mesa/shader/slang/slang_typeinfo.h +++ b/src/mesa/shader/slang/slang_typeinfo.h @@ -58,15 +58,14 @@ typedef struct slang_assemble_ctx_ { slang_atom_pool *atoms; slang_name_space space; - slang_swizzle swz; struct gl_program *program; slang_var_table *vartable; - struct slang_function_ *CurFunction; slang_atom CurLoopBreak; slang_atom CurLoopCont; } slang_assemble_ctx; + extern struct slang_function_ * _slang_locate_function(const struct slang_function_scope_ *funcs, slang_atom name, const struct slang_operation_ *params, |