aboutsummaryrefslogtreecommitdiff
path: root/lib/scope.js
diff options
context:
space:
mode:
authorSamuel Reed <samuel.trace.reed@gmail.com>2016-01-20 11:03:41 -0600
committerSamuel Reed <samuel.trace.reed@gmail.com>2016-01-20 11:03:41 -0600
commit4a7179ff9183cd27d036043c0bbcb01d1604d824 (patch)
tree414ba017f81755c05d4e1774ee4c38001541d7ab /lib/scope.js
parentf97da4294a7e9adbd560ecafd94ec697de35affc (diff)
downloadtracifyjs-4a7179ff9183cd27d036043c0bbcb01d1604d824.tar.gz
tracifyjs-4a7179ff9183cd27d036043c0bbcb01d1604d824.zip
Simplify by skipping extra tree walk.
Diffstat (limited to 'lib/scope.js')
-rw-r--r--lib/scope.js38
1 files changed, 10 insertions, 28 deletions
diff --git a/lib/scope.js b/lib/scope.js
index 144ae48e..794254d4 100644
--- a/lib/scope.js
+++ b/lib/scope.js
@@ -94,6 +94,7 @@ AST_Toplevel.DEFMETHOD("figure_out_scope", function(options){
var scope = self.parent_scope = null;
var labels = new Dictionary();
var defun = null;
+ var last_var_had_const_pragma = false;
var nesting = 0;
var tw = new TreeWalker(function(node, descend){
if (options.screw_ie8 && node instanceof AST_Catch) {
@@ -151,10 +152,13 @@ AST_Toplevel.DEFMETHOD("figure_out_scope", function(options){
// later.
(node.scope = defun.parent_scope).def_function(node);
}
+ else if (node instanceof AST_Var) {
+ last_var_had_const_pragma = node.has_const_pragma();
+ }
else if (node instanceof AST_SymbolVar
|| node instanceof AST_SymbolConst) {
var def = defun.def_variable(node);
- def.constant = node instanceof AST_SymbolConst || node.has_const_pragma();
+ def.constant = node instanceof AST_SymbolConst || last_var_had_const_pragma;
def.init = tw.parent().value;
}
else if (node instanceof AST_SymbolCatch) {
@@ -357,33 +361,11 @@ AST_Symbol.DEFMETHOD("global", function(){
return this.definition().global;
});
-AST_Symbol.DEFMETHOD("has_const_pragma", function() {
- var symbol = this;
- var symbol_has_pragma = false;
- var pragma_found = false;
- var found_symbol = false;
- // Walk the current scope, looking for a comment with the @const pragma.
- // If it exists, mark a bool that will remain true only for the next iteration.
- // If the next iteration is this symbol, then we return true.
- // Otherwise we stop descending and get out of here.
- var tw = new TreeWalker(function(node, descend){
- // This is our symbol. Was the pragma before this?
- if (node.name === symbol) {
- found_symbol = true;
- symbol_has_pragma = pragma_found;
- }
-
- // Look for the /** @const */ pragma
- var comments_before = node.start && node.start.comments_before;
- var lastComment = comments_before && comments_before[comments_before.length - 1];
- pragma_found = lastComment && /@const/.test(lastComment.value);
-
- // no need to descend after finding our node
- return found_symbol;
- });
- this.scope.walk(tw);
- return symbol_has_pragma;
-})
+AST_Var.DEFMETHOD("has_const_pragma", function() {
+ var comments_before = this.start && this.start.comments_before;
+ var lastComment = comments_before && comments_before[comments_before.length - 1];
+ return lastComment && /@const/.test(lastComment.value);
+});
AST_Toplevel.DEFMETHOD("_default_mangler_options", function(options){
return defaults(options, {