Closed
Bug 799490
(harmony:strreverse)
Opened 12 years ago
Closed 12 years ago
implement String.prototype.reverse
Categories
(Core :: JavaScript Engine, defect)
Core
JavaScript Engine
Tracking
()
RESOLVED
WONTFIX
People
(Reporter: Benjamin, Unassigned)
References
()
Details
(Whiteboard: [mentor=benjamin])
Attachments
(1 file)
2.36 KB,
patch
|
Benjamin
:
feedback+
|
Details | Diff | Splinter Review |
The ES6 String.prototype.reverse method returns a new string with all the characters reversed. It is specified in the PDF attached to the bug URL.
This is a simple method and would thus be a excellent chance for someone to dive into SpiderMonkey development.
Comment 1•12 years ago
|
||
I would like to work on this. I'll be needing some guidance from you though as I am new to the JavaScript Engine Component!
I am interested in this as well and will start writing tests, so somebody else can start with the implementation:
Here is some help that Benjamin gave me on Twitter:
https://twitter.com/gutworth/status/255762848502910976
Reporter | ||
Comment 3•12 years ago
|
||
Hi, Sankha. The main code you'll need to modify is js/src/jsstr.cpp. Imitate how other methods are written. You'll also need to add a test; probably in js/src/jit-test/tests/basic/string-reverse.js. Look at the string-contains/string-startswith.js files for inspiration.
Feel free to stop by #jsapi on Mozilla IRC [1]. (I'm "benjamin".)
Here are some general webpages that should be useful:
- https://developer.mozilla.org/en-US/docs/Introduction
- https://developer.mozilla.org/en-US/docs/SpiderMonkey
[1] https://wiki.mozilla.org/IRC
Comment 4•12 years ago
|
||
I have written a method for reverse. Please give your feedback, then I can begin with the tests!
Attachment #669737 -
Flags: feedback?(benjamin)
Reporter | ||
Comment 5•12 years ago
|
||
Comment on attachment 669737 [details] [diff] [review]
WIP patch
Review of attachment 669737 [details] [diff] [review]:
-----------------------------------------------------------------
Good start. You should comment your code with the exact steps you're performing for the spec. See str_startsWith and str_contains for examples of how to do this.
::: js/src/jsstr.cpp
@@ +564,5 @@
> static JSBool
> +str_reverse(JSContext *cx, unsigned argc, Value *vp)
> +{
> + CallArgs args = CallArgsFromVp(argc, vp);
> +
Your empty lines have trailing spaces. You should remove that.
@@ +569,5 @@
> + RootedString str(cx, ThisToStringForStringProto(cx, args));
> + if (!str)
> + return false;
> +
> + uint32_t len = str->length();
size_t
@@ +570,5 @@
> + if (!str)
> + return false;
> +
> + uint32_t len = str->length();
> + const jschar *s = str->getChars(cx);
You should do this as close to the use of |s| as possible. The next line allocates memory and could potentially GC. GC could cause the char pointer to move leaving |s| invalid. In fact, I suggest you write the main reversal in its own block like this:
{
const jschar *s = str->getChars(cx);
// do reversing
}
This ensures the unsafe pointer is visible for the least amount of time possible.
You also need to test that |s| isn't nullptr.
@@ +575,5 @@
> + jschar *rev = cx->pod_malloc<jschar>(len + 1);
> + if (!rev)
> + return false;
> + for (size_t i = 0; i < len; i++)
> + rev[i] = s[len-i-1];
Space between "-" and operands.
@@ +579,5 @@
> + rev[i] = s[len-i-1];
> + rev[len] = 0;
> + str = js_NewString(cx, rev, len);
> + if (!str) {
> + js_free(rev);
cx->free(rev);
@@ +3123,5 @@
>
> /* Java-like methods. */
> JS_FN(js_toString_str, js_str_toString, 0,0),
> JS_FN(js_valueOf_str, js_str_toString, 0,0),
> + JS_FN("reverse", str_reverse, 2,JSFUN_GENERIC_NATIVE),
|reverse| doesn't take an formals, so 2 should be 0.
Attachment #669737 -
Flags: feedback?(benjamin) → feedback+
Comment 6•12 years ago
|
||
The Ecma TC 39 meeting in November 2011 decided to drop String.prototype.reverse from ES6 because of the lack of use cases.
https://mail.mozilla.org/pipermail/es-discuss/2011-November/018581.html
I recommend closing this ticket as "won't fix".
Reporter | ||
Comment 7•12 years ago
|
||
Oh, indeed. The draft spec is very old (March '11). I should have been looking at this: http://wiki.ecmascript.org/doku.php?id=harmony:specification_drafts
Sorry, guys. Thanks for your work anyway.
Comment 8•12 years ago
|
||
(In reply to Benjamin Peterson [:benjamin] from comment #7)
> Oh, indeed. The draft spec is very old (March '11). I should have been
> looking at this:
> http://wiki.ecmascript.org/doku.php?id=harmony:specification_drafts
>
> Sorry, guys. Thanks for your work anyway.
Ok. But are there any bugs get started with in the JS Engine? I mean I would like work with it?
Reporter | ||
Comment 9•12 years ago
|
||
You could see if there's anything interesting here: http://www.joshmatthews.net/bugsahoy/?jseng=1
You need to log in
before you can comment on or make changes to this bug.
Description
•