From: Dale Weiler Date: Fri, 30 Jan 2015 05:25:10 +0000 (-0500) Subject: Constant folding for strings X-Git-Tag: xonotic-v0.8.1~1 X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=ff37abb0c7c60481e1264914fa5e02e9986c5cd9;p=xonotic%2Fgmqcc.git Constant folding for strings --- 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;