GeezerVisonThe World Wide Web, restored to 800 pixels of glory. | |||||||||||||||||||
| Home|About|Gaming cabinet|Archives|How it works|Starter sites | |||||||||||||||||||
GeezerVison is showing github.com — [6.x] n-api: backport to v6.x by gabrielschulhof · Pull Request #19447 · nodejs/node Conversation
|
|
Fixes nodejs/abi-stable-node#298. |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
|
@gabrielschulhof great work. Is this landed with the experimental flag in place? We may want to consider doing a semver minor for this... not 100%. We were not planning another minor for 6.x before it went into maintenance mode though /cc @nodejs/lts, thoughts? |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
|
The experimental flag is not in place in this patch. It captures the full
circle of having it in, and then having it removed.
…On Mon, Mar 19, 2018 at 9:30 PM, Myles Borins ***@***.***> wrote:
@gabrielschulhof <https://github.com/gabrielschulhof> great work. Is this
landed with the experimental flag in place? We may want to consider doing a
semver minor for this... not 100%. We were not planning another minor for
6.x before it went into maintenance mode though
/cc @nodejs/lts <https://github.com/orgs/nodejs/teams/lts>, thoughts?
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
<#19447 (comment)>, or mute
the thread
<https://github.com/notifications/unsubscribe-auth/AA7k0TXggTNRk5Bk0u7kKq6HSKoLYgNbks5tgFufgaJpZM4SwaB6>
.
|
Sorry, something went wrong.
There was an error while loading. Please reload this page.
|
Our hope is to be able to claim, when 10.0.0 arrives, that N-API is now
stable in the latest of each of 6.x, 8.x, and 10.x.
On Mon, Mar 19, 2018 at 9:54 PM, Schulhof, Gabriel <
[email protected]> wrote:
… The experimental flag is not in place in this patch. It captures the full
circle of having it in, and then having it removed.
On Mon, Mar 19, 2018 at 9:30 PM, Myles Borins ***@***.***>
wrote:
> @gabrielschulhof <https://github.com/gabrielschulhof> great work. Is
> this landed with the experimental flag in place? We may want to consider
> doing a semver minor for this... not 100%. We were not planning another
> minor for 6.x before it went into maintenance mode though
>
> /cc @nodejs/lts <https://github.com/orgs/nodejs/teams/lts>, thoughts?
>
> —
> You are receiving this because you were mentioned.
> Reply to this email directly, view it on GitHub
> <#19447 (comment)>, or mute
> the thread
> <https://github.com/notifications/unsubscribe-auth/AA7k0TXggTNRk5Bk0u7kKq6HSKoLYgNbks5tgFufgaJpZM4SwaB6>
> .
>
|
Sorry, something went wrong.
There was an error while loading. Please reload this page.
|
... and binary compatible in all three, of course!
On Mon, Mar 19, 2018 at 9:56 PM, Schulhof, Gabriel <
[email protected]> wrote:
… Our hope is to be able to claim, when 10.0.0 arrives, that N-API is now
stable in the latest of each of 6.x, 8.x, and 10.x.
On Mon, Mar 19, 2018 at 9:54 PM, Schulhof, Gabriel <
***@***.***> wrote:
> The experimental flag is not in place in this patch. It captures the full
> circle of having it in, and then having it removed.
>
> On Mon, Mar 19, 2018 at 9:30 PM, Myles Borins ***@***.***>
> wrote:
>
>> @gabrielschulhof <https://github.com/gabrielschulhof> great work. Is
>> this landed with the experimental flag in place? We may want to consider
>> doing a semver minor for this... not 100%. We were not planning another
>> minor for 6.x before it went into maintenance mode though
>>
>> /cc @nodejs/lts <https://github.com/orgs/nodejs/teams/lts>, thoughts?
>>
>> —
>> You are receiving this because you were mentioned.
>> Reply to this email directly, view it on GitHub
>> <#19447 (comment)>, or mute
>> the thread
>> <https://github.com/notifications/unsubscribe-auth/AA7k0TXggTNRk5Bk0u7kKq6HSKoLYgNbks5tgFufgaJpZM4SwaB6>
>> .
>>
>
>
|
Sorry, something went wrong.
There was an error while loading. Please reload this page.
|
There is another PR that was just opened that would be semver minor against 6.x as well I'll open an issue in the release repo tomorrow to discuss it |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
|
To that end I've actually tested the following sequence:
```
git checkout v6.x-backport-n-api
git clean -x -d -f -f
./configure
make -j4
make -j4 test-addons-napi
git checkout v8.x-backport-n-api-updated-squashed
./configure
make -j4
/usr/bin/python2.7 tools/test.py --mode=release addons-napi
git checkout master
./configure
make -j4
/usr/bin/python2.7 tools/test.py --mode=release addons-napi
```
... and I've found it to work. That is, test/addons-napi can be run without
rebuilding.
On Mon, Mar 19, 2018 at 9:57 PM, Schulhof, Gabriel <
[email protected]> wrote:
… ... and binary compatible in all three, of course!
On Mon, Mar 19, 2018 at 9:56 PM, Schulhof, Gabriel <
***@***.***> wrote:
> Our hope is to be able to claim, when 10.0.0 arrives, that N-API is now
> stable in the latest of each of 6.x, 8.x, and 10.x.
>
> On Mon, Mar 19, 2018 at 9:54 PM, Schulhof, Gabriel <
> ***@***.***> wrote:
>
>> The experimental flag is not in place in this patch. It captures the
>> full circle of having it in, and then having it removed.
>>
>> On Mon, Mar 19, 2018 at 9:30 PM, Myles Borins ***@***.***>
>> wrote:
>>
>>> @gabrielschulhof <https://github.com/gabrielschulhof> great work. Is
>>> this landed with the experimental flag in place? We may want to consider
>>> doing a semver minor for this... not 100%. We were not planning another
>>> minor for 6.x before it went into maintenance mode though
>>>
>>> /cc @nodejs/lts <https://github.com/orgs/nodejs/teams/lts>, thoughts?
>>>
>>> —
>>> You are receiving this because you were mentioned.
>>> Reply to this email directly, view it on GitHub
>>> <#19447 (comment)>, or mute
>>> the thread
>>> <https://github.com/notifications/unsubscribe-auth/AA7k0TXggTNRk5Bk0u7kKq6HSKoLYgNbks5tgFufgaJpZM4SwaB6>
>>> .
>>>
>>
>>
>
|
Sorry, something went wrong.
There was an error while loading. Please reload this page.
|
@gabrielschulhof thanks for all the hard work on this. |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
|
@mhdawson NP! Happy to help! |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
17f4970 to
f0872f3
Compare
f0872f3 to
a80ec42
Compare
|
@MylesBorins I have now re-done this backport with complete commits as much as possible, much like the v8.x backport. |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
a80ec42 to
2966812
Compare
|
@nodejs/tsc @nodejs/lts if we want to land this we will have to do another semver-minor of v6.x, which I am somewhat uncomfortable with doing just before going into maintenance mode. @mhdawson @jasnell @rvagg @addaleax @ofrobots who all may have particular thoughts here |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
|
I think I'm in favor. It would be nice to have N-API in all of the supported release lines. |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
|
I’m in favor! |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
|
204 commits on 569 files with less than a month before maintenance... we don't even have time to follow our process for testing a semver-minor. I'm floating between -0 and -1. Looking forward to more people chiming in |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
|
@gabrielschulhof I think several commits got pulled in that have absolutely no relation to n-api. As an example, the whole reformatting of the docs to 80-chars width has been pulled in, and a change in the eslint. Those would have to be removed IMHO. @MylesBorins those are the the vast majority of the changed and the touched files. |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was an error while loading. Please reload this page.
|
Specifically 66e6d0bdcd346af488aaf3c3d383c5fe204d6c77 and 0b2d5bc3fd1025d9bef2e9934d4b898826b30236 (this one is 243 files!) |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
|
wow, lots of work here, +1 from me as long as you think it's fairly low risk .. I haven't reviewed the changeset but if there are any major departures to how it's been applied to 8.x+ could you let us know so we can have some idea of areas of risk? |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
The vast majority of the touched files are just for linting changes, so it's very hard to review. IMHO the changes in itself is relatively low risk (as long as it passes CITGM and we can verify that n-api modules works here and in 8), as it's a new feature. |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
This adds RegExp or error constructor arguments to the remaining places where it is missing in preparation for the commit that will enforce the presence of at least two arguments. Backport-PR-URL: #19447 PR-URL: #12270 Reviewed-By: Colin Ihrig <[email protected]> Reviewed-By: Rich Trott <[email protected]>
Missed in ca786c3. This does not actually affect the outcome because returning `nullptr` or `this` from a constructor has the same effect. Backport-PR-URL: #19447 PR-URL: #12318 Reviewed-By: Colin Ihrig <[email protected]> Reviewed-By: James M Snell <[email protected]> Reviewed-By: Michael Dawson <[email protected]>
Backport-PR-URL: #19447 PR-URL: #12368 Reviewed-By: Anna Henningsen <[email protected]> Reviewed-By: Michael Dawson <[email protected]> Reviewed-By: James M Snell <[email protected]> Reviewed-By: Jason Ginchereau <[email protected]>
Coverity was reporting _request.work_req as not being initialized. Add memset to ensure all of _request is initialized. Backport-PR-URL: #19447 PR-URL: #12365 Reviewed-By: Anna Henningsen <[email protected]> Reviewed-By: James M Snell <[email protected]> Reviewed-By: Colin Ihrig <[email protected]>
Improved test coverage for napi_make_callback by porting the existing addons/make_callback test to n-api Backport-PR-URL: #19447 PR-URL: #12409 Reviewed-By: Anna Henningsen <[email protected]> Reviewed-By: Benjamin Gruenbaum <[email protected]> Reviewed-By: James M Snell <[email protected]>
This reverts commit 70b51c8. Backport-PR-URL: #19447 PR-URL: #12475 Reviewed-By: Colin Ihrig <[email protected]>
This API doesn't serve much purpose, and is only likely to cause confusion and bugs. The intention was that this would return the number of characters in a string independent of encoding, but that's not generally useful. In almost all cases, one of the encoding-specific napi_get_value_string_* APIs is more correct. (Pass a null buffer if only the encoded length is desired.) Anyway the current implementation of napi_get_value_string_length() is technically wrong: it returns the number of 2-byte code units of the UTF-16 encoding, but there are actually some characters that are encoded as two UTF-16 code units. Note the JavaScript String.prototype.length property returns the number of UTF-16 code units, which may be different from the number of characters. So, getting the true character count is not common with JavaScript, and is probably best left to specialized internationalization libraries. Backport-PR-URL: #19447 PR-URL: #12496 Fixes: nodejs/abi-stable-node#226 Reviewed-By: Michael Dawson <[email protected]> Reviewed-By: Jeremiah Senkpiel <[email protected]> Reviewed-By: James M Snell <[email protected]>
We left out null-checks for many of the parameters passed to our APIs. In particular, arguments of type `napi_value` were often accepted without a null-check, even though they should never be null. Additionally, many APIs simply returned `napi_ok` on success. This leaves in place an error that may have occurred in a previous N-API call. Others (those which perform `NAPI_PREAMBLE(env)` at the top) OTOH explicitly clear the last error before proceeding. With this modification all APIs explicitly clear the last error on success. Fixes: nodejs/abi-stable-node#227 Backport-PR-URL: #19447 PR-URL: #12539 Reviewed-By: Michael Dawson <[email protected]> Reviewed-By: Anna Henningsen <[email protected]> Reviewed-By: Colin Ihrig <[email protected]>
N-API is somewhat strict about blocking calls to many APIs while there is a pending exception. The NAPI_PREAMBLE macro at the beginning of many API implementations checks for a pending exception. However, a subset of the APIs (which don't call back into JavaScript) still need to work while in a pending-exception state. This changes the reference APIs (equivalent to v8::Persistent) and handle scope APIs so that they can be used for cleanup up while an exception is pending. We may decide to similarly enable a few other APIs later, (which would be a non-breaking change) but we know at least these are needed now to unblock some specific scenarios. Fixes: nodejs/abi-stable-node#122 Fixes: nodejs/abi-stable-node#228 Backport-PR-URL: #19447 PR-URL: #12524 Reviewed-By: Anna Henningsen <[email protected]> Reviewed-By: Michael Dawson <[email protected]> Reviewed-By: Gabriel Schulhof <[email protected]>
We chose to document this in the docs as there are different possible behaviours. Adding this test to validate that all vm implementations do it the same way. Backport-PR-URL: #19447 PR-URL: #12633 Reviewed-By: James M Snell <[email protected]> Reviewed-By: Colin Ihrig <[email protected]>
adding test coverage for napi_cancel_async_work based on coverage report Backport-PR-URL: #19447 PR-URL: #12575 Reviewed-By: James M Snell <[email protected]> Reviewed-By: Colin Ihrig <[email protected]> Reviewed-By: Anna Henningsen <[email protected]>
- Add a test project to addons-napi that covers the N-API reference and external APIs - Fix a bug in napi_typeof that was found by the new tests Backport-PR-URL: #19447 PR-URL: #12551 Reviewed-By: Anna Henningsen <[email protected]> Reviewed-By: Colin Ihrig <[email protected]> Reviewed-By: Michael Dawson <[email protected]>
Background: To enable N-API support for node versions back to v4, the
N-API code can also be built as an external addon. To make maintenance
easier, a single codebase needs to support both built-in and external
scenarios, along with Node versions >= 4 (and corresponding V8
versions).
This change includes several minor fixes to avoid using node
internal APIs and support older V8 versions:
- Expand node::arraysize
- In the CHECK_ENV() macro, return an error code instead of calling
node::FatalError(). This is more consistent with how other invalid
arguments to N-API functions are handled.
- In v8impl::SetterCallbackWrapper::SetReturnValue(), do nothing
instead of calling node::FatalError(). This is more consistent
with JavaScript setter callbacks, where any returned value is
silently ignored.
- When queueing async work items, get the uv default loop instead of
getting the loop from node::Environment::GetCurrent(). Currently
that returns the same loop anyway. If/when node supports multiple
environments, it should have a public API for getting the
environment & event loop, and we can update this implementation
then.
- Use v8::Maybe::FromJust() instead of the newer alias ToChecked()
Backport-PR-URL: #19447
PR-URL: #12674
Reviewed-By: Anna Henningsen <[email protected]>
Reviewed-By: Michael Dawson <[email protected]>
Add the initial documentation for the N-API This PR is a result of work in the abi-stable-node repo: https://github.com/nodejs/abi-stable-node/tree/doc, with this PR being the cumulative work on the documentation sections in that repo with the following contributors in alphabetical order: Author: Arunesh Chandra <[email protected]> Author: Gabriel Schulhof <[email protected]> Author: Hitesh Kanwathirtha <[email protected]> Author: Jason Ginchereau <[email protected]> Author: Michael Dawson <[email protected]> Author: Sampson Gao <[email protected]> Author: Taylor Woll <[email protected]> Backport-PR-URL: #19447 PR-URL: #12549 Reviewed-By: James M Snell <[email protected]> Reviewed-By: Jeremiah Senkpiel <[email protected]> Reviewed-By: Colin Ihrig <[email protected]>
Start the transition to Array.prototype.includes() and String.prototype.includes(). This commit refactors most of the comparisons of Array.prototype.indexOf() and String.prototype.indexOf() return values with -1 to the former methods in tests. Backport-PR-URL: #19447 PR-URL: #12604 Refs: #12586 Reviewed-By: Alexey Orlenko <[email protected]> Reviewed-By: James M Snell <[email protected]> Reviewed-By: Gibson Fahnestock <[email protected]>
Replace function expressions with function declarations in preparation for a lint rule requiring function declarations. Backport-PR-URL: #19447 PR-URL: #12711 Reviewed-By: Vse Mozhet Byt <[email protected]> Reviewed-By: Gibson Fahnestock <[email protected]>
These APIs do not need a try-catch around their body, because no exceptions are thrown in their implementation: - `napi_is_array()` - `napi_get_value_string_latin1()` - `napi_get_value_string_utf8()` - `napi_get_value_string_utf16()` - `napi_get_value_external()` - `napi_is_buffer()` - `napi_is_arraybuffer()` - `napi_get_arraybuffer_info()` - `napi_is_typedarray()` - `napi_get_typedarray_info()` Fixes: nodejs/abi-stable-node#238 Backport-PR-URL: #19447 PR-URL: #12705 Reviewed-By: Michael Dawson <[email protected]> Reviewed-By: Colin Ihrig <[email protected]> Reviewed-By: Jason Ginchereau <[email protected]> Reviewed-By: Anna Henningsen <[email protected]>
Add cast to avoid warning during build of addon. Backport-PR-URL: #19447 PR-URL: #12730 Reviewed-By: James M Snell <[email protected]> Reviewed-By: Colin Ihrig <[email protected]> Reviewed-By: Anna Henningsen <[email protected]>
Add coverage for N-API functions related to throwing and creating errors. A number of these are currently showing as not having any coverage in the nightly code coverage reports. Backport-PR-URL: #19447 PR-URL: #12729 Reviewed-By: Colin Ihrig <[email protected]> Reviewed-By: James M Snell <[email protected]>
Improved test coverage for napi_make_callback by porting the existing addons/make_callback test to n-api Backport-PR-URL: #19447 PR-URL: #12409 Reviewed-By: Anna Henningsen <[email protected]> Reviewed-By: Benjamin Gruenbaum <[email protected]> Reviewed-By: James M Snell <[email protected]> Reviewed-By: Refael Ackermann <[email protected]>
Backport-PR-URL: #19447 PR-URL: #12864 Ref: #12551 (comment) Reviewed-By: James M Snell <[email protected]> Reviewed-By: Michael Dawson <[email protected]>
When the number of args requested is greater than the actual number of args supplied to the function call, the remainder of the args array should be filled in with `undefined` values. Because of this bug, the remainder of the array was left uninitialized, which could cause a crash. Refer to the documentation for the `argv` parameter at https://github.com/nodejs/node/blob/master/doc/api/n-api.md#napi_get_cb_info Backport-PR-URL: #19447 PR-URL: #12863 Reviewed-By: Anna Henningsen <[email protected]> Reviewed-By: James M Snell <[email protected]> Reviewed-By: Michael Dawson <[email protected]>
- Create a handle scope before invoking the async completion callback, because it is basically always needed, easy for user code to forget, and this makes it more consistent with ordinary N-API function callbacks. - Check for an unhandled JS exception after invoking an async completion callback, and report it via `node::FatalException()`. - Add a corresponding test case for an exception in async callback. Previously, any unhandled JS exception thrown from a `napi_async_complete_callback` would be silently ignored. Among other things this meant assertions in some test cases could be undetected. Backport-PR-URL: #19447 PR-URL: #12838 Reviewed-By: Anna Henningsen <[email protected]> Reviewed-By: Benjamin Gruenbaum <[email protected]> Reviewed-By: Michael Dawson <[email protected]> Reviewed-By: James M Snell <[email protected]>
- fix 2 broken links - fix capitalization in description of napi_create_array-with-length Backport-PR-URL: #19447 PR-URL: #12889 Reviewed-By: Sakthipriyan Vairamani <[email protected]> Reviewed-By: Refael Ackermann <[email protected]> Reviewed-By: Colin Ihrig <[email protected]> Reviewed-By: Luigi Pinca <[email protected]> Reviewed-By: Daniel Bevenius <[email protected]> Reviewed-By: MichaëZasso <[email protected]> Reviewed-By: Gibson Fahnestock <[email protected]> Reviewed-By: Hitesh Kanwathirtha <[email protected]>
- add coverage for napi_has_element - add coverage for napi_create_array_with_length Backport-PR-URL: #19447 PR-URL: #12890 Reviewed-By: Colin Ihrig <[email protected]> Reviewed-By: James M Snell <[email protected]>
Backport-PR-URL: #19447 PR-URL: #12898 Fixes: #7129 Reviewed-By: Sam Roberts <[email protected]> Reviewed-By: Sakthipriyan Vairamani <[email protected]> Reviewed-By: Refael Ackermann <[email protected]> Reviewed-By: Anna Henningsen <[email protected]> Reviewed-By: James M Snell <[email protected]> Reviewed-By: Rich Trott <[email protected]> Reviewed-By: Gibson Fahnestock <[email protected]> Reviewed-By: Timothy Gu <[email protected]> Reviewed-By: Daniel Bevenius <[email protected]> Reviewed-By: Colin Ihrig <[email protected]> Reviewed-By: Michael Dawson <[email protected]>
Use `common.mustCall()` to confirm that function is invoked. Backport-PR-URL: #19447 PR-URL: #12959 Reviewed-By: Colin Ihrig <[email protected]> Reviewed-By: Sakthipriyan Vairamani <[email protected]> Reviewed-By: Gibson Fahnestock <[email protected]> Reviewed-By: Anna Henningsen <[email protected]> Reviewed-By: James M Snell <[email protected]>
Backport-PR-URL: #19447 PR-URL: #12974 Reviewed-By: Gibson Fahnestock <[email protected]> Reviewed-By: Sakthipriyan Vairamani <[email protected]> Reviewed-By: Colin Ihrig <[email protected]> Reviewed-By: James M Snell <[email protected]> Reviewed-By: Jason Ginchereau <[email protected]>
Add tests to cover functions that return globals Backport-PR-URL: #19447 PR-URL: #13006 Reviewed-By: Colin Ihrig <[email protected]> Reviewed-By: Anna Henningsen <[email protected]> Reviewed-By: Jason Ginchereau <[email protected]>
|
landed in e54b8e8...3aa5b7d If anything is out of the ordinary we can find it in the release tests and open separate PRs to help fix. Was able to automate applying the Backport-PR-URL meta data to all the commits using the following command |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was an error while loading. Please reload this page.
Successfully merging this pull request may close these issues.
There was an error while loading. Please reload this page.