/** * Create an object with specified prototype object * (or NULL prototype if there is not prototype for the object) * and value of 'Extensible' attribute. * * Reference counter's value will be set to one. * * @return pointer to the object's descriptor */ ecma_object_t * ecma_create_object (ecma_object_t *prototype_object_p, /**< pointer to prototybe of the object (or NULL) */ bool is_extensible, /**< value of extensible attribute */ ecma_object_type_t type) /**< object type */ { ecma_object_t *new_object_p = ecma_alloc_object (); uint16_t type_flags = (uint16_t) type; if (is_extensible) { type_flags = (uint16_t) (type_flags | ECMA_OBJECT_FLAG_EXTENSIBLE); } new_object_p->type_flags_refs = type_flags; ecma_init_gc_info (new_object_p); new_object_p->property_list_or_bound_object_cp = JMEM_CP_NULL; ECMA_SET_POINTER (new_object_p->prototype_or_outer_reference_cp, prototype_object_p); return new_object_p; } /* ecma_create_object */
/** * Create a object lexical environment with specified outer lexical environment * (or NULL if the environment is not nested), binding object and provideThis flag. * * See also: ECMA-262 v5, 10.2.1.2 * * Reference counter's value will be set to one. * * @return pointer to the descriptor of lexical environment */ ecma_object_t * ecma_create_object_lex_env (ecma_object_t *outer_lexical_environment_p, /**< outer lexical environment */ ecma_object_t *binding_obj_p, /**< binding object */ bool provide_this) /**< provideThis flag */ { JERRY_ASSERT (binding_obj_p != NULL && !ecma_is_lexical_environment (binding_obj_p)); ecma_object_t *new_lexical_environment_p = ecma_alloc_object (); uint16_t type; if (provide_this) { type = ECMA_OBJECT_FLAG_BUILT_IN_OR_LEXICAL_ENV | ECMA_LEXICAL_ENVIRONMENT_THIS_OBJECT_BOUND; } else { type = ECMA_OBJECT_FLAG_BUILT_IN_OR_LEXICAL_ENV | ECMA_LEXICAL_ENVIRONMENT_OBJECT_BOUND; } new_lexical_environment_p->type_flags_refs = type; ecma_init_gc_info (new_lexical_environment_p); ECMA_SET_NON_NULL_POINTER (new_lexical_environment_p->property_list_or_bound_object_cp, binding_obj_p); ECMA_SET_POINTER (new_lexical_environment_p->prototype_or_outer_reference_cp, outer_lexical_environment_p); return new_lexical_environment_p; } /* ecma_create_object_lex_env */
/** * Create an object with specified prototype object * (or NULL prototype if there is not prototype for the object) * and value of 'Extensible' attribute. * * Reference counter's value will be set to one. * * @return pointer to the object's descriptor */ ecma_object_t * ecma_create_object (ecma_object_t *prototype_object_p, /**< pointer to prototybe of the object (or NULL) */ size_t ext_object_size, /**< size of extended objects */ ecma_object_type_t type) /**< object type */ { ecma_object_t *new_object_p; if (ext_object_size > 0) { new_object_p = (ecma_object_t *) ecma_alloc_extended_object (ext_object_size); } else { new_object_p = ecma_alloc_object (); } new_object_p->type_flags_refs = (uint16_t) (type | ECMA_OBJECT_FLAG_EXTENSIBLE); ecma_init_gc_info (new_object_p); new_object_p->property_list_or_bound_object_cp = JMEM_CP_NULL; ECMA_SET_POINTER (new_object_p->prototype_or_outer_reference_cp, prototype_object_p); return new_object_p; } /* ecma_create_object */
/** * Create a declarative lexical environment with specified outer lexical environment * (or NULL if the environment is not nested). * * See also: ECMA-262 v5, 10.2.1.1 * * Reference counter's value will be set to one. * * @return pointer to the descriptor of lexical environment */ ecma_object_t * ecma_create_decl_lex_env (ecma_object_t *outer_lexical_environment_p) /**< outer lexical environment */ { ecma_object_t *new_lexical_environment_p = ecma_alloc_object (); uint16_t type = ECMA_OBJECT_FLAG_BUILT_IN_OR_LEXICAL_ENV | ECMA_LEXICAL_ENVIRONMENT_DECLARATIVE; new_lexical_environment_p->type_flags_refs = type; ecma_init_gc_info (new_lexical_environment_p); new_lexical_environment_p->property_list_or_bound_object_cp = JMEM_CP_NULL; ECMA_SET_POINTER (new_lexical_environment_p->prototype_or_outer_reference_cp, outer_lexical_environment_p); return new_lexical_environment_p; } /* ecma_create_decl_lex_env */