Comparing version 2.6.2 to 2.6.4
@@ -17,22 +17,13 @@ (function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}(g.acorn || (g.acorn = {})).loose = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(_dereq_,module,exports){ | ||
lp.checkLVal = function (expr, binding) { | ||
lp.checkLVal = function (expr) { | ||
if (!expr) return expr; | ||
switch (expr.type) { | ||
case "Identifier": | ||
case "MemberExpression": | ||
return expr; | ||
case "MemberExpression": | ||
return binding ? this.dummyIdent() : expr; | ||
case "ParenthesizedExpression": | ||
expr.expression = this.checkLVal(expr.expression, binding); | ||
expr.expression = this.checkLVal(expr.expression); | ||
return expr; | ||
// FIXME recursively check contents | ||
case "ObjectPattern": | ||
case "ArrayPattern": | ||
case "RestElement": | ||
case "AssignmentPattern": | ||
if (this.options.ecmaVersion >= 6) return expr; | ||
default: | ||
@@ -443,28 +434,27 @@ return this.dummyIdent(); | ||
lp.toAssignable = function (node, binding) { | ||
if (this.options.ecmaVersion >= 6 && node) { | ||
switch (node.type) { | ||
case "ObjectExpression": | ||
node.type = "ObjectPattern"; | ||
var props = node.properties; | ||
for (var i = 0; i < props.length; i++) { | ||
this.toAssignable(props[i].value, binding); | ||
}break; | ||
case "ArrayExpression": | ||
node.type = "ArrayPattern"; | ||
this.toAssignableList(node.elements, binding); | ||
break; | ||
case "SpreadElement": | ||
node.type = "RestElement"; | ||
node.argument = this.toAssignable(node.argument, binding); | ||
break; | ||
case "AssignmentExpression": | ||
node.type = "AssignmentPattern"; | ||
delete node.operator; | ||
break; | ||
if (!node || node.type == "Identifier" || node.type == "MemberExpression" && !binding) { | ||
// Okay | ||
} else if (node.type == "ParenthesizedExpression") { | ||
node.expression = this.toAssignable(node.expression, binding); | ||
} else if (this.options.ecmaVersion < 6) { | ||
return this.dummyIdent(); | ||
} else if (node.type == "ObjectExpression") { | ||
node.type = "ObjectPattern"; | ||
var props = node.properties; | ||
for (var i = 0; i < props.length; i++) { | ||
props[i].value = this.toAssignable(props[i].value, binding); | ||
} | ||
} else if (node.type == "ArrayExpression") { | ||
node.type = "ArrayPattern"; | ||
this.toAssignableList(node.elements, binding); | ||
} else if (node.type == "SpreadElement") { | ||
node.type = "RestElement"; | ||
node.argument = this.toAssignable(node.argument, binding); | ||
} else if (node.type == "AssignmentExpression") { | ||
node.type = "AssignmentPattern"; | ||
delete node.operator; | ||
} else { | ||
return this.dummyIdent(); | ||
} | ||
} | ||
return this.checkLVal(node, binding); | ||
return node; | ||
}; | ||
@@ -583,2 +573,3 @@ | ||
exports.LooseParser = _state.LooseParser; | ||
exports.pluginsLoose = _state.pluginsLoose; | ||
@@ -595,2 +586,3 @@ acorn.defaultOptions.tabSize = 4; | ||
acorn.LooseParser = _state.LooseParser; | ||
acorn.pluginsLoose = _state.pluginsLoose; | ||
@@ -616,2 +608,7 @@ },{"..":1,"./expression":2,"./state":5,"./statement":6,"./tokenize":7}],4:[function(_dereq_,module,exports){ | ||
// Registered plugins | ||
var pluginsLoose = {}; | ||
exports.pluginsLoose = pluginsLoose; | ||
var LooseParser = (function () { | ||
@@ -634,2 +631,5 @@ function LooseParser(input, options) { | ||
this.nextLineStart = this.lineEnd(this.curLineStart) + 1; | ||
// Load plugins | ||
this.options.pluginsLoose = options.pluginsLoose || {}; | ||
this.loadPlugins(this.options.pluginsLoose); | ||
} | ||
@@ -752,2 +752,14 @@ | ||
LooseParser.prototype.extend = function extend(name, f) { | ||
this[name] = f(this[name]); | ||
}; | ||
LooseParser.prototype.loadPlugins = function loadPlugins(pluginConfigs) { | ||
for (var _name in pluginConfigs) { | ||
var plugin = pluginsLoose[_name]; | ||
if (!plugin) throw new Error("Plugin '" + _name + "' not found"); | ||
plugin(this, pluginConfigs[_name]); | ||
} | ||
}; | ||
return LooseParser; | ||
@@ -754,0 +766,0 @@ })(); |
@@ -6,3 +6,3 @@ { | ||
"main": "dist/acorn.js", | ||
"version": "2.6.2", | ||
"version": "2.6.4", | ||
"engines": { | ||
@@ -9,0 +9,0 @@ "node": ">=0.4.0" |
@@ -383,2 +383,15 @@ # Acorn | ||
Similarly, the loose parser allows plugins to register themselves via | ||
`acorn.pluginsLoose`. The extension mechanism is the same as for the | ||
normal parser: | ||
```javascript | ||
looseParser.extend("readToken", function(nextMethod) { | ||
return function() { | ||
console.log("Reading a token in the loose parser!") | ||
return nextMethod.call(this) | ||
} | ||
}) | ||
``` | ||
There is a proof-of-concept JSX plugin in the [`acorn-jsx`](https://github.com/RReverser/acorn-jsx) project. |
@@ -39,3 +39,3 @@ // Acorn is a tiny, fast JavaScript parser written in JavaScript. | ||
export const version = "2.6.2" | ||
export const version = "2.6.4" | ||
@@ -42,0 +42,0 @@ // The main exported interface (under `self.acorn` when in the |
@@ -7,22 +7,13 @@ import {LooseParser} from "./state" | ||
lp.checkLVal = function(expr, binding) { | ||
lp.checkLVal = function(expr) { | ||
if (!expr) return expr | ||
switch (expr.type) { | ||
case "Identifier": | ||
case "MemberExpression": | ||
return expr | ||
case "MemberExpression": | ||
return binding ? this.dummyIdent() : expr | ||
case "ParenthesizedExpression": | ||
expr.expression = this.checkLVal(expr.expression, binding) | ||
expr.expression = this.checkLVal(expr.expression) | ||
return expr | ||
// FIXME recursively check contents | ||
case "ObjectPattern": | ||
case "ArrayPattern": | ||
case "RestElement": | ||
case "AssignmentPattern": | ||
if (this.options.ecmaVersion >= 6) return expr | ||
default: | ||
@@ -430,28 +421,26 @@ return this.dummyIdent() | ||
lp.toAssignable = function(node, binding) { | ||
if (this.options.ecmaVersion >= 6 && node) { | ||
switch (node.type) { | ||
case "ObjectExpression": | ||
node.type = "ObjectPattern" | ||
let props = node.properties | ||
for (let i = 0; i < props.length; i++) | ||
this.toAssignable(props[i].value, binding) | ||
break | ||
case "ArrayExpression": | ||
node.type = "ArrayPattern" | ||
this.toAssignableList(node.elements, binding) | ||
break | ||
case "SpreadElement": | ||
node.type = "RestElement" | ||
node.argument = this.toAssignable(node.argument, binding) | ||
break | ||
case "AssignmentExpression": | ||
node.type = "AssignmentPattern" | ||
delete node.operator | ||
break | ||
} | ||
if (!node || node.type == "Identifier" || (node.type == "MemberExpression" && !binding)) { | ||
// Okay | ||
} else if (node.type == "ParenthesizedExpression") { | ||
node.expression = this.toAssignable(node.expression, binding) | ||
} else if (this.options.ecmaVersion < 6) { | ||
return this.dummyIdent() | ||
} else if (node.type == "ObjectExpression") { | ||
node.type = "ObjectPattern" | ||
let props = node.properties | ||
for (let i = 0; i < props.length; i++) | ||
props[i].value = this.toAssignable(props[i].value, binding) | ||
} else if (node.type == "ArrayExpression") { | ||
node.type = "ArrayPattern" | ||
this.toAssignableList(node.elements, binding) | ||
} else if (node.type == "SpreadElement") { | ||
node.type = "RestElement" | ||
node.argument = this.toAssignable(node.argument, binding) | ||
} else if (node.type == "AssignmentExpression") { | ||
node.type = "AssignmentPattern" | ||
delete node.operator | ||
} else { | ||
return this.dummyIdent() | ||
} | ||
return this.checkLVal(node, binding) | ||
return node | ||
} | ||
@@ -458,0 +447,0 @@ |
@@ -33,3 +33,3 @@ // Acorn: Loose parser | ||
import * as acorn from ".." | ||
import {LooseParser} from "./state" | ||
import {LooseParser, pluginsLoose} from "./state" | ||
import "./tokenize" | ||
@@ -39,3 +39,3 @@ import "./statement" | ||
export {LooseParser} from "./state" | ||
export {LooseParser, pluginsLoose} from "./state" | ||
@@ -52,1 +52,2 @@ acorn.defaultOptions.tabSize = 4 | ||
acorn.LooseParser = LooseParser | ||
acorn.pluginsLoose = pluginsLoose |
import {tokenizer, SourceLocation, tokTypes as tt, Node, lineBreak, isNewLine} from ".." | ||
// Registered plugins | ||
export const pluginsLoose = {} | ||
export class LooseParser { | ||
@@ -18,2 +21,5 @@ constructor(input, options) { | ||
this.nextLineStart = this.lineEnd(this.curLineStart) + 1 | ||
// Load plugins | ||
this.options.pluginsLoose = options.pluginsLoose || {} | ||
this.loadPlugins(this.options.pluginsLoose) | ||
} | ||
@@ -143,2 +149,14 @@ | ||
} | ||
extend(name, f) { | ||
this[name] = f(this[name]) | ||
} | ||
loadPlugins(pluginConfigs) { | ||
for (let name in pluginConfigs) { | ||
let plugin = pluginsLoose[name] | ||
if (!plugin) throw new Error("Plugin '" + name + "' not found") | ||
plugin(this, pluginConfigs[name]) | ||
} | ||
} | ||
} |
Sorry, the diff of this file is too big to display
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
370971
8712
397