merged stan's interpolation_3, a couple of tweaks

This commit is contained in:
Jeremy Ashkenas 2010-03-08 19:43:12 -05:00
parent 6cac2d57ba
commit 121f01c06f
4 changed files with 8 additions and 4 deletions

View File

@ -33,7 +33,7 @@
Lexer.prototype.tokenize = function tokenize(code, options) { Lexer.prototype.tokenize = function tokenize(code, options) {
var o; var o;
o = options || {}; o = options || {};
this.code = code; this.code = code || '';
// The remainder of the source code. // The remainder of the source code.
this.i = 0; this.i = 0;
// Current character position we're parsing. // Current character position we're parsing.
@ -176,6 +176,9 @@
// JavaScript and Ruby. // JavaScript and Ruby.
Lexer.prototype.regex_token = function regex_token() { Lexer.prototype.regex_token = function regex_token() {
var _a, _b, _c, _d, _e, each, flags, i, index, interp_tokens, merge, regex, str, supress; var _a, _b, _c, _d, _e, each, flags, i, index, interp_tokens, merge, regex, str, supress;
if (!(starts(this.chunk, '/'))) {
return false;
}
if (!((regex = this.balanced_token((supress = true), ['/', '/'])))) { if (!((regex = this.balanced_token((supress = true), ['/', '/'])))) {
return false; return false;
} }

View File

@ -81,7 +81,7 @@
Rewriter.prototype.remove_leading_newlines = function remove_leading_newlines() { Rewriter.prototype.remove_leading_newlines = function remove_leading_newlines() {
var _a; var _a;
_a = []; _a = [];
while (this.tokens[0][0] === 'TERMINATOR') { while (this.tokens[0] && this.tokens[0][0] === 'TERMINATOR') {
_a.push(this.tokens.shift()); _a.push(this.tokens.shift());
} }
return _a; return _a;

View File

@ -36,7 +36,7 @@ exports.Lexer: class Lexer
# unless explicitly asked not to. # unless explicitly asked not to.
tokenize: (code, options) -> tokenize: (code, options) ->
o : options or {} o : options or {}
@code : code # The remainder of the source code. @code : code or '' # The remainder of the source code.
@i : 0 # Current character position we're parsing. @i : 0 # Current character position we're parsing.
@line : o.line or 0 # The current line. @line : o.line or 0 # The current line.
@indent : 0 # The current indentation level. @indent : 0 # The current indentation level.
@ -126,6 +126,7 @@ exports.Lexer: class Lexer
# to distinguish from division, so we borrow some basic heuristics from # to distinguish from division, so we borrow some basic heuristics from
# JavaScript and Ruby. # JavaScript and Ruby.
regex_token: -> regex_token: ->
return false unless starts @chunk, '/'
return false unless regex: @balanced_token supress: true, ['/', '/'] return false unless regex: @balanced_token supress: true, ['/', '/']
return false if regex.length < 3 or regex.match /^\/\s+|\n/ return false if regex.length < 3 or regex.match /^\/\s+|\n/
return false if include NOT_REGEX, @tag() return false if include NOT_REGEX, @tag()

View File

@ -62,7 +62,7 @@ exports.Rewriter: class Rewriter
# Leading newlines would introduce an ambiguity in the grammar, so we # Leading newlines would introduce an ambiguity in the grammar, so we
# dispatch them here. # dispatch them here.
remove_leading_newlines: -> remove_leading_newlines: ->
@tokens.shift() while @tokens[0][0] is 'TERMINATOR' @tokens.shift() while @tokens[0] and @tokens[0][0] is 'TERMINATOR'
# Some blocks occur in the middle of expressions -- when we're expecting # Some blocks occur in the middle of expressions -- when we're expecting
# this, remove their trailing newlines. # this, remove their trailing newlines.