Fixing retrieval of [[Class]] properties for built-in function objects, optimizing memory related to [[Class]] property.

- introduced ecma_object_get_class_name interface;
 - removed creation of [[Class]] internal property for types of objects that unambiguously determine the [[Class]] value.

Related issue: #112

JerryScript-DCO-1.0-Signed-off-by: Ruben Ayrapetyan r.ayrapetyan@samsung.com
This commit is contained in:
Ruben Ayrapetyan
2015-05-28 20:49:55 +03:00
parent bc7c28ce12
commit da7e9d9871
18 changed files with 284 additions and 92 deletions
@@ -19,7 +19,6 @@
/* The Object.prototype object (15.2.4) */
BUILTIN (ECMA_BUILTIN_ID_OBJECT_PROTOTYPE,
ECMA_OBJECT_TYPE_GENERAL,
ECMA_MAGIC_STRING_OBJECT_UL,
ECMA_BUILTIN_ID__COUNT /* no prototype */,
true,
true,
@@ -28,7 +27,6 @@ BUILTIN (ECMA_BUILTIN_ID_OBJECT_PROTOTYPE,
/* The Object object (15.2.1) */
BUILTIN (ECMA_BUILTIN_ID_OBJECT,
ECMA_OBJECT_TYPE_FUNCTION,
ECMA_MAGIC_STRING_OBJECT_UL,
ECMA_BUILTIN_ID_OBJECT_PROTOTYPE,
true,
true,
@@ -38,7 +36,6 @@ BUILTIN (ECMA_BUILTIN_ID_OBJECT,
/* The Array.prototype object (15.4.4) */
BUILTIN (ECMA_BUILTIN_ID_ARRAY_PROTOTYPE,
ECMA_OBJECT_TYPE_ARRAY,
ECMA_MAGIC_STRING_ARRAY_UL,
ECMA_BUILTIN_ID_OBJECT_PROTOTYPE,
true,
true,
@@ -47,7 +44,6 @@ BUILTIN (ECMA_BUILTIN_ID_ARRAY_PROTOTYPE,
/* The Array object (15.4.1) */
BUILTIN (ECMA_BUILTIN_ID_ARRAY,
ECMA_OBJECT_TYPE_FUNCTION,
ECMA_MAGIC_STRING_ARRAY_UL,
ECMA_BUILTIN_ID_FUNCTION_PROTOTYPE,
true,
true,
@@ -58,7 +54,6 @@ BUILTIN (ECMA_BUILTIN_ID_ARRAY,
/* The String.prototype object (15.5.4) */
BUILTIN (ECMA_BUILTIN_ID_STRING_PROTOTYPE,
ECMA_OBJECT_TYPE_GENERAL,
ECMA_MAGIC_STRING_STRING_UL,
ECMA_BUILTIN_ID_OBJECT_PROTOTYPE,
true,
true,
@@ -67,7 +62,6 @@ BUILTIN (ECMA_BUILTIN_ID_STRING_PROTOTYPE,
/* The String object (15.5.1) */
BUILTIN (ECMA_BUILTIN_ID_STRING,
ECMA_OBJECT_TYPE_FUNCTION,
ECMA_MAGIC_STRING_STRING_UL,
ECMA_BUILTIN_ID_FUNCTION_PROTOTYPE,
true,
true,
@@ -78,7 +72,6 @@ BUILTIN (ECMA_BUILTIN_ID_STRING,
/* The Boolean.prototype object (15.6.4) */
BUILTIN (ECMA_BUILTIN_ID_BOOLEAN_PROTOTYPE,
ECMA_OBJECT_TYPE_GENERAL,
ECMA_MAGIC_STRING_BOOLEAN_UL,
ECMA_BUILTIN_ID_OBJECT_PROTOTYPE,
true,
true,
@@ -87,7 +80,6 @@ BUILTIN (ECMA_BUILTIN_ID_BOOLEAN_PROTOTYPE,
/* The Boolean object (15.6.1) */
BUILTIN (ECMA_BUILTIN_ID_BOOLEAN,
ECMA_OBJECT_TYPE_FUNCTION,
ECMA_MAGIC_STRING_BOOLEAN_UL,
ECMA_BUILTIN_ID_FUNCTION_PROTOTYPE,
true,
true,
@@ -98,7 +90,6 @@ BUILTIN (ECMA_BUILTIN_ID_BOOLEAN,
/* The Number.prototype object (15.7.4) */
BUILTIN (ECMA_BUILTIN_ID_NUMBER_PROTOTYPE,
ECMA_OBJECT_TYPE_GENERAL,
ECMA_MAGIC_STRING_NUMBER_UL,
ECMA_BUILTIN_ID_OBJECT_PROTOTYPE,
true,
true,
@@ -107,7 +98,6 @@ BUILTIN (ECMA_BUILTIN_ID_NUMBER_PROTOTYPE,
/* The Number object (15.7.1) */
BUILTIN (ECMA_BUILTIN_ID_NUMBER,
ECMA_OBJECT_TYPE_FUNCTION,
ECMA_MAGIC_STRING_NUMBER_UL,
ECMA_BUILTIN_ID_FUNCTION_PROTOTYPE,
true,
true,
@@ -117,7 +107,6 @@ BUILTIN (ECMA_BUILTIN_ID_NUMBER,
/* The Function.prototype object (15.3.4) */
BUILTIN (ECMA_BUILTIN_ID_FUNCTION_PROTOTYPE,
ECMA_OBJECT_TYPE_FUNCTION,
ECMA_MAGIC_STRING_FUNCTION_UL,
ECMA_BUILTIN_ID_OBJECT_PROTOTYPE,
true,
true,
@@ -126,7 +115,6 @@ BUILTIN (ECMA_BUILTIN_ID_FUNCTION_PROTOTYPE,
/* The Function object (15.3.1) */
BUILTIN (ECMA_BUILTIN_ID_FUNCTION,
ECMA_OBJECT_TYPE_FUNCTION,
ECMA_MAGIC_STRING_FUNCTION_UL,
ECMA_BUILTIN_ID_FUNCTION_PROTOTYPE,
true,
true,
@@ -136,7 +124,6 @@ BUILTIN (ECMA_BUILTIN_ID_FUNCTION,
/* The Math object (15.8) */
BUILTIN (ECMA_BUILTIN_ID_MATH,
ECMA_OBJECT_TYPE_GENERAL,
ECMA_MAGIC_STRING_MATH_UL,
ECMA_BUILTIN_ID_OBJECT_PROTOTYPE,
true,
true,
@@ -147,7 +134,6 @@ BUILTIN (ECMA_BUILTIN_ID_MATH,
/* The Error.prototype object (15.11.4) */
BUILTIN (ECMA_BUILTIN_ID_ERROR_PROTOTYPE,
ECMA_OBJECT_TYPE_GENERAL,
ECMA_MAGIC_STRING_ERROR_UL,
ECMA_BUILTIN_ID_OBJECT_PROTOTYPE,
true,
true,
@@ -156,7 +142,6 @@ BUILTIN (ECMA_BUILTIN_ID_ERROR_PROTOTYPE,
/* The Error object (15.11.1) */
BUILTIN (ECMA_BUILTIN_ID_ERROR,
ECMA_OBJECT_TYPE_FUNCTION,
ECMA_MAGIC_STRING_ERROR_UL,
ECMA_BUILTIN_ID_ERROR_PROTOTYPE,
true,
true,
@@ -165,7 +150,6 @@ BUILTIN (ECMA_BUILTIN_ID_ERROR,
/* The EvalError.prototype object (15.11.6.1) */
BUILTIN (ECMA_BUILTIN_ID_EVAL_ERROR_PROTOTYPE,
ECMA_OBJECT_TYPE_GENERAL,
ECMA_MAGIC_STRING_ERROR_UL,
ECMA_BUILTIN_ID_ERROR_PROTOTYPE,
true,
true,
@@ -174,7 +158,6 @@ BUILTIN (ECMA_BUILTIN_ID_EVAL_ERROR_PROTOTYPE,
/* The EvalError object (15.11.6.1) */
BUILTIN (ECMA_BUILTIN_ID_EVAL_ERROR,
ECMA_OBJECT_TYPE_FUNCTION,
ECMA_MAGIC_STRING_ERROR_UL,
ECMA_BUILTIN_ID_EVAL_ERROR_PROTOTYPE,
true,
true,
@@ -183,7 +166,6 @@ BUILTIN (ECMA_BUILTIN_ID_EVAL_ERROR,
/* The RangeError.prototype object (15.11.6.2) */
BUILTIN (ECMA_BUILTIN_ID_RANGE_ERROR_PROTOTYPE,
ECMA_OBJECT_TYPE_GENERAL,
ECMA_MAGIC_STRING_ERROR_UL,
ECMA_BUILTIN_ID_ERROR_PROTOTYPE,
true,
true,
@@ -192,7 +174,6 @@ BUILTIN (ECMA_BUILTIN_ID_RANGE_ERROR_PROTOTYPE,
/* The RangeError object (15.11.6.2) */
BUILTIN (ECMA_BUILTIN_ID_RANGE_ERROR,
ECMA_OBJECT_TYPE_FUNCTION,
ECMA_MAGIC_STRING_ERROR_UL,
ECMA_BUILTIN_ID_RANGE_ERROR_PROTOTYPE,
true,
true,
@@ -201,7 +182,6 @@ BUILTIN (ECMA_BUILTIN_ID_RANGE_ERROR,
/* The ReferenceError.prototype object (15.11.6.3) */
BUILTIN (ECMA_BUILTIN_ID_REFERENCE_ERROR_PROTOTYPE,
ECMA_OBJECT_TYPE_GENERAL,
ECMA_MAGIC_STRING_ERROR_UL,
ECMA_BUILTIN_ID_ERROR_PROTOTYPE,
true,
true,
@@ -210,7 +190,6 @@ BUILTIN (ECMA_BUILTIN_ID_REFERENCE_ERROR_PROTOTYPE,
/* The ReferenceError object (15.11.6.3) */
BUILTIN (ECMA_BUILTIN_ID_REFERENCE_ERROR,
ECMA_OBJECT_TYPE_FUNCTION,
ECMA_MAGIC_STRING_ERROR_UL,
ECMA_BUILTIN_ID_REFERENCE_ERROR_PROTOTYPE,
true,
true,
@@ -219,7 +198,6 @@ BUILTIN (ECMA_BUILTIN_ID_REFERENCE_ERROR,
/* The SyntaxError.prototype object (15.11.6.4) */
BUILTIN (ECMA_BUILTIN_ID_SYNTAX_ERROR_PROTOTYPE,
ECMA_OBJECT_TYPE_GENERAL,
ECMA_MAGIC_STRING_ERROR_UL,
ECMA_BUILTIN_ID_ERROR_PROTOTYPE,
true,
true,
@@ -228,7 +206,6 @@ BUILTIN (ECMA_BUILTIN_ID_SYNTAX_ERROR_PROTOTYPE,
/* The SyntaxError object (15.11.6.4) */
BUILTIN (ECMA_BUILTIN_ID_SYNTAX_ERROR,
ECMA_OBJECT_TYPE_FUNCTION,
ECMA_MAGIC_STRING_ERROR_UL,
ECMA_BUILTIN_ID_SYNTAX_ERROR_PROTOTYPE,
true,
true,
@@ -237,7 +214,6 @@ BUILTIN (ECMA_BUILTIN_ID_SYNTAX_ERROR,
/* The TypeError.prototype object (15.11.6.5) */
BUILTIN (ECMA_BUILTIN_ID_TYPE_ERROR_PROTOTYPE,
ECMA_OBJECT_TYPE_GENERAL,
ECMA_MAGIC_STRING_ERROR_UL,
ECMA_BUILTIN_ID_ERROR_PROTOTYPE,
true,
true,
@@ -246,7 +222,6 @@ BUILTIN (ECMA_BUILTIN_ID_TYPE_ERROR_PROTOTYPE,
/* The TypeError object (15.11.6.5) */
BUILTIN (ECMA_BUILTIN_ID_TYPE_ERROR,
ECMA_OBJECT_TYPE_FUNCTION,
ECMA_MAGIC_STRING_ERROR_UL,
ECMA_BUILTIN_ID_TYPE_ERROR_PROTOTYPE,
true,
true,
@@ -255,7 +230,6 @@ BUILTIN (ECMA_BUILTIN_ID_TYPE_ERROR,
/* The URIError.prototype object (15.11.6.6) */
BUILTIN (ECMA_BUILTIN_ID_URI_ERROR_PROTOTYPE,
ECMA_OBJECT_TYPE_GENERAL,
ECMA_MAGIC_STRING_ERROR_UL,
ECMA_BUILTIN_ID_ERROR_PROTOTYPE,
true,
true,
@@ -264,7 +238,6 @@ BUILTIN (ECMA_BUILTIN_ID_URI_ERROR_PROTOTYPE,
/* The URIError object (15.11.6.6) */
BUILTIN (ECMA_BUILTIN_ID_URI_ERROR,
ECMA_OBJECT_TYPE_FUNCTION,
ECMA_MAGIC_STRING_ERROR_UL,
ECMA_BUILTIN_ID_URI_ERROR_PROTOTYPE,
true,
true,
@@ -274,7 +247,6 @@ BUILTIN (ECMA_BUILTIN_ID_URI_ERROR,
/**< The [[ThrowTypeError]] object (13.2.3) */
BUILTIN (ECMA_BUILTIN_ID_TYPE_ERROR_THROWER,
ECMA_OBJECT_TYPE_FUNCTION,
ECMA_MAGIC_STRING_FUNCTION_UL,
ECMA_BUILTIN_ID_FUNCTION_PROTOTYPE,
false,
true,
@@ -284,7 +256,6 @@ BUILTIN (ECMA_BUILTIN_ID_TYPE_ERROR_THROWER,
/* The CompactProfileError object defined in the Compact Profile */
BUILTIN (ECMA_BUILTIN_ID_COMPACT_PROFILE_ERROR,
ECMA_OBJECT_TYPE_FUNCTION,
ECMA_MAGIC_STRING_COMPACT_PROFILE_ERROR_UL,
ECMA_BUILTIN_ID_OBJECT_PROTOTYPE,
false,
true,
@@ -294,7 +265,6 @@ BUILTIN (ECMA_BUILTIN_ID_COMPACT_PROFILE_ERROR,
/* The Global object (15.1) */
BUILTIN (ECMA_BUILTIN_ID_GLOBAL,
ECMA_OBJECT_TYPE_GENERAL,
ECMA_MAGIC_STRING_OBJECT_UL,
ECMA_BUILTIN_ID__COUNT /* no prototype */,
true,
true,
@@ -303,7 +273,6 @@ BUILTIN (ECMA_BUILTIN_ID_GLOBAL,
/* Jerry's dynamic extension proxy object */
BUILTIN (ECMA_BUILTIN_ID_JERRY,
ECMA_OBJECT_TYPE_GENERAL,
ECMA_MAGIC_STRING_OBJECT_UL,
ECMA_BUILTIN_ID__COUNT, /* no prototype */
false,
false,