The new API does not require for njs_mod_t structure to be disclosed.
return NJS_ERROR;
}
- module = njs_module_add(vm, &njs_str_value("crypto"));
+ module = njs_vm_add_module(vm, &njs_str_value("crypto"),
+ njs_value_arg(&value));
if (njs_slow_path(module == NULL)) {
return NJS_ERROR;
}
- njs_value_assign(&module->value, &value);
- module->function.native = 1;
-
return NJS_OK;
}
return NJS_ERROR;
}
- module = njs_module_add(vm, &njs_str_value("fs"));
+ module = njs_vm_add_module(vm, &njs_str_value("fs"), njs_value_arg(&value));
if (njs_slow_path(module == NULL)) {
return NJS_ERROR;
}
- njs_value_assign(&module->value, &value);
- module->function.native = 1;
-
return NJS_OK;
}
return NJS_ERROR;
}
- module = njs_module_add(vm, &njs_str_value("querystring"));
+ module = njs_vm_add_module(vm, &njs_str_value("querystring"),
+ njs_value_arg(&value));
if (njs_slow_path(module == NULL)) {
return NJS_ERROR;
}
- njs_value_assign(&module->value, &value);
- module->function.native = 1;
-
return NJS_OK;
}
NJS_EXPORT void njs_vm_destroy(njs_vm_t *vm);
NJS_EXPORT njs_int_t njs_vm_compile(njs_vm_t *vm, u_char **start, u_char *end);
+NJS_EXPORT njs_mod_t *njs_vm_add_module(njs_vm_t *vm, njs_str_t *name,
+ njs_value_t *value);
NJS_EXPORT njs_mod_t *njs_vm_compile_module(njs_vm_t *vm, njs_str_t *name,
u_char **start, u_char *end);
NJS_EXPORT njs_vm_t *njs_vm_clone(njs_vm_t *vm, njs_external_ptr_t external);
return NJS_ERROR;
}
- module = njs_module_add(vm, &njs_str_value("buffer"));
+ module = njs_vm_add_module(vm, &njs_str_value("buffer"),
+ njs_value_arg(&value));
if (njs_slow_path(module == NULL)) {
return NJS_ERROR;
}
- njs_value_assign(&module->value, &value);
- module->function.native = 1;
-
return NJS_OK;
}
njs_mod_t *
-njs_module_add(njs_vm_t *vm, njs_str_t *name)
+njs_module_add(njs_vm_t *vm, njs_str_t *name, njs_value_t *value)
{
njs_int_t ret;
njs_mod_t *module;
lhq.proto = &njs_modules_hash_proto;
ret = njs_lvlhsh_insert(&vm->shared->modules_hash, &lhq);
- if (njs_fast_path(ret == NJS_OK)) {
- return module;
+ if (njs_slow_path(ret != NJS_OK)) {
+ njs_internal_error(vm, "lvlhsh insert failed");
+ return NULL;
}
- njs_mp_free(vm->mem_pool, module->name.start);
- njs_mp_free(vm->mem_pool, module);
-
- njs_internal_error(vm, "lvlhsh insert failed");
+ if (value != NULL) {
+ njs_value_assign(&module->value, value);
+ module->function.native = 1;
+ }
- return NULL;
+ return module;
}
};
-njs_mod_t *njs_module_add(njs_vm_t *vm, njs_str_t *name);
+njs_mod_t *njs_module_add(njs_vm_t *vm, njs_str_t *name, njs_value_t *value);
njs_mod_t *njs_module_find(njs_vm_t *vm, njs_str_t *name,
njs_bool_t shared);
njs_mod_t *njs_parser_module(njs_parser_t *parser, njs_str_t *name);
}
+njs_mod_t *
+njs_vm_add_module(njs_vm_t *vm, njs_str_t *name, njs_value_t *value)
+{
+ return njs_module_add(vm, name, value);
+}
+
+
njs_mod_t *
njs_vm_compile_module(njs_vm_t *vm, njs_str_t *name, u_char **start,
u_char *end)
return module;
}
- module = njs_module_add(vm, name);
+ module = njs_module_add(vm, name, NULL);
if (njs_slow_path(module == NULL)) {
return NULL;
}