Skip to content

Commit

Permalink
Merge pull request #1581 from Arnavion/1577-templatestring-subtraction
Browse files Browse the repository at this point in the history
Fixes #1577
  • Loading branch information
DanielRosenwasser committed Jan 6, 2015
2 parents 8e2365b + 4dfb0cc commit 7a8e3ec
Show file tree
Hide file tree
Showing 19 changed files with 2,229 additions and 24 deletions.
4 changes: 3 additions & 1 deletion src/compiler/emitter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2117,7 +2117,8 @@ module ts {
* or equal precedence to the binary '+' operator
*/
function comparePrecedenceToBinaryPlus(expression: Expression): Comparison {
// All binary expressions have lower precedence than '+' apart from '*', '/', and '%'.
// All binary expressions have lower precedence than '+' apart from '*', '/', and '%'
// which have greater precedence and '-' which has equal precedence.
// All unary operators have a higher precedence apart from yield.
// Arrow functions and conditionals have a lower precedence,
// although we convert the former into regular function expressions in ES5 mode,
Expand All @@ -2134,6 +2135,7 @@ module ts {
case SyntaxKind.PercentToken:
return Comparison.GreaterThan;
case SyntaxKind.PlusToken:
case SyntaxKind.MinusToken:
return Comparison.EqualTo;
default:
return Comparison.LessThan;
Expand Down
103 changes: 103 additions & 0 deletions tests/baselines/reference/templateStringBinaryOperations.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
//// [templateStringBinaryOperations.ts]
var a = 1 + `${ 3 }`;
var b = 1 + `2${ 3 }`;
var c = 1 + `${ 3 }4`;
var d = 1 + `2${ 3 }4`;
var e = `${ 3 }` + 5;
var f = `2${ 3 }` + 5;
var g = `${ 3 }4` + 5;
var h = `2${ 3 }4` + 5;
var i = 1 + `${ 3 }` + 5;
var j = 1 + `2${ 3 }` + 5;
var k = 1 + `${ 3 }4` + 5;
var l = 1 + `2${ 3 }4` + 5;

var a2 = 1 + `${ 3 - 4 }`;
var b2 = 1 + `2${ 3 - 4 }`;
var c2 = 1 + `${ 3 - 4 }5`;
var d2 = 1 + `2${ 3 - 4 }5`;
var e2 = `${ 3 - 4 }` + 6;
var f2 = `2${ 3 - 4 }` + 6;
var g2 = `${ 3 - 4 }5` + 6;
var h2 = `2${ 3 - 4 }5` + 6;
var i2 = 1 + `${ 3 - 4 }` + 6;
var j2 = 1 + `2${ 3 - 4 }` + 6;
var k2 = 1 + `${ 3 - 4 }5` + 6;
var l2 = 1 + `2${ 3 - 4 }5` + 6;

var a3 = 1 + `${ 3 * 4 }`;
var b3 = 1 + `2${ 3 * 4 }`;
var c3 = 1 + `${ 3 * 4 }5`;
var d3 = 1 + `2${ 3 * 4 }5`;
var e3 = `${ 3 * 4 }` + 6;
var f3 = `2${ 3 * 4 }` + 6;
var g3 = `${ 3 * 4 }5` + 6;
var h3 = `2${ 3 * 4 }5` + 6;
var i3 = 1 + `${ 3 * 4 }` + 6;
var j3 = 1 + `2${ 3 * 4 }` + 6;
var k3 = 1 + `${ 3 * 4 }5` + 6;
var l3 = 1 + `2${ 3 * 4 }5` + 6;

var a4 = 1 + `${ 3 & 4 }`;
var b4 = 1 + `2${ 3 & 4 }`;
var c4 = 1 + `${ 3 & 4 }5`;
var d4 = 1 + `2${ 3 & 4 }5`;
var e4 = `${ 3 & 4 }` + 6;
var f4 = `2${ 3 & 4 }` + 6;
var g4 = `${ 3 & 4 }5` + 6;
var h4 = `2${ 3 & 4 }5` + 6;
var i4 = 1 + `${ 3 & 4 }` + 6;
var j4 = 1 + `2${ 3 & 4 }` + 6;
var k4 = 1 + `${ 3 & 4 }5` + 6;
var l4 = 1 + `2${ 3 & 4 }5` + 6;


//// [templateStringBinaryOperations.js]
var a = 1 + ("" + 3);
var b = 1 + ("2" + 3);
var c = 1 + ("" + 3 + "4");
var d = 1 + ("2" + 3 + "4");
var e = ("" + 3) + 5;
var f = ("2" + 3) + 5;
var g = ("" + 3 + "4") + 5;
var h = ("2" + 3 + "4") + 5;
var i = 1 + ("" + 3) + 5;
var j = 1 + ("2" + 3) + 5;
var k = 1 + ("" + 3 + "4") + 5;
var l = 1 + ("2" + 3 + "4") + 5;
var a2 = 1 + ("" + (3 - 4));
var b2 = 1 + ("2" + (3 - 4));
var c2 = 1 + ("" + (3 - 4) + "5");
var d2 = 1 + ("2" + (3 - 4) + "5");
var e2 = ("" + (3 - 4)) + 6;
var f2 = ("2" + (3 - 4)) + 6;
var g2 = ("" + (3 - 4) + "5") + 6;
var h2 = ("2" + (3 - 4) + "5") + 6;
var i2 = 1 + ("" + (3 - 4)) + 6;
var j2 = 1 + ("2" + (3 - 4)) + 6;
var k2 = 1 + ("" + (3 - 4) + "5") + 6;
var l2 = 1 + ("2" + (3 - 4) + "5") + 6;
var a3 = 1 + ("" + 3 * 4);
var b3 = 1 + ("2" + 3 * 4);
var c3 = 1 + ("" + 3 * 4 + "5");
var d3 = 1 + ("2" + 3 * 4 + "5");
var e3 = ("" + 3 * 4) + 6;
var f3 = ("2" + 3 * 4) + 6;
var g3 = ("" + 3 * 4 + "5") + 6;
var h3 = ("2" + 3 * 4 + "5") + 6;
var i3 = 1 + ("" + 3 * 4) + 6;
var j3 = 1 + ("2" + 3 * 4) + 6;
var k3 = 1 + ("" + 3 * 4 + "5") + 6;
var l3 = 1 + ("2" + 3 * 4 + "5") + 6;
var a4 = 1 + ("" + (3 & 4));
var b4 = 1 + ("2" + (3 & 4));
var c4 = 1 + ("" + (3 & 4) + "5");
var d4 = 1 + ("2" + (3 & 4) + "5");
var e4 = ("" + (3 & 4)) + 6;
var f4 = ("2" + (3 & 4)) + 6;
var g4 = ("" + (3 & 4) + "5") + 6;
var h4 = ("2" + (3 & 4) + "5") + 6;
var i4 = 1 + ("" + (3 & 4)) + 6;
var j4 = 1 + ("2" + (3 & 4)) + 6;
var k4 = 1 + ("" + (3 & 4) + "5") + 6;
var l4 = 1 + ("2" + (3 & 4) + "5") + 6;
245 changes: 245 additions & 0 deletions tests/baselines/reference/templateStringBinaryOperations.types
Original file line number Diff line number Diff line change
@@ -0,0 +1,245 @@
=== tests/cases/conformance/es6/templates/templateStringBinaryOperations.ts ===
var a = 1 + `${ 3 }`;
>a : string
>1 + `${ 3 }` : string

var b = 1 + `2${ 3 }`;
>b : string
>1 + `2${ 3 }` : string

var c = 1 + `${ 3 }4`;
>c : string
>1 + `${ 3 }4` : string

var d = 1 + `2${ 3 }4`;
>d : string
>1 + `2${ 3 }4` : string

var e = `${ 3 }` + 5;
>e : string
>`${ 3 }` + 5 : string

var f = `2${ 3 }` + 5;
>f : string
>`2${ 3 }` + 5 : string

var g = `${ 3 }4` + 5;
>g : string
>`${ 3 }4` + 5 : string

var h = `2${ 3 }4` + 5;
>h : string
>`2${ 3 }4` + 5 : string

var i = 1 + `${ 3 }` + 5;
>i : string
>1 + `${ 3 }` + 5 : string
>1 + `${ 3 }` : string

var j = 1 + `2${ 3 }` + 5;
>j : string
>1 + `2${ 3 }` + 5 : string
>1 + `2${ 3 }` : string

var k = 1 + `${ 3 }4` + 5;
>k : string
>1 + `${ 3 }4` + 5 : string
>1 + `${ 3 }4` : string

var l = 1 + `2${ 3 }4` + 5;
>l : string
>1 + `2${ 3 }4` + 5 : string
>1 + `2${ 3 }4` : string

var a2 = 1 + `${ 3 - 4 }`;
>a2 : string
>1 + `${ 3 - 4 }` : string
>3 - 4 : number

var b2 = 1 + `2${ 3 - 4 }`;
>b2 : string
>1 + `2${ 3 - 4 }` : string
>3 - 4 : number

var c2 = 1 + `${ 3 - 4 }5`;
>c2 : string
>1 + `${ 3 - 4 }5` : string
>3 - 4 : number

var d2 = 1 + `2${ 3 - 4 }5`;
>d2 : string
>1 + `2${ 3 - 4 }5` : string
>3 - 4 : number

var e2 = `${ 3 - 4 }` + 6;
>e2 : string
>`${ 3 - 4 }` + 6 : string
>3 - 4 : number

var f2 = `2${ 3 - 4 }` + 6;
>f2 : string
>`2${ 3 - 4 }` + 6 : string
>3 - 4 : number

var g2 = `${ 3 - 4 }5` + 6;
>g2 : string
>`${ 3 - 4 }5` + 6 : string
>3 - 4 : number

var h2 = `2${ 3 - 4 }5` + 6;
>h2 : string
>`2${ 3 - 4 }5` + 6 : string
>3 - 4 : number

var i2 = 1 + `${ 3 - 4 }` + 6;
>i2 : string
>1 + `${ 3 - 4 }` + 6 : string
>1 + `${ 3 - 4 }` : string
>3 - 4 : number

var j2 = 1 + `2${ 3 - 4 }` + 6;
>j2 : string
>1 + `2${ 3 - 4 }` + 6 : string
>1 + `2${ 3 - 4 }` : string
>3 - 4 : number

var k2 = 1 + `${ 3 - 4 }5` + 6;
>k2 : string
>1 + `${ 3 - 4 }5` + 6 : string
>1 + `${ 3 - 4 }5` : string
>3 - 4 : number

var l2 = 1 + `2${ 3 - 4 }5` + 6;
>l2 : string
>1 + `2${ 3 - 4 }5` + 6 : string
>1 + `2${ 3 - 4 }5` : string
>3 - 4 : number

var a3 = 1 + `${ 3 * 4 }`;
>a3 : string
>1 + `${ 3 * 4 }` : string
>3 * 4 : number

var b3 = 1 + `2${ 3 * 4 }`;
>b3 : string
>1 + `2${ 3 * 4 }` : string
>3 * 4 : number

var c3 = 1 + `${ 3 * 4 }5`;
>c3 : string
>1 + `${ 3 * 4 }5` : string
>3 * 4 : number

var d3 = 1 + `2${ 3 * 4 }5`;
>d3 : string
>1 + `2${ 3 * 4 }5` : string
>3 * 4 : number

var e3 = `${ 3 * 4 }` + 6;
>e3 : string
>`${ 3 * 4 }` + 6 : string
>3 * 4 : number

var f3 = `2${ 3 * 4 }` + 6;
>f3 : string
>`2${ 3 * 4 }` + 6 : string
>3 * 4 : number

var g3 = `${ 3 * 4 }5` + 6;
>g3 : string
>`${ 3 * 4 }5` + 6 : string
>3 * 4 : number

var h3 = `2${ 3 * 4 }5` + 6;
>h3 : string
>`2${ 3 * 4 }5` + 6 : string
>3 * 4 : number

var i3 = 1 + `${ 3 * 4 }` + 6;
>i3 : string
>1 + `${ 3 * 4 }` + 6 : string
>1 + `${ 3 * 4 }` : string
>3 * 4 : number

var j3 = 1 + `2${ 3 * 4 }` + 6;
>j3 : string
>1 + `2${ 3 * 4 }` + 6 : string
>1 + `2${ 3 * 4 }` : string
>3 * 4 : number

var k3 = 1 + `${ 3 * 4 }5` + 6;
>k3 : string
>1 + `${ 3 * 4 }5` + 6 : string
>1 + `${ 3 * 4 }5` : string
>3 * 4 : number

var l3 = 1 + `2${ 3 * 4 }5` + 6;
>l3 : string
>1 + `2${ 3 * 4 }5` + 6 : string
>1 + `2${ 3 * 4 }5` : string
>3 * 4 : number

var a4 = 1 + `${ 3 & 4 }`;
>a4 : string
>1 + `${ 3 & 4 }` : string
>3 & 4 : number

var b4 = 1 + `2${ 3 & 4 }`;
>b4 : string
>1 + `2${ 3 & 4 }` : string
>3 & 4 : number

var c4 = 1 + `${ 3 & 4 }5`;
>c4 : string
>1 + `${ 3 & 4 }5` : string
>3 & 4 : number

var d4 = 1 + `2${ 3 & 4 }5`;
>d4 : string
>1 + `2${ 3 & 4 }5` : string
>3 & 4 : number

var e4 = `${ 3 & 4 }` + 6;
>e4 : string
>`${ 3 & 4 }` + 6 : string
>3 & 4 : number

var f4 = `2${ 3 & 4 }` + 6;
>f4 : string
>`2${ 3 & 4 }` + 6 : string
>3 & 4 : number

var g4 = `${ 3 & 4 }5` + 6;
>g4 : string
>`${ 3 & 4 }5` + 6 : string
>3 & 4 : number

var h4 = `2${ 3 & 4 }5` + 6;
>h4 : string
>`2${ 3 & 4 }5` + 6 : string
>3 & 4 : number

var i4 = 1 + `${ 3 & 4 }` + 6;
>i4 : string
>1 + `${ 3 & 4 }` + 6 : string
>1 + `${ 3 & 4 }` : string
>3 & 4 : number

var j4 = 1 + `2${ 3 & 4 }` + 6;
>j4 : string
>1 + `2${ 3 & 4 }` + 6 : string
>1 + `2${ 3 & 4 }` : string
>3 & 4 : number

var k4 = 1 + `${ 3 & 4 }5` + 6;
>k4 : string
>1 + `${ 3 & 4 }5` + 6 : string
>1 + `${ 3 & 4 }5` : string
>3 & 4 : number

var l4 = 1 + `2${ 3 & 4 }5` + 6;
>l4 : string
>1 + `2${ 3 & 4 }5` + 6 : string
>1 + `2${ 3 & 4 }5` : string
>3 & 4 : number

Loading

0 comments on commit 7a8e3ec

Please sign in to comment.