From f66e7dd713a33cbdd84cae8597b0442212481bc4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20Grubbstr=C3=B6m=20=28Grubba=29?= <grubba@grubba.org> Date: Sat, 23 Sep 2000 14:41:51 +0200 Subject: [PATCH] Added optimization of a+b+c => `+(a, b, c). Rev: src/treeopt.in:1.41 --- src/treeopt.in | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/treeopt.in b/src/treeopt.in index 0c166da0db..6bdd54aae1 100644 --- a/src/treeopt.in +++ b/src/treeopt.in @@ -1,6 +1,6 @@ // -*- c -*- // -// $Id: treeopt.in,v 1.40 2000/04/30 13:52:54 grubba Exp $ +// $Id: treeopt.in,v 1.41 2000/09/23 12:41:51 grubba Exp $ // // The tree optimizer // @@ -57,6 +57,17 @@ F_PUSH_ARRAY(0 = F_CONSTANT[$$->u.sval.type == T_ARRAY], *): } ; +// `+(`+(a,b),c) => `+(a, b, c) +F_APPLY(0 = F_CONSTANT + [$$->u.sval.type == T_FUNCTION] + [$$->u.sval.subtype == FUNCTION_BUILTIN] + [$$->u.sval.u.efun->function == f_add], + F_ARG_LIST(F_APPLY($0, 1), 2)): + F_APPLY($0, F_ARG_LIST($1, $2)); + +// Similar rule for `*() disabled, since the type for '*() isn't +// correct for all cases. + F_POP_VALUE(-, *): -; -- GitLab