diff --git a/lib/coffee-script/nodes.js b/lib/coffee-script/nodes.js index c4c00ffc..5635202f 100644 --- a/lib/coffee-script/nodes.js +++ b/lib/coffee-script/nodes.js @@ -3033,9 +3033,10 @@ }; Op.prototype.compileFloorDivision = function(o) { - var div, floor; + var div, floor, second; floor = new Value(new IdentifierLiteral('Math'), [new Access(new PropertyName('floor'))]); - div = new Op('/', this.first, this.second); + second = this.second.isComplex() ? new Parens(this.second) : this.second; + div = new Op('/', this.first, second); return new Call(floor, [div]).compileToFragments(o); }; diff --git a/src/nodes.coffee b/src/nodes.coffee index 7b906313..73fadbce 100644 --- a/src/nodes.coffee +++ b/src/nodes.coffee @@ -2077,7 +2077,8 @@ exports.Op = class Op extends Base compileFloorDivision: (o) -> floor = new Value new IdentifierLiteral('Math'), [new Access new PropertyName 'floor'] - div = new Op '/', @first, @second + second = if @second.isComplex() then new Parens @second else @second + div = new Op '/', @first, second new Call(floor, [div]).compileToFragments o compileModulo: (o) -> diff --git a/test/error_messages.coffee b/test/error_messages.coffee index b36b029b..8034e4ef 100644 --- a/test/error_messages.coffee +++ b/test/error_messages.coffee @@ -416,7 +416,7 @@ test "#3795: invalid escapes", -> assertErrorFormat ''' ///a \\u002 0 space/// ''', ''' - [stdin]:1:6: error: invalid escape sequence \\u002 + [stdin]:1:6: error: invalid escape sequence \\u002 \n\ ///a \\u002 0 space/// ^\^^^^^ ''' diff --git a/test/operators.coffee b/test/operators.coffee index eb57e888..9c683aae 100644 --- a/test/operators.coffee +++ b/test/operators.coffee @@ -330,7 +330,7 @@ test "floor division operator", -> test "floor division operator compound assignment", -> a = 7 - a //= 2 + a //= 1 + 1 eq 3, a test "modulo operator", ->