From b770dcff2d704140e517ab47f9358ff2a9d0ca89 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20H=C3=BCbinette=20=28Hubbe=29?= <hubbe@hubbe.net> Date: Thu, 17 Apr 1997 18:17:40 -0700 Subject: [PATCH] small optimization added Rev: src/las.c:1.32 --- src/las.c | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/src/las.c b/src/las.c index eb42023424..23c9066cee 100644 --- a/src/las.c +++ b/src/las.c @@ -4,7 +4,7 @@ ||| See the files COPYING and DISCLAIMER for more information. \*/ #include "global.h" -RCSID("$Id: las.c,v 1.31 1997/04/16 03:09:12 hubbe Exp $"); +RCSID("$Id: las.c,v 1.32 1997/04/18 01:17:40 hubbe Exp $"); #include "language.h" #include "interpret.h" @@ -1547,6 +1547,32 @@ static void optimize(node *n) } break; + case F_ARROW: + if(CAR(n)->token==F_CONSTANT && + CAR(n)->u.sval.type==T_OBJECT && + CAR(n)->u.sval.u.object->prog && + CDR(n)->token==F_CONSTANT && + CAR(n)->u.sval.type==T_STRING && + find_identifier("`->",CAR(n)->u.sval.u.object->prog)==-1) + { + int i; + i=find_shared_string_identifier(CDR(n)->u.sval.u.string, + CAR(n)->u.sval.u.object->prog); + if(i) + { + struct identifier *id; + id=ID_FROM_INT(CAR(n)->u.sval.u.object->prog, i); + if(IDENTIFIER_IS_VARIABLE(id->flags)) break; + } + ref_push_object(CAR(n)->u.sval.u.object); + ref_push_string(CDR(n)->u.sval.u.string); + f_index(2); + tmp1=mksvaluenode(sp-1); + pop_stack(); + goto use_tmp1; + } + break; + case F_FOR: { node **last; -- GitLab