Make the walker's scope module use objects for variables

So that subsequent passes can attach and retrieve information
from them.
This commit is contained in:
Marijn Haverbeke 2012-11-07 12:15:32 +01:00
parent 3ba6913d30
commit cb6cd3038e

View File

@ -187,18 +187,19 @@
Function: function(node, scope, c) { Function: function(node, scope, c) {
var inner = makeScope(scope); var inner = makeScope(scope);
for (var i = 0; i < node.params.length; ++i) for (var i = 0; i < node.params.length; ++i)
inner.vars[node.params[i].name] = "argument"; inner.vars[node.params[i].name] = {type: "argument", node: node.params[i]};
if (node.type == "FunctionDeclaration") if (node.id) {
scope.vars[node.id.name] = "function"; var decl = node.type == "FunctionDeclaration";
else if (node.id) (decl ? scope : inner).vars[node.id.name] =
inner.vars[node.id.name] = "function'"; {type: decl ? "function" : "function name", node: node.id};
}
c(node.body, inner, "ScopeBody"); c(node.body, inner, "ScopeBody");
}, },
TryStatement: function(node, scope, c) { TryStatement: function(node, scope, c) {
c(node.block, scope, "Statement"); c(node.block, scope, "Statement");
for (var i = 0; i < node.handlers.length; ++i) { for (var i = 0; i < node.handlers.length; ++i) {
var handler = node.handlers[i], inner = makeScope(scope); var handler = node.handlers[i], inner = makeScope(scope);
inner.vars[handler.param.name] = "catch"; inner.vars[handler.param.name] = {type: "catch clause", node: handler.param};
c(handler.body, inner, "ScopeBody"); c(handler.body, inner, "ScopeBody");
} }
if (node.finalizer) c(node.finalizer, scope, "Statement"); if (node.finalizer) c(node.finalizer, scope, "Statement");
@ -206,7 +207,7 @@
VariableDeclaration: function(node, scope, c) { VariableDeclaration: function(node, scope, c) {
for (var i = 0; i < node.declarations.length; ++i) { for (var i = 0; i < node.declarations.length; ++i) {
var decl = node.declarations[i]; var decl = node.declarations[i];
scope.vars[decl.id.name] = "var"; scope.vars[decl.id.name] = {type: "var", node: decl.id};
if (decl.init) c(decl.init, scope, "Expression"); if (decl.init) c(decl.init, scope, "Expression");
} }
} }