Empty expression interpolations evaluate as empty strings now.

This commit is contained in:
Stan Angeloff 2010-03-08 09:31:31 +02:00 committed by Jeremy Ashkenas
parent 532464f7ae
commit 026e7649d5
3 changed files with 22 additions and 14 deletions

View File

@ -471,17 +471,21 @@
tokens.push(['IDENTIFIER', interp]);
i += group.length - 1;
pi = i + 1;
} else if (((expr = this.balanced_string(str.substring(i), ['${', '}']))) && expr.length > 3) {
inner = expr.substring(2, expr.length - 1);
nested = lexer.tokenize("(" + inner + ")", {
rewrite: false,
line: this.line
});
nested.pop();
} else if (((expr = this.balanced_string(str.substring(i), ['${', '}'])))) {
if (pi < i) {
tokens.push(['STRING', quote + (str.substring(pi, i)) + quote]);
}
tokens.push(['TOKENS', nested]);
inner = expr.substring(2, expr.length - 1);
if (inner.length) {
nested = lexer.tokenize("(" + inner + ")", {
rewrite: false,
line: this.line
});
nested.pop();
tokens.push(['TOKENS', nested]);
} else {
tokens.push(['STRING', quote + quote]);
}
i += expr.length - 1;
pi = i + 1;
}

View File

@ -349,12 +349,15 @@ exports.Lexer: class Lexer
tokens.push ['IDENTIFIER', interp]
i += group.length - 1
pi: i + 1
else if (expr: @balanced_string str.substring(i), ['${', '}']) and expr.length > 3
inner: expr.substring(2, expr.length - 1)
nested: lexer.tokenize "($inner)", {rewrite: no, line: @line}
nested.pop()
else if (expr: @balanced_string str.substring(i), ['${', '}'])
tokens.push ['STRING', "$quote${ str.substring(pi, i) }$quote"] if pi < i
tokens.push ['TOKENS', nested]
inner: expr.substring(2, expr.length - 1)
if inner.length
nested: lexer.tokenize "($inner)", {rewrite: no, line: @line}
nested.pop()
tokens.push ['TOKENS', nested]
else
tokens.push ['STRING', "$quote$quote"]
i += expr.length - 1
pi: i + 1
i += 1

View File

@ -28,7 +28,8 @@ ok "Escaping \$last" is 'Escaping $last'
ok "Escaping \${last}" is 'Escaping ${last}'
ok "$$" is '$$'
ok "${}" is '${}'
ok "${}" is ''
ok "${}A${} ${} ${}B${}" is 'A B'
ok "\\\\\$$" is '\\\\\$$'
ok "\\\${}" is '\\${}'