#include "program/hash_table.h"
#include "program.h"
+namespace {
+
struct call_node : public exec_node {
class function *func;
};
/* empty */
}
-
- /* Callers of this ralloc-based new need not call delete. It's
- * easier to just ralloc_free 'ctx' (or any of its ancestors). */
- static void* operator new(size_t size, void *ctx)
- {
- void *node;
-
- node = ralloc_size(ctx, size);
- assert(node != NULL);
-
- return node;
- }
-
- /* If the user *does* call delete, that's OK, we will just
- * ralloc_free in that case. */
- static void operator delete(void *node)
- {
- ralloc_free(node);
- }
+ DECLARE_RALLOC_CXX_OPERATORS(function)
ir_function_signature *sig;
bool progress;
};
+} /* anonymous namespace */
+
static void
destroy_links(exec_list *list, function *f)
{
- foreach_list_safe(node, list) {
- struct call_node *n = (struct call_node *) node;
-
+ foreach_in_list_safe(call_node, node, list) {
/* If this is the right function, remove it. Note that the loop cannot
* terminate now. There can be multiple links to a function if it is
* either called multiple times or calls multiple times.
*/
- if (n->func == f)
- n->remove();
+ if (node->func == f)
+ node->remove();
}
}
memset(&loc, 0, sizeof(loc));
_mesa_glsl_error(&loc, state,
- "function `%s' has static recursion.",
+ "function `%s' has static recursion",
proto);
ralloc_free(proto);
}
linker_error(prog, "function `%s' has static recursion.\n", proto);
ralloc_free(proto);
- prog->LinkStatus = false;
}