From: Wolfgang (Blub) Bumiller Date: Sun, 12 Aug 2012 08:08:41 +0000 (+0200) Subject: Merging master to handle vector members, fields, and members of vector fields X-Git-Tag: 0.1-rc1~349 X-Git-Url: https://git.xonotic.org/?p=xonotic%2Fgmqcc.git;a=commitdiff_plain;h=d68d19dbfdbe6e239048870d6e6b442a5b1290fb Merging master to handle vector members, fields, and members of vector fields --- d68d19dbfdbe6e239048870d6e6b442a5b1290fb diff --cc ast.c index 5f947b0,e6d28a6..117f845 --- a/ast.c +++ b/ast.c @@@ -628,11 -637,21 +649,23 @@@ bool ast_global_codegen(ast_value *self return true; } + if (self->expression.vtype == TYPE_FIELD) { + v = ir_builder_create_field(ir, self->name, self->expression.next->expression.vtype); + if (!v) + return false; + if (self->isconst) { + printf("TODO: constant field pointers with value\n"); + goto error; + } + self->ir_v = v; + return true; + } + v = ir_builder_create_global(ir, self->name, self->expression.vtype); - if (!v) + if (!v) { + printf("ir_builder_create_global failed\n"); return false; + } if (self->isconst) { switch (self->expression.vtype) diff --cc ir.c index f34cc91,e01da4d..78c97c7 --- a/ir.c +++ b/ir.c @@@ -676,24 -664,15 +694,33 @@@ bool ir_value_set_vector(ir_value *self return true; } +bool ir_value_set_quaternion(ir_value *self, quaternion v) +{ + if (self->vtype != TYPE_QUATERNION) + return false; + memcpy(&self->constval.vquat, v, sizeof(self->constval.vquat)); + self->isconst = true; + return true; +} + +bool ir_value_set_matrix(ir_value *self, matrix v) +{ + if (self->vtype != TYPE_MATRIX) + return false; + memcpy(&self->constval.vmat, v, sizeof(self->constval.vmat)); + self->isconst = true; + return true; +} + + bool ir_value_set_field(ir_value *self, ir_value *fld) + { + if (self->vtype != TYPE_FIELD) + return false; + self->constval.vpointer = fld; + self->isconst = true; + return true; + } + bool ir_value_set_string(ir_value *self, const char *str) { if (self->vtype != TYPE_STRING) diff --cc ir.h index a4dddcb,dccc970..66336d6 --- a/ir.h +++ b/ir.h @@@ -97,10 -95,9 +97,11 @@@ bool GMQCC_WARN ir_value_set_int(ir_val #endif bool GMQCC_WARN ir_value_set_string(ir_value*, const char *s); bool GMQCC_WARN ir_value_set_vector(ir_value*, vector v); + bool GMQCC_WARN ir_value_set_field(ir_value*, ir_value *fld); /*bool ir_value_set_pointer_v(ir_value*, ir_value* p); */ /*bool ir_value_set_pointer_i(ir_value*, int i); */ +bool GMQCC_WARN ir_value_set_quaternion(ir_value*, quaternion v); +bool GMQCC_WARN ir_value_set_matrix(ir_value*, matrix v); MEM_VECTOR_PROTO(ir_value, ir_life_entry_t, life); /* merge an instruction into the life-range */