package goja
func (r *Runtime ) builtin_reflect_apply (call FunctionCall ) Value {
return r .toCallable (call .Argument (0 ))(FunctionCall {
This : call .Argument (1 ),
Arguments : r .createListFromArrayLike (call .Argument (2 ))})
}
func (r *Runtime ) toConstructor (v Value ) func (args []Value , newTarget *Object ) *Object {
if ctor := r .toObject (v ).self .assertConstructor (); ctor != nil {
return ctor
}
panic (r .NewTypeError ("Value is not a constructor" ))
}
func (r *Runtime ) builtin_reflect_construct (call FunctionCall ) Value {
target := call .Argument (0 )
ctor := r .toConstructor (target )
var newTarget Value
if len (call .Arguments ) > 2 {
newTarget = call .Argument (2 )
r .toConstructor (newTarget )
} else {
newTarget = target
}
return ctor (r .createListFromArrayLike (call .Argument (1 )), r .toObject (newTarget ))
}
func (r *Runtime ) builtin_reflect_defineProperty (call FunctionCall ) Value {
target := r .toObject (call .Argument (0 ))
key := toPropertyKey (call .Argument (1 ))
desc := r .toPropertyDescriptor (call .Argument (2 ))
return r .toBoolean (target .defineOwnProperty (key , desc , false ))
}
func (r *Runtime ) builtin_reflect_deleteProperty (call FunctionCall ) Value {
target := r .toObject (call .Argument (0 ))
key := toPropertyKey (call .Argument (1 ))
return r .toBoolean (target .delete (key , false ))
}
func (r *Runtime ) builtin_reflect_get (call FunctionCall ) Value {
target := r .toObject (call .Argument (0 ))
key := toPropertyKey (call .Argument (1 ))
var receiver Value
if len (call .Arguments ) > 2 {
receiver = call .Arguments [2 ]
}
return target .get (key , receiver )
}
func (r *Runtime ) builtin_reflect_getOwnPropertyDescriptor (call FunctionCall ) Value {
target := r .toObject (call .Argument (0 ))
key := toPropertyKey (call .Argument (1 ))
return r .valuePropToDescriptorObject (target .getOwnProp (key ))
}
func (r *Runtime ) builtin_reflect_getPrototypeOf (call FunctionCall ) Value {
target := r .toObject (call .Argument (0 ))
if proto := target .self .proto (); proto != nil {
return proto
}
return _null
}
func (r *Runtime ) builtin_reflect_has (call FunctionCall ) Value {
target := r .toObject (call .Argument (0 ))
key := toPropertyKey (call .Argument (1 ))
return r .toBoolean (target .hasProperty (key ))
}
func (r *Runtime ) builtin_reflect_isExtensible (call FunctionCall ) Value {
target := r .toObject (call .Argument (0 ))
return r .toBoolean (target .self .isExtensible ())
}
func (r *Runtime ) builtin_reflect_ownKeys (call FunctionCall ) Value {
target := r .toObject (call .Argument (0 ))
return r .newArrayValues (target .self .keys (true , nil ))
}
func (r *Runtime ) builtin_reflect_preventExtensions (call FunctionCall ) Value {
target := r .toObject (call .Argument (0 ))
return r .toBoolean (target .self .preventExtensions (false ))
}
func (r *Runtime ) builtin_reflect_set (call FunctionCall ) Value {
target := r .toObject (call .Argument (0 ))
var receiver Value
if len (call .Arguments ) >= 4 {
receiver = call .Argument (3 )
} else {
receiver = target
}
return r .toBoolean (target .set (call .Argument (1 ), call .Argument (2 ), receiver , false ))
}
func (r *Runtime ) builtin_reflect_setPrototypeOf (call FunctionCall ) Value {
target := r .toObject (call .Argument (0 ))
var proto *Object
if arg := call .Argument (1 ); arg != _null {
proto = r .toObject (arg )
}
return r .toBoolean (target .self .setProto (proto , false ))
}
func (r *Runtime ) createReflect (val *Object ) objectImpl {
o := newBaseObjectObj (val , r .global .ObjectPrototype , classObject )
o ._putProp ("apply" , r .newNativeFunc (r .builtin_reflect_apply , "apply" , 3 ), true , false , true )
o ._putProp ("construct" , r .newNativeFunc (r .builtin_reflect_construct , "construct" , 2 ), true , false , true )
o ._putProp ("defineProperty" , r .newNativeFunc (r .builtin_reflect_defineProperty , "defineProperty" , 3 ), true , false , true )
o ._putProp ("deleteProperty" , r .newNativeFunc (r .builtin_reflect_deleteProperty , "deleteProperty" , 2 ), true , false , true )
o ._putProp ("get" , r .newNativeFunc (r .builtin_reflect_get , "get" , 2 ), true , false , true )
o ._putProp ("getOwnPropertyDescriptor" , r .newNativeFunc (r .builtin_reflect_getOwnPropertyDescriptor , "getOwnPropertyDescriptor" , 2 ), true , false , true )
o ._putProp ("getPrototypeOf" , r .newNativeFunc (r .builtin_reflect_getPrototypeOf , "getPrototypeOf" , 1 ), true , false , true )
o ._putProp ("has" , r .newNativeFunc (r .builtin_reflect_has , "has" , 2 ), true , false , true )
o ._putProp ("isExtensible" , r .newNativeFunc (r .builtin_reflect_isExtensible , "isExtensible" , 1 ), true , false , true )
o ._putProp ("ownKeys" , r .newNativeFunc (r .builtin_reflect_ownKeys , "ownKeys" , 1 ), true , false , true )
o ._putProp ("preventExtensions" , r .newNativeFunc (r .builtin_reflect_preventExtensions , "preventExtensions" , 1 ), true , false , true )
o ._putProp ("set" , r .newNativeFunc (r .builtin_reflect_set , "set" , 3 ), true , false , true )
o ._putProp ("setPrototypeOf" , r .newNativeFunc (r .builtin_reflect_setPrototypeOf , "setPrototypeOf" , 2 ), true , false , true )
o ._putSym (SymToStringTag , valueProp (asciiString ("Reflect" ), false , false , true ))
return o
}
func (r *Runtime ) getReflect () *Object {
ret := r .global .Reflect
if ret == nil {
ret = &Object {runtime : r }
r .global .Reflect = ret
ret .self = r .createReflect (ret )
}
return ret
}
The pages are generated with Golds v0.8.2 . (GOOS=linux GOARCH=amd64)
Golds is a Go 101 project developed by Tapir Liu .
PR and bug reports are welcome and can be submitted to the issue list .
Please follow @zigo_101 (reachable from the left QR code) to get the latest news of Golds .