fix-up inlined/non-inlined function inconsistencies
This commit is contained in:
@@ -491,6 +491,9 @@ new_node0(slang_ir_opcode op)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create sequence of two nodes.
|
||||||
|
*/
|
||||||
static slang_ir_node *
|
static slang_ir_node *
|
||||||
new_seq(slang_ir_node *left, slang_ir_node *right)
|
new_seq(slang_ir_node *left, slang_ir_node *right)
|
||||||
{
|
{
|
||||||
@@ -531,10 +534,10 @@ new_not(slang_ir_node *n)
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Inlined subroutine.
|
* Non-inlined function call.
|
||||||
*/
|
*/
|
||||||
static slang_ir_node *
|
static slang_ir_node *
|
||||||
new_inlined_function_call(slang_ir_node *code, slang_label *name)
|
new_function_call(slang_ir_node *code, slang_label *name)
|
||||||
{
|
{
|
||||||
slang_ir_node *n = new_node1(IR_CALL, code);
|
slang_ir_node *n = new_node1(IR_CALL, code);
|
||||||
assert(name);
|
assert(name);
|
||||||
@@ -1222,7 +1225,7 @@ _slang_gen_function_call(slang_assemble_ctx *A, slang_function *fun,
|
|||||||
else {
|
else {
|
||||||
callOper = inlined;
|
callOper = inlined;
|
||||||
}
|
}
|
||||||
callOper->type = SLANG_OPER_INLINED_CALL;
|
callOper->type = SLANG_OPER_NON_INLINED_CALL;
|
||||||
callOper->fun = fun;
|
callOper->fun = fun;
|
||||||
callOper->label = _slang_label_new_unique((char*) fun->header.a_name);
|
callOper->label = _slang_label_new_unique((char*) fun->header.a_name);
|
||||||
}
|
}
|
||||||
@@ -2585,7 +2588,7 @@ _slang_gen_operation(slang_assemble_ctx * A, slang_operation *oper)
|
|||||||
_slang_free_ir_tree(tree);
|
_slang_free_ir_tree(tree);
|
||||||
return NULL; /* error must have occured */
|
return NULL; /* error must have occured */
|
||||||
}
|
}
|
||||||
tree = tree ? new_seq(tree, n) : n;
|
tree = new_seq(tree, n);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 00
|
#if 00
|
||||||
@@ -2813,17 +2816,17 @@ _slang_gen_operation(slang_assemble_ctx * A, slang_operation *oper)
|
|||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
|
|
||||||
case SLANG_OPER_INLINED_CALL:
|
case SLANG_OPER_NON_INLINED_CALL:
|
||||||
case SLANG_OPER_SEQUENCE:
|
case SLANG_OPER_SEQUENCE:
|
||||||
{
|
{
|
||||||
slang_ir_node *tree = NULL;
|
slang_ir_node *tree = NULL;
|
||||||
GLuint i;
|
GLuint i;
|
||||||
for (i = 0; i < oper->num_children; i++) {
|
for (i = 0; i < oper->num_children; i++) {
|
||||||
slang_ir_node *n = _slang_gen_operation(A, &oper->children[i]);
|
slang_ir_node *n = _slang_gen_operation(A, &oper->children[i]);
|
||||||
tree = tree ? new_seq(tree, n) : n;
|
tree = new_seq(tree, n);
|
||||||
}
|
}
|
||||||
if (oper->type == SLANG_OPER_INLINED_CALL) {
|
if (oper->type == SLANG_OPER_NON_INLINED_CALL) {
|
||||||
tree = new_inlined_function_call(tree, oper->label);
|
tree = new_function_call(tree, oper->label);
|
||||||
}
|
}
|
||||||
return tree;
|
return tree;
|
||||||
}
|
}
|
||||||
|
@@ -93,7 +93,7 @@ typedef enum slang_operation_type_
|
|||||||
SLANG_OPER_NOT, /* "!" [expr] */
|
SLANG_OPER_NOT, /* "!" [expr] */
|
||||||
SLANG_OPER_SUBSCRIPT, /* [expr] "[" [expr] "]" */
|
SLANG_OPER_SUBSCRIPT, /* [expr] "[" [expr] "]" */
|
||||||
SLANG_OPER_CALL, /* [func name] [param] [param] [...] */
|
SLANG_OPER_CALL, /* [func name] [param] [param] [...] */
|
||||||
SLANG_OPER_INLINED_CALL, /* inlined function call */
|
SLANG_OPER_NON_INLINED_CALL, /* a real function call */
|
||||||
SLANG_OPER_FIELD, /* i.e.: ".next" or ".xzy" or ".xxx" etc */
|
SLANG_OPER_FIELD, /* i.e.: ".next" or ".xzy" or ".xxx" etc */
|
||||||
SLANG_OPER_POSTINCREMENT, /* [var] "++" */
|
SLANG_OPER_POSTINCREMENT, /* [var] "++" */
|
||||||
SLANG_OPER_POSTDECREMENT /* [var] "--" */
|
SLANG_OPER_POSTDECREMENT /* [var] "--" */
|
||||||
|
Reference in New Issue
Block a user