[jsinterp] Adding JSArrayPrototype#_slice

This commit is contained in:
sulyi 2018-06-10 06:01:51 +02:00
parent bbea188950
commit 37d63066dd
2 changed files with 20 additions and 6 deletions

View File

@ -59,11 +59,18 @@ class JSArrayPrototype(JSObjectPrototype):
def _slice(self, start, end=None): def _slice(self, start, end=None):
from .utils import to_js from .utils import to_js
length = to_uint32(to_js(len(self.value))) start = to_js(start)
start = to_integer(to_js(start)) end = to_js(end)
end = length if end is undefined else to_integer(to_js(end)) length = to_js(len(self.value))
length = to_uint32(length)
start = to_integer(start)
end = length if end is undefined else to_integer(end)
start = min(start, length) if start > 0 else max(length + start, 0) start = min(start, length) if start > 0 else max(length + start, 0)
# TODO add jstest for it
return self.value[start:end] return self.value[start:end]
def _sort(self, cmp): def _sort(self, cmp):

View File

@ -241,8 +241,15 @@ class JSInterpreter(object):
elif name is Token.ID: elif name is Token.ID:
# XXX error handling (unknown id) # XXX error handling (unknown id)
ref = (self.this[expr[1]] if expr[1] in self.this else id = expr[1]
self.global_vars[expr[1]]) try:
ref = (self.this[id] if id in self.this else
self.global_vars[id])
except KeyError:
try:
ref = Reference(self.extract_object(id))
except AttributeError:
ref = Reference(self.extract_function(id))
# literal # literal
elif name in token_keys: elif name in token_keys: