From 20ce797906bf20cfb1682a6bd1bb23c02aedc369 Mon Sep 17 00:00:00 2001 From: Misko Hevery Date: Wed, 23 Mar 2011 09:30:08 -0700 Subject: performance improvement of single statement in parser --- src/parser.js | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) (limited to 'src') diff --git a/src/parser.js b/src/parser.js index 6916a3f7..8d7e607c 100644 --- a/src/parser.js +++ b/src/parser.js @@ -325,15 +325,19 @@ function parser(text, json){ if (tokens.length > 0 && !peek('}', ')', ';', ']')) statements.push(filterChain()); if (!expect(';')) { - return function (self){ - var value; - for ( var i = 0; i < statements.length; i++) { - var statement = statements[i]; - if (statement) - value = statement(self); - } - return value; - }; + // optimize for the common case where there is only one statement. + // TODO(size): maybe we should not support multiple statements? + return statements.length == 1 + ? statements[0] + : function (self){ + var value; + for ( var i = 0; i < statements.length; i++) { + var statement = statements[i]; + if (statement) + value = statement(self); + } + return value; + }; } } } -- cgit v1.2.3