// Code generated by tools/gen-jscore. DO NOT EDIT.

package otto

import (
	"math"
)

func (rt *runtime) newContext() {
	// Order here is import as definitions depend on each other.

	// Object prototype.
	rt.global.ObjectPrototype = &object{
		runtime:     rt,
		class:       classObjectName,
		objectClass: classObject,
		prototype:   nil,
		extensible:  true,
		value:       prototypeValueObject,
	}

	// Function prototype.
	rt.global.FunctionPrototype = &object{
		runtime:     rt,
		class:       classFunctionName,
		objectClass: classObject,
		prototype:   rt.global.ObjectPrototype,
		extensible:  true,
		value:       prototypeValueFunction,
	}

	// Object prototype property definition.
	rt.global.ObjectPrototype.property = map[string]property{
		"hasOwnProperty": {
			mode: 0o101,
			value: Value{
				kind: valueObject,
				value: &object{
					runtime:     rt,
					class:       classFunctionName,
					objectClass: classObject,
					prototype:   rt.global.FunctionPrototype,
					extensible:  true,
					property: map[string]property{
						propertyLength: {
							mode: 0,
							value: Value{
								kind:  valueNumber,
								value: 1,
							},
						},
						propertyName: {
							mode: 0,
							value: Value{
								kind:  valueString,
								value: "hasOwnProperty",
							},
						},
					},
					propertyOrder: []string{
						propertyLength,
						propertyName,
					},
					value: nativeFunctionObject{
						name: "hasOwnProperty",
						call: builtinObjectHasOwnProperty,
					},
				},
			},
		},
		"isPrototypeOf": {
			mode: 0o101,
			value: Value{
				kind: valueObject,
				value: &object{
					runtime:     rt,
					class:       classFunctionName,
					objectClass: classObject,
					prototype:   rt.global.FunctionPrototype,
					extensible:  true,
					property: map[string]property{
						propertyLength: {
							mode: 0,
							value: Value{
								kind:  valueNumber,
								value: 1,
							},
						},
						propertyName: {
							mode: 0,
							value: Value{
								kind:  valueString,
								value: "isPrototypeOf",
							},
						},
					},
					propertyOrder: []string{
						propertyLength,
						propertyName,
					},
					value: nativeFunctionObject{
						name: "isPrototypeOf",
						call: builtinObjectIsPrototypeOf,
					},
				},
			},
		},
		"propertyIsEnumerable": {
			mode: 0o101,
			value: Value{
				kind: valueObject,
				value: &object{
					runtime:     rt,
					class:       classFunctionName,
					objectClass: classObject,
					prototype:   rt.global.FunctionPrototype,
					extensible:  true,
					property: map[string]property{
						propertyLength: {
							mode: 0,
							value: Value{
								kind:  valueNumber,
								value: 1,
							},
						},
						propertyName: {
							mode: 0,
							value: Value{
								kind:  valueString,
								value: "propertyIsEnumerable",
							},
						},
					},
					propertyOrder: []string{
						propertyLength,
						propertyName,
					},
					value: nativeFunctionObject{
						name: "propertyIsEnumerable",
						call: builtinObjectPropertyIsEnumerable,
					},
				},
			},
		},
		methodToString: {
			mode: 0o101,
			value: Value{
				kind: valueObject,
				value: &object{
					runtime:     rt,
					class:       classFunctionName,
					objectClass: classObject,
					prototype:   rt.global.FunctionPrototype,
					extensible:  true,
					property: map[string]property{
						propertyLength: {
							mode: 0,
							value: Value{
								kind:  valueNumber,
								value: 0,
							},
						},
						propertyName: {
							mode: 0,
							value: Value{
								kind:  valueString,
								value: "toString",
							},
						},
					},
					propertyOrder: []string{
						propertyLength,
						propertyName,
					},
					value: nativeFunctionObject{
						name: methodToString,
						call: builtinObjectToString,
					},
				},
			},
		},
		"valueOf": {
			mode: 0o101,
			value: Value{
				kind: valueObject,
				value: &object{
					runtime:     rt,
					class:       classFunctionName,
					objectClass: classObject,
					prototype:   rt.global.FunctionPrototype,
					extensible:  true,
					property: map[string]property{
						propertyLength: {
							mode: 0,
							value: Value{
								kind:  valueNumber,
								value: 0,
							},
						},
						propertyName: {
							mode: 0,
							value: Value{
								kind:  valueString,
								value: "valueOf",
							},
						},
					},
					propertyOrder: []string{
						propertyLength,
						propertyName,
					},
					value: nativeFunctionObject{
						name: "valueOf",
						call: builtinObjectValueOf,
					},
				},
			},
		},
		"toLocaleString": {
			mode: 0o101,
			value: Value{
				kind: valueObject,
				value: &object{
					runtime:     rt,
					class:       classFunctionName,
					objectClass: classObject,
					prototype:   rt.global.FunctionPrototype,
					extensible:  true,
					property: map[string]property{
						propertyLength: {
							mode: 0,
							value: Value{
								kind:  valueNumber,
								value: 0,
							},
						},
						propertyName: {
							mode: 0,
							value: Value{
								kind:  valueString,
								value: "toLocaleString",
							},
						},
					},
					propertyOrder: []string{
						propertyLength,
						propertyName,
					},
					value: nativeFunctionObject{
						name: "toLocaleString",
						call: builtinObjectToLocaleString,
					},
				},
			},
		},
	}
	rt.global.ObjectPrototype.propertyOrder = []string{
		propertyConstructor,
		"hasOwnProperty",
		"isPrototypeOf",
		"propertyIsEnumerable",
		methodToString,
		"valueOf",
		"toLocaleString",
	}

	// Function prototype property definition.
	rt.global.FunctionPrototype.property = map[string]property{
		methodToString: {
			mode: 0o101,
			value: Value{
				kind: valueObject,
				value: &object{
					runtime:     rt,
					class:       classFunctionName,
					objectClass: classObject,
					prototype:   rt.global.FunctionPrototype,
					extensible:  true,
					property: map[string]property{
						propertyLength: {
							mode: 0,
							value: Value{
								kind:  valueNumber,
								value: 0,
							},
						},
						propertyName: {
							mode: 0,
							value: Value{
								kind:  valueString,
								value: "toString",
							},
						},
					},
					propertyOrder: []string{
						propertyLength,
						propertyName,
					},
					value: nativeFunctionObject{
						name: methodToString,
						call: builtinFunctionToString,
					},
				},
			},
		},
		"apply": {
			mode: 0o101,
			value: Value{
				kind: valueObject,
				value: &object{
					runtime:     rt,
					class:       classFunctionName,
					objectClass: classObject,
					prototype:   rt.global.FunctionPrototype,
					extensible:  true,
					property: map[string]property{
						propertyLength: {
							mode: 0,
							value: Value{
								kind:  valueNumber,
								value: 2,
							},
						},
						propertyName: {
							mode: 0,
							value: Value{
								kind:  valueString,
								value: "apply",
							},
						},
					},
					propertyOrder: []string{
						propertyLength,
						propertyName,
					},
					value: nativeFunctionObject{
						name: "apply",
						call: builtinFunctionApply,
					},
				},
			},
		},
		"call": {
			mode: 0o101,
			value: Value{
				kind: valueObject,
				value: &object{
					runtime:     rt,
					class:       classFunctionName,
					objectClass: classObject,
					prototype:   rt.global.FunctionPrototype,
					extensible:  true,
					property: map[string]property{
						propertyLength: {
							mode: 0,
							value: Value{
								kind:  valueNumber,
								value: 1,
							},
						},
						propertyName: {
							mode: 0,
							value: Value{
								kind:  valueString,
								value: "call",
							},
						},
					},
					propertyOrder: []string{
						propertyLength,
						propertyName,
					},
					value: nativeFunctionObject{
						name: "call",
						call: builtinFunctionCall,
					},
				},
			},
		},
		"bind": {
			mode: 0o101,
			value: Value{
				kind: valueObject,
				value: &object{
					runtime:     rt,
					class:       classFunctionName,
					objectClass: classObject,
					prototype:   rt.global.FunctionPrototype,
					extensible:  true,
					property: map[string]property{
						propertyLength: {
							mode: 0,
							value: Value{
								kind:  valueNumber,
								value: 1,
							},
						},
						propertyName: {
							mode: 0,
							value: Value{
								kind:  valueString,
								value: "bind",
							},
						},
					},
					propertyOrder: []string{
						propertyLength,
						propertyName,
					},
					value: nativeFunctionObject{
						name: "bind",
						call: builtinFunctionBind,
					},
				},
			},
		},
		propertyLength: {
			mode: 0,
			value: Value{
				kind:  valueNumber,
				value: 0,
			},
		},
	}
	rt.global.FunctionPrototype.propertyOrder = []string{
		methodToString,
		"apply",
		"call",
		"bind",
		propertyConstructor,
		propertyLength,
	}

	// Object definition.
	rt.global.Object = &object{
		runtime:     rt,
		class:       classFunctionName,
		objectClass: classObject,
		prototype:   rt.global.FunctionPrototype,
		extensible:  true,
		value: nativeFunctionObject{
			name:      classObjectName,
			call:      builtinObject,
			construct: builtinNewObject,
		},
		property: map[string]property{
			propertyLength: {
				mode: 0,
				value: Value{
					kind:  valueNumber,
					value: 1,
				},
			},
			propertyPrototype: {
				mode: 0,
				value: Value{
					kind:  valueObject,
					value: rt.global.ObjectPrototype,
				},
			},
			"getPrototypeOf": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 1,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "getPrototypeOf",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "getPrototypeOf",
							call: builtinObjectGetPrototypeOf,
						},
					},
				},
			},
			"getOwnPropertyDescriptor": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 2,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "getOwnPropertyDescriptor",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "getOwnPropertyDescriptor",
							call: builtinObjectGetOwnPropertyDescriptor,
						},
					},
				},
			},
			"defineProperty": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 3,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "defineProperty",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "defineProperty",
							call: builtinObjectDefineProperty,
						},
					},
				},
			},
			"defineProperties": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 2,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "defineProperties",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "defineProperties",
							call: builtinObjectDefineProperties,
						},
					},
				},
			},
			"create": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 2,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "create",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "create",
							call: builtinObjectCreate,
						},
					},
				},
			},
			"isExtensible": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 1,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "isExtensible",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "isExtensible",
							call: builtinObjectIsExtensible,
						},
					},
				},
			},
			"preventExtensions": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 1,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "preventExtensions",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "preventExtensions",
							call: builtinObjectPreventExtensions,
						},
					},
				},
			},
			"isSealed": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 1,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "isSealed",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "isSealed",
							call: builtinObjectIsSealed,
						},
					},
				},
			},
			"seal": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 1,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "seal",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "seal",
							call: builtinObjectSeal,
						},
					},
				},
			},
			"isFrozen": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 1,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "isFrozen",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "isFrozen",
							call: builtinObjectIsFrozen,
						},
					},
				},
			},
			"freeze": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 1,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "freeze",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "freeze",
							call: builtinObjectFreeze,
						},
					},
				},
			},
			"keys": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 1,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "keys",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "keys",
							call: builtinObjectKeys,
						},
					},
				},
			},
			"values": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 1,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "values",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "values",
							call: builtinObjectValues,
						},
					},
				},
			},
			"getOwnPropertyNames": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 1,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "getOwnPropertyNames",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "getOwnPropertyNames",
							call: builtinObjectGetOwnPropertyNames,
						},
					},
				},
			},
		},
		propertyOrder: []string{
			propertyLength,
			propertyPrototype,
			"getPrototypeOf",
			"getOwnPropertyDescriptor",
			"defineProperty",
			"defineProperties",
			"create",
			"isExtensible",
			"preventExtensions",
			"isSealed",
			"seal",
			"isFrozen",
			"freeze",
			"keys",
			"values",
			"getOwnPropertyNames",
		},
	}

	// Object constructor definition.
	rt.global.ObjectPrototype.property[propertyConstructor] = property{
		mode: 0o101,
		value: Value{
			kind:  valueObject,
			value: rt.global.Object,
		},
	}

	// Function definition.
	rt.global.Function = &object{
		runtime:     rt,
		class:       classFunctionName,
		objectClass: classObject,
		prototype:   rt.global.FunctionPrototype,
		extensible:  true,
		value: nativeFunctionObject{
			name:      classFunctionName,
			call:      builtinFunction,
			construct: builtinNewFunction,
		},
		property: map[string]property{
			propertyLength: {
				mode: 0,
				value: Value{
					kind:  valueNumber,
					value: 1,
				},
			},
			propertyPrototype: {
				mode: 0,
				value: Value{
					kind:  valueObject,
					value: rt.global.FunctionPrototype,
				},
			},
		},
		propertyOrder: []string{
			propertyLength,
			propertyPrototype,
		},
	}

	// Function constructor definition.
	rt.global.FunctionPrototype.property[propertyConstructor] = property{
		mode: 0o101,
		value: Value{
			kind:  valueObject,
			value: rt.global.Function,
		},
	}

	// Array prototype.
	rt.global.ArrayPrototype = &object{
		runtime:     rt,
		class:       classArrayName,
		objectClass: classArray,
		prototype:   rt.global.ObjectPrototype,
		extensible:  true,
		value:       nil,
		property: map[string]property{
			propertyLength: {
				mode: 0o100,
				value: Value{
					kind:  valueNumber,
					value: uint32(0),
				},
			},
			"concat": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 1,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "concat",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "concat",
							call: builtinArrayConcat,
						},
					},
				},
			},
			"lastIndexOf": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 1,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "lastIndexOf",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "lastIndexOf",
							call: builtinArrayLastIndexOf,
						},
					},
				},
			},
			"pop": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 0,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "pop",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "pop",
							call: builtinArrayPop,
						},
					},
				},
			},
			"push": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 1,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "push",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "push",
							call: builtinArrayPush,
						},
					},
				},
			},
			"reverse": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 0,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "reverse",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "reverse",
							call: builtinArrayReverse,
						},
					},
				},
			},
			"shift": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 0,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "shift",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "shift",
							call: builtinArrayShift,
						},
					},
				},
			},
			"unshift": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 1,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "unshift",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "unshift",
							call: builtinArrayUnshift,
						},
					},
				},
			},
			"slice": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 2,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "slice",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "slice",
							call: builtinArraySlice,
						},
					},
				},
			},
			"sort": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 1,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "sort",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "sort",
							call: builtinArraySort,
						},
					},
				},
			},
			"splice": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 2,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "splice",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "splice",
							call: builtinArraySplice,
						},
					},
				},
			},
			"indexOf": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 1,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "indexOf",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "indexOf",
							call: builtinArrayIndexOf,
						},
					},
				},
			},
			"join": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 1,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "join",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "join",
							call: builtinArrayJoin,
						},
					},
				},
			},
			"forEach": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 1,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "forEach",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "forEach",
							call: builtinArrayForEach,
						},
					},
				},
			},
			"filter": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 1,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "filter",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "filter",
							call: builtinArrayFilter,
						},
					},
				},
			},
			"map": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 1,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "map",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "map",
							call: builtinArrayMap,
						},
					},
				},
			},
			"every": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 1,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "every",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "every",
							call: builtinArrayEvery,
						},
					},
				},
			},
			"some": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 1,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "some",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "some",
							call: builtinArraySome,
						},
					},
				},
			},
			"reduce": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 1,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "reduce",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "reduce",
							call: builtinArrayReduce,
						},
					},
				},
			},
			"reduceRight": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 1,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "reduceRight",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "reduceRight",
							call: builtinArrayReduceRight,
						},
					},
				},
			},
			"toLocaleString": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 0,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "toLocaleString",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "toLocaleString",
							call: builtinArrayToLocaleString,
						},
					},
				},
			},
			methodToString: {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 0,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "toString",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: methodToString,
							call: builtinArrayToString,
						},
					},
				},
			},
		},
		propertyOrder: []string{
			propertyLength,
			propertyConstructor,
			"concat",
			"lastIndexOf",
			"pop",
			"push",
			"reverse",
			"shift",
			"unshift",
			"slice",
			"sort",
			"splice",
			"indexOf",
			"join",
			"forEach",
			"filter",
			"map",
			"every",
			"some",
			"reduce",
			"reduceRight",
			"toLocaleString",
			methodToString,
		},
	}

	// Array definition.
	rt.global.Array = &object{
		runtime:     rt,
		class:       classFunctionName,
		objectClass: classObject,
		prototype:   rt.global.FunctionPrototype,
		extensible:  true,
		value: nativeFunctionObject{
			name:      classArrayName,
			call:      builtinArray,
			construct: builtinNewArray,
		},
		property: map[string]property{
			propertyLength: {
				mode: 0,
				value: Value{
					kind:  valueNumber,
					value: 1,
				},
			},
			propertyPrototype: {
				mode: 0,
				value: Value{
					kind:  valueObject,
					value: rt.global.ArrayPrototype,
				},
			},
			"isArray": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 1,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "isArray",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "isArray",
							call: builtinArrayIsArray,
						},
					},
				},
			},
		},
		propertyOrder: []string{
			propertyLength,
			propertyPrototype,
			"isArray",
		},
	}

	// Array constructor definition.
	rt.global.ArrayPrototype.property[propertyConstructor] = property{
		mode: 0o101,
		value: Value{
			kind:  valueObject,
			value: rt.global.Array,
		},
	}

	// String prototype.
	rt.global.StringPrototype = &object{
		runtime:     rt,
		class:       classStringName,
		objectClass: classString,
		prototype:   rt.global.ObjectPrototype,
		extensible:  true,
		value:       prototypeValueString,
		property: map[string]property{
			propertyLength: {
				mode: 0,
				value: Value{
					kind:  valueNumber,
					value: int(0),
				},
			},
			"charAt": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 1,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "charAt",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "charAt",
							call: builtinStringCharAt,
						},
					},
				},
			},
			"charCodeAt": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 1,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "charCodeAt",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "charCodeAt",
							call: builtinStringCharCodeAt,
						},
					},
				},
			},
			"concat": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 1,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "concat",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "concat",
							call: builtinStringConcat,
						},
					},
				},
			},
			"indexOf": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 1,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "indexOf",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "indexOf",
							call: builtinStringIndexOf,
						},
					},
				},
			},
			"lastIndexOf": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 1,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "lastIndexOf",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "lastIndexOf",
							call: builtinStringLastIndexOf,
						},
					},
				},
			},
			"localeCompare": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 1,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "localeCompare",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "localeCompare",
							call: builtinStringLocaleCompare,
						},
					},
				},
			},
			"match": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 1,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "match",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "match",
							call: builtinStringMatch,
						},
					},
				},
			},
			"replace": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 2,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "replace",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "replace",
							call: builtinStringReplace,
						},
					},
				},
			},
			"search": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 1,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "search",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "search",
							call: builtinStringSearch,
						},
					},
				},
			},
			"slice": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 2,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "slice",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "slice",
							call: builtinStringSlice,
						},
					},
				},
			},
			"split": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 2,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "split",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "split",
							call: builtinStringSplit,
						},
					},
				},
			},
			"substr": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 2,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "substr",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "substr",
							call: builtinStringSubstr,
						},
					},
				},
			},
			"substring": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 2,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "substring",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "substring",
							call: builtinStringSubstring,
						},
					},
				},
			},
			"startsWith": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 1,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "startsWith",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "startsWith",
							call: builtinStringStartsWith,
						},
					},
				},
			},
			methodToString: {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 0,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "toString",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: methodToString,
							call: builtinStringToString,
						},
					},
				},
			},
			"trim": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 0,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "trim",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "trim",
							call: builtinStringTrim,
						},
					},
				},
			},
			"trimLeft": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 0,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "trimLeft",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "trimLeft",
							call: builtinStringTrimLeft,
						},
					},
				},
			},
			"trimRight": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 0,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "trimRight",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "trimRight",
							call: builtinStringTrimRight,
						},
					},
				},
			},
			"trimStart": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 0,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "trimStart",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "trimStart",
							call: builtinStringTrimStart,
						},
					},
				},
			},
			"trimEnd": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 0,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "trimEnd",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "trimEnd",
							call: builtinStringTrimEnd,
						},
					},
				},
			},
			"toLocaleLowerCase": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 0,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "toLocaleLowerCase",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "toLocaleLowerCase",
							call: builtinStringToLocaleLowerCase,
						},
					},
				},
			},
			"toLocaleUpperCase": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 0,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "toLocaleUpperCase",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "toLocaleUpperCase",
							call: builtinStringToLocaleUpperCase,
						},
					},
				},
			},
			"toLowerCase": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 0,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "toLowerCase",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "toLowerCase",
							call: builtinStringToLowerCase,
						},
					},
				},
			},
			"toUpperCase": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 0,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "toUpperCase",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "toUpperCase",
							call: builtinStringToUpperCase,
						},
					},
				},
			},
			"valueOf": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 0,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "valueOf",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "valueOf",
							call: builtinStringValueOf,
						},
					},
				},
			},
		},
		propertyOrder: []string{
			propertyLength,
			propertyConstructor,
			"charAt",
			"charCodeAt",
			"concat",
			"indexOf",
			"lastIndexOf",
			"localeCompare",
			"match",
			"replace",
			"search",
			"slice",
			"split",
			"substr",
			"substring",
			"startsWith",
			methodToString,
			"trim",
			"trimLeft",
			"trimRight",
			"trimStart",
			"trimEnd",
			"toLocaleLowerCase",
			"toLocaleUpperCase",
			"toLowerCase",
			"toUpperCase",
			"valueOf",
		},
	}

	// String definition.
	rt.global.String = &object{
		runtime:     rt,
		class:       classFunctionName,
		objectClass: classObject,
		prototype:   rt.global.FunctionPrototype,
		extensible:  true,
		value: nativeFunctionObject{
			name:      classStringName,
			call:      builtinString,
			construct: builtinNewString,
		},
		property: map[string]property{
			propertyLength: {
				mode: 0,
				value: Value{
					kind:  valueNumber,
					value: 1,
				},
			},
			propertyPrototype: {
				mode: 0,
				value: Value{
					kind:  valueObject,
					value: rt.global.StringPrototype,
				},
			},
			"fromCharCode": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 1,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "fromCharCode",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "fromCharCode",
							call: builtinStringFromCharCode,
						},
					},
				},
			},
		},
		propertyOrder: []string{
			propertyLength,
			propertyPrototype,
			"fromCharCode",
		},
	}

	// String constructor definition.
	rt.global.StringPrototype.property[propertyConstructor] = property{
		mode: 0o101,
		value: Value{
			kind:  valueObject,
			value: rt.global.String,
		},
	}

	// Boolean prototype.
	rt.global.BooleanPrototype = &object{
		runtime:     rt,
		class:       classBooleanName,
		objectClass: classObject,
		prototype:   rt.global.ObjectPrototype,
		extensible:  true,
		value:       prototypeValueBoolean,
		property: map[string]property{
			methodToString: {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 0,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "toString",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: methodToString,
							call: builtinBooleanToString,
						},
					},
				},
			},
			"valueOf": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 0,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "valueOf",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "valueOf",
							call: builtinBooleanValueOf,
						},
					},
				},
			},
		},
		propertyOrder: []string{
			propertyConstructor,
			methodToString,
			"valueOf",
		},
	}

	// Boolean definition.
	rt.global.Boolean = &object{
		runtime:     rt,
		class:       classFunctionName,
		objectClass: classObject,
		prototype:   rt.global.FunctionPrototype,
		extensible:  true,
		value: nativeFunctionObject{
			name:      classBooleanName,
			call:      builtinBoolean,
			construct: builtinNewBoolean,
		},
		property: map[string]property{
			propertyLength: {
				mode: 0,
				value: Value{
					kind:  valueNumber,
					value: 1,
				},
			},
			propertyPrototype: {
				mode: 0,
				value: Value{
					kind:  valueObject,
					value: rt.global.BooleanPrototype,
				},
			},
		},
		propertyOrder: []string{
			propertyLength,
			propertyPrototype,
		},
	}

	// Boolean constructor definition.
	rt.global.BooleanPrototype.property[propertyConstructor] = property{
		mode: 0o101,
		value: Value{
			kind:  valueObject,
			value: rt.global.Boolean,
		},
	}

	// Number prototype.
	rt.global.NumberPrototype = &object{
		runtime:     rt,
		class:       classNumberName,
		objectClass: classObject,
		prototype:   rt.global.ObjectPrototype,
		extensible:  true,
		value:       prototypeValueNumber,
		property: map[string]property{
			"toExponential": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 1,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "toExponential",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "toExponential",
							call: builtinNumberToExponential,
						},
					},
				},
			},
			"toFixed": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 1,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "toFixed",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "toFixed",
							call: builtinNumberToFixed,
						},
					},
				},
			},
			"toPrecision": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 1,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "toPrecision",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "toPrecision",
							call: builtinNumberToPrecision,
						},
					},
				},
			},
			methodToString: {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 0,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "toString",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: methodToString,
							call: builtinNumberToString,
						},
					},
				},
			},
			"valueOf": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 0,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "valueOf",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "valueOf",
							call: builtinNumberValueOf,
						},
					},
				},
			},
			"toLocaleString": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 1,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "toLocaleString",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "toLocaleString",
							call: builtinNumberToLocaleString,
						},
					},
				},
			},
		},
		propertyOrder: []string{
			propertyConstructor,
			"toExponential",
			"toFixed",
			"toPrecision",
			methodToString,
			"valueOf",
			"toLocaleString",
		},
	}

	// Number definition.
	rt.global.Number = &object{
		runtime:     rt,
		class:       classFunctionName,
		objectClass: classObject,
		prototype:   rt.global.FunctionPrototype,
		extensible:  true,
		value: nativeFunctionObject{
			name:      classNumberName,
			call:      builtinNumber,
			construct: builtinNewNumber,
		},
		property: map[string]property{
			propertyLength: {
				mode: 0,
				value: Value{
					kind:  valueNumber,
					value: 1,
				},
			},
			propertyPrototype: {
				mode: 0,
				value: Value{
					kind:  valueObject,
					value: rt.global.NumberPrototype,
				},
			},
			"isNaN": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 1,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "isNaN",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "isNaN",
							call: builtinNumberIsNaN,
						},
					},
				},
			},
			"MAX_VALUE": {
				mode: 0,
				value: Value{
					kind:  valueNumber,
					value: math.MaxFloat64,
				},
			},
			"MIN_VALUE": {
				mode: 0,
				value: Value{
					kind:  valueNumber,
					value: math.SmallestNonzeroFloat64,
				},
			},
			"NaN": {
				mode: 0,
				value: Value{
					kind:  valueNumber,
					value: math.NaN(),
				},
			},
			"NEGATIVE_INFINITY": {
				mode: 0,
				value: Value{
					kind:  valueNumber,
					value: math.Inf(-1),
				},
			},
			"POSITIVE_INFINITY": {
				mode: 0,
				value: Value{
					kind:  valueNumber,
					value: math.Inf(+1),
				},
			},
		},
		propertyOrder: []string{
			propertyLength,
			propertyPrototype,
			"isNaN",
			"MAX_VALUE",
			"MIN_VALUE",
			"NaN",
			"NEGATIVE_INFINITY",
			"POSITIVE_INFINITY",
		},
	}

	// Number constructor definition.
	rt.global.NumberPrototype.property[propertyConstructor] = property{
		mode: 0o101,
		value: Value{
			kind:  valueObject,
			value: rt.global.Number,
		},
	}

	// Math definition.
	rt.global.Math = &object{
		runtime:     rt,
		class:       classMathName,
		objectClass: classObject,
		prototype:   rt.global.ObjectPrototype,
		extensible:  true,
		property: map[string]property{
			"abs": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 1,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "abs",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "abs",
							call: builtinMathAbs,
						},
					},
				},
			},
			"acos": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 1,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "acos",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "acos",
							call: builtinMathAcos,
						},
					},
				},
			},
			"acosh": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 1,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "acosh",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "acosh",
							call: builtinMathAcosh,
						},
					},
				},
			},
			"asin": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 1,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "asin",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "asin",
							call: builtinMathAsin,
						},
					},
				},
			},
			"asinh": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 1,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "asinh",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "asinh",
							call: builtinMathAsinh,
						},
					},
				},
			},
			"atan": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 1,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "atan",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "atan",
							call: builtinMathAtan,
						},
					},
				},
			},
			"atanh": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 1,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "atanh",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "atanh",
							call: builtinMathAtanh,
						},
					},
				},
			},
			"atan2": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 1,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "atan2",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "atan2",
							call: builtinMathAtan2,
						},
					},
				},
			},
			"cbrt": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 1,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "cbrt",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "cbrt",
							call: builtinMathCbrt,
						},
					},
				},
			},
			"ceil": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 1,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "ceil",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "ceil",
							call: builtinMathCeil,
						},
					},
				},
			},
			"cos": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 1,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "cos",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "cos",
							call: builtinMathCos,
						},
					},
				},
			},
			"cosh": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 1,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "cosh",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "cosh",
							call: builtinMathCosh,
						},
					},
				},
			},
			"exp": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 1,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "exp",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "exp",
							call: builtinMathExp,
						},
					},
				},
			},
			"expm1": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 1,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "expm1",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "expm1",
							call: builtinMathExpm1,
						},
					},
				},
			},
			"floor": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 1,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "floor",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "floor",
							call: builtinMathFloor,
						},
					},
				},
			},
			"log": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 1,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "log",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "log",
							call: builtinMathLog,
						},
					},
				},
			},
			"log10": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 1,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "log10",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "log10",
							call: builtinMathLog10,
						},
					},
				},
			},
			"log1p": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 1,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "log1p",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "log1p",
							call: builtinMathLog1p,
						},
					},
				},
			},
			"log2": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 1,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "log2",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "log2",
							call: builtinMathLog2,
						},
					},
				},
			},
			"max": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 2,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "max",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "max",
							call: builtinMathMax,
						},
					},
				},
			},
			"min": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 2,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "min",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "min",
							call: builtinMathMin,
						},
					},
				},
			},
			"pow": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 2,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "pow",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "pow",
							call: builtinMathPow,
						},
					},
				},
			},
			"random": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 0,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "random",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "random",
							call: builtinMathRandom,
						},
					},
				},
			},
			"round": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 1,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "round",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "round",
							call: builtinMathRound,
						},
					},
				},
			},
			"sin": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 1,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "sin",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "sin",
							call: builtinMathSin,
						},
					},
				},
			},
			"sinh": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 1,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "sinh",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "sinh",
							call: builtinMathSinh,
						},
					},
				},
			},
			"sqrt": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 1,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "sqrt",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "sqrt",
							call: builtinMathSqrt,
						},
					},
				},
			},
			"tan": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 1,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "tan",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "tan",
							call: builtinMathTan,
						},
					},
				},
			},
			"tanh": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 1,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "tanh",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "tanh",
							call: builtinMathTanh,
						},
					},
				},
			},
			"trunc": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 1,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "trunc",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "trunc",
							call: builtinMathTrunc,
						},
					},
				},
			},
			"E": {
				mode: 0,
				value: Value{
					kind:  valueNumber,
					value: math.E,
				},
			},
			"LN10": {
				mode: 0,
				value: Value{
					kind:  valueNumber,
					value: math.Ln10,
				},
			},
			"LN2": {
				mode: 0,
				value: Value{
					kind:  valueNumber,
					value: math.Ln2,
				},
			},
			"LOG10E": {
				mode: 0,
				value: Value{
					kind:  valueNumber,
					value: math.Log10E,
				},
			},
			"LOG2E": {
				mode: 0,
				value: Value{
					kind:  valueNumber,
					value: math.Log2E,
				},
			},
			"PI": {
				mode: 0,
				value: Value{
					kind:  valueNumber,
					value: math.Pi,
				},
			},
			"SQRT1_2": {
				mode: 0,
				value: Value{
					kind:  valueNumber,
					value: sqrt1_2,
				},
			},
			"SQRT2": {
				mode: 0,
				value: Value{
					kind:  valueNumber,
					value: math.Sqrt2,
				},
			},
		},
		propertyOrder: []string{
			"abs",
			"acos",
			"acosh",
			"asin",
			"asinh",
			"atan",
			"atanh",
			"atan2",
			"cbrt",
			"ceil",
			"cos",
			"cosh",
			"exp",
			"expm1",
			"floor",
			"log",
			"log10",
			"log1p",
			"log2",
			"max",
			"min",
			"pow",
			"random",
			"round",
			"sin",
			"sinh",
			"sqrt",
			"tan",
			"tanh",
			"trunc",
			"E",
			"LN10",
			"LN2",
			"LOG10E",
			"LOG2E",
			"PI",
			"SQRT1_2",
			"SQRT2",
		},
	}

	// Date prototype.
	rt.global.DatePrototype = &object{
		runtime:     rt,
		class:       classDateName,
		objectClass: classObject,
		prototype:   rt.global.ObjectPrototype,
		extensible:  true,
		value:       prototypeValueDate,
		property: map[string]property{
			methodToString: {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 0,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "toString",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: methodToString,
							call: builtinDateToString,
						},
					},
				},
			},
			"toDateString": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 0,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "toDateString",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "toDateString",
							call: builtinDateToDateString,
						},
					},
				},
			},
			"toTimeString": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 0,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "toTimeString",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "toTimeString",
							call: builtinDateToTimeString,
						},
					},
				},
			},
			"toISOString": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 0,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "toISOString",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "toISOString",
							call: builtinDateToISOString,
						},
					},
				},
			},
			"toUTCString": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 0,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "toUTCString",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "toUTCString",
							call: builtinDateToUTCString,
						},
					},
				},
			},
			"toGMTString": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 0,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "toGMTString",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "toGMTString",
							call: builtinDateToGMTString,
						},
					},
				},
			},
			"getDate": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 0,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "getDate",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "getDate",
							call: builtinDateGetDate,
						},
					},
				},
			},
			"setDate": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 1,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "setDate",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "setDate",
							call: builtinDateSetDate,
						},
					},
				},
			},
			"getDay": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 0,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "getDay",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "getDay",
							call: builtinDateGetDay,
						},
					},
				},
			},
			"getFullYear": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 0,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "getFullYear",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "getFullYear",
							call: builtinDateGetFullYear,
						},
					},
				},
			},
			"setFullYear": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 3,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "setFullYear",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "setFullYear",
							call: builtinDateSetFullYear,
						},
					},
				},
			},
			"getHours": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 0,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "getHours",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "getHours",
							call: builtinDateGetHours,
						},
					},
				},
			},
			"setHours": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 4,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "setHours",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "setHours",
							call: builtinDateSetHours,
						},
					},
				},
			},
			"getMilliseconds": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 0,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "getMilliseconds",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "getMilliseconds",
							call: builtinDateGetMilliseconds,
						},
					},
				},
			},
			"setMilliseconds": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 1,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "setMilliseconds",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "setMilliseconds",
							call: builtinDateSetMilliseconds,
						},
					},
				},
			},
			"getMinutes": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 0,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "getMinutes",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "getMinutes",
							call: builtinDateGetMinutes,
						},
					},
				},
			},
			"setMinutes": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 3,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "setMinutes",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "setMinutes",
							call: builtinDateSetMinutes,
						},
					},
				},
			},
			"getMonth": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 0,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "getMonth",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "getMonth",
							call: builtinDateGetMonth,
						},
					},
				},
			},
			"setMonth": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 2,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "setMonth",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "setMonth",
							call: builtinDateSetMonth,
						},
					},
				},
			},
			"getSeconds": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 0,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "getSeconds",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "getSeconds",
							call: builtinDateGetSeconds,
						},
					},
				},
			},
			"setSeconds": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 2,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "setSeconds",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "setSeconds",
							call: builtinDateSetSeconds,
						},
					},
				},
			},
			"getTime": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 0,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "getTime",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "getTime",
							call: builtinDateGetTime,
						},
					},
				},
			},
			"setTime": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 1,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "setTime",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "setTime",
							call: builtinDateSetTime,
						},
					},
				},
			},
			"getTimezoneOffset": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 0,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "getTimezoneOffset",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "getTimezoneOffset",
							call: builtinDateGetTimezoneOffset,
						},
					},
				},
			},
			"getUTCDate": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 0,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "getUTCDate",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "getUTCDate",
							call: builtinDateGetUTCDate,
						},
					},
				},
			},
			"setUTCDate": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 1,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "setUTCDate",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "setUTCDate",
							call: builtinDateSetUTCDate,
						},
					},
				},
			},
			"getUTCDay": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 0,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "getUTCDay",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "getUTCDay",
							call: builtinDateGetUTCDay,
						},
					},
				},
			},
			"getUTCFullYear": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 0,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "getUTCFullYear",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "getUTCFullYear",
							call: builtinDateGetUTCFullYear,
						},
					},
				},
			},
			"setUTCFullYear": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 3,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "setUTCFullYear",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "setUTCFullYear",
							call: builtinDateSetUTCFullYear,
						},
					},
				},
			},
			"getUTCHours": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 0,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "getUTCHours",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "getUTCHours",
							call: builtinDateGetUTCHours,
						},
					},
				},
			},
			"setUTCHours": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 4,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "setUTCHours",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "setUTCHours",
							call: builtinDateSetUTCHours,
						},
					},
				},
			},
			"getUTCMilliseconds": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 0,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "getUTCMilliseconds",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "getUTCMilliseconds",
							call: builtinDateGetUTCMilliseconds,
						},
					},
				},
			},
			"setUTCMilliseconds": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 1,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "setUTCMilliseconds",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "setUTCMilliseconds",
							call: builtinDateSetUTCMilliseconds,
						},
					},
				},
			},
			"getUTCMinutes": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 0,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "getUTCMinutes",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "getUTCMinutes",
							call: builtinDateGetUTCMinutes,
						},
					},
				},
			},
			"setUTCMinutes": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 3,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "setUTCMinutes",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "setUTCMinutes",
							call: builtinDateSetUTCMinutes,
						},
					},
				},
			},
			"getUTCMonth": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 0,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "getUTCMonth",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "getUTCMonth",
							call: builtinDateGetUTCMonth,
						},
					},
				},
			},
			"setUTCMonth": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 2,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "setUTCMonth",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "setUTCMonth",
							call: builtinDateSetUTCMonth,
						},
					},
				},
			},
			"getUTCSeconds": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 0,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "getUTCSeconds",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "getUTCSeconds",
							call: builtinDateGetUTCSeconds,
						},
					},
				},
			},
			"setUTCSeconds": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 2,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "setUTCSeconds",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "setUTCSeconds",
							call: builtinDateSetUTCSeconds,
						},
					},
				},
			},
			"valueOf": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 0,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "valueOf",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "valueOf",
							call: builtinDateValueOf,
						},
					},
				},
			},
			"getYear": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 0,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "getYear",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "getYear",
							call: builtinDateGetYear,
						},
					},
				},
			},
			"setYear": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 1,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "setYear",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "setYear",
							call: builtinDateSetYear,
						},
					},
				},
			},
			"toJSON": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 1,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "toJSON",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "toJSON",
							call: builtinDateToJSON,
						},
					},
				},
			},
			"toLocaleString": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 0,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "toLocaleString",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "toLocaleString",
							call: builtinDateToLocaleString,
						},
					},
				},
			},
			"toLocaleDateString": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 0,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "toLocaleDateString",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "toLocaleDateString",
							call: builtinDateToLocaleDateString,
						},
					},
				},
			},
			"toLocaleTimeString": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 0,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "toLocaleTimeString",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "toLocaleTimeString",
							call: builtinDateToLocaleTimeString,
						},
					},
				},
			},
		},
		propertyOrder: []string{
			propertyConstructor,
			methodToString,
			"toDateString",
			"toTimeString",
			"toISOString",
			"toUTCString",
			"toGMTString",
			"getDate",
			"setDate",
			"getDay",
			"getFullYear",
			"setFullYear",
			"getHours",
			"setHours",
			"getMilliseconds",
			"setMilliseconds",
			"getMinutes",
			"setMinutes",
			"getMonth",
			"setMonth",
			"getSeconds",
			"setSeconds",
			"getTime",
			"setTime",
			"getTimezoneOffset",
			"getUTCDate",
			"setUTCDate",
			"getUTCDay",
			"getUTCFullYear",
			"setUTCFullYear",
			"getUTCHours",
			"setUTCHours",
			"getUTCMilliseconds",
			"setUTCMilliseconds",
			"getUTCMinutes",
			"setUTCMinutes",
			"getUTCMonth",
			"setUTCMonth",
			"getUTCSeconds",
			"setUTCSeconds",
			"valueOf",
			"getYear",
			"setYear",
			"toJSON",
			"toLocaleString",
			"toLocaleDateString",
			"toLocaleTimeString",
		},
	}

	// Date definition.
	rt.global.Date = &object{
		runtime:     rt,
		class:       classFunctionName,
		objectClass: classObject,
		prototype:   rt.global.FunctionPrototype,
		extensible:  true,
		value: nativeFunctionObject{
			name:      classDateName,
			call:      builtinDate,
			construct: builtinNewDate,
		},
		property: map[string]property{
			propertyLength: {
				mode: 0,
				value: Value{
					kind:  valueNumber,
					value: 7,
				},
			},
			propertyPrototype: {
				mode: 0,
				value: Value{
					kind:  valueObject,
					value: rt.global.DatePrototype,
				},
			},
			"parse": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 1,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "parse",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "parse",
							call: builtinDateParse,
						},
					},
				},
			},
			"UTC": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 7,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "UTC",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "UTC",
							call: builtinDateUTC,
						},
					},
				},
			},
			"now": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 0,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "now",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "now",
							call: builtinDateNow,
						},
					},
				},
			},
		},
		propertyOrder: []string{
			propertyLength,
			propertyPrototype,
			"parse",
			"UTC",
			"now",
		},
	}

	// Date constructor definition.
	rt.global.DatePrototype.property[propertyConstructor] = property{
		mode: 0o101,
		value: Value{
			kind:  valueObject,
			value: rt.global.Date,
		},
	}

	// RegExp prototype.
	rt.global.RegExpPrototype = &object{
		runtime:     rt,
		class:       classRegExpName,
		objectClass: classObject,
		prototype:   rt.global.ObjectPrototype,
		extensible:  true,
		value:       prototypeValueRegExp,
		property: map[string]property{
			"exec": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 1,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "exec",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "exec",
							call: builtinRegExpExec,
						},
					},
				},
			},
			"compile": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 1,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "compile",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "compile",
							call: builtinRegExpCompile,
						},
					},
				},
			},
			methodToString: {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 0,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "toString",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: methodToString,
							call: builtinRegExpToString,
						},
					},
				},
			},
			"test": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 1,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "test",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "test",
							call: builtinRegExpTest,
						},
					},
				},
			},
		},
		propertyOrder: []string{
			propertyConstructor,
			"exec",
			"compile",
			methodToString,
			"test",
		},
	}

	// RegExp definition.
	rt.global.RegExp = &object{
		runtime:     rt,
		class:       classFunctionName,
		objectClass: classObject,
		prototype:   rt.global.FunctionPrototype,
		extensible:  true,
		value: nativeFunctionObject{
			name:      classRegExpName,
			call:      builtinRegExp,
			construct: builtinNewRegExp,
		},
		property: map[string]property{
			propertyLength: {
				mode: 0,
				value: Value{
					kind:  valueNumber,
					value: 2,
				},
			},
			propertyPrototype: {
				mode: 0,
				value: Value{
					kind:  valueObject,
					value: rt.global.RegExpPrototype,
				},
			},
		},
		propertyOrder: []string{
			propertyLength,
			propertyPrototype,
		},
	}

	// RegExp constructor definition.
	rt.global.RegExpPrototype.property[propertyConstructor] = property{
		mode: 0o101,
		value: Value{
			kind:  valueObject,
			value: rt.global.RegExp,
		},
	}

	// Error prototype.
	rt.global.ErrorPrototype = &object{
		runtime:     rt,
		class:       classErrorName,
		objectClass: classObject,
		prototype:   rt.global.ObjectPrototype,
		extensible:  true,
		value:       nil,
		property: map[string]property{
			"name": {
				mode: 0o101,
				value: Value{
					kind:  valueString,
					value: classErrorName,
				},
			},
			"message": {
				mode: 0o101,
				value: Value{
					kind:  valueString,
					value: "",
				},
			},
			methodToString: {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 0,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "toString",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: methodToString,
							call: builtinErrorToString,
						},
					},
				},
			},
		},
		propertyOrder: []string{
			propertyConstructor,
			"name",
			"message",
			methodToString,
		},
	}

	// Error definition.
	rt.global.Error = &object{
		runtime:     rt,
		class:       classFunctionName,
		objectClass: classObject,
		prototype:   rt.global.FunctionPrototype,
		extensible:  true,
		value: nativeFunctionObject{
			name:      classErrorName,
			call:      builtinError,
			construct: builtinNewError,
		},
		property: map[string]property{
			propertyLength: {
				mode: 0,
				value: Value{
					kind:  valueNumber,
					value: 1,
				},
			},
			propertyPrototype: {
				mode: 0,
				value: Value{
					kind:  valueObject,
					value: rt.global.ErrorPrototype,
				},
			},
		},
		propertyOrder: []string{
			propertyLength,
			propertyPrototype,
		},
	}

	// Error constructor definition.
	rt.global.ErrorPrototype.property[propertyConstructor] = property{
		mode: 0o101,
		value: Value{
			kind:  valueObject,
			value: rt.global.Error,
		},
	}

	// EvalError prototype.
	rt.global.EvalErrorPrototype = &object{
		runtime:     rt,
		class:       classEvalErrorName,
		objectClass: classObject,
		prototype:   rt.global.ErrorPrototype,
		extensible:  true,
		value:       nil,
		property: map[string]property{
			"name": {
				mode: 0o101,
				value: Value{
					kind:  valueString,
					value: classEvalErrorName,
				},
			},
			"message": {
				mode: 0o101,
				value: Value{
					kind:  valueString,
					value: "",
				},
			},
			methodToString: {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 0,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "toString",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: methodToString,
							call: builtinErrorToString,
						},
					},
				},
			},
		},
		propertyOrder: []string{
			propertyConstructor,
			"name",
			"message",
			methodToString,
		},
	}

	// EvalError definition.
	rt.global.EvalError = &object{
		runtime:     rt,
		class:       classFunctionName,
		objectClass: classObject,
		prototype:   rt.global.FunctionPrototype,
		extensible:  true,
		value: nativeFunctionObject{
			name:      classEvalErrorName,
			call:      builtinEvalError,
			construct: builtinNewEvalError,
		},
		property: map[string]property{
			propertyLength: {
				mode: 0,
				value: Value{
					kind:  valueNumber,
					value: 1,
				},
			},
			propertyPrototype: {
				mode: 0,
				value: Value{
					kind:  valueObject,
					value: rt.global.EvalErrorPrototype,
				},
			},
		},
		propertyOrder: []string{
			propertyLength,
			propertyPrototype,
		},
	}

	// EvalError constructor definition.
	rt.global.EvalErrorPrototype.property[propertyConstructor] = property{
		mode: 0o101,
		value: Value{
			kind:  valueObject,
			value: rt.global.EvalError,
		},
	}

	// TypeError prototype.
	rt.global.TypeErrorPrototype = &object{
		runtime:     rt,
		class:       classTypeErrorName,
		objectClass: classObject,
		prototype:   rt.global.ErrorPrototype,
		extensible:  true,
		value:       nil,
		property: map[string]property{
			"name": {
				mode: 0o101,
				value: Value{
					kind:  valueString,
					value: classTypeErrorName,
				},
			},
			"message": {
				mode: 0o101,
				value: Value{
					kind:  valueString,
					value: "",
				},
			},
			methodToString: {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 0,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "toString",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: methodToString,
							call: builtinErrorToString,
						},
					},
				},
			},
		},
		propertyOrder: []string{
			propertyConstructor,
			"name",
			"message",
			methodToString,
		},
	}

	// TypeError definition.
	rt.global.TypeError = &object{
		runtime:     rt,
		class:       classFunctionName,
		objectClass: classObject,
		prototype:   rt.global.FunctionPrototype,
		extensible:  true,
		value: nativeFunctionObject{
			name:      classTypeErrorName,
			call:      builtinTypeError,
			construct: builtinNewTypeError,
		},
		property: map[string]property{
			propertyLength: {
				mode: 0,
				value: Value{
					kind:  valueNumber,
					value: 1,
				},
			},
			propertyPrototype: {
				mode: 0,
				value: Value{
					kind:  valueObject,
					value: rt.global.TypeErrorPrototype,
				},
			},
		},
		propertyOrder: []string{
			propertyLength,
			propertyPrototype,
		},
	}

	// TypeError constructor definition.
	rt.global.TypeErrorPrototype.property[propertyConstructor] = property{
		mode: 0o101,
		value: Value{
			kind:  valueObject,
			value: rt.global.TypeError,
		},
	}

	// RangeError prototype.
	rt.global.RangeErrorPrototype = &object{
		runtime:     rt,
		class:       classRangeErrorName,
		objectClass: classObject,
		prototype:   rt.global.ErrorPrototype,
		extensible:  true,
		value:       nil,
		property: map[string]property{
			"name": {
				mode: 0o101,
				value: Value{
					kind:  valueString,
					value: classRangeErrorName,
				},
			},
			"message": {
				mode: 0o101,
				value: Value{
					kind:  valueString,
					value: "",
				},
			},
			methodToString: {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 0,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "toString",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: methodToString,
							call: builtinErrorToString,
						},
					},
				},
			},
		},
		propertyOrder: []string{
			propertyConstructor,
			"name",
			"message",
			methodToString,
		},
	}

	// RangeError definition.
	rt.global.RangeError = &object{
		runtime:     rt,
		class:       classFunctionName,
		objectClass: classObject,
		prototype:   rt.global.FunctionPrototype,
		extensible:  true,
		value: nativeFunctionObject{
			name:      classRangeErrorName,
			call:      builtinRangeError,
			construct: builtinNewRangeError,
		},
		property: map[string]property{
			propertyLength: {
				mode: 0,
				value: Value{
					kind:  valueNumber,
					value: 1,
				},
			},
			propertyPrototype: {
				mode: 0,
				value: Value{
					kind:  valueObject,
					value: rt.global.RangeErrorPrototype,
				},
			},
		},
		propertyOrder: []string{
			propertyLength,
			propertyPrototype,
		},
	}

	// RangeError constructor definition.
	rt.global.RangeErrorPrototype.property[propertyConstructor] = property{
		mode: 0o101,
		value: Value{
			kind:  valueObject,
			value: rt.global.RangeError,
		},
	}

	// ReferenceError prototype.
	rt.global.ReferenceErrorPrototype = &object{
		runtime:     rt,
		class:       classReferenceErrorName,
		objectClass: classObject,
		prototype:   rt.global.ErrorPrototype,
		extensible:  true,
		value:       nil,
		property: map[string]property{
			"name": {
				mode: 0o101,
				value: Value{
					kind:  valueString,
					value: classReferenceErrorName,
				},
			},
			"message": {
				mode: 0o101,
				value: Value{
					kind:  valueString,
					value: "",
				},
			},
			methodToString: {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 0,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "toString",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: methodToString,
							call: builtinErrorToString,
						},
					},
				},
			},
		},
		propertyOrder: []string{
			propertyConstructor,
			"name",
			"message",
			methodToString,
		},
	}

	// ReferenceError definition.
	rt.global.ReferenceError = &object{
		runtime:     rt,
		class:       classFunctionName,
		objectClass: classObject,
		prototype:   rt.global.FunctionPrototype,
		extensible:  true,
		value: nativeFunctionObject{
			name:      classReferenceErrorName,
			call:      builtinReferenceError,
			construct: builtinNewReferenceError,
		},
		property: map[string]property{
			propertyLength: {
				mode: 0,
				value: Value{
					kind:  valueNumber,
					value: 1,
				},
			},
			propertyPrototype: {
				mode: 0,
				value: Value{
					kind:  valueObject,
					value: rt.global.ReferenceErrorPrototype,
				},
			},
		},
		propertyOrder: []string{
			propertyLength,
			propertyPrototype,
		},
	}

	// ReferenceError constructor definition.
	rt.global.ReferenceErrorPrototype.property[propertyConstructor] = property{
		mode: 0o101,
		value: Value{
			kind:  valueObject,
			value: rt.global.ReferenceError,
		},
	}

	// SyntaxError prototype.
	rt.global.SyntaxErrorPrototype = &object{
		runtime:     rt,
		class:       classSyntaxErrorName,
		objectClass: classObject,
		prototype:   rt.global.ErrorPrototype,
		extensible:  true,
		value:       nil,
		property: map[string]property{
			"name": {
				mode: 0o101,
				value: Value{
					kind:  valueString,
					value: classSyntaxErrorName,
				},
			},
			"message": {
				mode: 0o101,
				value: Value{
					kind:  valueString,
					value: "",
				},
			},
			methodToString: {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 0,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "toString",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: methodToString,
							call: builtinErrorToString,
						},
					},
				},
			},
		},
		propertyOrder: []string{
			propertyConstructor,
			"name",
			"message",
			methodToString,
		},
	}

	// SyntaxError definition.
	rt.global.SyntaxError = &object{
		runtime:     rt,
		class:       classFunctionName,
		objectClass: classObject,
		prototype:   rt.global.FunctionPrototype,
		extensible:  true,
		value: nativeFunctionObject{
			name:      classSyntaxErrorName,
			call:      builtinSyntaxError,
			construct: builtinNewSyntaxError,
		},
		property: map[string]property{
			propertyLength: {
				mode: 0,
				value: Value{
					kind:  valueNumber,
					value: 1,
				},
			},
			propertyPrototype: {
				mode: 0,
				value: Value{
					kind:  valueObject,
					value: rt.global.SyntaxErrorPrototype,
				},
			},
		},
		propertyOrder: []string{
			propertyLength,
			propertyPrototype,
		},
	}

	// SyntaxError constructor definition.
	rt.global.SyntaxErrorPrototype.property[propertyConstructor] = property{
		mode: 0o101,
		value: Value{
			kind:  valueObject,
			value: rt.global.SyntaxError,
		},
	}

	// URIError prototype.
	rt.global.URIErrorPrototype = &object{
		runtime:     rt,
		class:       classURIErrorName,
		objectClass: classObject,
		prototype:   rt.global.ErrorPrototype,
		extensible:  true,
		value:       nil,
		property: map[string]property{
			"name": {
				mode: 0o101,
				value: Value{
					kind:  valueString,
					value: classURIErrorName,
				},
			},
			"message": {
				mode: 0o101,
				value: Value{
					kind:  valueString,
					value: "",
				},
			},
			methodToString: {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 0,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "toString",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: methodToString,
							call: builtinErrorToString,
						},
					},
				},
			},
		},
		propertyOrder: []string{
			propertyConstructor,
			"name",
			"message",
			methodToString,
		},
	}

	// URIError definition.
	rt.global.URIError = &object{
		runtime:     rt,
		class:       classFunctionName,
		objectClass: classObject,
		prototype:   rt.global.FunctionPrototype,
		extensible:  true,
		value: nativeFunctionObject{
			name:      classURIErrorName,
			call:      builtinURIError,
			construct: builtinNewURIError,
		},
		property: map[string]property{
			propertyLength: {
				mode: 0,
				value: Value{
					kind:  valueNumber,
					value: 1,
				},
			},
			propertyPrototype: {
				mode: 0,
				value: Value{
					kind:  valueObject,
					value: rt.global.URIErrorPrototype,
				},
			},
		},
		propertyOrder: []string{
			propertyLength,
			propertyPrototype,
		},
	}

	// URIError constructor definition.
	rt.global.URIErrorPrototype.property[propertyConstructor] = property{
		mode: 0o101,
		value: Value{
			kind:  valueObject,
			value: rt.global.URIError,
		},
	}

	// JSON definition.
	rt.global.JSON = &object{
		runtime:     rt,
		class:       classJSONName,
		objectClass: classObject,
		prototype:   rt.global.ObjectPrototype,
		extensible:  true,
		property: map[string]property{
			"parse": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 2,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "parse",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "parse",
							call: builtinJSONParse,
						},
					},
				},
			},
			"stringify": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 3,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "stringify",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "stringify",
							call: builtinJSONStringify,
						},
					},
				},
			},
		},
		propertyOrder: []string{
			"parse",
			"stringify",
		},
	}

	// Global properties.
	rt.globalObject.property = map[string]property{
		"eval": {
			mode: 0o101,
			value: Value{
				kind: valueObject,
				value: &object{
					runtime:     rt,
					class:       classFunctionName,
					objectClass: classObject,
					prototype:   rt.global.FunctionPrototype,
					extensible:  true,
					property: map[string]property{
						propertyLength: {
							mode: 0,
							value: Value{
								kind:  valueNumber,
								value: 1,
							},
						},
						propertyName: {
							mode: 0,
							value: Value{
								kind:  valueString,
								value: "eval",
							},
						},
					},
					propertyOrder: []string{
						propertyLength,
						propertyName,
					},
					value: nativeFunctionObject{
						name: "eval",
						call: builtinGlobalEval,
					},
				},
			},
		},
		"parseInt": {
			mode: 0o101,
			value: Value{
				kind: valueObject,
				value: &object{
					runtime:     rt,
					class:       classFunctionName,
					objectClass: classObject,
					prototype:   rt.global.FunctionPrototype,
					extensible:  true,
					property: map[string]property{
						propertyLength: {
							mode: 0,
							value: Value{
								kind:  valueNumber,
								value: 2,
							},
						},
						propertyName: {
							mode: 0,
							value: Value{
								kind:  valueString,
								value: "parseInt",
							},
						},
					},
					propertyOrder: []string{
						propertyLength,
						propertyName,
					},
					value: nativeFunctionObject{
						name: "parseInt",
						call: builtinGlobalParseInt,
					},
				},
			},
		},
		"parseFloat": {
			mode: 0o101,
			value: Value{
				kind: valueObject,
				value: &object{
					runtime:     rt,
					class:       classFunctionName,
					objectClass: classObject,
					prototype:   rt.global.FunctionPrototype,
					extensible:  true,
					property: map[string]property{
						propertyLength: {
							mode: 0,
							value: Value{
								kind:  valueNumber,
								value: 1,
							},
						},
						propertyName: {
							mode: 0,
							value: Value{
								kind:  valueString,
								value: "parseFloat",
							},
						},
					},
					propertyOrder: []string{
						propertyLength,
						propertyName,
					},
					value: nativeFunctionObject{
						name: "parseFloat",
						call: builtinGlobalParseFloat,
					},
				},
			},
		},
		"isNaN": {
			mode: 0o101,
			value: Value{
				kind: valueObject,
				value: &object{
					runtime:     rt,
					class:       classFunctionName,
					objectClass: classObject,
					prototype:   rt.global.FunctionPrototype,
					extensible:  true,
					property: map[string]property{
						propertyLength: {
							mode: 0,
							value: Value{
								kind:  valueNumber,
								value: 1,
							},
						},
						propertyName: {
							mode: 0,
							value: Value{
								kind:  valueString,
								value: "isNaN",
							},
						},
					},
					propertyOrder: []string{
						propertyLength,
						propertyName,
					},
					value: nativeFunctionObject{
						name: "isNaN",
						call: builtinGlobalIsNaN,
					},
				},
			},
		},
		"isFinite": {
			mode: 0o101,
			value: Value{
				kind: valueObject,
				value: &object{
					runtime:     rt,
					class:       classFunctionName,
					objectClass: classObject,
					prototype:   rt.global.FunctionPrototype,
					extensible:  true,
					property: map[string]property{
						propertyLength: {
							mode: 0,
							value: Value{
								kind:  valueNumber,
								value: 1,
							},
						},
						propertyName: {
							mode: 0,
							value: Value{
								kind:  valueString,
								value: "isFinite",
							},
						},
					},
					propertyOrder: []string{
						propertyLength,
						propertyName,
					},
					value: nativeFunctionObject{
						name: "isFinite",
						call: builtinGlobalIsFinite,
					},
				},
			},
		},
		"decodeURI": {
			mode: 0o101,
			value: Value{
				kind: valueObject,
				value: &object{
					runtime:     rt,
					class:       classFunctionName,
					objectClass: classObject,
					prototype:   rt.global.FunctionPrototype,
					extensible:  true,
					property: map[string]property{
						propertyLength: {
							mode: 0,
							value: Value{
								kind:  valueNumber,
								value: 1,
							},
						},
						propertyName: {
							mode: 0,
							value: Value{
								kind:  valueString,
								value: "decodeURI",
							},
						},
					},
					propertyOrder: []string{
						propertyLength,
						propertyName,
					},
					value: nativeFunctionObject{
						name: "decodeURI",
						call: builtinGlobalDecodeURI,
					},
				},
			},
		},
		"decodeURIComponent": {
			mode: 0o101,
			value: Value{
				kind: valueObject,
				value: &object{
					runtime:     rt,
					class:       classFunctionName,
					objectClass: classObject,
					prototype:   rt.global.FunctionPrototype,
					extensible:  true,
					property: map[string]property{
						propertyLength: {
							mode: 0,
							value: Value{
								kind:  valueNumber,
								value: 1,
							},
						},
						propertyName: {
							mode: 0,
							value: Value{
								kind:  valueString,
								value: "decodeURIComponent",
							},
						},
					},
					propertyOrder: []string{
						propertyLength,
						propertyName,
					},
					value: nativeFunctionObject{
						name: "decodeURIComponent",
						call: builtinGlobalDecodeURIComponent,
					},
				},
			},
		},
		"encodeURI": {
			mode: 0o101,
			value: Value{
				kind: valueObject,
				value: &object{
					runtime:     rt,
					class:       classFunctionName,
					objectClass: classObject,
					prototype:   rt.global.FunctionPrototype,
					extensible:  true,
					property: map[string]property{
						propertyLength: {
							mode: 0,
							value: Value{
								kind:  valueNumber,
								value: 1,
							},
						},
						propertyName: {
							mode: 0,
							value: Value{
								kind:  valueString,
								value: "encodeURI",
							},
						},
					},
					propertyOrder: []string{
						propertyLength,
						propertyName,
					},
					value: nativeFunctionObject{
						name: "encodeURI",
						call: builtinGlobalEncodeURI,
					},
				},
			},
		},
		"encodeURIComponent": {
			mode: 0o101,
			value: Value{
				kind: valueObject,
				value: &object{
					runtime:     rt,
					class:       classFunctionName,
					objectClass: classObject,
					prototype:   rt.global.FunctionPrototype,
					extensible:  true,
					property: map[string]property{
						propertyLength: {
							mode: 0,
							value: Value{
								kind:  valueNumber,
								value: 1,
							},
						},
						propertyName: {
							mode: 0,
							value: Value{
								kind:  valueString,
								value: "encodeURIComponent",
							},
						},
					},
					propertyOrder: []string{
						propertyLength,
						propertyName,
					},
					value: nativeFunctionObject{
						name: "encodeURIComponent",
						call: builtinGlobalEncodeURIComponent,
					},
				},
			},
		},
		"escape": {
			mode: 0o101,
			value: Value{
				kind: valueObject,
				value: &object{
					runtime:     rt,
					class:       classFunctionName,
					objectClass: classObject,
					prototype:   rt.global.FunctionPrototype,
					extensible:  true,
					property: map[string]property{
						propertyLength: {
							mode: 0,
							value: Value{
								kind:  valueNumber,
								value: 1,
							},
						},
						propertyName: {
							mode: 0,
							value: Value{
								kind:  valueString,
								value: "escape",
							},
						},
					},
					propertyOrder: []string{
						propertyLength,
						propertyName,
					},
					value: nativeFunctionObject{
						name: "escape",
						call: builtinGlobalEscape,
					},
				},
			},
		},
		"unescape": {
			mode: 0o101,
			value: Value{
				kind: valueObject,
				value: &object{
					runtime:     rt,
					class:       classFunctionName,
					objectClass: classObject,
					prototype:   rt.global.FunctionPrototype,
					extensible:  true,
					property: map[string]property{
						propertyLength: {
							mode: 0,
							value: Value{
								kind:  valueNumber,
								value: 1,
							},
						},
						propertyName: {
							mode: 0,
							value: Value{
								kind:  valueString,
								value: "unescape",
							},
						},
					},
					propertyOrder: []string{
						propertyLength,
						propertyName,
					},
					value: nativeFunctionObject{
						name: "unescape",
						call: builtinGlobalUnescape,
					},
				},
			},
		},
		classObjectName: {
			mode: 0o101,
			value: Value{
				kind:  valueObject,
				value: rt.global.Object,
			},
		},
		classFunctionName: {
			mode: 0o101,
			value: Value{
				kind:  valueObject,
				value: rt.global.Function,
			},
		},
		classArrayName: {
			mode: 0o101,
			value: Value{
				kind:  valueObject,
				value: rt.global.Array,
			},
		},
		classStringName: {
			mode: 0o101,
			value: Value{
				kind:  valueObject,
				value: rt.global.String,
			},
		},
		classBooleanName: {
			mode: 0o101,
			value: Value{
				kind:  valueObject,
				value: rt.global.Boolean,
			},
		},
		classNumberName: {
			mode: 0o101,
			value: Value{
				kind:  valueObject,
				value: rt.global.Number,
			},
		},
		classMathName: {
			mode: 0o101,
			value: Value{
				kind:  valueObject,
				value: rt.global.Math,
			},
		},
		classDateName: {
			mode: 0o101,
			value: Value{
				kind:  valueObject,
				value: rt.global.Date,
			},
		},
		classRegExpName: {
			mode: 0o101,
			value: Value{
				kind:  valueObject,
				value: rt.global.RegExp,
			},
		},
		classErrorName: {
			mode: 0o101,
			value: Value{
				kind:  valueObject,
				value: rt.global.Error,
			},
		},
		classEvalErrorName: {
			mode: 0o101,
			value: Value{
				kind:  valueObject,
				value: rt.global.EvalError,
			},
		},
		classTypeErrorName: {
			mode: 0o101,
			value: Value{
				kind:  valueObject,
				value: rt.global.TypeError,
			},
		},
		classRangeErrorName: {
			mode: 0o101,
			value: Value{
				kind:  valueObject,
				value: rt.global.RangeError,
			},
		},
		classReferenceErrorName: {
			mode: 0o101,
			value: Value{
				kind:  valueObject,
				value: rt.global.ReferenceError,
			},
		},
		classSyntaxErrorName: {
			mode: 0o101,
			value: Value{
				kind:  valueObject,
				value: rt.global.SyntaxError,
			},
		},
		classURIErrorName: {
			mode: 0o101,
			value: Value{
				kind:  valueObject,
				value: rt.global.URIError,
			},
		},
		classJSONName: {
			mode: 0o101,
			value: Value{
				kind:  valueObject,
				value: rt.global.JSON,
			},
		},
		"undefined": {
			mode: 0,
			value: Value{
				kind: valueUndefined,
			},
		},
		"NaN": {
			mode: 0,
			value: Value{
				kind:  valueNumber,
				value: math.NaN(),
			},
		},
		"Infinity": {
			mode: 0,
			value: Value{
				kind:  valueNumber,
				value: math.Inf(+1),
			},
		},
	}

	// Global property order.
	rt.globalObject.propertyOrder = []string{
		"eval",
		"parseInt",
		"parseFloat",
		"isNaN",
		"isFinite",
		"decodeURI",
		"decodeURIComponent",
		"encodeURI",
		"encodeURIComponent",
		"escape",
		"unescape",
		classObjectName,
		classFunctionName,
		classArrayName,
		classStringName,
		classBooleanName,
		classNumberName,
		classMathName,
		classDateName,
		classRegExpName,
		classErrorName,
		classEvalErrorName,
		classTypeErrorName,
		classRangeErrorName,
		classReferenceErrorName,
		classSyntaxErrorName,
		classURIErrorName,
		classJSONName,
		"undefined",
		"NaN",
		"Infinity",
	}
}

func (rt *runtime) newConsole() *object {
	return &object{
		runtime:     rt,
		class:       classObjectName,
		objectClass: classObject,
		prototype:   rt.global.ObjectPrototype,
		extensible:  true,
		property: map[string]property{
			"log": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 0,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "log",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "log",
							call: builtinConsoleLog,
						},
					},
				},
			},
			"debug": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 0,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "debug",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "debug",
							call: builtinConsoleLog,
						},
					},
				},
			},
			"info": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 0,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "info",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "info",
							call: builtinConsoleLog,
						},
					},
				},
			},
			"error": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 0,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "error",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "error",
							call: builtinConsoleError,
						},
					},
				},
			},
			"warn": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 0,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "warn",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "warn",
							call: builtinConsoleError,
						},
					},
				},
			},
			"dir": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 0,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "dir",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "dir",
							call: builtinConsoleDir,
						},
					},
				},
			},
			"time": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 0,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "time",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "time",
							call: builtinConsoleTime,
						},
					},
				},
			},
			"timeEnd": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 0,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "timeEnd",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "timeEnd",
							call: builtinConsoleTimeEnd,
						},
					},
				},
			},
			"trace": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 0,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "trace",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "trace",
							call: builtinConsoleTrace,
						},
					},
				},
			},
			"assert": {
				mode: 0o101,
				value: Value{
					kind: valueObject,
					value: &object{
						runtime:     rt,
						class:       classFunctionName,
						objectClass: classObject,
						prototype:   rt.global.FunctionPrototype,
						extensible:  true,
						property: map[string]property{
							propertyLength: {
								mode: 0,
								value: Value{
									kind:  valueNumber,
									value: 0,
								},
							},
							propertyName: {
								mode: 0,
								value: Value{
									kind:  valueString,
									value: "assert",
								},
							},
						},
						propertyOrder: []string{
							propertyLength,
							propertyName,
						},
						value: nativeFunctionObject{
							name: "assert",
							call: builtinConsoleAssert,
						},
					},
				},
			},
		},
		propertyOrder: []string{
			"log",
			"debug",
			"info",
			"error",
			"warn",
			"dir",
			"time",
			"timeEnd",
			"trace",
			"assert",
		},
	}
}

func intValue(value int) Value {
	return Value{
		kind:  valueNumber,
		value: value,
	}
}

func int32Value(value int32) Value {
	return Value{
		kind:  valueNumber,
		value: value,
	}
}

func int64Value(value int64) Value {
	return Value{
		kind:  valueNumber,
		value: value,
	}
}

func uint16Value(value uint16) Value {
	return Value{
		kind:  valueNumber,
		value: value,
	}
}

func uint32Value(value uint32) Value {
	return Value{
		kind:  valueNumber,
		value: value,
	}
}

func float64Value(value float64) Value {
	return Value{
		kind:  valueNumber,
		value: value,
	}
}

func stringValue(value string) Value {
	return Value{
		kind:  valueString,
		value: value,
	}
}

func string16Value(value []uint16) Value {
	return Value{
		kind:  valueString,
		value: value,
	}
}

func boolValue(value bool) Value {
	return Value{
		kind:  valueBoolean,
		value: value,
	}
}

func objectValue(value *object) Value {
	return Value{
		kind:  valueObject,
		value: value,
	}
}
