diff options
| author | Joel Kronqvist <joel.h.kronqvist@gmail.com> | 2022-03-05 19:02:27 +0200 | 
|---|---|---|
| committer | Joel Kronqvist <joel.h.kronqvist@gmail.com> | 2022-03-05 19:02:27 +0200 | 
| commit | 5d309ff52cd399a6b71968a6b9a70c8ac0b98981 (patch) | |
| tree | 360f7eb50f956e2367ef38fa1fc6ac7ac5258042 /node_modules/@babel/helper-simple-access/lib | |
| parent | b500a50f1b97d93c98b36ed9a980f8188d648147 (diff) | |
| download | LYLLRuoka-5d309ff52cd399a6b71968a6b9a70c8ac0b98981.tar.gz LYLLRuoka-5d309ff52cd399a6b71968a6b9a70c8ac0b98981.zip  | |
Added node_modules for the updating to work properly.
Diffstat (limited to 'node_modules/@babel/helper-simple-access/lib')
| -rw-r--r-- | node_modules/@babel/helper-simple-access/lib/index.js | 93 | 
1 files changed, 93 insertions, 0 deletions
diff --git a/node_modules/@babel/helper-simple-access/lib/index.js b/node_modules/@babel/helper-simple-access/lib/index.js new file mode 100644 index 0000000..69bacda --- /dev/null +++ b/node_modules/@babel/helper-simple-access/lib/index.js @@ -0,0 +1,93 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { +  value: true +}); +exports.default = simplifyAccess; + +var _t = require("@babel/types"); + +const { +  LOGICAL_OPERATORS, +  assignmentExpression, +  binaryExpression, +  cloneNode, +  identifier, +  logicalExpression, +  numericLiteral, +  sequenceExpression, +  unaryExpression +} = _t; + +function simplifyAccess(path, bindingNames) { +  path.traverse(simpleAssignmentVisitor, { +    scope: path.scope, +    bindingNames, +    seen: new WeakSet() +  }); +} + +const simpleAssignmentVisitor = { +  UpdateExpression: { +    exit(path) { +      const { +        scope, +        bindingNames +      } = this; +      const arg = path.get("argument"); +      if (!arg.isIdentifier()) return; +      const localName = arg.node.name; +      if (!bindingNames.has(localName)) return; + +      if (scope.getBinding(localName) !== path.scope.getBinding(localName)) { +        return; +      } + +      if (path.parentPath.isExpressionStatement() && !path.isCompletionRecord()) { +        const operator = path.node.operator == "++" ? "+=" : "-="; +        path.replaceWith(assignmentExpression(operator, arg.node, numericLiteral(1))); +      } else if (path.node.prefix) { +        path.replaceWith(assignmentExpression("=", identifier(localName), binaryExpression(path.node.operator[0], unaryExpression("+", arg.node), numericLiteral(1)))); +      } else { +        const old = path.scope.generateUidIdentifierBasedOnNode(arg.node, "old"); +        const varName = old.name; +        path.scope.push({ +          id: old +        }); +        const binary = binaryExpression(path.node.operator[0], identifier(varName), numericLiteral(1)); +        path.replaceWith(sequenceExpression([assignmentExpression("=", identifier(varName), unaryExpression("+", arg.node)), assignmentExpression("=", cloneNode(arg.node), binary), identifier(varName)])); +      } +    } + +  }, +  AssignmentExpression: { +    exit(path) { +      const { +        scope, +        seen, +        bindingNames +      } = this; +      if (path.node.operator === "=") return; +      if (seen.has(path.node)) return; +      seen.add(path.node); +      const left = path.get("left"); +      if (!left.isIdentifier()) return; +      const localName = left.node.name; +      if (!bindingNames.has(localName)) return; + +      if (scope.getBinding(localName) !== path.scope.getBinding(localName)) { +        return; +      } + +      const operator = path.node.operator.slice(0, -1); + +      if (LOGICAL_OPERATORS.includes(operator)) { +        path.replaceWith(logicalExpression(operator, path.node.left, assignmentExpression("=", cloneNode(path.node.left), path.node.right))); +      } else { +        path.node.right = binaryExpression(operator, cloneNode(path.node.left), path.node.right); +        path.node.operator = "="; +      } +    } + +  } +};
\ No newline at end of file  | 
