mirror of
https://github.com/jashkenas/coffeescript.git
synced 2026-01-14 09:17:55 -05:00
Merge pull request #3362 from epidemian/fix-modulo-coercion
Fix #3361, make %% coerce right operand only once
This commit is contained in:
@@ -3075,7 +3075,7 @@
|
||||
return "[].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }";
|
||||
},
|
||||
modulo: function() {
|
||||
return "function(a, b) { return (a % b + +b) % b; }";
|
||||
return "function(a, b) { b = +b; return (a % b + b) % b; }";
|
||||
},
|
||||
hasProp: function() {
|
||||
return '{}.hasOwnProperty';
|
||||
|
||||
@@ -2194,7 +2194,7 @@ UTILITIES =
|
||||
"
|
||||
|
||||
modulo: -> """
|
||||
function(a, b) { return (a % b + +b) % b; }
|
||||
function(a, b) { b = +b; return (a % b + b) % b; }
|
||||
"""
|
||||
|
||||
# Shortcuts to speed up the lookup time for native functions.
|
||||
|
||||
@@ -357,3 +357,9 @@ test "modulo operator converts arguments to numbers", ->
|
||||
eq 1, 1 %% '42'
|
||||
eq 1, '1' %% 42
|
||||
eq 1, '1' %% '42'
|
||||
|
||||
test "#3361: Modulo operator coerces right operand once", ->
|
||||
count = 0
|
||||
res = 42 %% valueOf: -> count += 1
|
||||
eq 1, count
|
||||
eq 0, res
|
||||
|
||||
Reference in New Issue
Block a user