fixed some stuff
This commit is contained in:
parent
bc56135a14
commit
34424b36af
|
@ -7,15 +7,15 @@ var ModuleParserHelpers = exports;
|
|||
ModuleParserHelpers.addParsedVariable = function(parser, name, expression) {
|
||||
if(!parser.state.current.addVariable) return false;
|
||||
var deps = [];
|
||||
parser.parse(expression, {current: {
|
||||
parser.parse(expression, {
|
||||
current: {
|
||||
addDependency: function(dep) {
|
||||
dep.userRequest = name;
|
||||
deps.push(dep);
|
||||
}
|
||||
},
|
||||
module: this.state.module
|
||||
}});
|
||||
module: parser.state.module
|
||||
});
|
||||
parser.state.current.addVariable(name, expression, deps);
|
||||
return true;
|
||||
};
|
||||
|
|
|
@ -112,6 +112,16 @@ Parser.prototype.initializeEvaluating = function() {
|
|||
this.plugin("evaluate UnaryExpression", function(expr) {
|
||||
if(expr.operator == "typeof" && expr.argument.type == "Identifier") {
|
||||
return this.applyPluginsBailResult("evaluate typeof " + expr.argument.name, expr);
|
||||
} else if(expr.operator == "!") {
|
||||
var argument = this.evaluateExpression(expr.argument);
|
||||
if(!argument) return;
|
||||
if(argument.isBoolean()) {
|
||||
return new BasicEvaluatedExpression().setBoolean(!argument.bool).setRange(expr.range);
|
||||
} else if(argument.isString()) {
|
||||
return new BasicEvaluatedExpression().setBoolean(!argument.string).setRange(expr.range);
|
||||
} else if(argument.isNumber()) {
|
||||
return new BasicEvaluatedExpression().setBoolean(!argument.number).setRange(expr.range);
|
||||
}
|
||||
}
|
||||
});
|
||||
this.plugin("evaluate Identifier", function(expr) {
|
||||
|
|
|
@ -38,6 +38,12 @@ CommonJsPlugin.prototype.apply = function(compiler) {
|
|||
compiler.parser.plugin("evaluate typeof require", function(expr) {
|
||||
return new BasicEvaluatedExpression().setString("function").setRange(expr.range);
|
||||
});
|
||||
compiler.parser.plugin("evaluate typeof module", function(expr) {
|
||||
return new BasicEvaluatedExpression().setString("object").setRange(expr.range);
|
||||
});
|
||||
compiler.parser.plugin("evaluate typeof exports", function(expr) {
|
||||
return new BasicEvaluatedExpression().setString("object").setRange(expr.range);
|
||||
});
|
||||
compiler.parser.apply(
|
||||
new CommonJsRequireDependencyParserPlugin(),
|
||||
new RequireResolveDependencyParserPlugin()
|
||||
|
|
|
@ -207,6 +207,19 @@ describe("main", function() {
|
|||
it("should not create a context for typeof require", function() {
|
||||
require("../folder/typeof").should.be.eql("function");
|
||||
});
|
||||
|
||||
it("should not parse filtered stuff", function() {
|
||||
if(typeof require != "function") require("fail");
|
||||
if(typeof require !== "function") require("fail");
|
||||
if(!(typeof require == "function")) require("fail");
|
||||
if(!(typeof require === "function")) require("fail");
|
||||
if(typeof require == "undefined") require = require("fail");
|
||||
if(typeof require === "undefined") require = require("fail");
|
||||
if(typeof module == "undefined") module = require("fail");
|
||||
if(typeof module === "undefined") module = require("fail");
|
||||
if(typeof module != "object") module = require("fail");
|
||||
if(typeof exports == "undefined") exports = require("fail");
|
||||
});
|
||||
});
|
||||
|
||||
describe("polyfilling", function() {
|
||||
|
|
Loading…
Reference in New Issue