Welcome! Log In Create A New Profile

Advanced

[njs] Simplified typeof operation.

Dmitry Volyntsev
April 19, 2019 09:06AM
details: https://hg.nginx.org/njs/rev/a6c82ddff460
branches:
changeset: 911:a6c82ddff460
user: hongzhidao <hongzhidao@gmail.com>
date: Fri Apr 19 20:03:49 2019 +0800
description:
Simplified typeof operation.

diffstat:

njs/njs_generator.c | 23 +++++++++++++++++------
njs/njs_variable.c | 2 +-
njs/njs_vm.c | 7 +------
3 files changed, 19 insertions(+), 13 deletions(-)

diffs (111 lines):

diff -r 6d7a4fb82b25 -r a6c82ddff460 njs/njs_generator.c
--- a/njs/njs_generator.c Thu Apr 18 20:51:53 2019 +0300
+++ b/njs/njs_generator.c Fri Apr 19 20:03:49 2019 +0800
@@ -575,7 +575,7 @@ njs_generate_builtin_object(njs_vm_t *vm
njs_vmcode_object_copy_t *copy;

index = njs_variable_index(vm, node);
- if (nxt_slow_path(index == NJS_INDEX_ERROR)) {
+ if (nxt_slow_path(index == NJS_INDEX_NONE)) {
return NXT_ERROR;
}

@@ -600,7 +600,7 @@ njs_generate_variable(njs_vm_t *vm, njs_
njs_index_t index;

index = njs_variable_index(vm, node);
- if (nxt_slow_path(index == NJS_INDEX_ERROR)) {
+ if (nxt_slow_path(index == NJS_INDEX_NONE)) {
return NXT_ERROR;
}

@@ -622,7 +622,7 @@ njs_generate_var_statement(njs_vm_t *vm,
lvalue = node->left;

index = njs_variable_index(vm, lvalue);
- if (nxt_slow_path(index == NJS_INDEX_ERROR)) {
+ if (nxt_slow_path(index == NJS_INDEX_NONE)) {
return NXT_ERROR;
}

@@ -2128,6 +2128,17 @@ njs_generate_typeof_operation(njs_vm_t *
if (expr->token == NJS_TOKEN_NAME) {
expr->index = njs_variable_typeof(vm, expr);

+ if (expr->u.reference.variable) {
+ ret = njs_generate_variable(vm, generator, expr);
+ if (nxt_slow_path(ret != NXT_OK)) {
+ return NXT_ERROR;
+ }
+
+ } else {
+ expr->index = njs_value_index(vm, &njs_value_undefined,
+ generator->runtime);
+ }
+
} else {
ret = njs_generator(vm, generator, node->left);
if (nxt_slow_path(ret != NXT_OK)) {
@@ -2794,7 +2805,7 @@ njs_generate_try_statement(njs_vm_t *vm,
/* A "try/catch" case. */

catch_index = njs_variable_index(vm, node->left);
- if (nxt_slow_path(catch_index == NJS_INDEX_ERROR)) {
+ if (nxt_slow_path(catch_index == NJS_INDEX_NONE)) {
return NXT_ERROR;
}

@@ -2853,7 +2864,7 @@ njs_generate_try_statement(njs_vm_t *vm,
/* A try/catch/finally case. */

catch_index = njs_variable_index(vm, node->left->left);
- if (nxt_slow_path(catch_index == NJS_INDEX_ERROR)) {
+ if (nxt_slow_path(catch_index == NJS_INDEX_NONE)) {
return NXT_ERROR;
}

@@ -3039,7 +3050,7 @@ njs_generate_import_statement(njs_vm_t *
expr = node->right;

index = njs_variable_index(vm, lvalue);
- if (nxt_slow_path(index == NJS_INDEX_ERROR)) {
+ if (nxt_slow_path(index == NJS_INDEX_NONE)) {
return NXT_ERROR;
}

diff -r 6d7a4fb82b25 -r a6c82ddff460 njs/njs_variable.c
--- a/njs/njs_variable.c Thu Apr 18 20:51:53 2019 +0300
+++ b/njs/njs_variable.c Fri Apr 19 20:03:49 2019 +0800
@@ -349,7 +349,7 @@ njs_variable_index(njs_vm_t *vm, njs_par
return var->index;
}

- return NJS_INDEX_ERROR;
+ return NJS_INDEX_NONE;
}


diff -r 6d7a4fb82b25 -r a6c82ddff460 njs/njs_vm.c
--- a/njs/njs_vm.c Thu Apr 18 20:51:53 2019 +0300
+++ b/njs/njs_vm.c Fri Apr 19 20:03:49 2019 +0800
@@ -993,8 +993,6 @@ njs_vmcode_post_decrement(njs_vm_t *vm,
njs_ret_t
njs_vmcode_typeof(njs_vm_t *vm, njs_value_t *value, njs_value_t *invld)
{
- nxt_uint_t type;
-
/* ECMAScript 5.1: null, array and regexp are objects. */

static const njs_value_t *types[NJS_TYPE_MAX] = {
@@ -1034,10 +1032,7 @@ njs_vmcode_typeof(njs_vm_t *vm, njs_valu
&njs_string_object,
};

- /* A zero index means non-declared variable. */
- type = (value != NULL) ? value->type : NJS_UNDEFINED;
-
- vm->retval = *types[type];
+ vm->retval = *types[value->type];

return sizeof(njs_vmcode_2addr_t);
}
_______________________________________________
nginx-devel mailing list
nginx-devel@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-devel
Subject Author Views Posted

[njs] Simplified typeof operation.

Dmitry Volyntsev 284 April 19, 2019 09:06AM



Sorry, you do not have permission to post/reply in this forum.

Online Users

Guests: 323
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready