from js2py.base import *

@Js
def Array():
    if len(arguments)==0 or len(arguments)>1:
        return arguments.to_list()
    a = arguments[0]
    if isinstance(a, PyJsString):
        length = a.to_uint32()
        if length!=a.value:
            raise MakeError('RangeError', 'Invalid array length')
        temp = Js([])
        temp.put('length', a)
        return temp
    return [a]

Array.create = Array
Array.own['length']['value'] = Js(1)

@Js
def isArray(arg):
    return arg.Class=='Array'


Array.define_own_property('isArray', {'value': isArray,
                                         'enumerable': False,
                                         'writable': True,
                                         'configurable': True})

Array.define_own_property('prototype', {'value': ArrayPrototype,
                                         'enumerable': False,
                                         'writable': False,
                                         'configurable': False})

ArrayPrototype.define_own_property('constructor', {'value': Array,
                                                    'enumerable': False,
                                                    'writable': True,
                                                    'configurable': True})
from js2py.base import *

@Js
def Array():
    if len(arguments)==0 or len(arguments)>1:
        return arguments.to_list()
    a = arguments[0]
    if isinstance(a, PyJsString):
        length = a.to_uint32()
        if length!=a.value:
            raise MakeError('RangeError', 'Invalid array length')
        temp = Js([])
        temp.put('length', a)
        return temp
    return [a]

Array.create = Array
Array.own['length']['value'] = Js(1)

@Js
def isArray(arg):
    return arg.Class=='Array'


Array.define_own_property('isArray', {'value': isArray,
                                         'enumerable': False,
                                         'writable': True,
                                         'configurable': True})

Array.define_own_property('prototype', {'value': ArrayPrototype,
                                         'enumerable': False,
                                         'writable': False,
                                         'configurable': False})

ArrayPrototype.define_own_property('constructor', {'value': Array,
                                                    'enumerable': False,
                                                    'writable': True,
                                                    'configurable': True})