From 6de35d8a4a4a186d4ff53c5f957b84d8f3eb59f2 Mon Sep 17 00:00:00 2001 From: MaximeBarniaudy Date: Mon, 13 May 2024 14:35:43 +0900 Subject: [PATCH] Fix range access overshadowing key access --- minproto.leg | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/minproto.leg b/minproto.leg index d2e29dd..9eb7f3b 100644 --- a/minproto.leg +++ b/minproto.leg @@ -1813,16 +1813,16 @@ oop GetArray_eval(oop exp, oop env) default: typeError("[]", "non-indexable object", obj); } } - if (getType(ind) == Object) { - switch (getType(obj)) { - case String: { - int start = integerValue(eval(Object_get(ind, sym_start), env), "[..]"); - int end = integerValue(eval(Object_get(ind, sym_end ), env), "[..]"); - oop slice = newStringLen(String_aref(obj, start), end - start); - return slice; + if (getType(ind) == Object && Object_get(ind, prop_name) == Object_get(pRange, prop_name)) { + switch (getType(obj)) { + case String: { + int start = integerValue(eval(Object_get(ind, sym_start), env), "[..]"); + int end = integerValue(eval(Object_get(ind, sym_end ), env), "[..]"); + oop slice = newStringLen(String_aref(obj, start), end - start); + return slice; + } + default: fatal("[]: %s is not range - indexable", storeString(obj, 0)); } - default: fatal("[]: %s is not range - indexable", storeString(obj, 0)); - } } if (!is(Object, obj)) fatal("[]: %s is not an object", storeString(obj, 0)); return Object_getLocal(obj, ind);