aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMihai Bazon <mihai@bazon.net>2013-12-05 13:30:29 +0200
committerMihai Bazon <mihai@bazon.net>2013-12-05 13:30:29 +0200
commit8f35a363d90e6521e916a8d70f3302d4adc51ae6 (patch)
tree420204f166ac3259f3d1da3ff3a265f17f21f94d
parentd2190c2bf340d807a0c8595dbc2f849aa3bcc443 (diff)
downloadtracifyjs-8f35a363d90e6521e916a8d70f3302d4adc51ae6.tar.gz
tracifyjs-8f35a363d90e6521e916a8d70f3302d4adc51ae6.zip
AST_Catch shouldn't really inherit from AST_Scope. Fix #363
I hereby acknowledge that figure_out_scope has become a mess.
-rw-r--r--lib/ast.js2
-rw-r--r--lib/scope.js14
-rw-r--r--test/compress/drop-unused.js44
3 files changed, 55 insertions, 5 deletions
diff --git a/lib/ast.js b/lib/ast.js
index 1a291e31..2f216c20 100644
--- a/lib/ast.js
+++ b/lib/ast.js
@@ -509,7 +509,7 @@ var AST_Catch = DEFNODE("Catch", "argname", {
walk_body(this, visitor);
});
}
-}, AST_Scope);
+}, AST_Block);
var AST_Finally = DEFNODE("Finally", null, {
$documentation: "A `finally` node; only makes sense as part of a `try` statement"
diff --git a/lib/scope.js b/lib/scope.js
index ed189d49..950128d4 100644
--- a/lib/scope.js
+++ b/lib/scope.js
@@ -82,14 +82,20 @@ AST_Toplevel.DEFMETHOD("figure_out_scope", function(options){
var defun = null;
var nesting = 0;
var tw = new TreeWalker(function(node, descend){
+ if (options.screw_ie8 && node instanceof AST_Catch) {
+ var save_scope = scope;
+ scope = new AST_Scope(node);
+ scope.init_scope_vars(nesting);
+ scope.parent_scope = save_scope;
+ descend();
+ scope = save_scope;
+ return true;
+ }
if (node instanceof AST_Scope) {
node.init_scope_vars(nesting);
var save_scope = node.parent_scope = scope;
var save_defun = defun;
- if (!(node instanceof AST_Catch)) {
- defun = node;
- }
- scope = node;
+ defun = scope = node;
++nesting; descend(); --nesting;
scope = save_scope;
defun = save_defun;
diff --git a/test/compress/drop-unused.js b/test/compress/drop-unused.js
index 406ce9e6..89bf0088 100644
--- a/test/compress/drop-unused.js
+++ b/test/compress/drop-unused.js
@@ -119,3 +119,47 @@ unused_keep_setter_arg: {
}
}
}
+
+unused_var_in_catch: {
+ options = { unused: true };
+ input: {
+ function foo() {
+ try {
+ foo();
+ } catch(ex) {
+ var x = 10;
+ }
+ }
+ }
+ expect: {
+ function foo() {
+ try {
+ foo();
+ } catch(ex) {}
+ }
+ }
+}
+
+used_var_in_catch: {
+ options = { unused: true };
+ input: {
+ function foo() {
+ try {
+ foo();
+ } catch(ex) {
+ var x = 10;
+ }
+ return x;
+ }
+ }
+ expect: {
+ function foo() {
+ try {
+ foo();
+ } catch(ex) {
+ var x = 10;
+ }
+ return x;
+ }
+ }
+}