From 1bcc97635b11db2030697e5bb121d547c8c456e4 Mon Sep 17 00:00:00 2001 From: Ian Wehrman Date: Wed, 12 Dec 2012 11:03:48 -0800 Subject: [PATCH] track global variables alongside locals in the parser state --- mode/javascript/javascript.js | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/mode/javascript/javascript.js b/mode/javascript/javascript.js index f00be91e86..b66d223617 100644 --- a/mode/javascript/javascript.js +++ b/mode/javascript/javascript.js @@ -196,12 +196,19 @@ CodeMirror.defineMode("javascript", function(config, parserConfig) { return true; } function register(varname) { + function inList(list) { + for (var v = list; v; v = v.next) + if (v.name == varname) return true; + return false; + } var state = cx.state; if (state.context) { cx.marked = "def"; - for (var v = state.localVars; v; v = v.next) - if (v.name == varname) return; + if (inList(state.localVars)) return; state.localVars = {name: varname, next: state.localVars}; + } else { + if (inList(state.globalVars)) return; + state.globalVars = {name: varname, next: state.globalVars}; } } @@ -364,6 +371,7 @@ CodeMirror.defineMode("javascript", function(config, parserConfig) { cc: [], lexical: new JSLexical((basecolumn || 0) - indentUnit, 0, "block", false), localVars: parserConfig.localVars, + globalVars: parserConfig.globalVars, context: parserConfig.localVars && {vars: parserConfig.localVars}, indented: 0 };