}
}
+bool ast_compare_type(ast_expression *a, ast_expression *b)
+{
+ if (a->expression.vtype != b->expression.vtype)
+ return false;
+ if (!a->expression.next != !b->expression.next)
+ return false;
+ if (a->expression.params_count != b->expression.params_count)
+ return false;
+ if (a->expression.params_count) {
+ size_t i;
+ for (i = 0; i < a->expression.params_count; ++i) {
+ if (!ast_compare_type((ast_expression*)a->expression.params[i],
+ (ast_expression*)b->expression.params[i]))
+ return false;
+ }
+ }
+ if (a->expression.next)
+ return ast_compare_type(a->expression.next, b->expression.next);
+ return true;
+}
+
ast_value* ast_value_new(lex_ctx ctx, const char *name, int t)
{
ast_instantiate(ast_value, ctx, ast_value_delete);
/* for a binstore we need both an lvalue and an rvalue for the left side */
/* rvalue of destination! */
cgen = self->dest->expression.codegen;
- if (!(*cgen)((ast_expression*)(self->dest), func, true, &leftr))
+ if (!(*cgen)((ast_expression*)(self->dest), func, false, &leftr))
return false;
/* source as rvalue only */