* test: add test for nullish coalescing
Co-Authored-By: Nicolò Ribaudo <nicolo.ribaudo@gmail.com>
* test: add control group
* test: add tests for optional chaining
Co-Authored-By: Nicolò Ribaudo <nicolo.ribaudo@gmail.com>
* test: add tests on optional chaining mixed with private class elements
* fix: wrap member chains to IIFE when it is in parameter default
* chore: add more testcases
* chore: update test fixtures
* fix: NodePath.get is always non nullish
Co-authored-by: Nicolò Ribaudo <nicolo.ribaudo@gmail.com>
* add support for logical assignments with private properties
Patches the logic for handling assignment operators and adds support for
handling the logical assignment operators appropriately.
Fixes: https://github.com/babel/babel/issues/11646
* replace hardcoded logical assignment operators with constant
Replace a hardcoded check for logical assignment operators with the
LOGICAL_OPERATORS constant in
plugin-proposal-logical-assignment-operators.
Refs: https://github.com/babel/babel/pull/11702#discussion_r438554423
* Fix nested classes reference private fields
* Process only visible private fields when redeclaring
* Comments
* Skip class traversal if there are no private fields
* Handle redeclared private field in computed key
* destructuring private fields with array pattern / object pattern
* wip: new test cases
* destrucuring and rest for private properties
* test case for loose private-loose
* add transform-desturcturing for exec
* update test case
* remove getPrototypeOf imports from get and set
* wip: destructure super assignment
* throw "Destructuring to a super field is not supported yet."
* fix tests and fix assignment pattern
* remove CallExpression from AssignmentPattern
This is similar to ec69b4bb1256c061ac76f53dfed09c4283ec6a31, which
was about private instance fields.
Private properties can be non-writable (thanks to decorators), or have
get/set accessors. If we stored this information on the `privateClass`
object, we would need to always use `Object.getOwnPropertyDescriptor`
before reading or writing a property because accessors need to be called
with the correct `this` context (it should be the actual class, not the
object hat stores the private properties). This commit simplifies that
operation a bit by removing the container object.
It also have another advantage, which instance fields already have
thanks to the use of separate weakmaps: unused private static fields
can be tree-shaken away or garbage-collected, while properties of an
object can't. Also, they can be easilier minified.
* Private Static Class Fields Implementation
* Redo testing without class transform for static private
* Add a call() test for private static
* Use Object.defineProperty in loose mode
* Save full descriptor instead of only value for private fields.
Decorators can make private fields non-writable, so we need to store this
information somewhere.
The descriptor can also be used to implement private accessors.
* Revert "Move subclass inheritance to end (#7772)"
This reverts commit f8ab9466d331871a90f458af40b14e8d831e0c29.
* Only use getPrototypeOf if setPrototypeOf is implemented
* Update fixtures
* Helpers updates
* Update fixtures
* Fall back to getPrototypeOf
* Update fixtures
* Update member-expression-to-functions
1. Babel using British spellings, so `memoise`
2. Provide a helper `AssignmentMemoiser` class, which will assign the memo'd value with the `n`th access.
* Private properties!
* Fixes
* Tests
* Update helper name
* Fix privates that reference other privates
* Don't extend a builtin
* Rebase