I added it for a reason, because I was smart. I forgot about it because of life :(

This commit is contained in:
Dale Weiler 2013-06-15 11:04:08 +00:00
parent 0c58509417
commit 5694c77d16
2 changed files with 16 additions and 12 deletions

1
ast.h
View file

@ -231,6 +231,7 @@ void ast_type_adopt_impl(ast_expression *self, const ast_expression *other);
void ast_type_to_string(ast_expression *e, char *buf, size_t bufsize);
typedef enum ast_binary_ref_s {
AST_REF_NONE = 0,
AST_REF_LEFT = 1 << 1,
AST_REF_RIGHT = 1 << 2,
AST_REF_ALL = (AST_REF_LEFT | AST_REF_RIGHT)

View file

@ -1051,6 +1051,19 @@ static bool parser_sy_apply_operator(parser_t *parser, shunt *sy)
if(CanConstFold(exprs[0], exprs[1])) {
out = (ast_expression*)parser_const_float(parser, (float)((qcint)(ConstF(0)) ^ ((qcint)(ConstF(1)))));
} else {
ast_binary *expr = ast_binary_new(
ctx,
INSTR_SUB_F,
(ast_expression*)parser_const_float_neg1(parser),
(ast_expression*)ast_binary_new(
ctx,
INSTR_BITAND,
exprs[0],
exprs[1]
)
);
expr->refs = AST_REF_NONE;
out = (ast_expression*)
ast_binary_new(
ctx,
@ -1061,17 +1074,7 @@ static bool parser_sy_apply_operator(parser_t *parser, shunt *sy)
exprs[0],
exprs[1]
),
(ast_expression*)ast_binary_new(
ctx,
INSTR_SUB_F,
(ast_expression*)parser_const_float_neg1(parser),
(ast_expression*)ast_binary_new(
ctx,
INSTR_BITAND,
exprs[0],
exprs[1]
)
)
(ast_expression*)expr
);
}
break;
@ -1201,7 +1204,7 @@ static bool parser_sy_apply_operator(parser_t *parser, shunt *sy)
} else {
ast_binary *eq = ast_binary_new(ctx, INSTR_EQ_F, exprs[0], exprs[1]);
eq->refs = (ast_binary_ref)false; /* references nothing */
eq->refs = AST_REF_NONE;
/* if (lt) { */
out = (ast_expression*)ast_ternary_new(ctx,