mirror of https://github.com/svaarala/duktape.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1219 lines
41 KiB
1219 lines
41 KiB
/*
|
|
* Check built-in objects and their properties in detail.
|
|
*
|
|
* There are small deviations from the E5 specification in all of the
|
|
* Javascript engines tested, so expect to see some differences to the
|
|
* required output when testing.
|
|
*/
|
|
|
|
/*
|
|
* These are from some random versions of the Javascript engines.
|
|
*
|
|
* Smjs issues
|
|
*
|
|
* - None that I can see :)
|
|
*
|
|
* V8 (Node) issues
|
|
*
|
|
* - Error object 'name' properties are not writable or configurable as they
|
|
* should be. This is not explicitly stated, but: (1) the default attributes
|
|
* are stated in E5 Section 15 (last paragraph): Writable, !Enumerable, Configurable;
|
|
* and (2) the wording in e.g. E5 Sections 15.11.4.2 and 15.11.7.9 is that the
|
|
* *initial* value of 'name' and 'message' is something. This suggests they are
|
|
* at least writable.
|
|
*
|
|
* - Error.prototype has a 'message' property but specific built-in error prototypes
|
|
* (such as TypeError.prototype) do not. They should, see E5 Section 15.11.7.10.
|
|
*
|
|
* - Not a bug as such: global object prototype does not match Rhino or Smjs
|
|
* which both use Object.prototype. However, global object prototype is
|
|
* implementation specific, so this is OK.
|
|
*
|
|
* Rhino issues
|
|
*
|
|
* - Global object 'RegExp' property has incorrect attributes. It should be
|
|
* writable and configurable (but not enumerable); instead it is only
|
|
* configurable (not writable or enumerable).
|
|
*
|
|
* - RegExp.length is 0, when it should be 2. E5 Section 15.10.5.
|
|
*
|
|
* - Date.length is 1, when it should be 7. E5 Section 15.9.4.
|
|
*
|
|
* - Error object 'name' and 'message' properties have incorrect attributes.
|
|
* They should be writable and configurable (but not enumerable); instead,
|
|
* they are writable, enumerable, and configurable.
|
|
*/
|
|
|
|
function getGlobalObject() {
|
|
return this;
|
|
}
|
|
|
|
var obj_data = [
|
|
{
|
|
obj: getGlobalObject(),
|
|
name: 'Global',
|
|
proto: 'Object.prototype', // implementation defined
|
|
// Smjs: Object.prototype
|
|
// Rhino: Object.prototype
|
|
// Node (V8): *not* Object.prototype, but Object.prototype is in prototype chain
|
|
class: 'global', // implementation defined
|
|
// Smjs: 'global'
|
|
// Rhino: 'global'
|
|
// V8: 'global'
|
|
props: [
|
|
{ key: 'NaN', attrs: '' },
|
|
{ key: 'Infinity', attrs: '' },
|
|
{ key: 'undefined', attrs: '' },
|
|
{ key: 'eval', attrs: 'wc' },
|
|
{ key: 'parseInt', attrs: 'wc' },
|
|
{ key: 'parseFloat', attrs: 'wc' },
|
|
{ key: 'isNaN', attrs: 'wc' },
|
|
{ key: 'isFinite', attrs: 'wc' },
|
|
{ key: 'decodeURI', attrs: 'wc' },
|
|
{ key: 'decodeURIComponent', attrs: 'wc' },
|
|
{ key: 'encodeURI', attrs: 'wc' },
|
|
{ key: 'encodeURIComponent', attrs: 'wc' },
|
|
{ key: 'Object', attrs: 'wc' },
|
|
{ key: 'Function', attrs: 'wc' },
|
|
{ key: 'Array', attrs: 'wc' },
|
|
{ key: 'String', attrs: 'wc' },
|
|
{ key: 'Boolean', attrs: 'wc' },
|
|
{ key: 'Number', attrs: 'wc' },
|
|
{ key: 'Date', attrs: 'wc' },
|
|
{ key: 'RegExp', attrs: 'wc' },
|
|
{ key: 'Error', attrs: 'wc' },
|
|
{ key: 'EvalError', attrs: 'wc' },
|
|
{ key: 'RangeError', attrs: 'wc' },
|
|
{ key: 'ReferenceError', attrs: 'wc' },
|
|
{ key: 'SyntaxError', attrs: 'wc' },
|
|
{ key: 'TypeError', attrs: 'wc' },
|
|
{ key: 'URIError', attrs: 'wc' },
|
|
],
|
|
noprops: [
|
|
{ key: 'length' },
|
|
],
|
|
},
|
|
{
|
|
obj: Object,
|
|
name: 'Object',
|
|
proto: 'Function.prototype',
|
|
class: 'Function',
|
|
props: [
|
|
{ key: 'length', attrs: '', value: 1 },
|
|
{ key: 'prototype', attrs: '' },
|
|
{ key: 'getPrototypeOf', attrs: 'wc' },
|
|
{ key: 'getOwnPropertyDescriptor', attrs: 'wc' },
|
|
{ key: 'getOwnPropertyNames', attrs: 'wc' },
|
|
{ key: 'create', attrs: 'wc' },
|
|
{ key: 'defineProperty', attrs: 'wc' },
|
|
{ key: 'seal', attrs: 'wc' },
|
|
{ key: 'freeze', attrs: 'wc' },
|
|
{ key: 'preventExtensions', attrs: 'wc' },
|
|
{ key: 'isSealed', attrs: 'wc' },
|
|
{ key: 'isFrozen', attrs: 'wc' },
|
|
{ key: 'isExtensible', attrs: 'wc' },
|
|
{ key: 'keys', attrs: 'wc' },
|
|
],
|
|
noprops: [
|
|
],
|
|
},
|
|
{
|
|
obj: Object.prototype,
|
|
name: 'Object.prototype',
|
|
proto: null,
|
|
class: 'Object',
|
|
props: [
|
|
{ key: 'constructor', 'attrs': 'wc' },
|
|
{ key: 'toString', 'attrs': 'wc' },
|
|
{ key: 'toLocaleString', 'attrs': 'wc' },
|
|
{ key: 'valueOf', 'attrs': 'wc' },
|
|
{ key: 'hasOwnProperty', 'attrs': 'wc' },
|
|
{ key: 'isPrototypeOf', 'attrs': 'wc' },
|
|
{ key: 'propertyIsEnumerable', 'attrs': 'wc' },
|
|
],
|
|
noprops: [
|
|
{ key: 'length' },
|
|
],
|
|
},
|
|
{
|
|
obj: Function,
|
|
name: 'Function',
|
|
proto: 'Function.prototype',
|
|
class: 'Function',
|
|
props: [
|
|
{ key: 'length', attrs: '', value: 1 },
|
|
{ key: 'prototype', 'attrs': '' },
|
|
{ key: 'length', 'attrs': '' },
|
|
],
|
|
noprops: [
|
|
],
|
|
},
|
|
{
|
|
obj: Function.prototype,
|
|
name: 'Function.prototype',
|
|
proto: 'Object.prototype',
|
|
class: 'Function', // E5 Section 15.3.4
|
|
props: [
|
|
{ key: 'length', 'attrs': '', value: 0 }, // E5 Section 15.3.4
|
|
{ key: 'constructor', 'attrs': 'wc' },
|
|
{ key: 'toString', 'attrs': 'wc' },
|
|
{ key: 'apply', 'attrs': 'wc' },
|
|
{ key: 'call', 'attrs': 'wc' },
|
|
{ key: 'bind', 'attrs': 'wc' },
|
|
],
|
|
noprops: [
|
|
],
|
|
},
|
|
{
|
|
obj: Array,
|
|
name: 'Array',
|
|
proto: 'Function.prototype',
|
|
class: 'Function',
|
|
props: [
|
|
{ key: 'length', attrs: '', value: 1 },
|
|
{ key: 'prototype', 'attrs': '' },
|
|
{ key: 'isArray', 'attrs': 'wc' },
|
|
],
|
|
noprops: [
|
|
],
|
|
},
|
|
{
|
|
obj: Array.prototype,
|
|
name: 'Array.prototype',
|
|
proto: 'Object.prototype',
|
|
class: 'Array',
|
|
props: [
|
|
{ key: 'length', 'attrs': 'w', value: 0 }, // virtual attribute (Array.prototype is an array instance),
|
|
// E5 Sections 15.4.4, 15.4.5.2
|
|
{ key: 'constructor', 'attrs': 'wc' },
|
|
{ key: 'toString', 'attrs': 'wc' },
|
|
{ key: 'toLocaleString', 'attrs': 'wc' },
|
|
{ key: 'concat', 'attrs': 'wc' },
|
|
{ key: 'join', 'attrs': 'wc' },
|
|
{ key: 'pop', 'attrs': 'wc' },
|
|
{ key: 'push', 'attrs': 'wc' },
|
|
{ key: 'reverse', 'attrs': 'wc' },
|
|
{ key: 'shift', 'attrs': 'wc' },
|
|
{ key: 'slice', 'attrs': 'wc' },
|
|
{ key: 'sort', 'attrs': 'wc' },
|
|
{ key: 'splice', 'attrs': 'wc' },
|
|
{ key: 'unshift', 'attrs': 'wc' },
|
|
{ key: 'indexOf', 'attrs': 'wc' },
|
|
{ key: 'lastIndexOf', 'attrs': 'wc' },
|
|
{ key: 'every', 'attrs': 'wc' },
|
|
{ key: 'some', 'attrs': 'wc' },
|
|
{ key: 'forEach', 'attrs': 'wc' },
|
|
{ key: 'map', 'attrs': 'wc' },
|
|
{ key: 'filter', 'attrs': 'wc' },
|
|
{ key: 'reduce', 'attrs': 'wc' },
|
|
{ key: 'reduceRight', 'attrs': 'wc' },
|
|
],
|
|
noprops: [
|
|
],
|
|
},
|
|
{
|
|
obj: String,
|
|
name: 'String',
|
|
proto: 'Function.prototype',
|
|
class: 'Function',
|
|
props: [
|
|
{ key: 'length', attrs: '', value: 1 },
|
|
{ key: 'prototype', 'attrs': '' },
|
|
{ key: 'fromCharCode', 'attrs': 'wc' },
|
|
],
|
|
noprops: [
|
|
],
|
|
},
|
|
{
|
|
obj: String.prototype,
|
|
name: 'String.prototype',
|
|
proto: 'Object.prototype',
|
|
class: 'String', // E5 Section 15.5.4
|
|
props: [
|
|
{ key: 'length', 'attrs': '', value: 0 }, // virtual attribute (String.prototype is a String instance),
|
|
// E5 Sections 15.5.4, 15.5.5.1; immutable
|
|
{ key: 'constructor', 'attrs': 'wc' },
|
|
{ key: 'toString', 'attrs': 'wc' },
|
|
{ key: 'valueOf', 'attrs': 'wc' },
|
|
{ key: 'charAt', 'attrs': 'wc' },
|
|
{ key: 'charCodeAt', 'attrs': 'wc' },
|
|
{ key: 'concat', 'attrs': 'wc' },
|
|
{ key: 'indexOf', 'attrs': 'wc' },
|
|
{ key: 'lastIndexOf', 'attrs': 'wc' },
|
|
{ key: 'localeCompare', 'attrs': 'wc' },
|
|
{ key: 'match', 'attrs': 'wc' },
|
|
{ key: 'replace', 'attrs': 'wc' },
|
|
{ key: 'search', 'attrs': 'wc' },
|
|
{ key: 'slice', 'attrs': 'wc' },
|
|
{ key: 'split', 'attrs': 'wc' },
|
|
{ key: 'substring', 'attrs': 'wc' },
|
|
{ key: 'toLowerCase', 'attrs': 'wc' },
|
|
{ key: 'toLocaleLowerCase', 'attrs': 'wc' },
|
|
{ key: 'toUpperCase', 'attrs': 'wc' },
|
|
{ key: 'toLocaleUpperCase', 'attrs': 'wc' },
|
|
{ key: 'trim', 'attrs': 'wc' },
|
|
],
|
|
noprops: [
|
|
],
|
|
},
|
|
{
|
|
obj: Boolean,
|
|
name: 'Boolean',
|
|
proto: 'Function.prototype',
|
|
class: 'Function',
|
|
props: [
|
|
{ key: 'length', attrs: '', value: 1 },
|
|
{ key: 'prototype', 'attrs': '' },
|
|
],
|
|
noprops: [
|
|
],
|
|
},
|
|
{
|
|
obj: Boolean.prototype,
|
|
name: 'Boolean.prototype',
|
|
proto: 'Object.prototype',
|
|
class: 'Boolean', // E5 Section 15.6.4
|
|
props: [
|
|
{ key: 'constructor', 'attrs': 'wc' },
|
|
{ key: 'toString', 'attrs': 'wc' },
|
|
{ key: 'valueOf', 'attrs': 'wc' },
|
|
],
|
|
noprops: [
|
|
{ key: 'length' },
|
|
],
|
|
},
|
|
{
|
|
obj: Number,
|
|
name: 'Number',
|
|
proto: 'Function.prototype',
|
|
class: 'Function',
|
|
props: [
|
|
{ key: 'length', attrs: '', value: 1 },
|
|
{ key: 'prototype', 'attrs': '' },
|
|
{ key: 'MAX_VALUE', 'attrs': '' },
|
|
{ key: 'MIN_VALUE', 'attrs': '' },
|
|
{ key: 'NaN', 'attrs': '' },
|
|
{ key: 'NEGATIVE_INFINITY', 'attrs': '' },
|
|
{ key: 'POSITIVE_INFINITY', 'attrs': '' },
|
|
],
|
|
noprops: [
|
|
],
|
|
},
|
|
{
|
|
obj: Number.prototype,
|
|
name: 'Number.prototype',
|
|
proto: 'Object.prototype',
|
|
class: 'Number', // E5 Section 15.7.4
|
|
props: [
|
|
{ key: 'constructor', 'attrs': 'wc' },
|
|
{ key: 'toString', 'attrs': 'wc' },
|
|
{ key: 'toLocaleString', 'attrs': 'wc' },
|
|
{ key: 'valueOf', 'attrs': 'wc' },
|
|
{ key: 'toFixed', 'attrs': 'wc' },
|
|
{ key: 'toExponential', 'attrs': 'wc' },
|
|
{ key: 'toPrecision', 'attrs': 'wc' },
|
|
],
|
|
noprops: [
|
|
{ key: 'length' },
|
|
],
|
|
},
|
|
{
|
|
obj: Math,
|
|
name: 'Math',
|
|
proto: 'Object.prototype',
|
|
class: 'Math',
|
|
props: [
|
|
{ key: 'E', 'attrs': '' },
|
|
{ key: 'LN10', 'attrs': '' },
|
|
{ key: 'LN2', 'attrs': '' },
|
|
{ key: 'LOG2E', 'attrs': '' },
|
|
{ key: 'LOG10E', 'attrs': '' },
|
|
{ key: 'PI', 'attrs': '' },
|
|
{ key: 'SQRT1_2', 'attrs': '' },
|
|
{ key: 'SQRT2', 'attrs': '' },
|
|
{ key: 'abs', 'attrs': 'wc' },
|
|
{ key: 'acos', 'attrs': 'wc' },
|
|
{ key: 'asin', 'attrs': 'wc' },
|
|
{ key: 'atan', 'attrs': 'wc' },
|
|
{ key: 'atan2', 'attrs': 'wc' },
|
|
{ key: 'ceil', 'attrs': 'wc' },
|
|
{ key: 'cos', 'attrs': 'wc' },
|
|
{ key: 'exp', 'attrs': 'wc' },
|
|
{ key: 'floor', 'attrs': 'wc' },
|
|
{ key: 'log', 'attrs': 'wc' },
|
|
{ key: 'max', 'attrs': 'wc' },
|
|
{ key: 'min', 'attrs': 'wc' },
|
|
{ key: 'pow', 'attrs': 'wc' },
|
|
{ key: 'random', 'attrs': 'wc' },
|
|
{ key: 'round', 'attrs': 'wc' },
|
|
{ key: 'sin', 'attrs': 'wc' },
|
|
{ key: 'sqrt', 'attrs': 'wc' },
|
|
{ key: 'tan', 'attrs': 'wc' },
|
|
],
|
|
noprops: [
|
|
{ key: 'length' },
|
|
],
|
|
},
|
|
{
|
|
obj: Date,
|
|
name: 'Date',
|
|
proto: 'Function.prototype',
|
|
class: 'Function',
|
|
props: [
|
|
{ key: 'length', attrs: '', value: 7 }, // E5 Section 15.9.4
|
|
{ key: 'prototype', 'attrs': '' },
|
|
{ key: 'parse', 'attrs': 'wc' },
|
|
{ key: 'UTC', 'attrs': 'wc' },
|
|
{ key: 'now', 'attrs': 'wc' },
|
|
],
|
|
noprops: [
|
|
],
|
|
},
|
|
{
|
|
obj: Date.prototype,
|
|
name: 'Date.prototype',
|
|
proto: 'Object.prototype',
|
|
class: 'Date', // E5 Section 15.9.5
|
|
props: [
|
|
{ key: 'constructor', 'attrs': 'wc' },
|
|
{ key: 'toString', 'attrs': 'wc' },
|
|
{ key: 'toDateString', 'attrs': 'wc' },
|
|
{ key: 'toTimeString', 'attrs': 'wc' },
|
|
{ key: 'toLocaleDateString', 'attrs': 'wc' },
|
|
{ key: 'toLocaleTimeString', 'attrs': 'wc' },
|
|
{ key: 'valueOf', 'attrs': 'wc' },
|
|
{ key: 'getTime', 'attrs': 'wc' },
|
|
{ key: 'getFullYear', 'attrs': 'wc' },
|
|
{ key: 'getUTCFullYear', 'attrs': 'wc' },
|
|
{ key: 'getMonth', 'attrs': 'wc' },
|
|
{ key: 'getUTCMonth', 'attrs': 'wc' },
|
|
{ key: 'getDate', 'attrs': 'wc' },
|
|
{ key: 'getUTCDate', 'attrs': 'wc' },
|
|
{ key: 'getDay', 'attrs': 'wc' },
|
|
{ key: 'getUTCDay', 'attrs': 'wc' },
|
|
{ key: 'getHours', 'attrs': 'wc' },
|
|
{ key: 'getUTCHours', 'attrs': 'wc' },
|
|
{ key: 'getMinutes', 'attrs': 'wc' },
|
|
{ key: 'getUTCMinutes', 'attrs': 'wc' },
|
|
{ key: 'getSeconds', 'attrs': 'wc' },
|
|
{ key: 'getUTCSeconds', 'attrs': 'wc' },
|
|
{ key: 'getMilliseconds', 'attrs': 'wc' },
|
|
{ key: 'getUTCMilliseconds', 'attrs': 'wc' },
|
|
{ key: 'getTimezoneOffset', 'attrs': 'wc' },
|
|
{ key: 'setTime', 'attrs': 'wc' },
|
|
{ key: 'setMilliseconds', 'attrs': 'wc' },
|
|
{ key: 'setUTCMilliseconds', 'attrs': 'wc' },
|
|
{ key: 'setSeconds', 'attrs': 'wc' },
|
|
{ key: 'setUTCSeconds', 'attrs': 'wc' },
|
|
{ key: 'setMinutes', 'attrs': 'wc' },
|
|
{ key: 'setUTCMinutes', 'attrs': 'wc' },
|
|
{ key: 'setHours', 'attrs': 'wc' },
|
|
{ key: 'setUTCHours', 'attrs': 'wc' },
|
|
{ key: 'setDate', 'attrs': 'wc' },
|
|
{ key: 'setUTCDate', 'attrs': 'wc' },
|
|
{ key: 'setMonth', 'attrs': 'wc' },
|
|
{ key: 'setUTCMonth', 'attrs': 'wc' },
|
|
{ key: 'setFullYear', 'attrs': 'wc' },
|
|
{ key: 'setUTCFullYear', 'attrs': 'wc' },
|
|
{ key: 'toUTCString', 'attrs': 'wc' },
|
|
{ key: 'toISOString', 'attrs': 'wc' },
|
|
{ key: 'toJSON', 'attrs': 'wc' },
|
|
],
|
|
noprops: [
|
|
{ key: 'length' },
|
|
],
|
|
},
|
|
{
|
|
obj: RegExp,
|
|
name: 'RegExp',
|
|
proto: 'Function.prototype',
|
|
class: 'Function',
|
|
props: [
|
|
{ key: 'length', attrs: '', value: 2 }, // E5 Section 15.10.5
|
|
{ key: 'prototype', 'attrs': '' },
|
|
],
|
|
noprops: [
|
|
],
|
|
},
|
|
{
|
|
obj: RegExp.prototype,
|
|
name: 'RegExp.prototype',
|
|
proto: 'Object.prototype',
|
|
class: 'RegExp', // E5 Section 15.10.6
|
|
props: [
|
|
{ key: 'constructor', 'attrs': 'wc' },
|
|
{ key: 'exec', 'attrs': 'wc' },
|
|
{ key: 'test', 'attrs': 'wc' },
|
|
{ key: 'toString', 'attrs': 'wc' },
|
|
],
|
|
noprops: [
|
|
{ key: 'length' },
|
|
],
|
|
},
|
|
{
|
|
obj: Error,
|
|
name: 'Error',
|
|
proto: 'Function.prototype',
|
|
class: 'Function',
|
|
props: [
|
|
{ key: 'length', 'attrs': '', value: 1 },
|
|
{ key: 'prototype', 'attrs': '' },
|
|
],
|
|
noprops: [
|
|
],
|
|
},
|
|
{
|
|
obj: Error.prototype,
|
|
name: 'Error.prototype',
|
|
proto: 'Object.prototype',
|
|
class: 'Error',
|
|
props: [
|
|
{ key: 'constructor', 'attrs': 'wc' },
|
|
{ key: 'name', 'attrs': 'wc' },
|
|
{ key: 'message', 'attrs': 'wc' },
|
|
{ key: 'toString', 'attrs': 'wc' },
|
|
],
|
|
noprops: [
|
|
{ key: 'length' },
|
|
],
|
|
},
|
|
{
|
|
obj: EvalError,
|
|
name: 'EvalError',
|
|
proto: 'Function.prototype',
|
|
class: 'Function',
|
|
props: [
|
|
{ key: 'length', 'attrs': '', value: 1 },
|
|
{ key: 'prototype', 'attrs': '' },
|
|
],
|
|
noprops: [
|
|
],
|
|
},
|
|
{
|
|
obj: EvalError.prototype,
|
|
name: 'EvalError.prototype',
|
|
proto: 'Error.prototype',
|
|
class: 'Error',
|
|
props: [
|
|
{ key: 'constructor', 'attrs': 'wc' },
|
|
{ key: 'name', 'attrs': 'wc' },
|
|
{ key: 'message', 'attrs': 'wc' },
|
|
],
|
|
noprops: [
|
|
{ key: 'length' },
|
|
],
|
|
},
|
|
{
|
|
obj: RangeError,
|
|
name: 'RangeError',
|
|
proto: 'Function.prototype',
|
|
class: 'Function',
|
|
props: [
|
|
{ key: 'length', 'attrs': '', value: 1 },
|
|
{ key: 'prototype', 'attrs': '' },
|
|
],
|
|
noprops: [
|
|
],
|
|
},
|
|
{
|
|
obj: RangeError.prototype,
|
|
name: 'RangeError.prototype',
|
|
proto: 'Error.prototype',
|
|
class: 'Error',
|
|
props: [
|
|
{ key: 'constructor', 'attrs': 'wc' },
|
|
{ key: 'name', 'attrs': 'wc' },
|
|
{ key: 'message', 'attrs': 'wc' },
|
|
],
|
|
noprops: [
|
|
{ key: 'length' },
|
|
],
|
|
},
|
|
{
|
|
obj: ReferenceError,
|
|
name: 'ReferenceError',
|
|
proto: 'Function.prototype',
|
|
class: 'Function',
|
|
props: [
|
|
{ key: 'length', 'attrs': '', value: 1 },
|
|
{ key: 'prototype', 'attrs': '' },
|
|
],
|
|
noprops: [
|
|
],
|
|
},
|
|
{
|
|
obj: ReferenceError.prototype,
|
|
name: 'ReferenceError.prototype',
|
|
proto: 'Error.prototype',
|
|
class: 'Error',
|
|
props: [
|
|
{ key: 'constructor', 'attrs': 'wc' },
|
|
{ key: 'name', 'attrs': 'wc' },
|
|
{ key: 'message', 'attrs': 'wc' },
|
|
],
|
|
noprops: [
|
|
{ key: 'length' },
|
|
],
|
|
},
|
|
{
|
|
obj: SyntaxError,
|
|
name: 'SyntaxError',
|
|
proto: 'Function.prototype',
|
|
class: 'Function',
|
|
props: [
|
|
{ key: 'length', 'attrs': '', value: 1 },
|
|
{ key: 'prototype', 'attrs': '' },
|
|
],
|
|
noprops: [
|
|
],
|
|
},
|
|
{
|
|
obj: SyntaxError.prototype,
|
|
name: 'SyntaxError.prototype',
|
|
proto: 'Error.prototype',
|
|
class: 'Error',
|
|
props: [
|
|
{ key: 'constructor', 'attrs': 'wc' },
|
|
{ key: 'name', 'attrs': 'wc' },
|
|
{ key: 'message', 'attrs': 'wc' },
|
|
],
|
|
noprops: [
|
|
{ key: 'length' },
|
|
],
|
|
},
|
|
{
|
|
obj: TypeError,
|
|
name: 'TypeError',
|
|
proto: 'Function.prototype',
|
|
class: 'Function',
|
|
props: [
|
|
{ key: 'length', 'attrs': '', value: 1 },
|
|
{ key: 'prototype', 'attrs': '' },
|
|
],
|
|
noprops: [
|
|
],
|
|
},
|
|
{
|
|
obj: TypeError.prototype,
|
|
name: 'TypeError.prototype',
|
|
proto: 'Error.prototype',
|
|
class: 'Error',
|
|
props: [
|
|
{ key: 'constructor', 'attrs': 'wc' },
|
|
{ key: 'name', 'attrs': 'wc' },
|
|
{ key: 'message', 'attrs': 'wc' },
|
|
],
|
|
noprops: [
|
|
{ key: 'length' },
|
|
],
|
|
},
|
|
{
|
|
obj: URIError,
|
|
name: 'URIError',
|
|
proto: 'Function.prototype',
|
|
class: 'Function',
|
|
props: [
|
|
{ key: 'length', 'attrs': '', value: 1 },
|
|
{ key: 'prototype', 'attrs': '' },
|
|
],
|
|
noprops: [
|
|
],
|
|
},
|
|
{
|
|
obj: URIError.prototype,
|
|
name: 'URIError.prototype',
|
|
proto: 'Error.prototype',
|
|
class: 'Error',
|
|
props: [
|
|
{ key: 'constructor', 'attrs': 'wc' },
|
|
{ key: 'name', 'attrs': 'wc' },
|
|
{ key: 'message', 'attrs': 'wc' },
|
|
],
|
|
noprops: [
|
|
{ key: 'length' },
|
|
],
|
|
},
|
|
{
|
|
obj: JSON,
|
|
name: 'JSON',
|
|
proto: 'Object.prototype',
|
|
class: 'JSON',
|
|
props: [
|
|
{ key: 'parse', attrs: 'wc' },
|
|
{ key: 'stringify', attrs: 'wc' },
|
|
],
|
|
noprops: [
|
|
{ key: 'length' },
|
|
],
|
|
},
|
|
];
|
|
|
|
// E5 Section 15.2.4.2
|
|
function getObjectClass(obj) {
|
|
// trickery to bind 'this' properly
|
|
var func = Object.prototype.toString.bind(obj);
|
|
|
|
var t = func();
|
|
var r = /^\[object\s(.*?)\]$/;
|
|
var m = r.exec(t);
|
|
if (!m) {
|
|
return 'none';
|
|
} else {
|
|
return m[1];
|
|
}
|
|
}
|
|
|
|
function getObjectByName(objName) {
|
|
var i;
|
|
for (i = 0; i < obj_data.length; i++) {
|
|
var obj = obj_data[i];
|
|
if (obj.name == objName) {
|
|
return obj;
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
|
|
function printObject(obj) {
|
|
var i;
|
|
var t = 'OBJECT:';
|
|
|
|
t += ' ';
|
|
t += '"' + obj.name + '"';
|
|
|
|
t += ' ';
|
|
if (Object.isSealed(obj.obj)) {
|
|
t += 'sealed';
|
|
} else {
|
|
t += '!sealed';
|
|
}
|
|
|
|
t += ' ';
|
|
if (Object.isFrozen(obj.obj)) {
|
|
t += 'frozen';
|
|
} else {
|
|
t += '!frozen';
|
|
}
|
|
|
|
t += ' ';
|
|
if (Object.isExtensible(obj.obj)) {
|
|
t += 'extensible';
|
|
} else {
|
|
t += '!extensible';
|
|
}
|
|
|
|
print (t);
|
|
|
|
var iproto = Object.getPrototypeOf(obj.obj);
|
|
var p_obj = null;
|
|
if (obj.proto) {
|
|
p_obj = getObjectByName(obj.proto);
|
|
}
|
|
t = 'PROTOTYPE: ';
|
|
if (p_obj) {
|
|
t += '"' + p_obj.name + '"';
|
|
} else {
|
|
t += 'null';
|
|
}
|
|
if ((iproto === null && p_obj === null) || (p_obj !== null && p_obj.obj === iproto)) {
|
|
// ok
|
|
} else {
|
|
t += ' INCORRECT';
|
|
}
|
|
|
|
print (t);
|
|
|
|
t = 'CLASS: ';
|
|
var cl = getObjectClass(obj.obj);
|
|
t += cl;
|
|
if (obj.class !== cl) {
|
|
t += ' INCORRECT, expected: ' + obj.class;
|
|
}
|
|
print (t);
|
|
|
|
for (i = 0; i < obj.props.length; i++) {
|
|
var p = obj.props[i];
|
|
var pd = Object.getOwnPropertyDescriptor(obj.obj, p.key);
|
|
var at = '';
|
|
|
|
t = 'PROPERTY: ';
|
|
t += '"' + p.key + '"';
|
|
|
|
if (!pd) {
|
|
t += ' ';
|
|
t += 'MISSING'
|
|
print(t);
|
|
continue;
|
|
}
|
|
|
|
t += ' ';
|
|
if (pd.writable) {
|
|
at += 'w';
|
|
t += 'writable';
|
|
} else {
|
|
t += '!writable';
|
|
}
|
|
|
|
t += ' ';
|
|
if (pd.enumerable) {
|
|
at += 'e';
|
|
t += 'enumerable';
|
|
} else {
|
|
t += '!enumerable';
|
|
}
|
|
|
|
t += ' ';
|
|
if (pd.configurable) {
|
|
at += 'c';
|
|
t += 'configurable';
|
|
} else {
|
|
t += '!configurable';
|
|
}
|
|
|
|
if (at != p.attrs) {
|
|
t += ' ';
|
|
t += 'ATTRIBUTES-INCORRECT';
|
|
}
|
|
|
|
if (p.value !== undefined) {
|
|
if (p.value !== pd.value) {
|
|
t += ' VALUE-INCORRECT';
|
|
}
|
|
}
|
|
|
|
print (t);
|
|
}
|
|
|
|
for (i = 0; i < obj.noprops.length; i++) {
|
|
var p = obj.noprops[i];
|
|
var pd = Object.getOwnPropertyDescriptor(obj.obj, p.key);
|
|
|
|
t = 'NOPROPERTY: ';
|
|
|
|
t += '"' + p.key + '"';
|
|
|
|
t += ' ';
|
|
if (pd) {
|
|
t += 'UNEXPECTEDLY-FOUND';
|
|
t += ' ';
|
|
t += JSON.stringify(pd);
|
|
} else {
|
|
// ok
|
|
}
|
|
|
|
print (t);
|
|
}
|
|
}
|
|
|
|
/*===
|
|
OBJECT: "Global" !sealed !frozen extensible
|
|
PROTOTYPE: "Object.prototype"
|
|
CLASS: global
|
|
PROPERTY: "NaN" !writable !enumerable !configurable
|
|
PROPERTY: "Infinity" !writable !enumerable !configurable
|
|
PROPERTY: "undefined" !writable !enumerable !configurable
|
|
PROPERTY: "eval" writable !enumerable configurable
|
|
PROPERTY: "parseInt" writable !enumerable configurable
|
|
PROPERTY: "parseFloat" writable !enumerable configurable
|
|
PROPERTY: "isNaN" writable !enumerable configurable
|
|
PROPERTY: "isFinite" writable !enumerable configurable
|
|
PROPERTY: "decodeURI" writable !enumerable configurable
|
|
PROPERTY: "decodeURIComponent" writable !enumerable configurable
|
|
PROPERTY: "encodeURI" writable !enumerable configurable
|
|
PROPERTY: "encodeURIComponent" writable !enumerable configurable
|
|
PROPERTY: "Object" writable !enumerable configurable
|
|
PROPERTY: "Function" writable !enumerable configurable
|
|
PROPERTY: "Array" writable !enumerable configurable
|
|
PROPERTY: "String" writable !enumerable configurable
|
|
PROPERTY: "Boolean" writable !enumerable configurable
|
|
PROPERTY: "Number" writable !enumerable configurable
|
|
PROPERTY: "Date" writable !enumerable configurable
|
|
PROPERTY: "RegExp" writable !enumerable configurable
|
|
PROPERTY: "Error" writable !enumerable configurable
|
|
PROPERTY: "EvalError" writable !enumerable configurable
|
|
PROPERTY: "RangeError" writable !enumerable configurable
|
|
PROPERTY: "ReferenceError" writable !enumerable configurable
|
|
PROPERTY: "SyntaxError" writable !enumerable configurable
|
|
PROPERTY: "TypeError" writable !enumerable configurable
|
|
PROPERTY: "URIError" writable !enumerable configurable
|
|
NOPROPERTY: "length"
|
|
|
|
OBJECT: "Object" !sealed !frozen extensible
|
|
PROTOTYPE: "Function.prototype"
|
|
CLASS: Function
|
|
PROPERTY: "length" !writable !enumerable !configurable
|
|
PROPERTY: "prototype" !writable !enumerable !configurable
|
|
PROPERTY: "getPrototypeOf" writable !enumerable configurable
|
|
PROPERTY: "getOwnPropertyDescriptor" writable !enumerable configurable
|
|
PROPERTY: "getOwnPropertyNames" writable !enumerable configurable
|
|
PROPERTY: "create" writable !enumerable configurable
|
|
PROPERTY: "defineProperty" writable !enumerable configurable
|
|
PROPERTY: "seal" writable !enumerable configurable
|
|
PROPERTY: "freeze" writable !enumerable configurable
|
|
PROPERTY: "preventExtensions" writable !enumerable configurable
|
|
PROPERTY: "isSealed" writable !enumerable configurable
|
|
PROPERTY: "isFrozen" writable !enumerable configurable
|
|
PROPERTY: "isExtensible" writable !enumerable configurable
|
|
PROPERTY: "keys" writable !enumerable configurable
|
|
|
|
OBJECT: "Object.prototype" !sealed !frozen extensible
|
|
PROTOTYPE: null
|
|
CLASS: Object
|
|
PROPERTY: "constructor" writable !enumerable configurable
|
|
PROPERTY: "toString" writable !enumerable configurable
|
|
PROPERTY: "toLocaleString" writable !enumerable configurable
|
|
PROPERTY: "valueOf" writable !enumerable configurable
|
|
PROPERTY: "hasOwnProperty" writable !enumerable configurable
|
|
PROPERTY: "isPrototypeOf" writable !enumerable configurable
|
|
PROPERTY: "propertyIsEnumerable" writable !enumerable configurable
|
|
NOPROPERTY: "length"
|
|
|
|
OBJECT: "Function" !sealed !frozen extensible
|
|
PROTOTYPE: "Function.prototype"
|
|
CLASS: Function
|
|
PROPERTY: "length" !writable !enumerable !configurable
|
|
PROPERTY: "prototype" !writable !enumerable !configurable
|
|
PROPERTY: "length" !writable !enumerable !configurable
|
|
|
|
OBJECT: "Function.prototype" !sealed !frozen extensible
|
|
PROTOTYPE: "Object.prototype"
|
|
CLASS: Function
|
|
PROPERTY: "length" !writable !enumerable !configurable
|
|
PROPERTY: "constructor" writable !enumerable configurable
|
|
PROPERTY: "toString" writable !enumerable configurable
|
|
PROPERTY: "apply" writable !enumerable configurable
|
|
PROPERTY: "call" writable !enumerable configurable
|
|
PROPERTY: "bind" writable !enumerable configurable
|
|
|
|
OBJECT: "Array" !sealed !frozen extensible
|
|
PROTOTYPE: "Function.prototype"
|
|
CLASS: Function
|
|
PROPERTY: "length" !writable !enumerable !configurable
|
|
PROPERTY: "prototype" !writable !enumerable !configurable
|
|
PROPERTY: "isArray" writable !enumerable configurable
|
|
|
|
OBJECT: "Array.prototype" !sealed !frozen extensible
|
|
PROTOTYPE: "Object.prototype"
|
|
CLASS: Array
|
|
PROPERTY: "length" writable !enumerable !configurable
|
|
PROPERTY: "constructor" writable !enumerable configurable
|
|
PROPERTY: "toString" writable !enumerable configurable
|
|
PROPERTY: "toLocaleString" writable !enumerable configurable
|
|
PROPERTY: "concat" writable !enumerable configurable
|
|
PROPERTY: "join" writable !enumerable configurable
|
|
PROPERTY: "pop" writable !enumerable configurable
|
|
PROPERTY: "push" writable !enumerable configurable
|
|
PROPERTY: "reverse" writable !enumerable configurable
|
|
PROPERTY: "shift" writable !enumerable configurable
|
|
PROPERTY: "slice" writable !enumerable configurable
|
|
PROPERTY: "sort" writable !enumerable configurable
|
|
PROPERTY: "splice" writable !enumerable configurable
|
|
PROPERTY: "unshift" writable !enumerable configurable
|
|
PROPERTY: "indexOf" writable !enumerable configurable
|
|
PROPERTY: "lastIndexOf" writable !enumerable configurable
|
|
PROPERTY: "every" writable !enumerable configurable
|
|
PROPERTY: "some" writable !enumerable configurable
|
|
PROPERTY: "forEach" writable !enumerable configurable
|
|
PROPERTY: "map" writable !enumerable configurable
|
|
PROPERTY: "filter" writable !enumerable configurable
|
|
PROPERTY: "reduce" writable !enumerable configurable
|
|
PROPERTY: "reduceRight" writable !enumerable configurable
|
|
|
|
OBJECT: "String" !sealed !frozen extensible
|
|
PROTOTYPE: "Function.prototype"
|
|
CLASS: Function
|
|
PROPERTY: "length" !writable !enumerable !configurable
|
|
PROPERTY: "prototype" !writable !enumerable !configurable
|
|
PROPERTY: "fromCharCode" writable !enumerable configurable
|
|
|
|
OBJECT: "String.prototype" !sealed !frozen extensible
|
|
PROTOTYPE: "Object.prototype"
|
|
CLASS: String
|
|
PROPERTY: "length" !writable !enumerable !configurable
|
|
PROPERTY: "constructor" writable !enumerable configurable
|
|
PROPERTY: "toString" writable !enumerable configurable
|
|
PROPERTY: "valueOf" writable !enumerable configurable
|
|
PROPERTY: "charAt" writable !enumerable configurable
|
|
PROPERTY: "charCodeAt" writable !enumerable configurable
|
|
PROPERTY: "concat" writable !enumerable configurable
|
|
PROPERTY: "indexOf" writable !enumerable configurable
|
|
PROPERTY: "lastIndexOf" writable !enumerable configurable
|
|
PROPERTY: "localeCompare" writable !enumerable configurable
|
|
PROPERTY: "match" writable !enumerable configurable
|
|
PROPERTY: "replace" writable !enumerable configurable
|
|
PROPERTY: "search" writable !enumerable configurable
|
|
PROPERTY: "slice" writable !enumerable configurable
|
|
PROPERTY: "split" writable !enumerable configurable
|
|
PROPERTY: "substring" writable !enumerable configurable
|
|
PROPERTY: "toLowerCase" writable !enumerable configurable
|
|
PROPERTY: "toLocaleLowerCase" writable !enumerable configurable
|
|
PROPERTY: "toUpperCase" writable !enumerable configurable
|
|
PROPERTY: "toLocaleUpperCase" writable !enumerable configurable
|
|
PROPERTY: "trim" writable !enumerable configurable
|
|
|
|
OBJECT: "Boolean" !sealed !frozen extensible
|
|
PROTOTYPE: "Function.prototype"
|
|
CLASS: Function
|
|
PROPERTY: "length" !writable !enumerable !configurable
|
|
PROPERTY: "prototype" !writable !enumerable !configurable
|
|
|
|
OBJECT: "Boolean.prototype" !sealed !frozen extensible
|
|
PROTOTYPE: "Object.prototype"
|
|
CLASS: Boolean
|
|
PROPERTY: "constructor" writable !enumerable configurable
|
|
PROPERTY: "toString" writable !enumerable configurable
|
|
PROPERTY: "valueOf" writable !enumerable configurable
|
|
NOPROPERTY: "length"
|
|
|
|
OBJECT: "Number" !sealed !frozen extensible
|
|
PROTOTYPE: "Function.prototype"
|
|
CLASS: Function
|
|
PROPERTY: "length" !writable !enumerable !configurable
|
|
PROPERTY: "prototype" !writable !enumerable !configurable
|
|
PROPERTY: "MAX_VALUE" !writable !enumerable !configurable
|
|
PROPERTY: "MIN_VALUE" !writable !enumerable !configurable
|
|
PROPERTY: "NaN" !writable !enumerable !configurable
|
|
PROPERTY: "NEGATIVE_INFINITY" !writable !enumerable !configurable
|
|
PROPERTY: "POSITIVE_INFINITY" !writable !enumerable !configurable
|
|
|
|
OBJECT: "Number.prototype" !sealed !frozen extensible
|
|
PROTOTYPE: "Object.prototype"
|
|
CLASS: Number
|
|
PROPERTY: "constructor" writable !enumerable configurable
|
|
PROPERTY: "toString" writable !enumerable configurable
|
|
PROPERTY: "toLocaleString" writable !enumerable configurable
|
|
PROPERTY: "valueOf" writable !enumerable configurable
|
|
PROPERTY: "toFixed" writable !enumerable configurable
|
|
PROPERTY: "toExponential" writable !enumerable configurable
|
|
PROPERTY: "toPrecision" writable !enumerable configurable
|
|
NOPROPERTY: "length"
|
|
|
|
OBJECT: "Math" !sealed !frozen extensible
|
|
PROTOTYPE: "Object.prototype"
|
|
CLASS: Math
|
|
PROPERTY: "E" !writable !enumerable !configurable
|
|
PROPERTY: "LN10" !writable !enumerable !configurable
|
|
PROPERTY: "LN2" !writable !enumerable !configurable
|
|
PROPERTY: "LOG2E" !writable !enumerable !configurable
|
|
PROPERTY: "LOG10E" !writable !enumerable !configurable
|
|
PROPERTY: "PI" !writable !enumerable !configurable
|
|
PROPERTY: "SQRT1_2" !writable !enumerable !configurable
|
|
PROPERTY: "SQRT2" !writable !enumerable !configurable
|
|
PROPERTY: "abs" writable !enumerable configurable
|
|
PROPERTY: "acos" writable !enumerable configurable
|
|
PROPERTY: "asin" writable !enumerable configurable
|
|
PROPERTY: "atan" writable !enumerable configurable
|
|
PROPERTY: "atan2" writable !enumerable configurable
|
|
PROPERTY: "ceil" writable !enumerable configurable
|
|
PROPERTY: "cos" writable !enumerable configurable
|
|
PROPERTY: "exp" writable !enumerable configurable
|
|
PROPERTY: "floor" writable !enumerable configurable
|
|
PROPERTY: "log" writable !enumerable configurable
|
|
PROPERTY: "max" writable !enumerable configurable
|
|
PROPERTY: "min" writable !enumerable configurable
|
|
PROPERTY: "pow" writable !enumerable configurable
|
|
PROPERTY: "random" writable !enumerable configurable
|
|
PROPERTY: "round" writable !enumerable configurable
|
|
PROPERTY: "sin" writable !enumerable configurable
|
|
PROPERTY: "sqrt" writable !enumerable configurable
|
|
PROPERTY: "tan" writable !enumerable configurable
|
|
NOPROPERTY: "length"
|
|
|
|
OBJECT: "Date" !sealed !frozen extensible
|
|
PROTOTYPE: "Function.prototype"
|
|
CLASS: Function
|
|
PROPERTY: "length" !writable !enumerable !configurable
|
|
PROPERTY: "prototype" !writable !enumerable !configurable
|
|
PROPERTY: "parse" writable !enumerable configurable
|
|
PROPERTY: "UTC" writable !enumerable configurable
|
|
PROPERTY: "now" writable !enumerable configurable
|
|
|
|
OBJECT: "Date.prototype" !sealed !frozen extensible
|
|
PROTOTYPE: "Object.prototype"
|
|
CLASS: Date
|
|
PROPERTY: "constructor" writable !enumerable configurable
|
|
PROPERTY: "toString" writable !enumerable configurable
|
|
PROPERTY: "toDateString" writable !enumerable configurable
|
|
PROPERTY: "toTimeString" writable !enumerable configurable
|
|
PROPERTY: "toLocaleDateString" writable !enumerable configurable
|
|
PROPERTY: "toLocaleTimeString" writable !enumerable configurable
|
|
PROPERTY: "valueOf" writable !enumerable configurable
|
|
PROPERTY: "getTime" writable !enumerable configurable
|
|
PROPERTY: "getFullYear" writable !enumerable configurable
|
|
PROPERTY: "getUTCFullYear" writable !enumerable configurable
|
|
PROPERTY: "getMonth" writable !enumerable configurable
|
|
PROPERTY: "getUTCMonth" writable !enumerable configurable
|
|
PROPERTY: "getDate" writable !enumerable configurable
|
|
PROPERTY: "getUTCDate" writable !enumerable configurable
|
|
PROPERTY: "getDay" writable !enumerable configurable
|
|
PROPERTY: "getUTCDay" writable !enumerable configurable
|
|
PROPERTY: "getHours" writable !enumerable configurable
|
|
PROPERTY: "getUTCHours" writable !enumerable configurable
|
|
PROPERTY: "getMinutes" writable !enumerable configurable
|
|
PROPERTY: "getUTCMinutes" writable !enumerable configurable
|
|
PROPERTY: "getSeconds" writable !enumerable configurable
|
|
PROPERTY: "getUTCSeconds" writable !enumerable configurable
|
|
PROPERTY: "getMilliseconds" writable !enumerable configurable
|
|
PROPERTY: "getUTCMilliseconds" writable !enumerable configurable
|
|
PROPERTY: "getTimezoneOffset" writable !enumerable configurable
|
|
PROPERTY: "setTime" writable !enumerable configurable
|
|
PROPERTY: "setMilliseconds" writable !enumerable configurable
|
|
PROPERTY: "setUTCMilliseconds" writable !enumerable configurable
|
|
PROPERTY: "setSeconds" writable !enumerable configurable
|
|
PROPERTY: "setUTCSeconds" writable !enumerable configurable
|
|
PROPERTY: "setMinutes" writable !enumerable configurable
|
|
PROPERTY: "setUTCMinutes" writable !enumerable configurable
|
|
PROPERTY: "setHours" writable !enumerable configurable
|
|
PROPERTY: "setUTCHours" writable !enumerable configurable
|
|
PROPERTY: "setDate" writable !enumerable configurable
|
|
PROPERTY: "setUTCDate" writable !enumerable configurable
|
|
PROPERTY: "setMonth" writable !enumerable configurable
|
|
PROPERTY: "setUTCMonth" writable !enumerable configurable
|
|
PROPERTY: "setFullYear" writable !enumerable configurable
|
|
PROPERTY: "setUTCFullYear" writable !enumerable configurable
|
|
PROPERTY: "toUTCString" writable !enumerable configurable
|
|
PROPERTY: "toISOString" writable !enumerable configurable
|
|
PROPERTY: "toJSON" writable !enumerable configurable
|
|
NOPROPERTY: "length"
|
|
|
|
OBJECT: "RegExp" !sealed !frozen extensible
|
|
PROTOTYPE: "Function.prototype"
|
|
CLASS: Function
|
|
PROPERTY: "length" !writable !enumerable !configurable
|
|
PROPERTY: "prototype" !writable !enumerable !configurable
|
|
|
|
OBJECT: "RegExp.prototype" !sealed !frozen extensible
|
|
PROTOTYPE: "Object.prototype"
|
|
CLASS: RegExp
|
|
PROPERTY: "constructor" writable !enumerable configurable
|
|
PROPERTY: "exec" writable !enumerable configurable
|
|
PROPERTY: "test" writable !enumerable configurable
|
|
PROPERTY: "toString" writable !enumerable configurable
|
|
NOPROPERTY: "length"
|
|
|
|
OBJECT: "Error" !sealed !frozen extensible
|
|
PROTOTYPE: "Function.prototype"
|
|
CLASS: Function
|
|
PROPERTY: "length" !writable !enumerable !configurable
|
|
PROPERTY: "prototype" !writable !enumerable !configurable
|
|
|
|
OBJECT: "Error.prototype" !sealed !frozen extensible
|
|
PROTOTYPE: "Object.prototype"
|
|
CLASS: Error
|
|
PROPERTY: "constructor" writable !enumerable configurable
|
|
PROPERTY: "name" writable !enumerable configurable
|
|
PROPERTY: "message" writable !enumerable configurable
|
|
PROPERTY: "toString" writable !enumerable configurable
|
|
NOPROPERTY: "length"
|
|
|
|
OBJECT: "EvalError" !sealed !frozen extensible
|
|
PROTOTYPE: "Function.prototype"
|
|
CLASS: Function
|
|
PROPERTY: "length" !writable !enumerable !configurable
|
|
PROPERTY: "prototype" !writable !enumerable !configurable
|
|
|
|
OBJECT: "EvalError.prototype" !sealed !frozen extensible
|
|
PROTOTYPE: "Error.prototype"
|
|
CLASS: Error
|
|
PROPERTY: "constructor" writable !enumerable configurable
|
|
PROPERTY: "name" writable !enumerable configurable
|
|
PROPERTY: "message" writable !enumerable configurable
|
|
NOPROPERTY: "length"
|
|
|
|
OBJECT: "RangeError" !sealed !frozen extensible
|
|
PROTOTYPE: "Function.prototype"
|
|
CLASS: Function
|
|
PROPERTY: "length" !writable !enumerable !configurable
|
|
PROPERTY: "prototype" !writable !enumerable !configurable
|
|
|
|
OBJECT: "RangeError.prototype" !sealed !frozen extensible
|
|
PROTOTYPE: "Error.prototype"
|
|
CLASS: Error
|
|
PROPERTY: "constructor" writable !enumerable configurable
|
|
PROPERTY: "name" writable !enumerable configurable
|
|
PROPERTY: "message" writable !enumerable configurable
|
|
NOPROPERTY: "length"
|
|
|
|
OBJECT: "ReferenceError" !sealed !frozen extensible
|
|
PROTOTYPE: "Function.prototype"
|
|
CLASS: Function
|
|
PROPERTY: "length" !writable !enumerable !configurable
|
|
PROPERTY: "prototype" !writable !enumerable !configurable
|
|
|
|
OBJECT: "ReferenceError.prototype" !sealed !frozen extensible
|
|
PROTOTYPE: "Error.prototype"
|
|
CLASS: Error
|
|
PROPERTY: "constructor" writable !enumerable configurable
|
|
PROPERTY: "name" writable !enumerable configurable
|
|
PROPERTY: "message" writable !enumerable configurable
|
|
NOPROPERTY: "length"
|
|
|
|
OBJECT: "SyntaxError" !sealed !frozen extensible
|
|
PROTOTYPE: "Function.prototype"
|
|
CLASS: Function
|
|
PROPERTY: "length" !writable !enumerable !configurable
|
|
PROPERTY: "prototype" !writable !enumerable !configurable
|
|
|
|
OBJECT: "SyntaxError.prototype" !sealed !frozen extensible
|
|
PROTOTYPE: "Error.prototype"
|
|
CLASS: Error
|
|
PROPERTY: "constructor" writable !enumerable configurable
|
|
PROPERTY: "name" writable !enumerable configurable
|
|
PROPERTY: "message" writable !enumerable configurable
|
|
NOPROPERTY: "length"
|
|
|
|
OBJECT: "TypeError" !sealed !frozen extensible
|
|
PROTOTYPE: "Function.prototype"
|
|
CLASS: Function
|
|
PROPERTY: "length" !writable !enumerable !configurable
|
|
PROPERTY: "prototype" !writable !enumerable !configurable
|
|
|
|
OBJECT: "TypeError.prototype" !sealed !frozen extensible
|
|
PROTOTYPE: "Error.prototype"
|
|
CLASS: Error
|
|
PROPERTY: "constructor" writable !enumerable configurable
|
|
PROPERTY: "name" writable !enumerable configurable
|
|
PROPERTY: "message" writable !enumerable configurable
|
|
NOPROPERTY: "length"
|
|
|
|
OBJECT: "URIError" !sealed !frozen extensible
|
|
PROTOTYPE: "Function.prototype"
|
|
CLASS: Function
|
|
PROPERTY: "length" !writable !enumerable !configurable
|
|
PROPERTY: "prototype" !writable !enumerable !configurable
|
|
|
|
OBJECT: "URIError.prototype" !sealed !frozen extensible
|
|
PROTOTYPE: "Error.prototype"
|
|
CLASS: Error
|
|
PROPERTY: "constructor" writable !enumerable configurable
|
|
PROPERTY: "name" writable !enumerable configurable
|
|
PROPERTY: "message" writable !enumerable configurable
|
|
NOPROPERTY: "length"
|
|
|
|
OBJECT: "JSON" !sealed !frozen extensible
|
|
PROTOTYPE: "Object.prototype"
|
|
CLASS: JSON
|
|
PROPERTY: "parse" writable !enumerable configurable
|
|
PROPERTY: "stringify" writable !enumerable configurable
|
|
NOPROPERTY: "length"
|
|
===*/
|
|
|
|
/* FIXME: the expected value needs to be verified against the specification */
|
|
|
|
function checkBuiltins() {
|
|
var i;
|
|
for (i = 0; i < obj_data.length; i++) {
|
|
var t = obj_data[i];
|
|
if (i > 0) {
|
|
print('');
|
|
};
|
|
printObject(t);
|
|
}
|
|
}
|
|
|
|
try {
|
|
checkBuiltins();
|
|
} catch (e) {
|
|
print(e.name, e.message);
|
|
}
|
|
|
|
|