|
31 | 31 | //} |
32 | 32 | function _findFunctionName(source, lineNumber) { |
33 | 33 | // function {name}({args}) m[1]=name m[2]=args |
34 | | - var reFunctionDeclaration = /function\s+([^(]*?)\s*\(([^)]*)\)/; |
| 34 | + var reFunctionDeclaration = /function+([^(]*?)\s*\(([^)]*)\)/; |
35 | 35 | // {name} = function ({args}) |
36 | 36 | var reFunctionExpression = /['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*function\b/; |
37 | 37 | // {name} = eval() |
38 | 38 | var reFunctionEvaluation = /['"]?([$_A-Za-z][$_A-Za-z0-9]*)['"]?\s*[:=]\s*(?:eval|new Function)\b/; |
39 | 39 | var lines = source.split('\n'); |
40 | 40 |
|
41 | 41 | // Walk backwards in the source lines until we find the line which matches one of the patterns above |
42 | | - var code = '', line, maxLines = Math.min(lineNumber, 20), m, commentPos; |
| 42 | + var code = '', line, maxLines = Math.min(lineNumber, 50), m, commentPos; |
43 | 43 | for (var i = 0; i < maxLines; ++i) { |
44 | 44 | // lineNo is 1-based, source[] is 0-based |
45 | 45 | line = lines[lineNumber - i - 1]; |
|
58 | 58 | return m[1]; |
59 | 59 | } |
60 | 60 | m = reFunctionDeclaration.exec(code); |
61 | | - if (m && m[1]) { |
62 | | - return m[1]; |
| 61 | + if (m ) { |
| 62 | + if(m[1]!=='') {return m[1];} |
| 63 | + else { return undefined;} |
63 | 64 | } |
64 | 65 | m = reFunctionEvaluation.exec(code); |
65 | 66 | if (m && m[1]) { |
|
90 | 91 | function getOriginalLocation(stack){ |
91 | 92 | var $q=$injector.get('$q'); |
92 | 93 | var url=stack.fileName; |
| 94 | + var _stack; |
93 | 95 | var def=$q.defer(); |
| 96 | + |
94 | 97 | if(!_self.options.offline){ |
95 | 98 | def.resolve(stack); |
96 | 99 | return; |
97 | 100 | } |
98 | 101 | //check if map exist in cache for the file else get the map and update the cache |
99 | 102 | if(!_cache[url]){ |
| 103 | + var def1= $q.defer(); |
100 | 104 | _cache[url]={ |
101 | | - exist:false, |
| 105 | + exist:def1.promise, |
102 | 106 | _map:{}, |
103 | 107 | _file:'' |
104 | 108 | }; |
|
107 | 111 | mapUrl=url.substring(0,url.lastIndexOf('/')+1)+mapUrl; |
108 | 112 | } |
109 | 113 | $.getJSON(mapUrl, function(map) { |
110 | | - _cache[url].exist=true; |
111 | 114 | _cache[url]._map=new sourceMap.SourceMapConsumer(map); |
112 | 115 | var loc=_cache[url]._map.originalPositionFor({ |
113 | 116 | line: stack.lineNumber, |
|
121 | 124 | var sourceFileUlr=url.substring(0,url.lastIndexOf('/')+1)+loc.source; |
122 | 125 | $.ajax(sourceFileUlr).then(function(content) { |
123 | 126 | _cache[url]._file=content; |
| 127 | + def1.resolve(true); |
124 | 128 | loc.name=_findFunctionName(_cache[url]._file,loc.line, loc.column); |
125 | 129 | _stack=new window.StackFrame(loc.name, stack.args, loc.source, loc.line, loc.column); |
126 | 130 | def.resolve(_stack); |
127 | 131 | }).fail(function() { |
128 | 132 | _cache[url]._file=null; |
| 133 | + def1.resolve(true); |
129 | 134 | def.resolve(stack); |
130 | 135 | }); |
131 | 136 | } |
132 | 137 |
|
133 | 138 |
|
134 | 139 | }).fail(function() { |
135 | | - _cache[url].exist=false; |
| 140 | + def1.reject(); |
136 | 141 | _cache[url]._map=null; |
137 | 142 | def.resolve(stack); |
138 | 143 | }); |
139 | 144 | },function(){ |
140 | | - _cache[url].exist=false; |
| 145 | + def1.reject(); |
141 | 146 | _cache[url]._map=null; |
142 | 147 | def.resolve(stack); |
143 | 148 | }); |
144 | 149 |
|
145 | 150 | }else{ |
146 | | - if(_cache[url].exist){ |
147 | | - //read map and return stack from source |
148 | | - var _stack=_cache[url]._map.originalPositionFor(stack); |
149 | | - def.resolve(_stack); |
150 | | - }else{ |
| 151 | + _cache[url].exist.then(function(val){ |
| 152 | + if(val){ |
| 153 | + //read map and return stack from source |
| 154 | + var loc=_cache[url]._map.originalPositionFor({ |
| 155 | + line: stack.lineNumber, |
| 156 | + column: stack.columnNumber |
| 157 | + }); |
| 158 | + loc.name=_findFunctionName(_cache[url]._file,loc.line, loc.column); |
| 159 | + _stack=new window.StackFrame(loc.name, stack.args, loc.source, loc.line, loc.column); |
| 160 | + def.resolve(_stack); |
| 161 | + } |
| 162 | + },function(){ |
151 | 163 | def.resolve(stack); |
152 | | - } |
| 164 | + }); |
| 165 | + |
| 166 | + |
153 | 167 | } |
154 | 168 | return def.promise; |
155 | 169 | } |
|
0 commit comments