Skip to content
This repository was archived by the owner on Apr 12, 2024. It is now read-only.

Commit 43c67cc

Browse files
jbedardIgorMinar
authored andcommitted
perf($parse): removing references to Parser/Lexer from parsed expressions
This allows the parser and lexer objects to get GC-ed once the expression is parsed. Part of #8901
1 parent 1cfd49d commit 43c67cc

File tree

1 file changed

+11
-11
lines changed

1 file changed

+11
-11
lines changed

src/ng/parse.js

+11-11
Original file line numberDiff line numberDiff line change
@@ -258,7 +258,7 @@ Lexer.prototype = {
258258
},
259259

260260
readIdent: function() {
261-
var parser = this;
261+
var expression = this.text;
262262

263263
var ident = '';
264264
var start = this.index;
@@ -317,13 +317,13 @@ Lexer.prototype = {
317317
token.fn = fn;
318318
token.constant = true;
319319
} else {
320-
var getter = getterFn(ident, this.options, this.text);
320+
var getter = getterFn(ident, this.options, expression);
321321
// TODO(perf): consider exposing the getter reference
322322
token.fn = extend(function $parsePathGetter(self, locals) {
323323
return getter(self, locals);
324324
}, {
325325
assign: function(self, value) {
326-
return setter(self, ident, value, parser.text);
326+
return setter(self, ident, value, expression);
327327
}
328328
});
329329
}
@@ -686,23 +686,23 @@ Parser.prototype = {
686686
},
687687

688688
fieldAccess: function(object) {
689-
var parser = this;
689+
var expression = this.text;
690690
var field = this.expect().text;
691-
var getter = getterFn(field, this.options, this.text);
691+
var getter = getterFn(field, this.options, expression);
692692

693693
return extend(function $parseFieldAccess(scope, locals, self) {
694694
return getter(self || object(scope, locals));
695695
}, {
696696
assign: function(scope, value, locals) {
697697
var o = object(scope, locals);
698698
if (!o) object.assign(scope, o = {});
699-
return setter(o, field, value, parser.text);
699+
return setter(o, field, value, expression);
700700
}
701701
});
702702
},
703703

704704
objectIndex: function(obj) {
705-
var parser = this;
705+
var expression = this.text;
706706

707707
var indexFn = this.expression();
708708
this.consume(']');
@@ -712,15 +712,15 @@ Parser.prototype = {
712712
i = indexFn(self, locals),
713713
v;
714714

715-
ensureSafeMemberName(i, parser.text);
715+
ensureSafeMemberName(i, expression);
716716
if (!o) return undefined;
717-
v = ensureSafeObject(o[i], parser.text);
717+
v = ensureSafeObject(o[i], expression);
718718
return v;
719719
}, {
720720
assign: function(self, value, locals) {
721-
var key = ensureSafeMemberName(indexFn(self, locals), parser.text);
721+
var key = ensureSafeMemberName(indexFn(self, locals), expression);
722722
// prevent overwriting of Function.constructor which would break ensureSafeObject check
723-
var o = ensureSafeObject(obj(self, locals), parser.text);
723+
var o = ensureSafeObject(obj(self, locals), expression);
724724
if (!o) obj.assign(self, o = {});
725725
return o[key] = value;
726726
}

0 commit comments

Comments
 (0)