mesa: assemble main() after all other functions
Before, main() had to come after any functions it called.
This commit is contained in:
parent
c62cb6be6c
commit
f214a848ab
|
@ -1788,20 +1788,6 @@ parse_function(slang_parse_ctx * C, slang_output_ctx * O, int definition,
|
||||||
*parsed_func_ret = found_func;
|
*parsed_func_ret = found_func;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* assemble the parsed function */
|
|
||||||
{
|
|
||||||
slang_assemble_ctx A;
|
|
||||||
|
|
||||||
A.atoms = C->atoms;
|
|
||||||
A.space.funcs = O->funs;
|
|
||||||
A.space.structs = O->structs;
|
|
||||||
A.space.vars = O->vars;
|
|
||||||
A.program = O->program;
|
|
||||||
A.vartable = O->vartable;
|
|
||||||
A.log = C->L;
|
|
||||||
|
|
||||||
_slang_codegen_function(&A, *parsed_func_ret);
|
|
||||||
}
|
|
||||||
return GL_TRUE;
|
return GL_TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1844,6 +1830,7 @@ parse_code_unit(slang_parse_ctx * C, slang_code_unit * unit,
|
||||||
slang_output_ctx o;
|
slang_output_ctx o;
|
||||||
GLboolean success;
|
GLboolean success;
|
||||||
GLuint maxRegs;
|
GLuint maxRegs;
|
||||||
|
slang_function *mainFunc = NULL;
|
||||||
|
|
||||||
if (unit->type == SLANG_UNIT_FRAGMENT_BUILTIN ||
|
if (unit->type == SLANG_UNIT_FRAGMENT_BUILTIN ||
|
||||||
unit->type == SLANG_UNIT_FRAGMENT_SHADER) {
|
unit->type == SLANG_UNIT_FRAGMENT_SHADER) {
|
||||||
|
@ -1871,6 +1858,11 @@ parse_code_unit(slang_parse_ctx * C, slang_code_unit * unit,
|
||||||
{
|
{
|
||||||
slang_function *func;
|
slang_function *func;
|
||||||
success = parse_function(C, &o, 1, &func);
|
success = parse_function(C, &o, 1, &func);
|
||||||
|
if (success &&
|
||||||
|
_mesa_strcmp((char *) func->header.a_name, "main") == 0) {
|
||||||
|
/* found main() */
|
||||||
|
mainFunc = func;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case EXTERNAL_DECLARATION:
|
case EXTERNAL_DECLARATION:
|
||||||
|
@ -1888,6 +1880,22 @@ parse_code_unit(slang_parse_ctx * C, slang_code_unit * unit,
|
||||||
}
|
}
|
||||||
C->I++;
|
C->I++;
|
||||||
|
|
||||||
|
if (mainFunc) {
|
||||||
|
/* assemble (generate code) for main() */
|
||||||
|
slang_assemble_ctx A;
|
||||||
|
|
||||||
|
A.atoms = C->atoms;
|
||||||
|
A.space.funcs = o.funs;
|
||||||
|
A.space.structs = o.structs;
|
||||||
|
A.space.vars = o.vars;
|
||||||
|
A.program = o.program;
|
||||||
|
A.vartable = o.vartable;
|
||||||
|
A.log = C->L;
|
||||||
|
|
||||||
|
_slang_codegen_function(&A, mainFunc);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
_slang_pop_var_table(o.vartable);
|
_slang_pop_var_table(o.vartable);
|
||||||
_slang_delete_var_table(o.vartable);
|
_slang_delete_var_table(o.vartable);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue