diff --git a/minproto.leg b/minproto.leg index 16e0e45..0d64fca 100644 --- a/minproto.leg +++ b/minproto.leg @@ -1123,16 +1123,16 @@ oop GetArray_eval(oop exp, oop env) default: fatal("[]: %s is not indexable", storeString(obj, 0)); } } - 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);