on master help sign in
Fix runtime code for comparing things
commitae6a3b36b5e5297df86f14a86169e8b7bf5e17d8 authorEvan Czaplicki <info@elm-lang.org> dateTue 30 Jul 2013, 08:44 (13 years ago) parentfa44854
2 files changed+9−7
compiler/Generate/JavaScript.hs+5−5 libraries/Native/Utils.js+4−2
compiler/Generate/JavaScript.hs+5−5
@@ -314,7 +314,7 @@ clauseToJS span var (Clause value vars e) = do
314314jsNil = "_L.Nil"
315315jsCons e1 e2 = "_L.Cons(" ++ e1 ++ "," ++ e2 ++ ")"
316316jsRange e1 e2 = "_L.range" ++ parens (e1 ++ "," ++ e2)
317−jsCompare e1 e2 op = parens ("_N.cmp(" ++ e1 ++ "," ++ e2 ++ ").ctor" ++ op)
317+jsCompare e1 e2 op = parens ("_N.cmp(" ++ e1 ++ "," ++ e2 ++ ")" ++ op)
318318
319319
320320binop op e1 e2 =
@@ -341,9 +341,9 @@ binop op e1 e2 =
341341 , ("." , jsFunc "x" . ret $ e1 ++ parens (e2 ++ parens "x"))
342342 , ("==", "_N.eq(" ++ e1 ++ "," ++ e2 ++ ")")
343343 , ("/=", "!_N.eq(" ++ e1 ++ "," ++ e2 ++ ")")
344− , ("<" , jsCompare e1 e2 "==='LT'")
345− , (">" , jsCompare e1 e2 "==='GT'")
346− , ("<=", jsCompare e1 e2 "!=='GT'")
347− , (">=", jsCompare e1 e2 "!=='LT'")
344+ , ("<" , jsCompare e1 e2 "<0")
345+ , (">" , jsCompare e1 e2 ">0")
346+ , ("<=", jsCompare e1 e2 "<1")
347+ , (">=", jsCompare e1 e2 ">-1")
348348 , ("div", parens (e1 ++ "/" ++ e2 ++ "|0"))
349349 ])
libraries/Native/Utils.js+4−2
@@ -19,8 +19,10 @@ Elm.Native.Utils = function(elm) {
1919 return x === y;
2020 }
2121
22− var EQ = 0, LT = -1, GT = 1, ord = ['EQ','LT','GT'];
23− function compare(x,y) { return { ctor: ord[cmp(x,y)] } }
22+ // code in Generate/JavaScript.hs depends on the particular
23+ // integer values assigned to LT, EQ, and GT
24+ var LT = -1, EQ = 0, GT = 1, ord = ['LT','EQ','GT'];
25+ function compare(x,y) { return { ctor: ord[cmp(x,y)+1] } }
2426 function cmp(x,y) {
2527 var ord;
2628 if (typeof x !== 'object') return x === y ? EQ : x < y ? LT : GT;