]>
git.kaiwu.me - njs.git/log
Dmitry Volyntsev [Fri, 28 Dec 2018 09:42:29 +0000 (12:42 +0300)]
njs_vm_run() is rectified.
Previously, both njs_vm_call() and njs_vm_run() can be used to run njs
code. njs_vm_call() was used to invoke a single function, while
njs_vm_run() was used to run global code as well to process the events.
At first invocation njs_vm_run() executed global code, all the next
invocations it processed pending events.
The solution is splitting njs_vm_run() into two functions. One for
events processing and another for running the global code.
Dmitry Volyntsev [Thu, 27 Dec 2018 07:35:07 +0000 (10:35 +0300)]
Improved naming in njs_variables_scope_resolve().
Thanks to 洪志道 (Hong Zhi Dao).
Dmitry Volyntsev [Thu, 27 Dec 2018 07:27:46 +0000 (10:27 +0300)]
Style.
Dmitry Volyntsev [Wed, 26 Dec 2018 16:57:41 +0000 (19:57 +0300)]
Refactored functions related to variables.
1) njs_builtin_add() is refactored out as a minor variant of
njs_variable_add().
2) parser is refactored out from arguments of the functions.
Dmitry Volyntsev [Wed, 26 Dec 2018 13:05:23 +0000 (16:05 +0300)]
Added support of native function calls in njs_vm_call().
Dmitry Volyntsev [Wed, 26 Dec 2018 10:23:16 +0000 (13:23 +0300)]
Fixed exit instructions inside try blocks.
Fixed instructions: continue, break, return.
Dmitry Volyntsev [Tue, 25 Dec 2018 06:53:27 +0000 (09:53 +0300)]
Version bump.
Dmitry Volyntsev [Tue, 25 Dec 2018 06:51:02 +0000 (09:51 +0300)]
Added tag 0.2.7 for changeset
4624ba4f6497
Dmitry Volyntsev [Tue, 25 Dec 2018 06:49:52 +0000 (09:49 +0300)]
Version 0.2.7.
Dmitry Volyntsev [Mon, 24 Dec 2018 10:59:27 +0000 (13:59 +0300)]
Removed surplus for loop.
Left over after simplifications in
4e62b7a295e0 .
Found by Coverity (CID
1441823 ).
Alexander Pyshchev [Mon, 17 Dec 2018 19:13:02 +0000 (21:13 +0200)]
Added the rest parameters support.
This closes #21 issue on Github.
Dmitry Volyntsev [Fri, 7 Dec 2018 15:58:27 +0000 (18:58 +0300)]
Style.
Dmitry Volyntsev [Fri, 7 Dec 2018 15:54:59 +0000 (18:54 +0300)]
Removing unused "size" field from njs_parser_operation_t.
Thanks to 洪志道 (Hong Zhi Dao).
This closes #68 issue on Github.
Dmitry Volyntsev [Fri, 7 Dec 2018 15:33:52 +0000 (18:33 +0300)]
Freeing code buffer after is was reallocated.
Thanks to 洪志道 (Hong Zhi Dao).
Dmitry Volyntsev [Fri, 7 Dec 2018 14:15:21 +0000 (17:15 +0300)]
Code generator is separated from parser structure.
Dmitry Volyntsev [Fri, 7 Dec 2018 14:11:33 +0000 (17:11 +0300)]
Code generator refactored.
Previously, the code size had to be calculated before code generation
phase because raw pointers to instruction were used to determine proper
jump offsets. It introduced unnecessary coupling between parser and
generator as well as complicated the parser because it had to know in
advance what instructions will be generated.
The solution is the dynamic reallocation of the code during generation
phase and the usage of relative offsets when calculating jump instructions.
Igor Sysoev [Wed, 5 Dec 2018 12:38:33 +0000 (15:38 +0300)]
Fixed building on paltforms without librt.
Dmitry Volyntsev [Tue, 4 Dec 2018 18:13:13 +0000 (21:13 +0300)]
Fixed type of iteration variable in for-in with array values.
Valentin Bartenev [Mon, 3 Dec 2018 16:23:27 +0000 (19:23 +0300)]
Object.entries() method.
Valentin Bartenev [Mon, 3 Dec 2018 16:20:58 +0000 (19:20 +0300)]
Object.values() method.
Valentin Bartenev [Sat, 1 Dec 2018 19:32:33 +0000 (22:32 +0300)]
Slightly optimized njs_object_keys_array().
There is no need to iterate over the object properties second time if after
the first attempt we know that it contains no enumerable properties.
Also removed surplus conditions.
Dmitry Volyntsev [Fri, 30 Nov 2018 14:52:02 +0000 (17:52 +0300)]
Fixed comparison of Byte and UTF8 strings.
Dmitry Volyntsev [Thu, 29 Nov 2018 18:01:59 +0000 (21:01 +0300)]
Using acosh(0) to get NaN in runtime.
macOS clang 10 optimizes sqrt(-1) out using garbage value
instead.
Artem S. Povalyukhin [Wed, 28 Nov 2018 18:56:19 +0000 (21:56 +0300)]
Improved accuracy of console.time()/console.timeEnd().
Artem S. Povalyukhin [Wed, 28 Nov 2018 18:50:28 +0000 (21:50 +0300)]
Added nxt_time().
Returns the current high-resolution real time.
Dmitry Volyntsev [Thu, 29 Nov 2018 15:14:12 +0000 (18:14 +0300)]
Fixed conversion of NAN and INF to uint32_t on some platforms.
Dmitry Volyntsev [Wed, 28 Nov 2018 12:47:05 +0000 (15:47 +0300)]
Fixed assignment expression from compound assignment.
Dmitry Volyntsev [Tue, 27 Nov 2018 15:58:30 +0000 (18:58 +0300)]
Fixed automatic semicolon insertion.
Dmitry Volyntsev [Tue, 27 Nov 2018 15:58:26 +0000 (18:58 +0300)]
Version bump.
Dmitry Volyntsev [Tue, 27 Nov 2018 12:20:11 +0000 (15:20 +0300)]
Added tag 0.2.6 for changeset
0709b8b4f11e
Dmitry Volyntsev [Tue, 27 Nov 2018 12:18:45 +0000 (15:18 +0300)]
Version 0.2.6.
Dmitry Volyntsev [Fri, 23 Nov 2018 14:46:30 +0000 (17:46 +0300)]
Fixed parsing of statements in if without newline.
This fixes #8 issue on Github.
Thanks to 洪志道 (Hong Zhi Dao)
Dmitry Volyntsev [Fri, 23 Nov 2018 11:30:24 +0000 (14:30 +0300)]
Fixed parser for newline after throw.
Dmitry Volyntsev [Thu, 22 Nov 2018 16:32:48 +0000 (19:32 +0300)]
Fixed typeof for object_value type.
Dmitry Volyntsev [Thu, 22 Nov 2018 15:55:32 +0000 (18:55 +0300)]
Making built-in prototypes mutable.
Dmitry Volyntsev [Thu, 22 Nov 2018 15:12:26 +0000 (18:12 +0300)]
Backed out changeset
b3691d847ff4 , reimplemented properly.
Dmitry Volyntsev [Thu, 22 Nov 2018 14:38:40 +0000 (17:38 +0300)]
Fixed parsing of throw statement inside if.
Dmitry Volyntsev [Thu, 22 Nov 2018 14:38:25 +0000 (17:38 +0300)]
Fixed size uint32_t overflow in njs_array_expand().
Dmitry Volyntsev [Thu, 22 Nov 2018 12:35:25 +0000 (15:35 +0300)]
Improved backtrace reporting for stack overflow.
Dmitry Volyntsev [Thu, 22 Nov 2018 12:02:19 +0000 (15:02 +0300)]
Fixed handling of unexpected tokens in parser.
This fixes #50 issue on Github.
Dmitry Volyntsev [Wed, 21 Nov 2018 13:45:10 +0000 (16:45 +0300)]
Interactive shell: quiet mode.
Dmitry Volyntsev [Mon, 19 Nov 2018 13:55:37 +0000 (16:55 +0300)]
Fixed buffer overrun by memcpy() (CID
1441409 ).
Dmitry Volyntsev [Mon, 19 Nov 2018 13:30:35 +0000 (16:30 +0300)]
Fixed various clang static analyzer warnings.
In njs_object_keys_array() function.
Dmitry Volyntsev [Thu, 15 Nov 2018 17:31:35 +0000 (20:31 +0300)]
Handling non-object values in Object.keys().
This fixes #54 issue on Github.
Dmitry Volyntsev [Thu, 15 Nov 2018 17:31:35 +0000 (20:31 +0300)]
Extended Object.defineProperty() spec conformance.
1) non-primitive property names.
2) support of array index properties.
3) support of special properties with
NJS_PROPERTY_HANDLER, like length.
Dmitry Volyntsev [Thu, 15 Nov 2018 17:31:35 +0000 (20:31 +0300)]
Fixed local scope this.
Dmitry Volyntsev [Thu, 15 Nov 2018 17:31:35 +0000 (20:31 +0300)]
Fixed global objects.
1) Making it extensible.
2) Adding default properties according to ES5.1:15.1.1.
Dmitry Volyntsev [Wed, 4 Apr 2018 14:38:10 +0000 (17:38 +0300)]
Improved handling of builtin objects.
The handling of njs_object_init_t arrays is unified across
njs_builtin.c functions.
Artem S. Povalyukhin [Wed, 14 Nov 2018 15:14:49 +0000 (18:14 +0300)]
console.time() and console.timeEnd() methods.
This fixes #62 issue on Github.
Valentin Bartenev [Thu, 15 Nov 2018 09:45:02 +0000 (12:45 +0300)]
Fixed lvlhsh test on 64-bit big-endian systems.
The nxt_murmur_hash2() generated 4-byte hash that was stored in uintptr_t,
which was 8 bytes long on 64-bit systems. At each iteration, it took the
previous key and hashed it again.
The problem was that it took only the first 4 bytes of the key, and these
4 bytes were always zero on 64-bit big-endian system. That resulted in
equal keys at each iteration.
The bug was discovered on IBM/S390x.
Sergey Kandaurov [Tue, 13 Nov 2018 12:25:00 +0000 (15:25 +0300)]
Tolerate epsilon difference in the previous unit test change.
Sergey Kandaurov [Tue, 13 Nov 2018 11:16:54 +0000 (14:16 +0300)]
Fixed unit tests for SunC.
Sergey Kandaurov [Mon, 12 Nov 2018 17:08:36 +0000 (20:08 +0300)]
Fixed building by SunC 5.15.
Dmitry Volyntsev [Mon, 12 Nov 2018 15:27:05 +0000 (18:27 +0300)]
Allowing variables and functions to be redeclared.
Valentin Bartenev [Mon, 12 Nov 2018 14:22:14 +0000 (17:22 +0300)]
RegExp: fixed a case when lastIndex is greater than string size.
Previously, it resulted in: "InternalError: pcre_exec() failed: -32" due to
negative string size caused by subtraction of last_index.
Valentin Bartenev [Fri, 9 Nov 2018 15:22:01 +0000 (18:22 +0300)]
Fixed equality operator with object and string.
Valentin Bartenev [Thu, 8 Nov 2018 17:32:45 +0000 (20:32 +0300)]
Fixed equality operator when both operands are objects.
Valentin Bartenev [Fri, 9 Nov 2018 15:05:39 +0000 (18:05 +0300)]
Fixed equality operator with "null" value as right operand.
Valentin Bartenev [Thu, 8 Nov 2018 13:45:54 +0000 (16:45 +0300)]
Fixed misplaced njs_internal_error().
Dmitry Volyntsev [Wed, 7 Nov 2018 15:41:29 +0000 (18:41 +0300)]
njs_vm_run() is simplified.
Dmitry Volyntsev [Wed, 7 Nov 2018 15:41:28 +0000 (18:41 +0300)]
Added njs_vm_retval_dump().
Dmitry Volyntsev [Wed, 7 Nov 2018 15:41:25 +0000 (18:41 +0300)]
Fixed accumulative flag in CLI file mode.
Dmitry Volyntsev [Tue, 6 Nov 2018 17:57:53 +0000 (20:57 +0300)]
Initializing closure values of a function.
This fixes #55 issue on Github.
Dmitry Volyntsev [Tue, 6 Nov 2018 17:57:52 +0000 (20:57 +0300)]
Using more approprite name for undefined value in exceptions.
Dmitry Volyntsev [Tue, 6 Nov 2018 17:30:49 +0000 (20:30 +0300)]
Improved wording for "not a function" exception.
Dmitry Volyntsev [Wed, 31 Oct 2018 13:06:06 +0000 (16:06 +0300)]
Fixed description for explicit_bzero script.
Dmitry Volyntsev [Tue, 30 Oct 2018 11:22:20 +0000 (14:22 +0300)]
Version bump.
Dmitry Volyntsev [Tue, 30 Oct 2018 11:20:31 +0000 (14:20 +0300)]
Added tag 0.2.5 for changeset
3315f6aa6000
Dmitry Volyntsev [Tue, 30 Oct 2018 11:16:39 +0000 (14:16 +0300)]
Version 0.2.5.
Valentin Bartenev [Mon, 29 Oct 2018 18:06:24 +0000 (21:06 +0300)]
Non-integer fractions.
Dmitry Volyntsev [Mon, 29 Oct 2018 14:36:43 +0000 (17:36 +0300)]
Stream: marking incoming chain as processed.
Previously, the buffers of proxy module were not reclaimed.
This resulted in stopping the processing of new data chunks from
a client after proxy_buffer_size bytes were received.
Dmitry Volyntsev [Tue, 23 Oct 2018 17:40:08 +0000 (20:40 +0300)]
Added arguments object.
This closes #19 issue on Github.
Dmitry Volyntsev [Tue, 23 Oct 2018 17:40:02 +0000 (20:40 +0300)]
Handling non-array values in Array.prototype.slice.
Dmitry Volyntsev [Fri, 19 Oct 2018 17:55:38 +0000 (20:55 +0300)]
Handling int overflow in njs_array_alloc() on 32bit archs.
Dmitry Volyntsev [Fri, 19 Oct 2018 17:55:33 +0000 (20:55 +0300)]
Added njs_string_slice_string_prop().
Dmitry Volyntsev [Fri, 19 Oct 2018 17:55:30 +0000 (20:55 +0300)]
Added njs_primitive_value_to_number().
Dmitry Volyntsev [Fri, 19 Oct 2018 17:55:23 +0000 (20:55 +0300)]
Fixed Object.prototype.hasOwnProperty() for non-object properties.
This fixes #9 issue on Github.
Dmitry Volyntsev [Fri, 19 Oct 2018 17:54:59 +0000 (20:54 +0300)]
delete operator refactored.
Dmitry Volyntsev [Fri, 19 Oct 2018 17:52:57 +0000 (20:52 +0300)]
Object property quering is refactored.
njs_property_query() is rectified and unified
1) returns only property descriptors. Special return codes
NJS_PRIMITIVE_VALUE, NJS_STRING_VALUE, NJS_ARRAY_VALUE and
NJS_EXTERNAL_VALUE are replaced with a temporary property
descriptor of type NJS_PROPERTY_REF or NJS_PROPERTY_HANDLER.
If NJS_PROPERTY_REF is set reference to a value is contained
in prop->value.data.u.value.
2) NJS_PROPERTY_HANDLER properties returned as is.
3) njs_property_query_t.own can be used to query for an object's
OwnProperty.
4) NJS_PROPERTY_QUERY_IN is removed.
The aim is to implement with it [[GetOwnProperty]] and
[[GetProperty]] methods from specification. Which are used
extensively in many places of the ECMAScript spec.
njs_value_property() is introduced which corresponds to [[Get]]
method from specification.
This fixes #32 and #34 issues on Github.
Igor Sysoev [Sat, 6 Oct 2018 14:52:40 +0000 (17:52 +0300)]
Updated documentation link.
Dmitry Volyntsev [Thu, 4 Oct 2018 17:45:40 +0000 (20:45 +0300)]
Stream: fixed counting pending events.
Previously, erroneous messages 'pending events' were reported
to error log.
Dmitry Volyntsev [Thu, 4 Oct 2018 17:43:25 +0000 (20:43 +0300)]
Stream: fixed s.off().
Previously, s.off() did not delete the event in njs vm
using njs_vm_del_event().
Dmitry Volyntsev [Wed, 3 Oct 2018 12:38:19 +0000 (15:38 +0300)]
Fixed default implementation for nxt_explicit_memzero().
Thanks to David CARLIER.
Dmitry Volyntsev [Wed, 3 Oct 2018 12:36:36 +0000 (15:36 +0300)]
Removed useless casting to void for explicit_bzero().
Dmitry Volyntsev [Tue, 2 Oct 2018 17:34:30 +0000 (20:34 +0300)]
Improved time zone tests for Date object.
On some platforms, for example Alpine Linux, non-UTC timezones are
unavailable.
The fix is to use UTC timezone by default, and use a separate test suite
for the original timezone if it is available.
Dmitry Volyntsev [Tue, 2 Oct 2018 17:33:14 +0000 (20:33 +0300)]
Added nxt_memset().
Dmitry Volyntsev [Tue, 2 Oct 2018 17:28:10 +0000 (20:28 +0300)]
Added nxt_memzero() and nxt_explicit_memzero().
Thanks to David CARLIER.
Dmitry Volyntsev [Thu, 27 Sep 2018 14:37:55 +0000 (17:37 +0300)]
Fixed http response and parent getters.
Getters are expected to set resulting value to the provided
argument, not to vm->retval.
Dmitry Volyntsev [Thu, 27 Sep 2018 14:36:38 +0000 (17:36 +0300)]
Fixed code size mismatch error message.
Dmitry Volyntsev [Wed, 19 Sep 2018 16:36:00 +0000 (19:36 +0300)]
Fixed http status and contentType getter.
Getter are expected to set resulting value to provied
argument, not to vm->retval.
Dmitry Volyntsev [Wed, 19 Sep 2018 16:24:07 +0000 (19:24 +0300)]
Fixed njs_array_alloc() for length > 2**31.
Dmitry Volyntsev [Wed, 19 Sep 2018 16:24:05 +0000 (19:24 +0300)]
Fixed Array.prototype.length setter.
Dmitry Volyntsev [Wed, 19 Sep 2018 11:43:58 +0000 (14:43 +0300)]
Version bump.
Dmitry Volyntsev [Tue, 18 Sep 2018 12:14:06 +0000 (15:14 +0300)]
Added tag 0.2.4 for changeset
3e6c38f64bdb
Dmitry Volyntsev [Tue, 18 Sep 2018 12:13:41 +0000 (15:13 +0300)]
Version 0.2.4.
Dmitry Volyntsev [Mon, 17 Sep 2018 15:47:00 +0000 (18:47 +0300)]
Fixed String.slice() for undefined arguments.
Dmitry Volyntsev [Fri, 14 Sep 2018 11:19:03 +0000 (14:19 +0300)]
Fixed njs_string_slice().
dst retval argument was ignored.
Dmitry Volyntsev [Thu, 13 Sep 2018 15:46:02 +0000 (18:46 +0300)]
Added njs_uint32_to_string().
Dmitry Volyntsev [Thu, 13 Sep 2018 12:52:17 +0000 (15:52 +0300)]
Introduced sandboxing mode.
Thanks to David CARLIER.
Dmitry Volyntsev [Tue, 11 Sep 2018 12:35:27 +0000 (15:35 +0300)]
Fixed macro for aligned size of njs_frame_t struct.
NJS_FRAME_SIZE did not take into account the variable length of
closures array. This can result in overlapping addresses for
native_frame->arguments and frame->closures[n],