ngx_str_t *value, file;
nxt_int_t rc;
nxt_str_t text, ext;
+ njs_vm_opt_t options;
nxt_lvlhsh_t externals;
ngx_file_info_t fi;
- njs_vm_shared_t *shared;
ngx_pool_cleanup_t *cln;
nxt_mem_cache_pool_t *mcp;
cln->handler = ngx_http_js_cleanup_mem_cache_pool;
cln->data = mcp;
- shared = NULL;
-
nxt_lvlhsh_init(&externals);
if (njs_vm_external_add(&externals, mcp, 0, ngx_http_js_externals,
return NGX_CONF_ERROR;
}
- jlcf->vm = njs_vm_create(mcp, &shared, &externals);
+ options.mcp = mcp;
+ options.shared = NULL;
+ options.externals = &externals;
+
+ jlcf->vm = njs_vm_create(&options);
if (jlcf->vm == NULL) {
ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, "failed to create JS VM");
return NGX_CONF_ERROR;
ngx_str_t *value, file;
nxt_int_t rc;
nxt_str_t text, ext;
+ njs_vm_opt_t options;
nxt_lvlhsh_t externals;
ngx_file_info_t fi;
- njs_vm_shared_t *shared;
ngx_pool_cleanup_t *cln;
nxt_mem_cache_pool_t *mcp;
cln->handler = ngx_stream_js_cleanup_mem_cache_pool;
cln->data = mcp;
- shared = NULL;
-
nxt_lvlhsh_init(&externals);
if (njs_vm_external_add(&externals, mcp, 0, ngx_stream_js_externals,
return NGX_CONF_ERROR;
}
- jscf->vm = njs_vm_create(mcp, &shared, &externals);
+ options.mcp = mcp;
+ options.shared = NULL;
+ options.externals = &externals;
+
+ jscf->vm = njs_vm_create(&options);
if (jscf->vm == NULL) {
ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, "failed to create JS VM");
return NGX_CONF_ERROR;
njs_vm_t *
-njs_vm_create(nxt_mem_cache_pool_t *mcp, njs_vm_shared_t **shared,
- nxt_lvlhsh_t *externals)
+njs_vm_create(njs_vm_opt_t *options)
{
njs_vm_t *vm;
nxt_int_t ret;
+ nxt_mem_cache_pool_t *mcp;
njs_regexp_pattern_t *pattern;
+ mcp = options->mcp;
+
if (mcp == NULL) {
mcp = nxt_mem_cache_pool_create(&njs_vm_mem_cache_pool_proto, NULL,
NULL, 2 * nxt_pagesize(), 128, 512, 16);
return NULL;
}
- if (shared != NULL && *shared != NULL) {
- vm->shared = *shared;
+ if (options->shared != NULL) {
+ vm->shared = options->shared;
} else {
vm->shared = nxt_mem_cache_zalloc(mcp, sizeof(njs_vm_shared_t));
return NULL;
}
- if (shared != NULL) {
- *shared = vm->shared;
- }
+ options->shared = vm->shared;
nxt_lvlhsh_init(&vm->shared->keywords_hash);
nxt_lvlhsh_init(&vm->values_hash);
- if (externals != NULL) {
- vm->externals_hash = *externals;
+ if (options->externals != NULL) {
+ vm->externals_hash = *options->externals;
}
vm->trace.level = NXT_LEVEL_TRACE;
uintptr_t data;
};
+typedef struct {
+ nxt_lvlhsh_t *externals;
+ njs_vm_shared_t *shared;
+ nxt_mem_cache_pool_t *mcp;
+} njs_vm_opt_t;
+
#define NJS_OK NXT_OK
#define NJS_ERROR NXT_ERROR
NXT_EXPORT nxt_int_t njs_vm_external(njs_vm_t *vm, njs_opaque_value_t *object,
nxt_str_t *property, njs_opaque_value_t *value);
-NXT_EXPORT njs_vm_t *njs_vm_create(nxt_mem_cache_pool_t *mcp,
- njs_vm_shared_t **shared, nxt_lvlhsh_t *externals);
+NXT_EXPORT njs_vm_t *njs_vm_create(njs_vm_opt_t *options);
NXT_EXPORT void njs_vm_destroy(njs_vm_t *vm);
NXT_EXPORT nxt_int_t njs_vm_compile(njs_vm_t *vm, u_char **start, u_char *end);
nxt_str_t s;
nxt_uint_t i;
nxt_bool_t success;
+ njs_vm_opt_t options;
nxt_lvlhsh_t externals;
- njs_vm_shared_t *shared;
njs_unit_test_req r;
nxt_mem_cache_pool_t *mcp;
(void) putenv((char *) "TZ=Pacific/Chatham");
tzset();
- shared = NULL;
-
mcp = nxt_mem_cache_pool_create(&njs_mem_cache_pool_proto, NULL, NULL,
2 * nxt_pagesize(), 128, 512, 16);
if (nxt_slow_path(mcp == NULL)) {
(int) njs_test[i].script.length, njs_test[i].script.start);
fflush(stdout);
- vm = njs_vm_create(mcp, &shared, &externals);
+ options.mcp = mcp;
+ options.shared = NULL;
+ options.externals = &externals;
+
+ vm = njs_vm_create(&options);
if (vm == NULL) {
return NXT_ERROR;
}
nxt_uint_t i;
nxt_bool_t success;
nxt_lvlhsh_t externals;
+ njs_vm_opt_t options;
struct rusage usage;
- njs_vm_shared_t *shared;
njs_unit_test_req r;
nxt_mem_cache_pool_t *mcp;
- shared = NULL;
-
mcp = nxt_mem_cache_pool_create(&njs_mem_cache_pool_proto, NULL, NULL,
2 * nxt_pagesize(), 128, 512, 16);
if (nxt_slow_path(mcp == NULL)) {
return NXT_ERROR;
}
- vm = njs_vm_create(mcp, &shared, &externals);
+ options.mcp = mcp;
+ options.shared = NULL;
+ options.externals = &externals;
+
+ vm = njs_vm_create(&options);
if (vm == NULL) {
return NXT_ERROR;
}