From c49c879357f5d603668d6baac3ad12353dcc8470 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Henrik=20Grubbstr=C3=B6m=20=28Grubba=29?=
 <grubba@grubba.org>
Date: Tue, 11 Apr 2000 21:51:32 +0200
Subject: [PATCH] Somewhat more aggressive optimization.

Rev: src/treeopt.in:1.38
---
 src/treeopt.in | 17 ++++++++++++++++-
 1 file changed, 16 insertions(+), 1 deletion(-)

diff --git a/src/treeopt.in b/src/treeopt.in
index b284934f98..2804fbad0e 100644
--- a/src/treeopt.in
+++ b/src/treeopt.in
@@ -1,6 +1,6 @@
 // -*- c -*-
 //
-// $Id: treeopt.in,v 1.37 2000/03/31 19:39:34 grubba Exp $
+// $Id: treeopt.in,v 1.38 2000/04/11 19:51:32 grubba Exp $
 //
 // The tree optimizer
 //
@@ -47,6 +47,10 @@ F_POP_VALUE(F_CAST(0, *), *):
 F_POP_VALUE(F_CONSTANT, *):
   -;
 
+// Why perform a calculation just to throw away the result?
+F_POP_VALUE(+[node_is_tossable($$)], *):
+  -;
+
 // Popping of variables.
 F_POP_VALUE(F_LOCAL, *):
   -;
@@ -188,9 +192,15 @@ F_COMMA_EXPR(0, -):
 F_COMMA_EXPR(F_CONSTANT, 0 = +):
   $0;
 
+F_COMMA_EXPR(+[node_is_tossable($$)], 0 = +):
+  $0;
+
 F_COMMA_EXPR(F_COMMA_EXPR(0, F_CONSTANT), 1 = +):
   F_COMMA_EXPR($0, $1);
 
+F_COMMA_EXPR(F_COMMA_EXPR(0, +[node_is_tossable($$)]), 1 = +):
+  F_COMMA_EXPR($0, $1);
+
 // Join adjacent F_POP_VALUE's.
 // NOTE: These two rules work only since F_RETURN, F_BREAK and F_CONTINUE
 // have been stripped of F_POP_VALUE by rules above.
@@ -468,6 +478,11 @@ F_SUB_EQ(0, 1 = F_CONSTANT[$$->u.sval.type == T_INT]
 F_INDEX(-, 0 = *):
   F_COMMA_EXPR(F_POP_VALUE($0, -), 0);
 
+// foo["str"]  ->  foo->str
+F_INDEX(0 [ !match_types($$->type, object_type_string) ],
+	1 = F_CONSTANT[$$->u.sval.type == T_STRING]):
+  F_ARROW($0, $1);
+
 
 F_ARROW(-, 0 = *):
   F_COMMA_EXPR(F_POP_VALUE($0, -), 0);
-- 
GitLab