WebKit Bugzilla
New
Browse
Search+
Log In
×
Sign in with GitHub
or
Remember my login
Create Account
·
Forgot Password
Forgotten password account recovery
RESOLVED FIXED
167962
[ESnext] Implement Object Rest - Implementing Object Rest Destructuring
https://bugs.webkit.org/show_bug.cgi?id=167962
Summary
[ESnext] Implement Object Rest - Implementing Object Rest Destructuring
Caio Lima
Reported
2017-02-07 15:37:36 PST
Object Rest/Spread Properties for ECMAScript proposal now is in stage 3 and we can implement a prototype of it. Official proposal:
https://github.com/sebmarkbage/ecmascript-rest-spread
This new feature enable the following source code to be parsed and executed: ``` let { x, y, ...z } = { x: 1, y: 2, a: 3, b: 4 }; x; // 1 y; // 2 z; // { a: 3, b: 4 } ```
Attachments
WIP - Patch
(12.87 KB, patch)
2017-02-08 18:19 PST
,
Caio Lima
no flags
Details
Formatted Diff
Diff
Archive of layout-test-results from ews105 for mac-elcapitan-wk2
(1.02 MB, application/zip)
2017-02-08 19:15 PST
,
Build Bot
no flags
Details
Archive of layout-test-results from ews112 for mac-elcapitan
(1.67 MB, application/zip)
2017-02-08 19:33 PST
,
Build Bot
no flags
Details
Archive of layout-test-results from ews122 for ios-simulator-wk2
(1.08 MB, application/zip)
2017-02-08 19:56 PST
,
Build Bot
no flags
Details
Archive of layout-test-results from ews102 for mac-elcapitan
(946.68 KB, application/zip)
2017-02-08 19:59 PST
,
Build Bot
no flags
Details
Patch
(37.88 KB, patch)
2017-02-12 16:38 PST
,
Caio Lima
no flags
Details
Formatted Diff
Diff
Benchmark results
(83.28 KB, text/plain)
2017-02-17 16:44 PST
,
Caio Lima
no flags
Details
Patch
(51.24 KB, patch)
2017-02-25 21:36 PST
,
Caio Lima
no flags
Details
Formatted Diff
Diff
Patch
(52.76 KB, patch)
2017-03-04 14:23 PST
,
Caio Lima
no flags
Details
Formatted Diff
Diff
Archive of layout-test-results from ews101 for mac-elcapitan
(788.08 KB, application/zip)
2017-03-04 15:48 PST
,
Build Bot
no flags
Details
Archive of layout-test-results from ews107 for mac-elcapitan-wk2
(892.52 KB, application/zip)
2017-03-04 15:51 PST
,
Build Bot
no flags
Details
Archive of layout-test-results from ews113 for mac-elcapitan
(1.73 MB, application/zip)
2017-03-04 15:55 PST
,
Build Bot
no flags
Details
Archive of layout-test-results from ews125 for ios-simulator-wk2
(880.18 KB, application/zip)
2017-03-04 16:00 PST
,
Build Bot
no flags
Details
Patch
(55.00 KB, patch)
2017-03-04 20:36 PST
,
Caio Lima
no flags
Details
Formatted Diff
Diff
Patch
(54.98 KB, patch)
2017-03-08 21:29 PST
,
Caio Lima
no flags
Details
Formatted Diff
Diff
WIP - Patch RFC
(38.64 KB, patch)
2017-05-15 21:20 PDT
,
Caio Lima
buildbot
: commit-queue-
Details
Formatted Diff
Diff
WIP - Patch RFC
(38.60 KB, patch)
2017-05-16 05:33 PDT
,
Caio Lima
no flags
Details
Formatted Diff
Diff
Patch
(90.92 KB, patch)
2017-05-17 21:29 PDT
,
Caio Lima
buildbot
: commit-queue-
Details
Formatted Diff
Diff
Archive of layout-test-results from ews100 for mac-elcapitan
(1005.67 KB, application/zip)
2017-05-18 00:58 PDT
,
Build Bot
no flags
Details
Archive of layout-test-results from ews104 for mac-elcapitan-wk2
(957.13 KB, application/zip)
2017-05-18 01:01 PDT
,
Build Bot
no flags
Details
Archive of layout-test-results from ews116 for mac-elcapitan
(1.78 MB, application/zip)
2017-05-18 01:11 PDT
,
Build Bot
no flags
Details
Patch
(97.96 KB, patch)
2017-05-18 08:30 PDT
,
Caio Lima
no flags
Details
Formatted Diff
Diff
Patch
(103.65 KB, patch)
2017-05-18 19:58 PDT
,
Caio Lima
saam
: review-
saam
: commit-queue-
Details
Formatted Diff
Diff
Patch
(67.18 KB, patch)
2017-05-21 21:12 PDT
,
Caio Lima
no flags
Details
Formatted Diff
Diff
Patch
(264.26 KB, patch)
2017-05-27 17:46 PDT
,
Caio Lima
no flags
Details
Formatted Diff
Diff
Patch
(63.91 KB, patch)
2017-05-27 19:51 PDT
,
Caio Lima
no flags
Details
Formatted Diff
Diff
Patch
(65.42 KB, patch)
2017-05-31 20:53 PDT
,
Caio Lima
no flags
Details
Formatted Diff
Diff
Patch
(66.39 KB, patch)
2017-06-03 11:13 PDT
,
Caio Lima
no flags
Details
Formatted Diff
Diff
Patch
(67.64 KB, patch)
2017-06-13 07:06 PDT
,
Caio Lima
no flags
Details
Formatted Diff
Diff
Patch
(69.16 KB, patch)
2017-06-20 07:25 PDT
,
Caio Lima
buildbot
: commit-queue-
Details
Formatted Diff
Diff
Archive of layout-test-results from ews106 for mac-elcapitan-wk2
(1.06 MB, application/zip)
2017-06-20 08:51 PDT
,
Build Bot
no flags
Details
Patch
(69.14 KB, patch)
2017-06-25 08:08 PDT
,
Caio Lima
saam
: review+
Details
Formatted Diff
Diff
Patch
(69.42 KB, patch)
2017-06-27 16:55 PDT
,
Caio Lima
no flags
Details
Formatted Diff
Diff
Show Obsolete
(32)
View All
Add attachment
proposed patch, testcase, etc.
Caio Lima
Comment 1
2017-02-08 18:19:00 PST
Created
attachment 300994
[details]
WIP - Patch It just starts the implementation. A lot of optimizations need to be done yet and it is not following full specification. I'm going to improve excludedList verification performance using set instead of array.
WebKit Commit Bot
Comment 2
2017-02-08 18:22:15 PST
Attachment 300994
[details]
did not pass style-queue: ERROR: Source/JavaScriptCore/parser/Nodes.h:2143: Missing space before { [whitespace/braces] [5] ERROR: Source/JavaScriptCore/parser/Nodes.h:2148: Missing space before { [whitespace/braces] [5] ERROR: Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp:4043: Multi line control clauses should use braces. [whitespace/braces] [4] Total errors found: 3 in 6 files If any of these errors are false positives, please file a bug against check-webkit-style.
Build Bot
Comment 3
2017-02-08 19:15:09 PST
Comment on
attachment 300994
[details]
WIP - Patch
Attachment 300994
[details]
did not pass mac-wk2-ews (mac-wk2): Output:
http://webkit-queues.webkit.org/results/3029145
New failing tests: js/parser-syntax-check.html
Build Bot
Comment 4
2017-02-08 19:15:12 PST
Created
attachment 300998
[details]
Archive of layout-test-results from ews105 for mac-elcapitan-wk2 The attached test failures were seen while running run-webkit-tests on the mac-wk2-ews. Bot: ews105 Port: mac-elcapitan-wk2 Platform: Mac OS X 10.11.6
Build Bot
Comment 5
2017-02-08 19:33:55 PST
Comment on
attachment 300994
[details]
WIP - Patch
Attachment 300994
[details]
did not pass mac-debug-ews (mac): Output:
http://webkit-queues.webkit.org/results/3029332
New failing tests: js/parser-syntax-check.html
Build Bot
Comment 6
2017-02-08 19:33:58 PST
Created
attachment 301001
[details]
Archive of layout-test-results from ews112 for mac-elcapitan The attached test failures were seen while running run-webkit-tests on the mac-debug-ews. Bot: ews112 Port: mac-elcapitan Platform: Mac OS X 10.11.6
Build Bot
Comment 7
2017-02-08 19:56:00 PST
Comment on
attachment 300994
[details]
WIP - Patch
Attachment 300994
[details]
did not pass ios-sim-ews (ios-simulator-wk2): Output:
http://webkit-queues.webkit.org/results/3029322
New failing tests: js/parser-syntax-check.html
Build Bot
Comment 8
2017-02-08 19:56:03 PST
Created
attachment 301002
[details]
Archive of layout-test-results from ews122 for ios-simulator-wk2 The attached test failures were seen while running run-webkit-tests on the ios-sim-ews. Bot: ews122 Port: ios-simulator-wk2 Platform: Mac OS X 10.11.6
Build Bot
Comment 9
2017-02-08 19:59:37 PST
Comment on
attachment 300994
[details]
WIP - Patch
Attachment 300994
[details]
did not pass mac-ews (mac): Output:
http://webkit-queues.webkit.org/results/3029633
New failing tests: js/parser-syntax-check.html
Build Bot
Comment 10
2017-02-08 19:59:39 PST
Created
attachment 301003
[details]
Archive of layout-test-results from ews102 for mac-elcapitan The attached test failures were seen while running run-webkit-tests on the mac-ews. Bot: ews102 Port: mac-elcapitan Platform: Mac OS X 10.11.6
Caio Lima
Comment 11
2017-02-12 16:38:28 PST
Created
attachment 301324
[details]
Patch
WebKit Commit Bot
Comment 12
2017-02-12 16:40:00 PST
Attachment 301324
[details]
did not pass style-queue: ERROR: Source/JavaScriptCore/parser/Nodes.h:2143: Missing space before { [whitespace/braces] [5] ERROR: Source/JavaScriptCore/parser/Nodes.h:2148: Missing space before { [whitespace/braces] [5] Total errors found: 2 in 17 files If any of these errors are false positives, please file a bug against check-webkit-style.
Caio Lima
Comment 13
2017-02-12 16:41:17 PST
(In reply to
comment #11
)
> Created
attachment 301324
[details]
> Patch
This is the proposal for this implementation. I'm thinking in put it behind a flag. Performance comparison is coming soon.
Caio Lima
Comment 14
2017-02-17 16:44:05 PST
Created
attachment 302011
[details]
Benchmark results These changes are neutral.
Keith Miller
Comment 15
2017-02-21 16:22:18 PST
Comment on
attachment 301324
[details]
Patch View in context:
https://bugs.webkit.org/attachment.cgi?id=301324&action=review
I think it looks pretty good. I have a few comments, however.
> Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp:4051 > + if (UNLIKELY(m_containsRestElement)) { > + RefPtr<RegisterID> propertyName = generator.emitLoad(nullptr, target.propertyName); > + generator.emitDirectPutByVal(excludedList.get(), excludedIndex.get(), propertyName.get()); > + generator.emitInc(excludedIndex.get());
Don't we statically know what we are going to put in the excludedList at this point? Can we just add this array to the constant pool? If we do, we should probably freeze so the array can't be modified.
> Source/JavaScriptCore/parser/Parser.cpp:1019 > + if (kind == DestructuringKind::DestructureToExpressions && !innerPattern) > + return 0; > + failIfFalse(innerPattern, "Cannot parse this destructuring pattern");
I think you just want to do propageError(); here
> Source/JavaScriptCore/runtime/JSGlobalObject.h:117 > + macro(Set, set, set, JSSet, Set, object) \
Why did you move this?
Caio Lima
Comment 16
2017-02-22 18:20:06 PST
Comment on
attachment 301324
[details]
Patch View in context:
https://bugs.webkit.org/attachment.cgi?id=301324&action=review
>> Source/JavaScriptCore/parser/Parser.cpp:1019 >> + failIfFalse(innerPattern, "Cannot parse this destructuring pattern"); > > I think you just want to do propageError(); here
Sure. This way we keep the error message more clear.
>> Source/JavaScriptCore/runtime/JSGlobalObject.h:117 >> + macro(Set, set, set, JSSet, Set, object) \ > > Why did you move this?
I'm using it in copyPropertiesData (Source/JavaScriptCore/builtins/GlobalOperations.js) because it makes the algorithm O(n + m) where n = Object.getOwnPropertyNames(source).length and m = excludedList.length. Does it make sense?
Caio Lima
Comment 17
2017-02-22 19:50:02 PST
Comment on
attachment 301324
[details]
Patch View in context:
https://bugs.webkit.org/attachment.cgi?id=301324&action=review
>> Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp:4051 >> + generator.emitInc(excludedIndex.get()); > > Don't we statically know what we are going to put in the excludedList at this point? Can we just add this array to the constant pool? If we do, we should probably freeze so the array can't be modified.
Yes. I agree. However how can we proceed with that? Is it possible to create an JSArray without ExecState? I also have the same question for JSSet. If there is a way to create them here, please let me know. I already know how to get identifiers as constant, but should be good how could I allocate constant Array (better if it is a JSSet).
Caio Lima
Comment 18
2017-02-25 21:36:02 PST
Created
attachment 302774
[details]
Patch
WebKit Commit Bot
Comment 19
2017-02-25 21:37:07 PST
Attachment 302774
[details]
did not pass style-queue: ERROR: Source/JavaScriptCore/parser/Nodes.h:2143: Missing space before { [whitespace/braces] [5] ERROR: Source/JavaScriptCore/parser/Nodes.h:2148: Missing space before { [whitespace/braces] [5] Total errors found: 2 in 26 files If any of these errors are false positives, please file a bug against check-webkit-style.
Caio Lima
Comment 20
2017-02-25 21:37:19 PST
(In reply to
comment #18
)
> Created
attachment 302774
[details]
> Patch
Updated implementation using constant pool to HashSets. Let's see what EWS thinks about it.
Keith Miller
Comment 21
2017-03-03 14:50:03 PST
Comment on
attachment 302774
[details]
Patch View in context:
https://bugs.webkit.org/attachment.cgi?id=302774&action=review
I think it's looking pretty good, I have a couple of style comments, however.
> Source/JavaScriptCore/builtins/GlobalOperations.js:95 > + if (!excludedSet.has(nextKey)) {
I think you need to make private symbols for these properties. If a user deletes the has property from Set.prototype your code won't work.
> Source/JavaScriptCore/builtins/GlobalOperations.js:99 > + @Object.defineProperty(target, nextKey, {value: propValue, enumerable: true, writable: true, configurable: true});
ditto.
> Source/JavaScriptCore/bytecode/CodeBlock.cpp:1944 > + if (!setConstantDeconstructionSetRegisters(vm, unlinkedCodeBlock->constantDestructSets()))
I would call this setConstantIdentifierSetRegisters.
> Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.h:71 > +typedef std::pair<HashSet<UniquedStringImpl*>, unsigned> ConstantDeconstructSetEntry;
I would call this ConstantIndentifierSetEntry
> Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.h:230 > + const Vector<ConstantDeconstructSetEntry>& constantDestructSets() { return m_constantObjDeconstructSets; }
Style: We normally don't abbreviate names like this. but I would also change this to constantIdentifierSets().
> Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.h:461 > + Vector<ConstantDeconstructSetEntry> m_constantObjDeconstructSets;
ditto.
> Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:1927 > + if (!(entry.first == set))
I would do if (entry.first != set), although you might need to add an operator != to HashSet.
> Source/JavaScriptCore/runtime/ScriptExecutable.cpp:193 > + // At this point, the CodeBlock creation can fail trying to > + // allocate JSSet constants in CodeBlock::setConstantDeconstructionSetRegister. > + // Since the only exception from it is OOM, we throw this kind of exception.
I don't think you need this comment.
Caio Lima
Comment 22
2017-03-04 14:23:14 PST
Created
attachment 303408
[details]
Patch
WebKit Commit Bot
Comment 23
2017-03-04 14:25:02 PST
Attachment 303408
[details]
did not pass style-queue: ERROR: Source/JavaScriptCore/parser/Nodes.h:2143: Missing space before { [whitespace/braces] [5] ERROR: Source/JavaScriptCore/parser/Nodes.h:2148: Missing space before { [whitespace/braces] [5] Total errors found: 2 in 28 files If any of these errors are false positives, please file a bug against check-webkit-style.
Caio Lima
Comment 24
2017-03-04 14:25:13 PST
(In reply to
comment #22
)
> Created
attachment 303408
[details]
> Patch
Thank you very much for the review Keith. Updated based in you comments. Let's see what EWS thinks about it.
Build Bot
Comment 25
2017-03-04 15:09:46 PST
Comment on
attachment 303408
[details]
Patch
Attachment 303408
[details]
did not pass jsc-ews (mac): Output:
http://webkit-queues.webkit.org/results/3242966
New failing tests: jsc-layout-tests.yaml/js/script-tests/parser-syntax-check.js.layout-no-cjit jsc-layout-tests.yaml/js/script-tests/parser-syntax-check.js.layout-dfg-eager-no-cjit stress/object-rest-deconstruct.js.dfg-maximal-flush-validate-no-cjit stress/object-rest-deconstruct.js.ftl-eager-no-cjit stress/object-rest-deconstruct.js.ftl-eager jsc-layout-tests.yaml/js/script-tests/parser-syntax-check.js.layout-ftl-no-cjit stress/object-rest-deconstruct.js.no-ftl stress/object-rest-deconstruct.js.dfg-eager-no-cjit-validate jsc-layout-tests.yaml/js/script-tests/parser-syntax-check.js.layout-no-ftl stress/object-rest-deconstruct.js.ftl-no-cjit-small-pool jsc-layout-tests.yaml/js/script-tests/parser-syntax-check.js.layout-ftl-eager-no-cjit stress/object-rest-deconstruct.js.ftl-no-cjit-no-inline-validate jsc-layout-tests.yaml/js/script-tests/parser-syntax-check.js.layout-no-llint stress/object-rest-deconstruct.js.ftl-no-cjit-validate-sampling-profiler stress/object-rest-deconstruct.js.ftl-no-cjit-no-put-stack-validate jsc-layout-tests.yaml/js/script-tests/parser-syntax-check.js.layout stress/object-rest-deconstruct.js.default stress/object-rest-deconstruct.js.no-cjit-collect-continuously stress/object-rest-deconstruct.js.no-cjit-validate-phases stress/object-rest-deconstruct.js.no-llint stress/object-rest-deconstruct.js.dfg-eager
Build Bot
Comment 26
2017-03-04 15:48:04 PST
Comment on
attachment 303408
[details]
Patch
Attachment 303408
[details]
did not pass mac-ews (mac): Output:
http://webkit-queues.webkit.org/results/3243039
New failing tests: js/parser-syntax-check.html
Build Bot
Comment 27
2017-03-04 15:48:11 PST
Created
attachment 303411
[details]
Archive of layout-test-results from ews101 for mac-elcapitan The attached test failures were seen while running run-webkit-tests on the mac-ews. Bot: ews101 Port: mac-elcapitan Platform: Mac OS X 10.11.6
Build Bot
Comment 28
2017-03-04 15:51:36 PST
Comment on
attachment 303408
[details]
Patch
Attachment 303408
[details]
did not pass mac-wk2-ews (mac-wk2): Output:
http://webkit-queues.webkit.org/results/3243050
New failing tests: js/parser-syntax-check.html
Build Bot
Comment 29
2017-03-04 15:51:42 PST
Created
attachment 303412
[details]
Archive of layout-test-results from ews107 for mac-elcapitan-wk2 The attached test failures were seen while running run-webkit-tests on the mac-wk2-ews. Bot: ews107 Port: mac-elcapitan-wk2 Platform: Mac OS X 10.11.6
Build Bot
Comment 30
2017-03-04 15:55:05 PST
Comment on
attachment 303408
[details]
Patch
Attachment 303408
[details]
did not pass mac-debug-ews (mac): Output:
http://webkit-queues.webkit.org/results/3243052
New failing tests: js/parser-syntax-check.html
Build Bot
Comment 31
2017-03-04 15:55:11 PST
Created
attachment 303413
[details]
Archive of layout-test-results from ews113 for mac-elcapitan The attached test failures were seen while running run-webkit-tests on the mac-debug-ews. Bot: ews113 Port: mac-elcapitan Platform: Mac OS X 10.11.6
Build Bot
Comment 32
2017-03-04 16:00:22 PST
Comment on
attachment 303408
[details]
Patch
Attachment 303408
[details]
did not pass ios-sim-ews (ios-simulator-wk2): Output:
http://webkit-queues.webkit.org/results/3243053
New failing tests: js/parser-syntax-check.html
Build Bot
Comment 33
2017-03-04 16:00:26 PST
Created
attachment 303415
[details]
Archive of layout-test-results from ews125 for ios-simulator-wk2 The attached test failures were seen while running run-webkit-tests on the ios-sim-ews. Bot: ews125 Port: ios-simulator-wk2 Platform: Mac OS X 10.11.6
Caio Lima
Comment 34
2017-03-04 20:36:48 PST
Created
attachment 303438
[details]
Patch
WebKit Commit Bot
Comment 35
2017-03-04 20:39:49 PST
Attachment 303438
[details]
did not pass style-queue: ERROR: Source/JavaScriptCore/parser/Nodes.h:2143: Missing space before { [whitespace/braces] [5] ERROR: Source/JavaScriptCore/parser/Nodes.h:2148: Missing space before { [whitespace/braces] [5] Total errors found: 2 in 30 files If any of these errors are false positives, please file a bug against check-webkit-style.
Caio Lima
Comment 36
2017-03-07 19:32:29 PST
Ping review
Keith Miller
Comment 37
2017-03-08 09:29:49 PST
Comment on
attachment 303438
[details]
Patch View in context:
https://bugs.webkit.org/attachment.cgi?id=303438&action=review
One more, small set of changes then the patch should be gtg. Thanks for following through on this!
> Source/JavaScriptCore/builtins/GlobalOperations.js:94 > + for (let nextKey of keys) {
I don't think this can be a for of loop since it uses the iterator protocol, which is, sadly, observable. Instead you should do an indexed loop. Getting the length property of keys should be fine since it's an array. For some reason I thought I made this comment last time but I guess I forgot :(.
> Source/JavaScriptCore/bytecode/CodeBlock.cpp:2410 > + for (size_t i = 0; i < count; i++) {
I think you could do: for (const auto& entry : constants) Your current code will use the copy constructor of HashSet, which we can avoid.
> Source/JavaScriptCore/bytecode/CodeBlock.cpp:2418 > + HashSet<UniquedStringImpl*> set = entry.first;
you can make this: const HashSet<UniquedStringImpl*>& set = entry.first; for the same reason as above.
Caio Lima
Comment 38
2017-03-08 21:25:24 PST
Comment on
attachment 303438
[details]
Patch View in context:
https://bugs.webkit.org/attachment.cgi?id=303438&action=review
Thank you very much for the reviews
>> Source/JavaScriptCore/builtins/GlobalOperations.js:94 >> + for (let nextKey of keys) { > > I don't think this can be a for of loop since it uses the iterator protocol, which is, sadly, observable. Instead you should do an indexed loop. Getting the length property of keys should be fine since it's an array. > > For some reason I thought I made this comment last time but I guess I forgot :(.
You are right. Thanks catching it. Changed.
>> Source/JavaScriptCore/bytecode/CodeBlock.cpp:2410 >> + for (size_t i = 0; i < count; i++) { > > I think you could do: > for (const auto& entry : constants) > > Your current code will use the copy constructor of HashSet, which we can avoid.
Agreed and changed.
>> Source/JavaScriptCore/bytecode/CodeBlock.cpp:2418 >> + HashSet<UniquedStringImpl*> set = entry.first; > > you can make this: > const HashSet<UniquedStringImpl*>& set = entry.first; > > for the same reason as above.
Ditto.
Caio Lima
Comment 39
2017-03-08 21:29:36 PST
Created
attachment 303896
[details]
Patch
WebKit Commit Bot
Comment 40
2017-03-08 21:31:26 PST
Attachment 303896
[details]
did not pass style-queue: ERROR: Source/JavaScriptCore/parser/Nodes.h:2143: Missing space before { [whitespace/braces] [5] ERROR: Source/JavaScriptCore/parser/Nodes.h:2148: Missing space before { [whitespace/braces] [5] Total errors found: 2 in 30 files If any of these errors are false positives, please file a bug against check-webkit-style.
Keith Miller
Comment 41
2017-03-09 10:15:43 PST
Comment on
attachment 303896
[details]
Patch View in context:
https://bugs.webkit.org/attachment.cgi?id=303896&action=review
r=me.
> Source/JavaScriptCore/builtins/GlobalOperations.js:92 > + let from = @toObject(source);
Nit: You could just do: @Object(source) here but this is probably fine.
Caio Lima
Comment 42
2017-03-09 15:20:54 PST
Comment on
attachment 303896
[details]
Patch Thank you very much for the review Keith!
WebKit Commit Bot
Comment 43
2017-03-09 18:00:37 PST
Comment on
attachment 303896
[details]
Patch Clearing flags on attachment: 303896 Committed
r213697
: <
http://trac.webkit.org/changeset/213697
>
WebKit Commit Bot
Comment 44
2017-03-09 18:00:44 PST
All reviewed patches have been landed. Closing bug.
Saam Barati
Comment 45
2017-05-11 18:26:33 PDT
Comment on
attachment 303896
[details]
Patch View in context:
https://bugs.webkit.org/attachment.cgi?id=303896&action=review
> Source/JavaScriptCore/parser/Parser.cpp:1017 > + if (kind == DestructuringKind::DestructureToExpressions && !innerPattern)
This line of code looks wrong. Why do we only care about DestructureToExpressions?
Caio Lima
Comment 46
2017-05-12 09:22:56 PDT
Comment on
attachment 303896
[details]
Patch View in context:
https://bugs.webkit.org/attachment.cgi?id=303896&action=review
>> Source/JavaScriptCore/parser/Parser.cpp:1017 >> + if (kind == DestructuringKind::DestructureToExpressions && !innerPattern) > > This line of code looks wrong. Why do we only care about DestructureToExpressions?
I think you are right. We should care about other cases as well IMHO. I'm going to handle that in another bug. Also I don't remember any test to check the condition when innerPatter != null. We are missing this piece of code.
Mark Lam
Comment 47
2017-05-15 17:02:16 PDT
I'm going to roll this out. Let's re-land after we have a proper fix all the issues.
Mark Lam
Comment 48
2017-05-15 17:23:56 PDT
This has been rolled out in
r216891
: <
http://trac.webkit.org/r216891
>.
Caio Lima
Comment 49
2017-05-15 21:20:35 PDT
Created
attachment 310219
[details]
WIP - Patch RFC The problem of last implementation is that it was considering that excludedList was always statically defined, but the example below shows that it's not true: ``` let a = "foo"; let {[a]: b, ...r} = {foo: 2, bar 3}; // b == 2; // r.bar == 3; ``` This way, I decided change my approach and emit bytecode to fill excludedList, and then now we can carry the case above properly. I added the test was in our suite but I would like to check EWS and get feedback as well here. The previous implementations was faster and I'm thinking in a way to allow static usage that probably will the common case for this feature, but I think it's worth it bring it in another Patch. Also, I think it's a good idea put this feature behind a flag before commit.
Build Bot
Comment 50
2017-05-15 21:22:47 PDT
Attachment 310219
[details]
did not pass style-queue: ERROR: Source/JavaScriptCore/parser/Nodes.h:2128: Missing space before { [whitespace/braces] [5] ERROR: Source/JavaScriptCore/parser/Nodes.h:2133: Missing space before { [whitespace/braces] [5] Total errors found: 2 in 20 files If any of these errors are false positives, please file a bug against check-webkit-style.
Build Bot
Comment 51
2017-05-15 22:07:30 PDT
Comment on
attachment 310219
[details]
WIP - Patch RFC
Attachment 310219
[details]
did not pass jsc-ews (mac): Output:
http://webkit-queues.webkit.org/results/3748187
New failing tests: jsc-layout-tests.yaml/js/script-tests/parser-syntax-check.js.layout-no-cjit jsc-layout-tests.yaml/js/script-tests/parser-syntax-check.js.layout-ftl-no-cjit jsc-layout-tests.yaml/js/script-tests/parser-syntax-check.js.layout stress/object-rest-deconstruct.js.dfg-eager-no-cjit-validate stress/object-rest-deconstruct.js.no-ftl stress/object-rest-deconstruct.js.no-llint stress/object-rest-deconstruct.js.ftl-eager-no-cjit-b3o1 stress/object-rest-deconstruct.js.ftl-eager stress/object-rest-deconstruct.js.ftl-no-cjit-b3o1 jsc-layout-tests.yaml/js/script-tests/parser-syntax-check.js.layout-no-ftl stress/object-rest-deconstruct.js.ftl-no-cjit-small-pool jsc-layout-tests.yaml/js/script-tests/parser-syntax-check.js.layout-ftl-eager-no-cjit stress/object-rest-deconstruct.js.ftl-no-cjit-no-inline-validate jsc-layout-tests.yaml/js/script-tests/parser-syntax-check.js.layout-no-llint jsc-layout-tests.yaml/js/script-tests/parser-syntax-check.js.layout-dfg-eager-no-cjit stress/object-rest-deconstruct.js.default stress/object-rest-deconstruct.js.dfg-maximal-flush-validate-no-cjit stress/object-rest-deconstruct.js.dfg-eager stress/object-rest-deconstruct.js.ftl-eager-no-cjit stress/object-rest-deconstruct.js.ftl-no-cjit-validate-sampling-profiler stress/object-rest-deconstruct.js.ftl-no-cjit-no-put-stack-validate stress/object-rest-deconstruct.js.no-cjit-collect-continuously stress/object-rest-deconstruct.js.no-cjit-validate-phases
Caio Lima
Comment 52
2017-05-16 05:33:09 PDT
Created
attachment 310256
[details]
WIP - Patch RFC Fixing failures in EWS.
Build Bot
Comment 53
2017-05-16 05:34:06 PDT
Attachment 310256
[details]
did not pass style-queue: ERROR: Source/JavaScriptCore/parser/Nodes.h:2128: Missing space before { [whitespace/braces] [5] ERROR: Source/JavaScriptCore/parser/Nodes.h:2133: Missing space before { [whitespace/braces] [5] Total errors found: 2 in 20 files If any of these errors are false positives, please file a bug against check-webkit-style.
Mark Lam
Comment 54
2017-05-16 10:25:24 PDT
Comment on
attachment 310256
[details]
WIP - Patch RFC View in context:
https://bugs.webkit.org/attachment.cgi?id=310256&action=review
> Source/JavaScriptCore/parser/Nodes.h:2133 > - m_targetPatterns.append(Entry { Identifier(), propertyExpression, false, pattern, defaultValue }); > + m_targetPatterns.append(Entry{ Identifier(), propertyExpression, false, pattern, defaultValue, bindingType });
Don't pass a stack instance of Identifier here. Instead, you should have appendEntry() take a VM&, and pass vm.propertyNames->nullIdentifier here instead.
Saam Barati
Comment 55
2017-05-16 11:05:05 PDT
(In reply to Caio Lima from
comment #49
)
> Created
attachment 310219
[details]
> WIP - Patch RFC > > The problem of last implementation is that it was considering that > excludedList was always statically defined, but the example below shows that > it's not true: > > ``` > let a = "foo"; > let {[a]: b, ...r} = {foo: 2, bar 3}; > // b == 2; > // r.bar == 3; > ``` > > This way, I decided change my approach and emit bytecode to fill > excludedList, and then now we can carry the case above properly. > I added the test was in our suite but I would like to check EWS and get > feedback as well here.
This sounds right to me when we have computed properties. However, I think it's a good optimization to build the list at compile time when we know all the properties statically. So I think we should have a combination of the old code and the new code depending on some simple static analysis.
> > The previous implementations was faster and I'm thinking in a way to allow > static usage that probably will the common case for this feature, but I > think it's worth it bring it in another Patch. > > Also, I think it's a good idea put this feature behind a flag before commit.
Yeah this sounds good. You could probably just put the feature check in the parser.
Caio Lima
Comment 56
2017-05-17 21:29:18 PDT
Created
attachment 310484
[details]
Patch Fixed Mark's and Saam's comments. I also created the build flags. Let's see EWS results and it's also ready for another review round.
Build Bot
Comment 57
2017-05-17 21:30:56 PDT
Attachment 310484
[details]
did not pass style-queue: ERROR: Source/JavaScriptCore/parser/Nodes.h:2128: Missing space before { [whitespace/braces] [5] ERROR: Source/JavaScriptCore/parser/Nodes.h:2133: Missing space before { [whitespace/braces] [5] ERROR: Source/WebKit/mac/Configurations/FeatureDefines.xcconfig:0: Any changes made to FeatureDefines should be made to all of them (changed file does not match Source/WebCore/PAL/Configurations/FeatureDefines.xcconfig). Use sync-feature-defines if possible. [featuredefines/equality] [5] ERROR: Source/WebCore/Configurations/FeatureDefines.xcconfig:0: Any changes made to FeatureDefines should be made to all of them (changed file does not match Source/WebCore/PAL/Configurations/FeatureDefines.xcconfig). Use sync-feature-defines if possible. [featuredefines/equality] [5] ERROR: Source/JavaScriptCore/Configurations/FeatureDefines.xcconfig:0: Any changes made to FeatureDefines should be made to all of them (changed file does not match Source/WebCore/PAL/Configurations/FeatureDefines.xcconfig). Use sync-feature-defines if possible. [featuredefines/equality] [5] ERROR: Tools/TestWebKitAPI/Configurations/FeatureDefines.xcconfig:0: Any changes made to FeatureDefines should be made to all of them (changed file does not match Source/WebCore/PAL/Configurations/FeatureDefines.xcconfig). Use sync-feature-defines if possible. [featuredefines/equality] [5] ERROR: Source/JavaScriptCore/parser/ASTBuilder.h:953: Missing space after , [whitespace/comma] [3] ERROR: Source/WebKit2/Configurations/FeatureDefines.xcconfig:0: Any changes made to FeatureDefines should be made to all of them (changed file does not match Source/WebCore/PAL/Configurations/FeatureDefines.xcconfig). Use sync-feature-defines if possible. [featuredefines/equality] [5] ERROR: Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp:4101: One line control clauses should not use braces. [whitespace/braces] [4] Total errors found: 9 in 32 files If any of these errors are false positives, please file a bug against check-webkit-style.
Build Bot
Comment 58
2017-05-17 22:18:20 PDT
Comment on
attachment 310484
[details]
Patch
Attachment 310484
[details]
did not pass jsc-ews (mac): Output:
http://webkit-queues.webkit.org/results/3766894
New failing tests: jsc-layout-tests.yaml/js/script-tests/parser-syntax-check.js.layout-no-cjit jsc-layout-tests.yaml/js/script-tests/parser-syntax-check.js.layout-ftl-no-cjit jsc-layout-tests.yaml/js/script-tests/parser-syntax-check.js.layout stress/object-rest-deconstruct.js.dfg-eager-no-cjit-validate stress/object-rest-deconstruct.js.no-ftl stress/object-rest-deconstruct.js.no-llint stress/object-rest-deconstruct.js.ftl-eager-no-cjit-b3o1 stress/object-rest-deconstruct.js.ftl-eager stress/object-rest-deconstruct.js.ftl-no-cjit-b3o1 jsc-layout-tests.yaml/js/script-tests/parser-syntax-check.js.layout-no-ftl stress/object-rest-deconstruct.js.ftl-no-cjit-small-pool jsc-layout-tests.yaml/js/script-tests/parser-syntax-check.js.layout-ftl-eager-no-cjit stress/object-rest-deconstruct.js.ftl-no-cjit-no-inline-validate jsc-layout-tests.yaml/js/script-tests/parser-syntax-check.js.layout-no-llint jsc-layout-tests.yaml/js/script-tests/parser-syntax-check.js.layout-dfg-eager-no-cjit stress/object-rest-deconstruct.js.default stress/object-rest-deconstruct.js.dfg-maximal-flush-validate-no-cjit stress/object-rest-deconstruct.js.dfg-eager stress/object-rest-deconstruct.js.ftl-eager-no-cjit stress/object-rest-deconstruct.js.ftl-no-cjit-validate-sampling-profiler stress/object-rest-deconstruct.js.ftl-no-cjit-no-put-stack-validate stress/object-rest-deconstruct.js.no-cjit-collect-continuously stress/object-rest-deconstruct.js.no-cjit-validate-phases
Build Bot
Comment 59
2017-05-18 00:58:50 PDT
Comment on
attachment 310484
[details]
Patch
Attachment 310484
[details]
did not pass mac-ews (mac): Output:
http://webkit-queues.webkit.org/results/3767437
New failing tests: js/parser-syntax-check.html
Build Bot
Comment 60
2017-05-18 00:58:52 PDT
Created
attachment 310495
[details]
Archive of layout-test-results from ews100 for mac-elcapitan The attached test failures were seen while running run-webkit-tests on the mac-ews. Bot: ews100 Port: mac-elcapitan Platform: Mac OS X 10.11.6
Build Bot
Comment 61
2017-05-18 01:01:47 PDT
Comment on
attachment 310484
[details]
Patch
Attachment 310484
[details]
did not pass mac-wk2-ews (mac-wk2): Output:
http://webkit-queues.webkit.org/results/3767439
New failing tests: js/parser-syntax-check.html
Build Bot
Comment 62
2017-05-18 01:01:48 PDT
Created
attachment 310496
[details]
Archive of layout-test-results from ews104 for mac-elcapitan-wk2 The attached test failures were seen while running run-webkit-tests on the mac-wk2-ews. Bot: ews104 Port: mac-elcapitan-wk2 Platform: Mac OS X 10.11.6
Build Bot
Comment 63
2017-05-18 01:10:59 PDT
Comment on
attachment 310484
[details]
Patch
Attachment 310484
[details]
did not pass mac-debug-ews (mac): Output:
http://webkit-queues.webkit.org/results/3767443
New failing tests: js/parser-syntax-check.html
Build Bot
Comment 64
2017-05-18 01:11:01 PDT
Created
attachment 310498
[details]
Archive of layout-test-results from ews116 for mac-elcapitan The attached test failures were seen while running run-webkit-tests on the mac-debug-ews. Bot: ews116 Port: mac-elcapitan Platform: Mac OS X 10.11.6
Caio Lima
Comment 65
2017-05-18 08:30:16 PDT
Created
attachment 310510
[details]
Patch Fixed flag configuration.
Build Bot
Comment 66
2017-05-18 08:32:41 PDT
Attachment 310510
[details]
did not pass style-queue: ERROR: Source/JavaScriptCore/parser/Nodes.h:2128: Missing space before { [whitespace/braces] [5] ERROR: Source/JavaScriptCore/parser/Nodes.h:2133: Missing space before { [whitespace/braces] [5] ERROR: Source/JavaScriptCore/parser/ASTBuilder.h:953: Missing space after , [whitespace/comma] [3] ERROR: Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp:4101: One line control clauses should not use braces. [whitespace/braces] [4] Total errors found: 4 in 33 files If any of these errors are false positives, please file a bug against check-webkit-style.
Caio Lima
Comment 67
2017-05-18 19:58:40 PDT
Created
attachment 310597
[details]
Patch This version is disabling the recursive destructuring and in this implementation the following code results in syntax error: ``` let {a, ...{b}} = {a: 1, b: 2}; ```
Build Bot
Comment 68
2017-05-18 20:01:53 PDT
Attachment 310597
[details]
did not pass style-queue: ERROR: Source/JavaScriptCore/parser/Nodes.h:2128: Missing space before { [whitespace/braces] [5] ERROR: Source/JavaScriptCore/parser/Nodes.h:2133: Missing space before { [whitespace/braces] [5] Total errors found: 2 in 34 files If any of these errors are false positives, please file a bug against check-webkit-style.
Saam Barati
Comment 69
2017-05-21 14:32:05 PDT
Comment on
attachment 310597
[details]
Patch View in context:
https://bugs.webkit.org/attachment.cgi?id=310597&action=review
> Source/JavaScriptCore/Configurations/FeatureDefines.xcconfig:78 > +ENABLE_ESNEXT_OBJ_REST_SPREAD = ENABLE_ESNEXT_OBJ_REST_SPREAD;
Lets make it a runtime option, not a compile time one.
> Source/JavaScriptCore/bytecode/CodeBlock.cpp:890 > + m_constantRegisters[entry.second].set(vm, this, JSValue(jsSet));
I don't think there is a need for the JSValue(jsSet) here.
> Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:1967 > + unsigned index = m_nextConstantOffset; > + m_constantPoolRegisters.append(FirstConstantRegisterIndex + m_nextConstantOffset); > + ++m_nextConstantOffset; > + m_codeBlock->addSetConstant(set); > + RegisterID* m_setRegister = &m_constantPoolRegisters[index];
It looks like we do this work in a few places, perhaps we can write a function that abstracts it, like: ``` unsigned addConstantIndex() { unsigned index = m_nextConstantOffset; m_constantPoolRegisters.append(FirstConstantRegisterIndex + m_nextConstantOffset); ++m_nextConstantOffset; return index; } or even make the function return std::pair<unsigned, RegisterID*> ``` and then you can just be like: ``` unsigned index = addConstantIndex();``` Maybe it's not worth it, but just a suggestion since I'm not a big fan of repeating nearly identical code.
> Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp:4071 > + excludedList = generator.emitNewArray(generator.newTemporary(), 0, 0); > + excludedIndex = generator.newTemporary(); > + generator.emitLoad(excludedIndex.get(), jsNumber(0));
Please don't do this. You should just build the Set in bytecode. There is no need to first build an array, and then have your builtin convert the array to a set.
> Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp:4079 > + // Should not emit get_by_id for indexed ones.
No need for this comment. We have code like this all over the place.
> Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp:-4076 > - RefPtr<RegisterID> propertyName = generator.emitNode(target.propertyExpression);
Can you add an assertion here of what the bindingType is? Also, I think it's worth adding an assertion that this is the last thing in the list, otherwise this algorithm is broken.
> Source/JavaScriptCore/parser/Parser.cpp:980 > + if (kind == DestructuringKind::DestructureToExpressions) > + return 0;
bad indentation
> Source/JavaScriptCore/parser/Parser.cpp:1070 > + if (UNLIKELY(match(DOTDOTDOT))) {
Is this syntactically required to be the last element in the destrucruting clause? Also, no need for UNLIKELY, we're just going to negatively impact parsing code that uses this.
Caio Lima
Comment 70
2017-05-21 15:50:46 PDT
Comment on
attachment 310597
[details]
Patch View in context:
https://bugs.webkit.org/attachment.cgi?id=310597&action=review
>> Source/JavaScriptCore/Configurations/FeatureDefines.xcconfig:78 >> +ENABLE_ESNEXT_OBJ_REST_SPREAD = ENABLE_ESNEXT_OBJ_REST_SPREAD; > > Lets make it a runtime option, not a compile time one.
ok
>> Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp:4071 >> + generator.emitLoad(excludedIndex.get(), jsNumber(0)); > > Please don't do this. You should just build the Set in bytecode. There is no need to first build an array, and then have your builtin convert the array to a set.
I also think it's better use JSSet, but there is a thing that I'm worried: If our implementation uses JSSet directly and then user overrides the Set.prototype.add, the rest semantics will be broken. like: ``` Set.prototype.add = () => false; let {a, b, ...r} = {a: 1, b: 2, c: 3, d: 4}; // here "r" will contain "a" and "b", and it will be wrong. ``` Do you think it is right?
>> Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp:-4076 >> - RefPtr<RegisterID> propertyName = generator.emitNode(target.propertyExpression); > > Can you add an assertion here of what the bindingType is? Also, I think it's worth adding an assertion that this is the last thing in the list, otherwise this algorithm is broken.
ok
>> Source/JavaScriptCore/parser/Parser.cpp:980 >> + return 0; > > bad indentation
Oops.
>> Source/JavaScriptCore/parser/Parser.cpp:1070 >> + if (UNLIKELY(match(DOTDOTDOT))) { > > Is this syntactically required to be the last element in the destrucruting clause? > Also, no need for UNLIKELY, we're just going to negatively impact parsing code that uses this.
Yes. I will remove the UNLIKELY here.
Saam Barati
Comment 71
2017-05-21 16:31:53 PDT
(In reply to Caio Lima from
comment #70
)
> Comment on
attachment 310597
[details]
> Patch > > View in context: >
https://bugs.webkit.org/attachment.cgi?id=310597&action=review
> > >> Source/JavaScriptCore/Configurations/FeatureDefines.xcconfig:78 > >> +ENABLE_ESNEXT_OBJ_REST_SPREAD = ENABLE_ESNEXT_OBJ_REST_SPREAD; > > > > Lets make it a runtime option, not a compile time one. > > ok > > >> Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp:4071 > >> + generator.emitLoad(excludedIndex.get(), jsNumber(0)); > > > > Please don't do this. You should just build the Set in bytecode. There is no need to first build an array, and then have your builtin convert the array to a set. > > I also think it's better use JSSet, but there is a thing that I'm worried: > > If our implementation uses JSSet directly and then user overrides the > Set.prototype.add, the rest semantics will be broken. >
This is an issue in all our builtins. They take care yo use private identifiers. You’ll need to do the same here, and make sure SetPrototye sets up your private identifier to the function you want.
> like: > > ``` > Set.prototype.add = () => false; > > let {a, b, ...r} = {a: 1, b: 2, c: 3, d: 4}; > > // here "r" will contain "a" and "b", and it will be wrong. > > ``` > > Do you think it is right? > > >> Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp:-4076 > >> - RefPtr<RegisterID> propertyName = generator.emitNode(target.propertyExpression); > > > > Can you add an assertion here of what the bindingType is? Also, I think it's worth adding an assertion that this is the last thing in the list, otherwise this algorithm is broken. > > ok > > >> Source/JavaScriptCore/parser/Parser.cpp:980 > >> + return 0; > > > > bad indentation > > Oops. > > >> Source/JavaScriptCore/parser/Parser.cpp:1070 > >> + if (UNLIKELY(match(DOTDOTDOT))) { > > > > Is this syntactically required to be the last element in the destrucruting clause? > > Also, no need for UNLIKELY, we're just going to negatively impact parsing code that uses this. > > Yes. I will remove the UNLIKELY here.
Saam Barati
Comment 72
2017-05-21 16:32:25 PDT
You also need to set up an identifier to retrieve the Set constructor from global scope.
Caio Lima
Comment 73
2017-05-21 16:53:53 PDT
(In reply to Saam Barati from
comment #72
)
> You also need to set up an identifier to retrieve the Set constructor from > global scope.
You are right. I didn't update it before because I was thinking it wasn't possible, but I just realized that ```copyDataProperties``` is called this way. I'm going to fix it ASAP.
Caio Lima
Comment 74
2017-05-21 21:12:49 PDT
Created
attachment 310831
[details]
Patch Addressed Saam's review
Build Bot
Comment 75
2017-05-21 21:14:59 PDT
Attachment 310831
[details]
did not pass style-queue: ERROR: Source/JavaScriptCore/parser/Nodes.h:2128: Missing space before { [whitespace/braces] [5] ERROR: Source/JavaScriptCore/parser/Nodes.h:2133: Missing space before { [whitespace/braces] [5] Total errors found: 2 in 28 files If any of these errors are false positives, please file a bug against check-webkit-style.
Yusuke Suzuki
Comment 76
2017-05-27 11:47:49 PDT
Comment on
attachment 310831
[details]
Patch View in context:
https://bugs.webkit.org/attachment.cgi?id=310831&action=review
I haven't read all the code yet, quick comments.
> Source/JavaScriptCore/builtins/GlobalOperations.js:99 > + let desc = @Object.@getOwnPropertyDescriptor(from, nextKey); > + if (desc.enumerable && desc !== @undefined) {
You should use `@propertyIsEnumerable(from, nextKey)` instead (See Object.assign implementation). This is more efficient.
> Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.h:71 > +typedef std::pair<IdentifierSet, unsigned> ConstantIndentifierSetEntry;
For newly added code, we should use `using ConstantIndentifierSetEntry = std::pair<IdentifierSet, unsigned>;` instead.
> Source/JavaScriptCore/runtime/ObjectConstructor.cpp:107 > + JSC_NATIVE_FUNCTION_WITHOUT_TRANSITION(vm.propertyNames->builtinNames().getOwnPropertyDescriptorPrivateName(), objectConstructorGetOwnPropertyDescriptor, DontEnum, 1);
It is not necessary.
> Source/JavaScriptCore/runtime/SetPrototype.cpp:71 > + JSC_NATIVE_INTRINSIC_FUNCTION_WITHOUT_TRANSITION(vm.propertyNames->builtinNames().addPrivateName(), setProtoFuncAdd, DontEnum, 1, JSSetHasIntrinsic);
This is not correct. Set#add should not have JSSetHasIntrinsic.
> Source/WTF/wtf/FeatureDefines.h:64 > +
This is not necessary.
> Source/cmake/WebKitFeatures.cmake:111 > + WEBKIT_OPTION_DEFINE(ENABLE_ESNEXT_OBJ_REST_SPREAD "Toggle ESNext Object Rest/Spread support" PRIVATE ON)
This is not necessary.
Caio Lima
Comment 77
2017-05-27 17:12:02 PDT
Comment on
attachment 310831
[details]
Patch View in context:
https://bugs.webkit.org/attachment.cgi?id=310831&action=review
>> Source/JavaScriptCore/builtins/GlobalOperations.js:99 >> + if (desc.enumerable && desc !== @undefined) { > > You should use `@propertyIsEnumerable(from, nextKey)` instead (See Object.assign implementation). This is more efficient.
Thanks for that!
>> Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.h:71 >> +typedef std::pair<IdentifierSet, unsigned> ConstantIndentifierSetEntry; > > For newly added code, we should use `using ConstantIndentifierSetEntry = std::pair<IdentifierSet, unsigned>;` instead.
Done.
>> Source/JavaScriptCore/runtime/SetPrototype.cpp:71 >> + JSC_NATIVE_INTRINSIC_FUNCTION_WITHOUT_TRANSITION(vm.propertyNames->builtinNames().addPrivateName(), setProtoFuncAdd, DontEnum, 1, JSSetHasIntrinsic); > > This is not correct. Set#add should not have JSSetHasIntrinsic.
oops. Fixed.
>> Source/WTF/wtf/FeatureDefines.h:64 >> + > > This is not necessary.
Removed.
Caio Lima
Comment 78
2017-05-27 17:12:49 PDT
(In reply to Yusuke Suzuki from
comment #76
)
> Comment on
attachment 310831
[details]
> Patch > > View in context: >
https://bugs.webkit.org/attachment.cgi?id=310831&action=review
>
Thanks for the Review!
Caio Lima
Comment 79
2017-05-27 17:46:58 PDT
Created
attachment 311428
[details]
Patch Addressing Yusuki's comments.
Caio Lima
Comment 80
2017-05-27 19:51:21 PDT
Created
attachment 311431
[details]
Patch Rebased with upstream code.
Build Bot
Comment 81
2017-05-27 19:53:50 PDT
Attachment 311431
[details]
did not pass style-queue: ERROR: Source/JavaScriptCore/parser/Nodes.h:2128: Missing space before { [whitespace/braces] [5] ERROR: Source/JavaScriptCore/parser/Nodes.h:2133: Missing space before { [whitespace/braces] [5] Total errors found: 2 in 24 files If any of these errors are false positives, please file a bug against check-webkit-style.
Saam Barati
Comment 82
2017-05-31 14:22:19 PDT
Comment on
attachment 311431
[details]
Patch View in context:
https://bugs.webkit.org/attachment.cgi?id=311431&action=review
> JSTests/ChangeLog:3 > + [ESnext] Implement Object Rest - Implementing Object Rest Destructuring
Does this patch do spread?
> Source/JavaScriptCore/ChangeLog:13 > + array identifiers of already destructed properties, following spec draft
your implementation uses a Set, not an array
> Source/JavaScriptCore/builtins/GlobalOperations.js:100 > + @Object.@defineProperty(target, nextKey, {value: propValue, enumerable: true, writable: true, configurable: true});
Don't we have a fast version of this?
> Source/JavaScriptCore/bytecode/CodeBlock.cpp:887 > + jsSet->add(exec, JSValue(jsString));
style nit: I don't think there is a need for the JSValue(jsString) here, I think you can just do jsString.
> Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp:4103 > + RefPtr<RegisterID> addMethod = generator.emitGetById(generator.newTemporary(), excludedList.get(), generator.propertyNames().builtinNames().addPrivateName()); > + CallArguments args(generator, nullptr, 1); > + generator.emitMove(args.thisRegister(), excludedList.get()); > + generator.emitMove(args.argumentRegister(0), propertyName.get()); > + generator.emitCall(generator.newTemporary(), addMethod.get(), NoExpectedFunction, args, divot(), divotStart(), divotEnd(), DebuggableCall::No);
It's unfortunate to repeat this getById on every property. I think you can hoist this. Also, it's interesting we're relying on on Set.prototype being non-writable and non-configurable. Can you add a test perhaps that just asserts this is true (if we don't already have one). Perhaps such a test that would fail if it's not the case.
> Source/JavaScriptCore/parser/Parser.cpp:914 > + auto element = parseMemberExpression(context);
why is this a member expression? Member expression allows "new"
> Source/JavaScriptCore/parser/Parser.cpp:1069 > + if (Options::useObjectRestSpread() && match(DOTDOTDOT)) {
Nit: I think there is a chance it's more performant to swap the lhs and rhs of this &&.
> Source/JavaScriptCore/parser/Parser.cpp:3859 > + if (Options::useObjectRestSpread())
the worlds tiniest nit suggestion: maybe it's worth caching this option in a parser field and perhaps it'll be hotter in cache.
Caio Lima
Comment 83
2017-05-31 16:13:19 PDT
Comment on
attachment 311431
[details]
Patch View in context:
https://bugs.webkit.org/attachment.cgi?id=311431&action=review
>> JSTests/ChangeLog:3 >> + [ESnext] Implement Object Rest - Implementing Object Rest Destructuring > > Does this patch do spread?
No. Spread is another Patch that will come after this one.
>> Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp:4103 >> + generator.emitCall(generator.newTemporary(), addMethod.get(), NoExpectedFunction, args, divot(), divotStart(), divotEnd(), DebuggableCall::No); > > It's unfortunate to repeat this getById on every property. I think you can hoist this. > Also, it's interesting we're relying on on Set.prototype being non-writable and non-configurable. Can you add a test perhaps that just asserts this is true (if we don't already have one). > Perhaps such a test that would fail if it's not the case.
Yes, you are right here. It's totally not efficient. I can test if Set.prototype is non-configurable or non-writable, but by spec, it should be:
https://tc39.github.io/ecma262/#sec-set.prototype
.
>> Source/JavaScriptCore/parser/Parser.cpp:914 >> + auto element = parseMemberExpression(context); > > why is this a member expression? Member expression allows "new"
I actually just removed the recursive approach, i.e, not allowing "{" nor "[". I'm not sure if the prop spec changed, but it's unclear to me what should we allow here. Do you have any suggestion?
>> Source/JavaScriptCore/parser/Parser.cpp:1069 >> + if (Options::useObjectRestSpread() && match(DOTDOTDOT)) { > > Nit: I think there is a chance it's more performant to swap the lhs and rhs of this &&.
Changed.
>> Source/JavaScriptCore/parser/Parser.cpp:3859 >> + if (Options::useObjectRestSpread()) > > the worlds tiniest nit suggestion: maybe it's worth caching this option in a parser field and perhaps it'll be hotter in cache.
I think it's a good idea.
Caio Lima
Comment 84
2017-05-31 16:13:30 PDT
View in context:
https://bugs.webkit.org/attachment.cgi?id=311431&action=review
>> JSTests/ChangeLog:3 >> + [ESnext] Implement Object Rest - Implementing Object Rest Destructuring > > Does this patch do spread?
No. Spread is another Patch that will come after this one.
>> Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp:4103 >> + generator.emitCall(generator.newTemporary(), addMethod.get(), NoExpectedFunction, args, divot(), divotStart(), divotEnd(), DebuggableCall::No); > > It's unfortunate to repeat this getById on every property. I think you can hoist this. > Also, it's interesting we're relying on on Set.prototype being non-writable and non-configurable. Can you add a test perhaps that just asserts this is true (if we don't already have one). > Perhaps such a test that would fail if it's not the case.
Yes, you are right here. It's totally not efficient. I can test if Set.prototype is non-configurable or non-writable, but by spec, it should be:
https://tc39.github.io/ecma262/#sec-set.prototype
.
>> Source/JavaScriptCore/parser/Parser.cpp:914 >> + auto element = parseMemberExpression(context); > > why is this a member expression? Member expression allows "new"
I actually just removed the recursive approach, i.e, not allowing "{" nor "[". I'm not sure if the prop spec changed, but it's unclear to me what should we allow here. Do you have any suggestion?
>> Source/JavaScriptCore/parser/Parser.cpp:1069 >> + if (Options::useObjectRestSpread() && match(DOTDOTDOT)) { > > Nit: I think there is a chance it's more performant to swap the lhs and rhs of this &&.
Changed.
>> Source/JavaScriptCore/parser/Parser.cpp:3859 >> + if (Options::useObjectRestSpread()) > > the worlds tiniest nit suggestion: maybe it's worth caching this option in a parser field and perhaps it'll be hotter in cache.
I think it's a good idea.
Caio Lima
Comment 85
2017-05-31 16:13:42 PDT
View in context:
https://bugs.webkit.org/attachment.cgi?id=311431&action=review
>> JSTests/ChangeLog:3 >> + [ESnext] Implement Object Rest - Implementing Object Rest Destructuring > > Does this patch do spread?
No. Spread is another Patch that will come after this one.
>> Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp:4103 >> + generator.emitCall(generator.newTemporary(), addMethod.get(), NoExpectedFunction, args, divot(), divotStart(), divotEnd(), DebuggableCall::No); > > It's unfortunate to repeat this getById on every property. I think you can hoist this. > Also, it's interesting we're relying on on Set.prototype being non-writable and non-configurable. Can you add a test perhaps that just asserts this is true (if we don't already have one). > Perhaps such a test that would fail if it's not the case.
Yes, you are right here. It's totally not efficient. I can test if Set.prototype is non-configurable or non-writable, but by spec, it should be:
https://tc39.github.io/ecma262/#sec-set.prototype
.
>> Source/JavaScriptCore/parser/Parser.cpp:914 >> + auto element = parseMemberExpression(context); > > why is this a member expression? Member expression allows "new"
I actually just removed the recursive approach, i.e, not allowing "{" nor "[". I'm not sure if the prop spec changed, but it's unclear to me what should we allow here. Do you have any suggestion?
>> Source/JavaScriptCore/parser/Parser.cpp:1069 >> + if (Options::useObjectRestSpread() && match(DOTDOTDOT)) { > > Nit: I think there is a chance it's more performant to swap the lhs and rhs of this &&.
Changed.
>> Source/JavaScriptCore/parser/Parser.cpp:3859 >> + if (Options::useObjectRestSpread()) > > the worlds tiniest nit suggestion: maybe it's worth caching this option in a parser field and perhaps it'll be hotter in cache.
I think it's a good idea.
Caio Lima
Comment 86
2017-05-31 16:13:56 PDT
View in context:
https://bugs.webkit.org/attachment.cgi?id=311431&action=review
Thank you very much for the review!
>> JSTests/ChangeLog:3 >> + [ESnext] Implement Object Rest - Implementing Object Rest Destructuring > > Does this patch do spread?
No. Spread is another Patch that will come after this one.
>> Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp:4103 >> + generator.emitCall(generator.newTemporary(), addMethod.get(), NoExpectedFunction, args, divot(), divotStart(), divotEnd(), DebuggableCall::No); > > It's unfortunate to repeat this getById on every property. I think you can hoist this. > Also, it's interesting we're relying on on Set.prototype being non-writable and non-configurable. Can you add a test perhaps that just asserts this is true (if we don't already have one). > Perhaps such a test that would fail if it's not the case.
Yes, you are right here. It's totally not efficient. I can test if Set.prototype is non-configurable or non-writable, but by spec, it should be:
https://tc39.github.io/ecma262/#sec-set.prototype
.
>> Source/JavaScriptCore/parser/Parser.cpp:914 >> + auto element = parseMemberExpression(context); > > why is this a member expression? Member expression allows "new"
I actually just removed the recursive approach, i.e, not allowing "{" nor "[". I'm not sure if the prop spec changed, but it's unclear to me what should we allow here. Do you have any suggestion?
>> Source/JavaScriptCore/parser/Parser.cpp:1069 >> + if (Options::useObjectRestSpread() && match(DOTDOTDOT)) { > > Nit: I think there is a chance it's more performant to swap the lhs and rhs of this &&.
Changed.
>> Source/JavaScriptCore/parser/Parser.cpp:3859 >> + if (Options::useObjectRestSpread()) > > the worlds tiniest nit suggestion: maybe it's worth caching this option in a parser field and perhaps it'll be hotter in cache.
I think it's a good idea.
Caio Lima
Comment 87
2017-05-31 20:53:14 PDT
Created
attachment 311679
[details]
Patch Changed Patch based in Saam's review
Build Bot
Comment 88
2017-05-31 20:56:32 PDT
Attachment 311679
[details]
did not pass style-queue: ERROR: Source/JavaScriptCore/parser/Nodes.h:2128: Missing space before { [whitespace/braces] [5] ERROR: Source/JavaScriptCore/parser/Nodes.h:2133: Missing space before { [whitespace/braces] [5] Total errors found: 2 in 24 files If any of these errors are false positives, please file a bug against check-webkit-style.
Caio Lima
Comment 89
2017-06-03 11:13:34 PDT
Created
attachment 311933
[details]
Patch
Build Bot
Comment 90
2017-06-03 11:15:30 PDT
Attachment 311933
[details]
did not pass style-queue: ERROR: Source/JavaScriptCore/parser/Nodes.h:2128: Missing space before { [whitespace/braces] [5] ERROR: Source/JavaScriptCore/parser/Nodes.h:2133: Missing space before { [whitespace/braces] [5] Total errors found: 2 in 24 files If any of these errors are false positives, please file a bug against check-webkit-style.
Caio Lima
Comment 91
2017-06-03 11:21:09 PDT
(In reply to Caio Lima from
comment #89
)
> Created
attachment 311933
[details]
> Patch
About memberExpression usage in "parseObjectRestAssignmentElement", it isn't allowing "new" expressions because we test "element && context.isAssignmentLocation(element)" just after memberExpressions parsing and fail if it's false.
Caio Lima
Comment 92
2017-06-09 06:00:52 PDT
Ping review
Saam Barati
Comment 93
2017-06-12 12:28:10 PDT
Comment on
attachment 311933
[details]
Patch View in context:
https://bugs.webkit.org/attachment.cgi?id=311933&action=review
Patch looks good to me overall. I have one main suggestion for your builtin, and also some tests we should add before landing.
> Source/JavaScriptCore/builtins/GlobalOperations.js:100 > + @Object.@defineProperty(target, nextKey, {value: propValue, enumerable: true, writable: true, configurable: true});
I thought we added a bytecode to define property using an integer bit set. If so, we should use that here, so we don't allocate objects on every loop iteration. Yusuke, does this bytecode exist?
> Source/JavaScriptCore/bytecode/CodeBlock.cpp:881 > + JSSet* jsSet = JSSet::create(exec, vm, setStructure);
Nit: It might make sense to add a constructor to JSSet indicating how many items it'll have in it. This can be done in a follow up. That way, we don't end up doing any reallocation of its backing store when adding items to it.
> Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp:4062 > +
Nice. This function looks good to me
> Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp:4089 > + RefPtr<RegisterID> pIndex = generator.emitLoad(nullptr, jsNumber(optionalIndex.value()));
Style nit: We typically don't names webkit. I'd name this either "index" or "propertyIndex"
> Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp:4135 > + generator.emitMove(args.argumentRegister(argumentCount++), newObject.get()); > + generator.emitMove(args.argumentRegister(argumentCount++), rhs); > + if (m_containsComputedProperty) > + generator.emitMove(args.argumentRegister(argumentCount++), excludedList.get()); > + else { > + RefPtr<RegisterID> excludedSetReg = generator.emitLoad(generator.newTemporary(), excludedSet); > + generator.emitMove(args.argumentRegister(argumentCount++), excludedSetReg.get()); > + }
Why not just 0, 1, 2 for these as constants instead of using the argumentCount variable?
> Source/JavaScriptCore/parser/Parser.cpp:922 > + if (strictMode() && m_parserState.lastIdentifier && context.isResolve(element)) { > + bool isEvalOrArguments = m_vm->propertyNames->eval == *m_parserState.lastIdentifier || m_vm->propertyNames->arguments == *m_parserState.lastIdentifier; > + failIfTrueIfStrict(isEvalOrArguments, "Cannot modify '", m_parserState.lastIdentifier->impl(), "' in strict mode"); > + }
Please add a test for this. Also, please add tests for object rest being used in "catch", along with the expected syntax errors
> Source/JavaScriptCore/parser/Parser.cpp:981 > + if (kind == DestructuringKind::DestructureToExpressions) > + return 0;
This branch is unreachable. I'd assert at the top of this function that this isn't the case.
> Source/JavaScriptCore/parser/Parser.cpp:986 > + failIfTrue(match(LET) && (kind == DestructuringKind::DestructureToLet || kind == DestructuringKind::DestructureToConst), "Cannot use 'let' as an identifier name for a LexicalDeclaration"); > + semanticFailIfTrue(isDisallowedIdentifierAwait(m_token), "Cannot use 'await' as a ", destructuringKindToVariableKindName(kind), " ", disallowedIdentifierAwaitReason());
Please add tests for these if you haven't already.
> Source/JavaScriptCore/parser/Parser.cpp:989 > + m_parserState.nonLHSCount = nonLHSCount;
What's the point of this? It doesn't look like this gets changed.
> Source/JavaScriptCore/parser/Parser.cpp:998 > + return parseObjectRestElement(context, kind, exportType, duplicateIdentifier, bindingContext);
Are we expected to get a syntax error here: ``` catch({...foo.bar})```? If so, please add a test to ensure we have this behavior.
Caio Lima
Comment 94
2017-06-12 22:53:35 PDT
Comment on
attachment 311933
[details]
Patch View in context:
https://bugs.webkit.org/attachment.cgi?id=311933&action=review
Thank you very much for the review. I've made the changes and I'm now running JSC tests before send the Patch.
>> Source/JavaScriptCore/builtins/GlobalOperations.js:100 >> + @Object.@defineProperty(target, nextKey, {value: propValue, enumerable: true, writable: true, configurable: true}); > > I thought we added a bytecode to define property using an integer bit set. If so, we should use that here, so we don't allocate objects on every loop iteration. > Yusuke, does this bytecode exist?
IRC, I will work in the fast path here in
https://bugs.webkit.org/show_bug.cgi?id=172888
. But should be good Yusuke confirms that anyways =)
>> Source/JavaScriptCore/bytecode/CodeBlock.cpp:881 >> + JSSet* jsSet = JSSet::create(exec, vm, setStructure); > > Nit: It might make sense to add a constructor to JSSet indicating how many items it'll have in it. This can be done in a follow up. That way, we don't end up doing any reallocation of its backing store when adding items to it.
I agree. Created bug for that
https://bugs.webkit.org/show_bug.cgi?id=173297
>> Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp:4089 >> + RefPtr<RegisterID> pIndex = generator.emitLoad(nullptr, jsNumber(optionalIndex.value())); > > Style nit: We typically don't names webkit. I'd name this either "index" or "propertyIndex"
Fixed
>> Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp:4135 >> + } > > Why not just 0, 1, 2 for these as constants instead of using the argumentCount variable?
I was just following previous code pattern. Fixed.
>> Source/JavaScriptCore/parser/Parser.cpp:922 >> + } > > Please add a test for this. Also, please add tests for object rest being used in "catch", along with the expected syntax errors
Done.
>> Source/JavaScriptCore/parser/Parser.cpp:986 >> + semanticFailIfTrue(isDisallowedIdentifierAwait(m_token), "Cannot use 'await' as a ", destructuringKindToVariableKindName(kind), " ", disallowedIdentifierAwaitReason()); > > Please add tests for these if you haven't already.
Done.
>> Source/JavaScriptCore/parser/Parser.cpp:989 >> + m_parserState.nonLHSCount = nonLHSCount; > > What's the point of this? It doesn't look like this gets changed.
I think you are right. Removed.
>> Source/JavaScriptCore/parser/Parser.cpp:998 >> + return parseObjectRestElement(context, kind, exportType, duplicateIdentifier, bindingContext); > > Are we expected to get a syntax error here: > ``` catch({...foo.bar})```? If so, please add a test to ensure we have this behavior.
No. added the test.
Caio Lima
Comment 95
2017-06-13 07:06:15 PDT
Created
attachment 312769
[details]
Patch Fixed Nits and added tests following Saam's review
Build Bot
Comment 96
2017-06-13 07:08:46 PDT
Attachment 312769
[details]
did not pass style-queue: ERROR: Source/JavaScriptCore/parser/Nodes.h:2128: Missing space before { [whitespace/braces] [5] ERROR: Source/JavaScriptCore/parser/Nodes.h:2133: Missing space before { [whitespace/braces] [5] Total errors found: 2 in 24 files If any of these errors are false positives, please file a bug against check-webkit-style.
Yusuke Suzuki
Comment 97
2017-06-17 07:16:02 PDT
Comment on
attachment 311933
[details]
Patch View in context:
https://bugs.webkit.org/attachment.cgi?id=311933&action=review
>>> Source/JavaScriptCore/builtins/GlobalOperations.js:100 >>> + @Object.@defineProperty(target, nextKey, {value: propValue, enumerable: true, writable: true, configurable: true}); >> >> I thought we added a bytecode to define property using an integer bit set. If so, we should use that here, so we don't allocate objects on every loop iteration. >> Yusuke, does this bytecode exist? > > IRC, I will work in the fast path here in
https://bugs.webkit.org/show_bug.cgi?id=172888
. But should be good Yusuke confirms that anyways =)
You can use op_define_data_property bytecode operation here. It can avoids costly object allocation for property descriptors. (Currently, Object.defineProperty is implemented in C++. Thus we cannot avoid this object allocation by using Object Allocation Sinking.
https://bugs.webkit.org/show_bug.cgi?id=172888
will solve it. But this can be leveraged only in FTL. Thus, if we can use op_define_data_property, using it is the best way. You can emit it by introducing some bytecode intrinsic.
Caio Lima
Comment 98
2017-06-20 07:25:16 PDT
Created
attachment 313398
[details]
Patch Using intrinsic byte code to create data property.
Build Bot
Comment 99
2017-06-20 07:28:09 PDT
Attachment 313398
[details]
did not pass style-queue: ERROR: Source/JavaScriptCore/parser/Nodes.h:2148: Missing space before { [whitespace/braces] [5] ERROR: Source/JavaScriptCore/parser/Nodes.h:2153: Missing space before { [whitespace/braces] [5] Total errors found: 2 in 25 files If any of these errors are false positives, please file a bug against check-webkit-style.
Build Bot
Comment 100
2017-06-20 08:51:06 PDT
Comment on
attachment 313398
[details]
Patch
Attachment 313398
[details]
did not pass mac-wk2-ews (mac-wk2): Output:
http://webkit-queues.webkit.org/results/3966284
New failing tests: webrtc/video-replace-muted-track.html
Build Bot
Comment 101
2017-06-20 08:51:07 PDT
Created
attachment 313400
[details]
Archive of layout-test-results from ews106 for mac-elcapitan-wk2 The attached test failures were seen while running run-webkit-tests on the mac-wk2-ews. Bot: ews106 Port: mac-elcapitan-wk2 Platform: Mac OS X 10.11.6
Caio Lima
Comment 102
2017-06-25 08:08:59 PDT
Created
attachment 313802
[details]
Patch I'm adding intrinsic use in defineProperty to avoid Descriptor Object allocation.
Build Bot
Comment 103
2017-06-25 08:11:32 PDT
Attachment 313802
[details]
did not pass style-queue: ERROR: Source/JavaScriptCore/parser/Nodes.h:2148: Missing space before { [whitespace/braces] [5] ERROR: Source/JavaScriptCore/parser/Nodes.h:2153: Missing space before { [whitespace/braces] [5] Total errors found: 2 in 25 files If any of these errors are false positives, please file a bug against check-webkit-style.
Saam Barati
Comment 104
2017-06-27 12:37:55 PDT
Comment on
attachment 313802
[details]
Patch View in context:
https://bugs.webkit.org/attachment.cgi?id=313802&action=review
r=me
> JSTests/stress/object-rest-deconstruct.js:204 > +
Please add tests for object rest in catch.
Caio Lima
Comment 105
2017-06-27 16:55:10 PDT
Created
attachment 313959
[details]
Patch Updating tests and ChangeLog
Build Bot
Comment 106
2017-06-27 17:01:22 PDT
Attachment 313959
[details]
did not pass style-queue: ERROR: Source/JavaScriptCore/parser/Nodes.h:2147: Missing space before { [whitespace/braces] [5] ERROR: Source/JavaScriptCore/parser/Nodes.h:2152: Missing space before { [whitespace/braces] [5] Total errors found: 2 in 25 files If any of these errors are false positives, please file a bug against check-webkit-style.
WebKit Commit Bot
Comment 107
2017-06-27 20:05:50 PDT
Comment on
attachment 313959
[details]
Patch Clearing flags on attachment: 313959 Committed
r218861
: <
http://trac.webkit.org/changeset/218861
>
WebKit Commit Bot
Comment 108
2017-06-27 20:05:53 PDT
All reviewed patches have been landed. Closing bug.
Note
You need to
log in
before you can comment on or make changes to this bug.
Top of Page
Format For Printing
XML
Clone This Bug