Rework resolving references and namespace creation in modules (#4695)

- Properties of namespace objects are ordered in lexical order
- The namespace object is created and imports are bound during linking phase
- Namespace imports are changed to read-only
- Reduced memory consumption

JerryScript-DCO-1.0-Signed-off-by: Zoltan Herczeg zherczeg.u-szeged@partner.samsung.com
This commit is contained in:
Zoltan Herczeg
2021-07-06 14:50:19 +02:00
committed by GitHub
parent ccc152594a
commit d1204ab1c9
14 changed files with 882 additions and 476 deletions
+5 -8
View File
@@ -865,17 +865,14 @@ jerry_module_get_namespace (const jerry_value_t module_val) /**< module */
return jerry_throw (ecma_raise_type_error (ECMA_ERR_MSG (ecma_error_not_module_p)));
}
if (module_p->namespace_object_p == NULL)
if (module_p->header.u.cls.u1.module_state < JERRY_MODULE_STATE_LINKED
|| module_p->header.u.cls.u1.module_state > JERRY_MODULE_STATE_EVALUATED)
{
if (module_p->header.u.cls.u1.module_state < JERRY_MODULE_STATE_LINKED
|| module_p->header.u.cls.u1.module_state > JERRY_MODULE_STATE_EVALUATED)
{
return jerry_throw (ecma_raise_range_error (ECMA_ERR_MSG ("Namespace object cannot be created")));
}
ecma_module_create_namespace_object (module_p);
return jerry_throw (ecma_raise_range_error (ECMA_ERR_MSG ("Namespace object is not available")));
}
JERRY_ASSERT (module_p->namespace_object_p != NULL);
ecma_ref_object (module_p->namespace_object_p);
return ecma_make_object_value (module_p->namespace_object_p);
#else /* !JERRY_MODULE_SYSTEM */