diff --git a/src/las.c b/src/las.c
index eb420234242bf3327965048014a468627ac7ece0..23c9066cee738b20a39d1cc9fd3bad6b2c080b8d 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;