for (i = 0; i != self->globals_count; ++i) {
ir_value_delete(self->globals[i]);
}
- MEM_VECTOR_CLEAR(self, fields);
+ MEM_VECTOR_CLEAR(self, globals);
for (i = 0; i != self->fields_count; ++i) {
ir_value_delete(self->fields[i]);
}
if (++la == enda)
break;
}
- else if (lb->start < la->start)
+ else /* if (lb->start < la->start) actually <= */
{
/* order: B A, move B forward
* check if we hit the end with B
switch (outype)
{
- case TYPE_FLOAT: op = INSTR_LOAD_F; break;
- case TYPE_VECTOR: op = INSTR_LOAD_V; break;
- case TYPE_STRING: op = INSTR_LOAD_S; break;
- case TYPE_FIELD: op = INSTR_LOAD_FLD; break;
- case TYPE_ENTITY: op = INSTR_LOAD_ENT; break;
+ case TYPE_FLOAT: op = INSTR_LOAD_F; break;
+ case TYPE_VECTOR: op = INSTR_LOAD_V; break;
+ case TYPE_STRING: op = INSTR_LOAD_S; break;
+ case TYPE_FIELD: op = INSTR_LOAD_FLD; break;
+ case TYPE_ENTITY: op = INSTR_LOAD_ENT; break;
+ case TYPE_FUNCTION: op = INSTR_LOAD_FNC; break;
#if 0
case TYPE_POINTER: op = INSTR_LOAD_I; break;
case TYPE_INTEGER: op = INSTR_LOAD_I; break;
if (ontrue->generated) {
stmt.opcode = INSTR_IF;
- stmt.o2.s1 = (ontrue->code_start-1) - code_statements_elements;
+ stmt.o2.s1 = (ontrue->code_start) - code_statements_elements;
if (code_statements_add(stmt) < 0)
return false;
}
if (onfalse->generated) {
stmt.opcode = INSTR_IFNOT;
- stmt.o2.s1 = (onfalse->code_start-1) - code_statements_elements;
+ stmt.o2.s1 = (onfalse->code_start) - code_statements_elements;
if (code_statements_add(stmt) < 0)
return false;
}
}
name[0] = '.';
- strcpy(name+1, field->name); /* no strncpy - we used strlen above */
+ memcpy(name+1, field->name, len); /* no strncpy - we used strlen above */
name[len+1] = 0;
def.name = code_genstring(name);
#define IND_BUFSZ 1024
+#ifdef WIN32
+# define strncat(dst, src, sz) strncat_s(dst, sz, src, _TRUNCATE)
+#else
+# define strncat strncat
+#endif
+
const char *qc_opname(int op)
{
if (op < 0) return "<INVALID>";