Fix array-index codegen conditions

This commit is contained in:
Wolfgang (Blub) Bumiller 2012-11-11 19:02:50 +01:00
parent 22d6ff2309
commit feec2d74ee

23
ast.c
View file

@ -1537,16 +1537,20 @@ bool ast_array_index_codegen(ast_array_index *self, ast_function *func, bool lva
return false;
}
if (!ast_istype(self->index, ast_value)) {
if (lvalue) {
asterror(ast_ctx(self), "array indexing here needs a compile-time constant");
return false;
} else {
arr = (ast_value*)self->array;
idx = (ast_value*)self->index;
if (!ast_istype(self->index, ast_value) || !idx->isconst) {
/* Time to use accessor functions */
ast_expression_codegen *cgen;
ir_value *iridx, *funval;
ir_instr *call;
if (lvalue) {
asterror(ast_ctx(self), "(.2) array indexing here needs a compile-time constant");
return false;
}
if (!arr->getter) {
asterror(ast_ctx(self), "value has no getter, don't know how to index it");
return false;
@ -1570,15 +1574,6 @@ bool ast_array_index_codegen(ast_array_index *self, ast_function *func, bool lva
self->expression.outr = *out;
return true;
}
}
arr = (ast_value*)self->array;
idx = (ast_value*)self->index;
if (!idx->isconst) {
asterror(ast_ctx(self), "(.2) array indexing here needs a compile-time constant");
return false;
}
if (idx->expression.vtype == TYPE_FLOAT)
*out = arr->ir_values[(int)idx->constval.vfloat];