fixed some stuff

This commit is contained in:
Tobias Koppers 2013-02-08 00:18:47 +01:00
parent bc56135a14
commit 34424b36af
4 changed files with 32 additions and 3 deletions

View File

@ -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;
};

View File

@ -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) {

View File

@ -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()

View File

@ -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() {