*/
#ifndef GMQCC_IR_HDR
#define GMQCC_IR_HDR
-
+#include "gmqcc.h"
/* ir_value */
typedef struct
bool unique_life;
/* temps living during a CALL must be locked */
bool locked;
+ bool callparam;
/* For the temp allocator */
ir_life_entry_t *life;
bool ir_value_set_name(ir_value*, const char *name);
ir_value* ir_value_vector_member(ir_value*, unsigned int member);
-bool GMQCC_WARN vec_ir_value_find(ir_value **vec, ir_value *what, size_t *idx);
+bool GMQCC_WARN vec_ir_value_find(ir_value **vec, const ir_value *what, size_t *idx);
bool GMQCC_WARN ir_value_set_float(ir_value*, float f);
bool GMQCC_WARN ir_value_set_func(ir_value*, int f);
bool GMQCC_WARN vec_ir_instr_find(ir_instr **vec, ir_instr *what, size_t *idx);
-bool GMQCC_WARN ir_instr_op(ir_instr*, int op, ir_value *value, bool writing);
+bool ir_instr_op(ir_instr*, int op, ir_value *value, bool writing);
void ir_instr_dump(ir_instr* in, char *ind, int (*oprintf)(const char*,...));
ir_value **locals;
size_t allocated_locals;
+ size_t globaltemps;
ir_block* first;
ir_block* last;
ht htfields;
ir_value **extparams;
+ ir_value **extparam_protos;
/* the highest func->allocated_locals */
size_t max_locals;
+ size_t max_globaltemps;
uint32_t first_common_local;
+ uint32_t first_common_globaltemp;
const char **filenames;
qcint *filestrings;
/* we cache the #IMMEDIATE string here */
- qcint str_immediate;
+ qcint str_immediate;
+ /* there should just be this one nil */
+ ir_value *nil;
} ir_builder;
ir_builder* ir_builder_new(const char *modulename);