From 99761fc538a0c19a81f183185743d32de5103e3f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20H=C3=BCbinette=20=28Hubbe=29?= <hubbe@hubbe.net> Date: Fri, 9 Oct 1998 16:30:23 -0700 Subject: [PATCH] bugfix for `[] and `-> Rev: src/docode.c:1.40 Rev: src/peep.in:1.23 Rev: src/testsuite.in:1.123 --- src/docode.c | 6 +++++- src/peep.in | 14 +++++++++++++- src/testsuite.in | 4 +++- 3 files changed, 21 insertions(+), 3 deletions(-) diff --git a/src/docode.c b/src/docode.c index 627cd81c35..80b397cfb0 100644 --- a/src/docode.c +++ b/src/docode.c @@ -4,7 +4,7 @@ ||| See the files COPYING and DISCLAIMER for more information. \*/ #include "global.h" -RCSID("$Id: docode.c,v 1.39 1998/07/31 06:51:41 hubbe Exp $"); +RCSID("$Id: docode.c,v 1.40 1998/10/09 23:30:21 hubbe Exp $"); #include "las.h" #include "program.h" #include "language.h" @@ -993,7 +993,11 @@ static int do_docode2(node *n,int flags) return 2; }else{ tmp1=do_docode(CAR(n), DO_NOT_COPY); + code_expression(CDR(n), DO_NOT_COPY, "index"); + if(CDR(n)->token != F_CONSTANT && + match_types(CDR(n)->type, string_type_string)) + emit2(F_CLEAR_STRING_SUBTYPE); emit2(F_INDEX); diff --git a/src/peep.in b/src/peep.in index 3f5f173d0d..bbe854d811 100644 --- a/src/peep.in +++ b/src/peep.in @@ -1,5 +1,5 @@ // -// $Id: peep.in,v 1.22 1998/09/01 20:25:10 hubbe Exp $ +// $Id: peep.in,v 1.23 1998/10/09 23:30:22 hubbe Exp $ // NOP : @@ -130,8 +130,20 @@ MARK LOCAL [ $3o != F_SIZEOF && $3o != F_INDEX ]: MARK_AND_LOCAL ($2a) MARK STRING : MARK_AND_STRING($2a) LOCAL SIZEOF: SIZEOF_LOCAL ($1a) STRING INDEX: STRING_INDEX ($1a) + +STRING CLEAR_STRING_SUBTYPE: STRING ($1a) +CONST0 CLEAR_STRING_SUBTYPE: CONST0 +CONST1 CLEAR_STRING_SUBTYPE: CONST1 +CONST_1 CLEAR_STRING_SUBTYPE: CONST_1 +NUMBER CLEAR_STRING_SUBTYPE: NUMBER($1a) +NEG_NUMBER CLEAR_STRING_SUBTYPE: NEG_NUMBER($1a) + LOCAL INDEX: LOCAL_INDEX ($1a) +LOCAL CLEAR_STRING_SUBTYPE INDEX: LOCAL_INDEX ($1a) + LOCAL LOCAL INDEX: LOCAL_LOCAL_INDEX($2a) BYTE($1a) +LOCAL LOCAL CLEAR_STRING_SUBTYPE INDEX: LOCAL_LOCAL_INDEX($2a) BYTE($1a) + CONST0 INDEX: POS_INT_INDEX (0) CONST_1 INDEX: NEG_INT_INDEX (1) CONST1 INDEX: POS_INT_INDEX (1) diff --git a/src/testsuite.in b/src/testsuite.in index e18e0a0904..c083dc7d44 100644 --- a/src/testsuite.in +++ b/src/testsuite.in @@ -1,4 +1,4 @@ -stest_true([["$Id: testsuite.in,v 1.122 1998/09/01 17:05:24 grubba Exp $"]]) +stest_true([["$Id: testsuite.in,v 1.123 1998/10/09 23:30:23 hubbe Exp $"]]) cond([[all_constants()->_verify_internals]], [[ test_do(_verify_internals()) @@ -1257,6 +1257,8 @@ test_eq((<'f','o','o'>)['f'],1) test_eq((<'f','o','o'>)['b'],0) test_eq((<'f','o','o'>)[-1],0) +test_eq([[class Z { mixed `->(mixed x) { return this_object()[x]; } int foo() { return 1; }}()->foo()]],1) + // index assigning test_any(mixed a=({1}); a[0]=2; return equal(a,({2})),1) test_any(mixed a=(<1>); a[1]=2; return equal(a,(<1>)),1) -- GitLab