From ff37abb0c7c60481e1264914fa5e02e9986c5cd9 Mon Sep 17 00:00:00 2001 From: Dale Weiler Date: Fri, 30 Jan 2015 00:25:10 -0500 Subject: [PATCH] Constant folding for strings --- fold.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/fold.c b/fold.c index 3755608..10145bc 100644 --- a/fold.c +++ b/fold.c @@ -1373,11 +1373,15 @@ static GMQCC_INLINE ast_expression *fold_op_cmp(fold_t *fold, ast_value *a, ast_ float la = fold_immvalue_float(a); float lb = fold_immvalue_float(b); fold_check_inexact_float(fold, a, b); - return (ast_expression*)fold->imm_float[!(ne ? la == lb : la != lb)]; - } if (isvector(a) && isvector(b)) { + return (ast_expression*)fold->imm_float[ne ? la != lb : la == lb]; + } else if (isvector(a) && isvector(b)) { vec3_t la = fold_immvalue_vector(a); vec3_t lb = fold_immvalue_vector(b); - return (ast_expression*)fold->imm_float[!(ne ? vec3_cmp(la, lb) : !vec3_cmp(la, lb))]; + bool compare = vec3_cmp(la, lb); + return (ast_expression*)fold->imm_float[ne ? !compare : compare]; + } else if (isstring(a) && isstring(b)) { + bool compare = !strcmp(fold_immvalue_string(a), fold_immvalue_string(b)); + return (ast_expression*)fold->imm_float[ne ? !compare : compare]; } } return NULL; -- 2.39.2