[njs] Style and small miscellaneous fixes.
Igor Sysoev
igor at sysoev.ru
Tue Jan 3 15:35:24 UTC 2017
details: http://hg.nginx.org/njs/rev/2d9ccf739861
branches:
changeset: 292:2d9ccf739861
user: Igor Sysoev <igor at sysoev.ru>
date: Sun Jan 01 20:45:59 2017 +0300
description:
Style and small miscellaneous fixes.
diffstat:
njs/njs_array.c | 2 +-
njs/njs_parser.h | 1 -
njs/njs_string.c | 3 +-
njs/njs_string.h | 53 +++++++++++++++++++++++++----------------------
njs/njs_vm.c | 2 +-
njs/njs_vm.h | 2 +-
njs/test/njs_unit_test.c | 7 ++++++
7 files changed, 39 insertions(+), 31 deletions(-)
diffs (173 lines):
diff -r 1944eaa4b2cf -r 2d9ccf739861 njs/njs_array.c
--- a/njs/njs_array.c Tue Dec 27 10:40:08 2016 +0300
+++ b/njs/njs_array.c Sun Jan 01 20:45:59 2017 +0300
@@ -1882,7 +1882,7 @@ static const njs_object_prop_t njs_arra
NJS_OBJECT_ARG, NJS_SKIP_ARG, NJS_INTEGER_ARG),
},
- /* ES6. */
+ /* ES7. */
{
.type = NJS_METHOD,
.name = njs_string("includes"),
diff -r 1944eaa4b2cf -r 2d9ccf739861 njs/njs_parser.h
--- a/njs/njs_parser.h Tue Dec 27 10:40:08 2016 +0300
+++ b/njs/njs_parser.h Sun Jan 01 20:45:59 2017 +0300
@@ -330,7 +330,6 @@ njs_token_t njs_lexer_keyword(njs_lexer_
njs_extern_t *njs_parser_external(njs_vm_t *vm, njs_parser_t *parser);
njs_parser_node_t *njs_parser(njs_vm_t *vm, njs_parser_t *parser);
-njs_parser_node_t *njs_nonrecursive_parser(njs_vm_t *vm, njs_parser_t *parser);
njs_token_t njs_parser_arguments(njs_vm_t *vm, njs_parser_t *parser,
njs_parser_node_t *parent);
njs_token_t njs_parser_expression(njs_vm_t *vm, njs_parser_t *parser,
diff -r 1944eaa4b2cf -r 2d9ccf739861 njs/njs_string.c
--- a/njs/njs_string.c Tue Dec 27 10:40:08 2016 +0300
+++ b/njs/njs_string.c Sun Jan 01 20:45:59 2017 +0300
@@ -610,7 +610,6 @@ njs_string_prototype_concat(njs_vm_t *vm
length &= mask;
start = njs_string_alloc(vm, &vm->retval, size, length);
-
if (nxt_slow_path(start == NULL)) {
return NXT_ERROR;
}
@@ -903,8 +902,8 @@ njs_string_prototype_substr(njs_vm_t *vm
if (nargs > 1) {
start = args[1].data.u.number;
+
if (start < length) {
-
if (start < 0) {
start += length;
diff -r 1944eaa4b2cf -r 2d9ccf739861 njs/njs_string.h
--- a/njs/njs_string.h Tue Dec 27 10:40:08 2016 +0300
+++ b/njs/njs_string.h Sun Jan 01 20:45:59 2017 +0300
@@ -12,8 +12,9 @@
/*
* nJSVM supports two string variants:
*
- * 1) short strings which size is lesser than 14 bytes, these strings are
- * stored inside njs_value_t (see njs_vm.h for details);
+ * 1) short strings which size is less than or equal to 14 (NJS_STRING_SHORT)
+ * bytes, these strings are stored inside njs_value_t (see njs_vm.h for
+ * details);
*
* 2) and long strings using additional njs_string_t structure.
* This structure has the start field to support external strings.
@@ -27,9 +28,10 @@
#define NJS_STRING_MAX_LENGTH 0x7fffffff
/*
- * Should be power of two to use shift and binary and operations instead of
- * division and remainder operations but no less than 16 because the maximum
- * length of short string inlined in njs_value_t is less than 16 bytes.
+ * NJS_STRING_MAP_STRIDE should be power of two to use shift and binary
+ * AND operations instead of division and remainder operations but no
+ * less than 16 because the maximum length of short string inlined in
+ * njs_value_t is less than 16 bytes.
*/
#define NJS_STRING_MAP_STRIDE 32
@@ -42,30 +44,31 @@
(((length - 1) / NJS_STRING_MAP_STRIDE) * sizeof(uint32_t))
/*
- * The JavaScript standard states that strings are stored in UTF-16.
- * nJSVM allows to store any byte sequences in strings. A size of the
- * string in bytes is stored in the size field. If a byte sequence is
- * valid UTF-8 string then its length is stored in the UTF-8 length field.
- * Otherwise, the length field is zero. If a string is UTF-8 string then
- * string functions work with UTF-8 characters positions and lengths.
- * Othersise they work with byte positions and lengths. Using UTF-8
- * encoding does not allow to get quickly a character at specified position.
- * To speed up this search a map of offsets is stored after the UTF-8 string.
- * The map is aligned to uint32_t and contains byte positions of each
- * NJS_STRING_MAP_STRIDE UTF-8 character except zero position. The map
- * can be initialized on demand. If a string come outside JavaScript as
- * byte sequnece just to be concatenated or to be used in regular expressions
- * the offset map is not required.
+ * ECMAScript strings are stored in UTF-16. nJSVM however, allows to store
+ * any byte sequences in strings. A size of string in bytes is stored in the
+ * size field. If byte sequence is valid UTF-8 string then its length is
+ * stored in the UTF-8 length field. Otherwise, the length field is zero.
+ * If a string is UTF-8 string then string functions use UTF-8 characters
+ * positions and lengths. Otherwise they use with byte positions and lengths.
+ * Using UTF-8 encoding does not allow to get quickly a character at specified
+ * position. To speed up this search a map of offsets is stored after the
+ * UTF-8 string. The map is aligned to uint32_t and contains byte positions
+ * of each NJS_STRING_MAP_STRIDE UTF-8 character except zero position. The
+ * map can be initialized on demand. Unitialized map is marked with zero
+ * value in the first map element. If string comes outside JavaScript as
+ * byte string just to be concatenated or to match regular expressions the
+ * offset map is not required.
*
* The map is not allocated:
- * 1) if the length is zero hence it is a byte string;
- * 2) if the size and length are equal so the string contains only ASCII
- * characters map is not required;
- * 3) if the length is less than NJS_STRING_MAP_STRIDE.
+ * 1) if string length is zero hence string is a byte string;
+ * 2) if string size and length are equal so the string contains only
+ * ASCII characters and map is not required;
+ * 3) if string length is less than NJS_STRING_MAP_STRIDE.
*
* The current implementation does not support Unicode surrogate pairs.
- * If offset in map points to surrogate pair then the previous offset
- * should be used and so on until start of the string.
+ * It can be implemented later if it will be required using the following
+ * algorithm: if offset in map points to surrogate pair then the previous
+ * offset should be used and so on until start of the string.
*/
struct njs_string_s {
diff -r 1944eaa4b2cf -r 2d9ccf739861 njs/njs_vm.c
--- a/njs/njs_vm.c Tue Dec 27 10:40:08 2016 +0300
+++ b/njs/njs_vm.c Sun Jan 01 20:45:59 2017 +0300
@@ -3357,7 +3357,7 @@ njs_value_string_copy(njs_vm_t *vm, nxt_
void
-njs_vm_throw_exception(njs_vm_t *vm, u_char *buf, uint32_t size)
+njs_vm_throw_exception(njs_vm_t *vm, const u_char *buf, uint32_t size)
{
int32_t length;
njs_value_t *value;
diff -r 1944eaa4b2cf -r 2d9ccf739861 njs/njs_vm.h
--- a/njs/njs_vm.h Tue Dec 27 10:40:08 2016 +0300
+++ b/njs/njs_vm.h Sun Jan 01 20:45:59 2017 +0300
@@ -1016,7 +1016,7 @@ njs_ret_t njs_value_to_ext_string(njs_vm
const njs_value_t *src);
void njs_number_set(njs_value_t *value, double num);
-void njs_vm_throw_exception(njs_vm_t *vm, u_char *buf, uint32_t size);
+void njs_vm_throw_exception(njs_vm_t *vm, const u_char *buf, uint32_t size);
nxt_int_t njs_builtin_objects_create(njs_vm_t *vm);
nxt_int_t njs_builtin_objects_clone(njs_vm_t *vm);
diff -r 1944eaa4b2cf -r 2d9ccf739861 njs/test/njs_unit_test.c
--- a/njs/test/njs_unit_test.c Tue Dec 27 10:40:08 2016 +0300
+++ b/njs/test/njs_unit_test.c Sun Jan 01 20:45:59 2017 +0300
@@ -626,6 +626,8 @@ static njs_unit_test_t njs_test[] =
{ nxt_string("x = '1'; +x + 2"),
nxt_string("3") },
+ /* Weird things. */
+
{ nxt_string("'3' -+-+-+ '1' + '1' / '3' * '6' + '2'"),
nxt_string("42") },
@@ -641,6 +643,11 @@ static njs_unit_test_t njs_test[] =
{ nxt_string("!--[][1]"),
nxt_string("true") },
+ { nxt_string("[].concat[1,2,3]"),
+ nxt_string("undefined") },
+
+ /**/
+
{ nxt_string("'true' == true"),
nxt_string("false") },
More information about the nginx-devel
mailing list