Skip to content

Commit 72b51ac

Browse files
LaszloLangodbatyai
authored andcommitted
Reduce the memory footprint of 'ecma_instantiate_builtin' (#2218)
JerryScript-DCO-1.0-Signed-off-by: László Langó [email protected]
1 parent fbc53f7 commit 72b51ac

File tree

1 file changed

+38
-23
lines changed

1 file changed

+38
-23
lines changed

jerry-core/ecma/builtin-objects/ecma-builtins.c

Lines changed: 38 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -289,6 +289,40 @@ ecma_builtin_init_object (ecma_builtin_id_t obj_builtin_id, /**< built-in ID */
289289
return obj_p;
290290
} /* ecma_builtin_init_object */
291291

292+
293+
/**
294+
* Helper function for 'ecma_instantiate_builtin'
295+
*/
296+
static void
297+
ecma_instantiate_builtin_helper (ecma_builtin_id_t builtin_id, /**< built-in id */
298+
ecma_object_type_t object_type, /**< object type */
299+
ecma_builtin_id_t object_prototype_builtin_id, /**< built-in id of prototype */
300+
bool is_extensible) /**< value of object's [[Extensible]] property */
301+
{
302+
JERRY_ASSERT (JERRY_CONTEXT (ecma_builtin_objects)[builtin_id] == NULL);
303+
304+
ecma_object_t *prototype_obj_p;
305+
if (object_prototype_builtin_id == ECMA_BUILTIN_ID__COUNT)
306+
{
307+
prototype_obj_p = NULL;
308+
}
309+
else
310+
{
311+
if (JERRY_CONTEXT (ecma_builtin_objects)[object_prototype_builtin_id] == NULL)
312+
{
313+
ecma_instantiate_builtin (object_prototype_builtin_id);
314+
}
315+
prototype_obj_p = JERRY_CONTEXT (ecma_builtin_objects)[object_prototype_builtin_id];
316+
JERRY_ASSERT (prototype_obj_p != NULL);
317+
}
318+
319+
ecma_object_t *builtin_obj_p = ecma_builtin_init_object (builtin_id,
320+
prototype_obj_p,
321+
object_type,
322+
is_extensible);
323+
JERRY_CONTEXT (ecma_builtin_objects)[builtin_id] = builtin_obj_p;
324+
} /* ecma_instantiate_builtin_helper */
325+
292326
/**
293327
* Instantiate specified ECMA built-in object
294328
*/
@@ -304,29 +338,10 @@ ecma_instantiate_builtin (ecma_builtin_id_t id) /**< built-in id */
304338
lowercase_name) \
305339
case builtin_id: \
306340
{ \
307-
JERRY_ASSERT (JERRY_CONTEXT (ecma_builtin_objects)[builtin_id] == NULL); \
308-
\
309-
ecma_object_t *prototype_obj_p; \
310-
if (object_prototype_builtin_id == ECMA_BUILTIN_ID__COUNT) \
311-
{ \
312-
prototype_obj_p = NULL; \
313-
} \
314-
else \
315-
{ \
316-
if (JERRY_CONTEXT (ecma_builtin_objects)[object_prototype_builtin_id] == NULL) \
317-
{ \
318-
ecma_instantiate_builtin (object_prototype_builtin_id); \
319-
} \
320-
prototype_obj_p = JERRY_CONTEXT (ecma_builtin_objects)[object_prototype_builtin_id]; \
321-
JERRY_ASSERT (prototype_obj_p != NULL); \
322-
} \
323-
\
324-
ecma_object_t *builtin_obj_p = ecma_builtin_init_object (builtin_id, \
325-
prototype_obj_p, \
326-
object_type, \
327-
is_extensible); \
328-
JERRY_CONTEXT (ecma_builtin_objects)[builtin_id] = builtin_obj_p; \
329-
\
341+
ecma_instantiate_builtin_helper (builtin_id, \
342+
object_type, \
343+
object_prototype_builtin_id, \
344+
is_extensible); \
330345
break; \
331346
}
332347
#include "ecma-builtins.inc.h"

0 commit comments

Comments
 (0)