Uh oh!
There was an error while loading. Please reload this page.
[6.x] n-api: backport to v6.x - #19447
Conversation
95aece3 to
17f4970Comparegabrielschulhof
commented
Mar 19, 2018
Fixes nodejs/abi-stable-node#298. |
MylesBorins
commented
Mar 20, 2018
@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? |
gabrielschulhof
commented
Mar 20, 2018
via email
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>
.
|
gabrielschulhof
commented
Mar 20, 2018
via email
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 <
gabriel.schulhof@intel.com> 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>
> .
>
|
gabrielschulhof
commented
Mar 20, 2018
via email
... and binary compatible in all three, of course!
On Mon, Mar 19, 2018 at 9:56 PM, Schulhof, Gabriel <
gabriel.schulhof@intel.com> 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>
>> .
>>
>
>
|
MylesBorins
commented
Mar 20, 2018
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 |
gabrielschulhof
commented
Mar 20, 2018
via email
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 <
gabriel.schulhof@intel.com> 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>
>>> .
>>>
>>
>>
>
|
mhdawson
commented
Mar 20, 2018
@gabrielschulhof thanks for all the hard work on this. |
gabrielschulhof
commented
Mar 20, 2018
@mhdawson NP! Happy to help! |
17f4970 to
f0872f3Comparef0872f3 to
a80ec42Comparegabrielschulhof
commented
Apr 6, 2018
@MylesBorins I have now re-done this backport with complete commits as much as possible, much like the v8.x backport. |
a80ec42 to
2966812CompareMylesBorins
commented
Apr 6, 2018
cjihrig
commented
Apr 6, 2018
I think I'm in favor. It would be nice to have N-API in all of the supported release lines. |
mcollina
commented
Apr 6, 2018
I’m in favor! |
MylesBorins
commented
Apr 6, 2018
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 |
mcollina
commented
Apr 6, 2018
@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. |
Specifically 66e6d0bdcd346af488aaf3c3d383c5fe204d6c77 and 0b2d5bc3fd1025d9bef2e9934d4b898826b30236 (this one is 243 files!) |
rvagg
commented
Apr 6, 2018
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? |
mcollina
commented
Apr 6, 2018
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. |
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 <cjihrig@gmail.com> Reviewed-By: Rich Trott <rtrott@gmail.com>
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 <cjihrig@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Michael Dawson <michael_dawson@ca.ibm.com>
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: #12496Fixes: nodejs/abi-stable-node#226 Reviewed-By: Michael Dawson <michael_dawson@ca.ibm.com> Reviewed-By: Jeremiah Senkpiel <fishrock123@rocketmail.com> Reviewed-By: James M Snell <jasnell@gmail.com>
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 <michael_dawson@ca.ibm.com> Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
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#122Fixes: nodejs/abi-stable-node#228 Backport-PR-URL: #19447 PR-URL: #12524 Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Michael Dawson <michael_dawson@ca.ibm.com> Reviewed-By: Gabriel Schulhof <gabriel.schulhof@intel.com>
- 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 <anna@addaleax.net> Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Michael Dawson <michael_dawson@ca.ibm.com>
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 <anna@addaleax.net> Reviewed-By: Michael Dawson <michael_dawson@ca.ibm.com>
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 <arunesh.chandra@microsoft.com> Author: Gabriel Schulhof <gabriel.schulhof@intel.com> Author: Hitesh Kanwathirtha <hiteshk@microsoft.com> Author: Jason Ginchereau <jasongin@microsoft.com> Author: Michael Dawson <michael_dawson@ca.ibm.com> Author: Sampson Gao <sampsong@ca.ibm.com> Author: Taylor Woll <taylor.woll@microsoft.com> Backport-PR-URL: #19447 PR-URL: #12549 Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Jeremiah Senkpiel <fishrock123@rocketmail.com> Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
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 <eaglexrlnk@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Gibson Fahnestock <gibfahn@gmail.com>
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 <michael_dawson@ca.ibm.com> Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Jason Ginchereau <jasongin@microsoft.com> Reviewed-By: Anna Henningsen <anna@addaleax.net>
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 <cjihrig@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com>
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 <anna@addaleax.net> Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Refael Ackermann <refack@gmail.com>
Backport-PR-URL: #19447 PR-URL: #12864 Ref: #12551 (comment) Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Michael Dawson <michael_dawson@ca.ibm.com>
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 <anna@addaleax.net> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Michael Dawson <michael_dawson@ca.ibm.com>
- 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 <anna@addaleax.net> Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com> Reviewed-By: Michael Dawson <michael_dawson@ca.ibm.com> Reviewed-By: James M Snell <jasnell@gmail.com>
- 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 <thechargingvolcano@gmail.com> Reviewed-By: Refael Ackermann <refack@gmail.com> Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Luigi Pinca <luigipinca@gmail.com> Reviewed-By: Daniel Bevenius <daniel.bevenius@gmail.com> Reviewed-By: MichaëZasso <targos@protonmail.com> Reviewed-By: Gibson Fahnestock <gibfahn@gmail.com> Reviewed-By: Hitesh Kanwathirtha <digitalinfinity@gmail.com>
Backport-PR-URL: #19447 PR-URL: #12898Fixes: #7129 Reviewed-By: Sam Roberts <vieuxtech@gmail.com> Reviewed-By: Sakthipriyan Vairamani <thechargingvolcano@gmail.com> Reviewed-By: Refael Ackermann <refack@gmail.com> Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Rich Trott <rtrott@gmail.com> Reviewed-By: Gibson Fahnestock <gibfahn@gmail.com> Reviewed-By: Timothy Gu <timothygu99@gmail.com> Reviewed-By: Daniel Bevenius <daniel.bevenius@gmail.com> Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Michael Dawson <michael_dawson@ca.ibm.com>
Use `common.mustCall()` to confirm that function is invoked. Backport-PR-URL: #19447 PR-URL: #12959 Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Sakthipriyan Vairamani <thechargingvolcano@gmail.com> Reviewed-By: Gibson Fahnestock <gibfahn@gmail.com> Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: James M Snell <jasnell@gmail.com>
Backport-PR-URL: #19447 PR-URL: #12974 Reviewed-By: Gibson Fahnestock <gibfahn@gmail.com> Reviewed-By: Sakthipriyan Vairamani <thechargingvolcano@gmail.com> Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Jason Ginchereau <jasongin@microsoft.com>
MylesBorins
commented
Apr 16, 2018
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 |
src/node_api_backport.cc and src/node_api_backport.h are added
containing stubs for internal APIs used by N-API.
expectsError() is brought in from master and added to
tests/common/index.js.
N-API tests involving the JS async_hooks module are removed.
The following commits are partially or completely applied:
f24d0ec6a5a9add20f1f05fb6f7fcd7d7b1a03c90b
33e63fe48b5c1135c7238d83f830449d1c8c698017
a29089d9cb96ac945eb1b6e1c25c463d1a4caee112
755e07ca1bab822bead4b1729af2fe442f6d3569b6
5ecd2e16101bd2d379db3a555397c2b9048629a447
47f664e12869230c16b186e312c56c1906ac123467
f054855f7c709fc90185c316b5eff75bc2c3e06276
8938c4c91c1ccd8a86d9c93acfe5094d92b94e2951
246aeaca893e79ef49f55d4cd8c250afd902475676
ff9a6bc12c8b4ddc389bf493340f8f2c366a4a9a3d
9cf352597ba69f959c4259b4ab1451f92b6e0b1394
3ee524bf2cb78ce04d23c2336df10736ad4201ecef
e07e7087be4a84b3f9b386bc82daa1c0804f881789
359422317b818b4957726b33b3e184579b1e6e58fd
cec6e2105e4c1d8b90250a406a323070d53a8c0a43
1976654973c12f0c258bd92e5f5c1a0727d8c8c90b
290315acb94905a10856a61e9ba178286981cdb41f
c77e6d37efb8f76c382de82bad0b70664bfe96b949
1fe074185d7d97e6eb5c0835c383b72e702af70c3b
ad664eaf3afe296968eadaa6fac677ca3cb9926dfe
7849b52e59987c57a4ceb4d1e086bb2940565eefa0
e3f7a5473078d6ac41db4598a128f52c707d5b397c
8f3dab49c6804c29df1a834cf8ade36917bc9b6d95
ea927b3732ae41f803e770f1888fa71d205ef28d85
3e18c49d291338ecf6a4662e940dca8a29c2529119
01f4d9ac28418adf46fcb7d9dfdaddba969bd4b790
062071a7a7ac1c8ab8c33fd54b10bb9187943e4efd
effeff1d9ee29719619002af49b6260cd4147919b3
f3ef971bfade5a4a7b7e8a63b2450dd8b9a0083011
47c3c581b280229516aa1abfd4bf654afa2147048a
2e3fef72bbabb10a734fe73d9c0f94a120c8aca66a
cd32b77a1802590142276deb9622972bfe14271254
1d968034241577b7a341dba7bac5468275a6c60691
70b51c89d5222246f2026ad5f9878bd26d39de2e15
0ec0272affe0f29decfb1ca786c3afd59668fbace1
84602840a5bf4a491d59d4a21e3956e881d
Checklist
make -j4 test(UNIX), orvcbuild test(Windows) passes