void patch(void) { TTR_Node *node, *stored; int type; SET_GLOBAL_SCOPE(); for ( node = dll_pop_head(call_patch_list); node != NULL; node = dll_pop_head(call_patch_list)) { stored = GET_SYMBOL(N_STR(node)); if (stored == NULL) { fprintf(stderr, "<Line %d> Function \"%s\" never defined\n", N_LINE(node), N_STR(node)); err_exit("Fatal error"); } else { N_DTYPE(node) = N_DTYPE(stored); if (COMPARE_TYPES(N_CHILD(stored, 0), N_CHILD(node, 0))) { fprintf(stderr, "<Line %d> Incompatible types in call to %s.\n", N_LINE(node), N_STR(node)); err_exit("Fatal error"); } } } for ( node = dll_pop_head(var_patch_list); node != NULL; node = dll_pop_head(var_patch_list)) { SET_GLOBAL_SCOPE(); ENTER_SCOPE(N_SCOPE(node)); if (N_TYPE(node) == N_ASSIGN) { TTR_set_ident_data_type(symbol_table, N_CHILD(node, 0), N_DTYPE(N_CHILD(node, 1))); } type = TTR_infer_data_type(node); if (type == INVALID_T) { fprintf(stderr, "<Line %d> Incompatible types.\n", N_LINE(node)); err_exit("Fatal error"); } else if (type == UNDEFINED_T) { fprintf(stderr, "<Line %d> Unknown symbol.\n", N_LINE(node)); print_tree(node, 0); err_exit("Fatal error"); } } }
MaterialData *NmtMaterialReader::operator()(core::String fileName) { if(!fileName.endsWith(".nmt")) { return 0; } io::File file(fileName); if(!file.open(io::IODevice::Read)) { logMsg(file.getName() + " not found", ErrorLog); return 0; } N_LOG_PERF; uint fs = file.size(); char *data = new char[fs + 1]; file.readBytes(data); data[fs] = 0; file.close(); N_SCOPE(delete[] data); NmtReader reader; return reader.load(data); }
bool MaterialCompiler::serialize(Node *n, const QList<NodeLink *> &links) { Timer timer; N_SCOPE(logMsg(String("shader generated in ") + (timer.elapsed() * 1000) + "ms")); QString tpe; return serialize(n, links, tpe); }