@babel/helper-member-expression-to-functions
Advanced tools
Comparing version 7.0.0-beta.47 to 7.0.0-beta.48
@@ -11,3 +11,3 @@ "use strict"; | ||
t = function t() { | ||
t = function () { | ||
return data; | ||
@@ -21,7 +21,46 @@ }; | ||
class AssignmentMemoiser { | ||
constructor() { | ||
this._map = new WeakMap(); | ||
} | ||
has(key) { | ||
return this._map.has(key); | ||
} | ||
get(key) { | ||
if (!this.has(key)) return; | ||
const record = this._map.get(key); | ||
const { | ||
value | ||
} = record; | ||
record.count--; | ||
if (record.count === 0) { | ||
return t().assignmentExpression("=", value, key); | ||
} | ||
return value; | ||
} | ||
set(key, value, count) { | ||
return this._map.set(key, { | ||
count, | ||
value | ||
}); | ||
} | ||
} | ||
const handle = { | ||
memoise() {}, | ||
handle(member) { | ||
const node = member.node, | ||
parent = member.parent, | ||
parentPath = member.parentPath; | ||
const { | ||
node, | ||
parent, | ||
parentPath | ||
} = member; | ||
@@ -31,9 +70,7 @@ if (parentPath.isUpdateExpression({ | ||
})) { | ||
const operator = parent.operator, | ||
prefix = parent.prefix; | ||
if (this.memoize) { | ||
this.memoize(member); | ||
} | ||
const { | ||
operator, | ||
prefix | ||
} = parent; | ||
this.memoise(member, 2); | ||
const value = t().binaryExpression(operator[0], t().unaryExpression("+", this.get(member)), t().numericLiteral(1)); | ||
@@ -44,3 +81,5 @@ | ||
} else { | ||
const scope = member.scope; | ||
const { | ||
scope | ||
} = member; | ||
const ref = scope.generateUidIdentifierBasedOnNode(node); | ||
@@ -60,11 +99,10 @@ scope.push({ | ||
})) { | ||
const operator = parent.operator, | ||
right = parent.right; | ||
const { | ||
operator, | ||
right | ||
} = parent; | ||
let value = right; | ||
if (operator !== "=") { | ||
if (this.memoize) { | ||
this.memoize(member); | ||
} | ||
this.memoise(member, 2); | ||
value = t().binaryExpression(operator.slice(0, -1), this.get(member), value); | ||
@@ -80,3 +118,5 @@ } | ||
})) { | ||
const args = parent.arguments; | ||
const { | ||
arguments: args | ||
} = parent; | ||
parentPath.replaceWith(this.call(member, args)); | ||
@@ -92,3 +132,5 @@ return; | ||
function memberExpressionToFunctions(path, visitor, state) { | ||
path.traverse(visitor, Object.assign({}, state, handle)); | ||
path.traverse(visitor, Object.assign({}, handle, state, { | ||
memoiser: new AssignmentMemoiser() | ||
})); | ||
} |
{ | ||
"name": "@babel/helper-member-expression-to-functions", | ||
"version": "7.0.0-beta.47", | ||
"version": "7.0.0-beta.48", | ||
"description": "Helper function to replace certain member expressions with function calls", | ||
@@ -10,4 +10,4 @@ "repository": "https://github.com/babel/babel/tree/master/packages/babel-helper-member-expression-to-functions", | ||
"dependencies": { | ||
"@babel/types": "7.0.0-beta.47" | ||
"@babel/types": "7.0.0-beta.48" | ||
} | ||
} |
@@ -29,3 +29,3 @@ # @babel/helper-member-expression-to-functions | ||
// `call`. | ||
// Optionally, a special `memoize` method may be defined, which gets | ||
// Optionally, a special `memoise` method may be defined, which gets | ||
// called if the member is in a self-referential update expression. | ||
@@ -59,6 +59,6 @@ // Everything else will be passed through as normal. | ||
memoize(memberPath) { | ||
memoise(memberPath) { | ||
const { node } = memberPath; | ||
if (node.computed) { | ||
MEMOIZED.set(node, ...); | ||
MEMOISED.set(node, ...); | ||
} | ||
@@ -65,0 +65,0 @@ }, |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
5452
103
+ Added@babel/types@7.0.0-beta.48(transitive)
- Removed@babel/types@7.0.0-beta.47(transitive)
Updated@babel/types@7.0.0-beta.48