Uh oh!
There was an error while loading. Please reload this page.
buffer: add buffer.transcode - #9038
Conversation
jasnell
commented
Oct 11, 2016
There was a problem hiding this comment.
what about possibly placing this in lib/internal/buffer-transcode.js and conditionally require()'ing it. purely cosmetic though, to prevent an extra level of indent. or you could just return early. :)
if(!process.binding('config').hasIntl)return;There was a problem hiding this comment.
We going to have a complaint about not supporting SharedArrayBuffer for this?
There was a problem hiding this comment.
Eventually, perhaps. Not too worried about that for now.
jasnell
commented
Oct 12, 2016
Updated |
There was a problem hiding this comment.
Maybe give an example of transcoding is not possible?
There was a problem hiding this comment.
Hm – this could be a ThrowICUError function, right?
There was a problem hiding this comment.
This is fine but at some point this might become a member of the MaybeStackBuffer class? I realize that would conflict a bit with the MaybeStackBuffer<UChar> overload, maybe leave a TODO here?
There was a problem hiding this comment.
Is that final to residue from editing?
There was a problem hiding this comment.
Yeah, slight brain malfunction there I think ;-)
There was a problem hiding this comment.
Mhhh this returns a string or a Buffer depending on the target encoding? I don’t think binary-to-text encodings should be allowed here, .toString() is the right method for them.
There was a problem hiding this comment.
Yeah, you're right. I'll pull these back out.
5b65f74 to
62423a0Comparejasnell
commented
Oct 12, 2016
@addaleax ... updated! PTAL |
There was a problem hiding this comment.
The 1024 seem kind of magic here, although I realize that is largely my fault. 😄 (Not sure if there’s anything to do about that)
There was a problem hiding this comment.
Style: s/from_enc/fromEncoding/ and s/to_enc/toEncoding/. Ditto for cnv_from and cnv_to.
There was a problem hiding this comment.
I realize you adapted this code from elsewhere but using snprintf() to format the error message will be much more efficient.
There was a problem hiding this comment.
Needs a if (e.Empty()) return Local<Value>();.
There was a problem hiding this comment.
I think this should be if (!ret.Empty()) buf->Release(); - it's leaking memory now when the buffer can't be created.
There was a problem hiding this comment.
Same as above: strict aliasing violation and prone to crashing.
There was a problem hiding this comment.
It seems like there is ample opportunity to share code between Ucs2FromUtf8 and Utf8FromUcs2, they are 80% identical.
There was a problem hiding this comment.
Perhaps. For now I'm more inclined to keep these separate as it makes finding and tweaking bugs a bit easier. I'll take another pass in a separate PR to condense things down.
There was a problem hiding this comment.
Shouldn't this also reset length_?
There was a problem hiding this comment.
If you move this into a common header, you might want to give it a slightly less generic name; e.g. SPREAD_BUFFER_ARG.
There was a problem hiding this comment.
Just remove the 'defines' block instead of commenting it out.
9e0464b to
2da087eCompare
|
|
eecad5e to
d7340ecComparejasnell
commented
Oct 13, 2016
CI looks good. @bnoordhuis PTAL... LGTY? |
jasnell
commented
Oct 17, 2016
ping @bnoordhuis |
There was a problem hiding this comment.
if you're returning empty handles as an indicator it's probably be more "V8-ish" have the return signature as a MaybeLocal<Value> instead. been trying to do that in other locations myself.
There was a problem hiding this comment.
creating Local<Value>'s but there's no HandleScope. if this callback is expected to always be called within an existing HandleScope (like MakeCallback), mind putting a comment at the top. also like MakeCallback (see src/node.h).
There was a problem hiding this comment.
if we know this is a v8::Object then can use e.As<Object>(). that's also more explicit that no extra handle is being created.
There was a problem hiding this comment.
The new v8::Maybe<T> API for v8::Object::Set() is annoying and ugly, but if if we're going to use some of the new API might as well use all of it.
There was a problem hiding this comment.
if you're manipulating the original memory, why bother take a copy?
There was a problem hiding this comment.
if this operation fails, do we want to abort or throw?
There was a problem hiding this comment.
for future performance enhancement, detect the alignment of the pointer and perform as many swaps that can be done in a single go.
There was a problem hiding this comment.
i'm a little confused by this whole object, but right here if we're converting ascii to latin1 shouldn't we be passing 'latin1' as the encoding argument to Buffer.from()?
6f70820 to
65144bbComparejasnell
commented
Oct 18, 2016
@bnoordhuis ... ok, reworked the implementation with an eye towards simplification and reducing duplication. PTAL |
jasnell
commented
Oct 21, 2016
jasnell
commented
Oct 24, 2016
Thank you for the follow up review @addaleax. Will get this landed tomorrow if there are no further objections. |
Add buffer.transcode(source, from, to) method. Primarily uses ICU to transcode a buffer's content from one of Node.js' supported encodings to another. Originally part of a proposal to add a new unicode module. Decided to refactor the approach towrds individual PRs without a new module. Refs: nodejs#8075
65144bb to
4d7472bComparejasnell
commented
Oct 25, 2016
New CI run after squashing: https://ci.nodejs.org/job/node-test-pull-request/4665/ |
jasnell
commented
Oct 25, 2016
green except for unrelated failures. landing |
Add buffer.transcode(source, from, to) method. Primarily uses ICU to transcode a buffer's content from one of Node.js' supported encodings to another. Originally part of a proposal to add a new unicode module. Decided to refactor the approach towrds individual PRs without a new module. Refs: #8075 PR-URL: #9038 Reviewed-By: Anna Henningsen <anna@addaleax.net>
jasnell
commented
Oct 25, 2016
Landed in e8eaaa7 |
Add buffer.transcode(source, from, to) method. Primarily uses ICU to transcode a buffer's content from one of Node.js' supported encodings to another. Originally part of a proposal to add a new unicode module. Decided to refactor the approach towrds individual PRs without a new module. Refs: #8075 PR-URL: #9038 Reviewed-By: Anna Henningsen <anna@addaleax.net>
addaleax
commented
Dec 21, 2016
If this is backported to any of the other release lines, it needs to come with #9838 |
Checklist
make -j8 test(UNIX), orvcbuild test nosign(Windows) passesAffected core subsystem(s)
buffer
Description of change
Add buffer.transcode(source, from, to) method. Primarily uses ICU to transcode a buffer's content from one of Node.js' supported encodings to another.
Originally part of a proposal to add a new unicode module. Decided to refactor the approach towrds individual PRs without a new module.
Refs: #8075
/cc @trevnorris@addaleax