return false;
if (vec_size(a->expression.params) != vec_size(b->expression.params))
return false;
- if (a->expression.flags != b->expression.flags)
+ if ((a->expression.flags & AST_FLAG_TYPE_MASK) !=
+ (b->expression.flags & AST_FLAG_TYPE_MASK) )
+ {
return false;
+ }
if (vec_size(a->expression.params)) {
size_t i;
for (i = 0; i < vec_size(a->expression.params); ++i) {
self->expression.next = ast_shallow_type(ctx, TYPE_FLOAT);
}
- self->owner = owner;
+ self->rvalue = false;
+ self->owner = owner;
ast_propagate_effects(self, owner);
self->field = field;
ir_value *vec;
/* in QC this is always an lvalue */
- (void)lvalue;
+ if (lvalue && self->rvalue) {
+ compile_error(ast_ctx(self), "not an l-value (member access)");
+ return false;
+ }
if (self->expression.outl) {
*out = self->expression.outl;
return true;
}
cgen = self->owner->expression.codegen;
- if (!(*cgen)((ast_expression*)(self->owner), func, true, &vec))
+ if (!(*cgen)((ast_expression*)(self->owner), func, false, &vec))
return false;
if (vec->vtype != TYPE_VECTOR &&