on master help sign in
Inline (::)
02a9c48Evan Czaplicki
src/Generate/JavaScript/Expression.hs+25−6
@@ -561,23 +561,42 @@ binop
561binop func left right =
561binop func left right =
562 do jsLeft <- generateJsExpr left
562 do jsLeft <- generateJsExpr left
563 jsRight <- generateJsExpr right
563 jsRight <- generateJsExpr right
564− jsExpr (makeExpr func jsLeft jsRight)
564+ jsExpr (binopHelp func jsLeft jsRight)
565
565
566
566
567
567
568-- BINARY OPERATOR HELPERS
568-- BINARY OPERATOR HELPERS
569
569
570
570
571−makeExpr :: Var.Canonical -> (Expression () -> Expression () -> Expression ())
571+binopHelp :: Var.Canonical -> Expression () -> Expression () -> Expression ()
572−makeExpr qualifiedOp@(Var.Canonical home op) =
572+binopHelp qualifiedOp@(Var.Canonical home op) leftExpr rightExpr =
573 let
573 let
574 simpleMake left right =
574 simpleMake left right =
575 ref "A2" `call` [ Var.canonical qualifiedOp, left, right ]
575 ref "A2" `call` [ Var.canonical qualifiedOp, left, right ]
576 in
576 in
577− if home == Var.Module (ModuleName.inCore ["Basics"]) then
577+ if home == basicsModule then
578− Map.findWithDefault simpleMake op basicOps
578+ (Map.findWithDefault simpleMake op basicOps) leftExpr rightExpr
579+
580+ else if op == "::" && (home == listModule || home == listModuleInternals) then
581+ BuiltIn.cons leftExpr rightExpr
582+
579 else
583 else
580− simpleMake
584+ simpleMake leftExpr rightExpr
585+
586+
587+listModule :: Var.Home
588+listModule =
589+ Var.Module (ModuleName.inCore ["List"])
590+
591+
592+listModuleInternals :: Var.Home
593+listModuleInternals =
594+ Var.TopLevel (ModuleName.inCore ["List"])
595+
596+
597+basicsModule :: Var.Home
598+basicsModule =
599+ Var.Module (ModuleName.inCore ["Basics"])
581
600
582
601
583basicOps :: Map.Map String (Expression () -> Expression () -> Expression ())
602basicOps :: Map.Map String (Expression () -> Expression () -> Expression ())