on master help sign in
All primitives through S
commit67e7b00504c2e4d3472da7634a81afa795f4c44f authorDavid Christiansen <david@davidchristiansen.dk> dateMon 24 Jun 2013, 15:53 (13 years ago) parent73eb351
1 file changed+105−3
src/Core/Execute.hs+105−3
src/Core/Execute.hs+105−3
@@ -518,14 +518,33 @@ execApp' env ctxt f@(EP _ n _) args =
518518 primResBool (x <= y)
519519 getOp (UN "prim__lteInt") [EConstant (I x), EConstant (I y)] =
520520 primResBool (x <= y)
521+ -- DONE TO HERE
521522 getOp (UN "prim__modInt") [EConstant (I i1), EConstant (I i2)] =
522523 primRes I (i1 `mod` i2)
524+ getOp (UN "prim__mulB16") [EConstant (B16 i1), EConstant (B16 i2)] =
525+ primRes B16 (i1 * i2)
526+ getOp (UN "prim__mulB32") [EConstant (B32 i1), EConstant (B32 i2)] =
527+ primRes B32 (i1 * i2)
528+ getOp (UN "prim__mulB64") [EConstant (B64 i1), EConstant (B64 i2)] =
529+ primRes B64 (i1 * i2)
530+ getOp (UN "prim__mulB8") [EConstant (B8 i1), EConstant (B8 i2)] =
531+ primRes B8 (i1 * i2)
523532 getOp (UN "prim__mulBigInt") [EConstant (BI i1), EConstant (BI i2)] =
524533 primRes BI (i1 * i2)
525534 getOp (UN "prim__mulFloat") [EConstant (Fl i1), EConstant (Fl i2)] =
526535 primRes Fl (i1 * i2)
527536 getOp (UN "prim__mulInt") [EConstant (I i1), EConstant (I i2)] =
528537 primRes I (i1 * i2)
538+ getOp (UN "prim__orB16") [EConstant (B16 i1), EConstant (B16 i2)] =
539+ primRes B16 (i1 .|. i2)
540+ getOp (UN "prim__orB32") [EConstant (B32 i1), EConstant (B32 i2)] =
541+ primRes B32 (i1 .|. i2)
542+ getOp (UN "prim__orB64") [EConstant (B64 i1), EConstant (B64 i2)] =
543+ primRes B64 (i1 .|. i2)
544+ getOp (UN "prim__orB8") [EConstant (B8 i1), EConstant (B8 i2)] =
545+ primRes B8 (i1 .|. i2)
546+ getOp (UN "prim__orBigInt") [EConstant (BI i1), EConstant (BI i2)] =
547+ primRes BI (i1 .|. i2)
529548 getOp (UN "prim__orInt") [EConstant (I i1), EConstant (I i2)] =
530549 primRes I (i1 .|. i2)
531550 getOp (UN "prim__readString") [EP _ (UN "prim__stdin") _] =
@@ -534,22 +553,105 @@ execApp' env ctxt f@(EP _ n _) args =
534553 getOp (UN "prim__readString") [EHandle h] =
535554 Just $ do contents <- execIO $ hGetLine h
536555 return (EConstant (Str (contents ++ "\n")))
537− getOp (UN "prim__shLInt") [EConstant (I i1), EConstant (I i2)] =
556+ getOp (UN "prim__sdivB16") [EConstant (B16 i1), EConstant (B16 i2)] =
557+ primRes B16 (i1 `div` i2)
558+ getOp (UN "prim__sdivB32") [EConstant (B32 i1), EConstant (B32 i2)] =
559+ primRes B32 (i1 `div` i2)
560+ getOp (UN "prim__sdivB64") [EConstant (B64 i1), EConstant (B64 i2)] =
561+ primRes B64 (i1 `div` i2)
562+ getOp (UN "prim__sdivB8") [EConstant (B8 i1), EConstant (B8 i2)] =
563+ primRes B8 (i1 `div` i2)
564+ getOp (UN "prim__sdivBigInt") [EConstant (BI i1), EConstant (BI i2)] =
565+ primRes BI (i1 `div` i2)
566+ getOp (UN "prim__sdivInt") [EConstant (I i1), EConstant (I i2)] =
567+ primRes I (i1 `div` i2)
568+
569+ getOp (UN "prim__sextB16_B32") [EConstant (B16 i)] =
570+ primRes B32 (fromIntegral i)
571+ getOp (UN "prim__sextB16_B64") [EConstant (B16 i)] =
572+ primRes B64 (fromIntegral i)
573+ getOp (UN "prim__sextB16_BigInt") [EConstant (B16 i)] =
574+ primRes BI (fromIntegral i)
575+ getOp (UN "prim__sextB16_Int") [EConstant (B16 i)] =
576+ primRes I (fromIntegral i)
577+ getOp (UN "prim__sextB32_B64") [EConstant (B32 i)] =
578+ primRes B64 (fromIntegral i)
579+ getOp (UN "prim__sextB32_BigInt") [EConstant (B32 i)] =
580+ primRes BI (fromIntegral i)
581+ getOp (UN "prim__sextB32_Int") [EConstant (B32 i)] =
582+ primRes I (fromIntegral i)
583+ getOp (UN "prim__sextB64_BigInt") [EConstant (B64 i)] =
584+ primRes BI (fromIntegral i)
585+ getOp (UN "prim__sextB8_B16") [EConstant (B8 i)] =
586+ primRes B16 (fromIntegral i)
587+ getOp (UN "prim__sextB8_B32") [EConstant (B8 i)] =
588+ primRes B32 (fromIntegral i)
589+ getOp (UN "prim__sextB8_B64") [EConstant (B8 i)] =
590+ primRes B64 (fromIntegral i)
591+ getOp (UN "prim__sextB8_BigInt") [EConstant (B8 i)] =
592+ primRes BI (fromIntegral i)
593+ getOp (UN "prim__sextB8_Int") [EConstant (B8 i)] =
594+ primRes I (fromIntegral i)
595+ getOp (UN "prim__sextInt_B16") [EConstant (I i)] =
596+ primRes B16 (fromIntegral i)
597+ getOp (UN "prim__sextInt_B32") [EConstant (I i)] =
598+ primRes B32 (fromIntegral i)
599+ getOp (UN "prim__sextInt_B64") [EConstant (I i)] =
600+ primRes B64 (fromIntegral i)
601+ getOp (UN "prim__sextInt_BigInt") [EConstant (I i)] =
602+ primRes BI (fromIntegral i)
603+ getOp (UN "prim__shlB16") [EConstant (B16 i1), EConstant (B16 i2)] =
604+ primRes B16 (shiftL i1 (fromIntegral i2))
605+ getOp (UN "prim__shlB32") [EConstant (B32 i1), EConstant (B32 i2)] =
606+ primRes B32 (shiftL i1 (fromIntegral i2))
607+ getOp (UN "prim__shlB64") [EConstant (B64 i1), EConstant (B64 i2)] =
608+ primRes B64 (shiftL i1 (fromIntegral i2))
609+ getOp (UN "prim__shlB8") [EConstant (B8 i1), EConstant (B8 i2)] =
610+ primRes B8 (shiftL i1 (fromIntegral i2))
611+ getOp (UN "prim__shlBigInt") [EConstant (BI i1), EConstant (BI i2)] =
612+ primRes BI (shiftL i1 (fromIntegral i2))
613+ getOp (UN "prim__shlInt") [EConstant (I i1), EConstant (I i2)] =
538614 primRes I (shiftL i1 i2)
539− getOp (UN "prim__shRInt") [EConstant (I i1), EConstant (I i2)] =
540− primRes I (shiftR i1 i2)
615+ getOp (UN "prim__sremB16") [EConstant (B16 i1), EConstant (B16 i2)] =
616+ primRes B16 (rem i1 i2)
617+ getOp (UN "prim__sremB32") [EConstant (B32 i1), EConstant (B32 i2)] =
618+ primRes B32 (rem i1 i2)
619+ getOp (UN "prim__sremB64") [EConstant (B64 i1), EConstant (B64 i2)] =
620+ primRes B64 (rem i1 i2)
621+ getOp (UN "prim__sremB8") [EConstant (B8 i1), EConstant (B8 i2)] =
622+ primRes B8 (rem i1 i2)
623+ getOp (UN "prim__sremBigInt") [EConstant (BI i1), EConstant (BI i2)] =
624+ primRes BI (rem i1 i2)
625+ getOp (UN "prim__sremInt") [EConstant (I i1), EConstant (I i2)] =
626+ primRes I (rem i1 i2)
627+ -- No definition for prim__stdin because the IO operations special-case it instead
541628 getOp (UN "prim__strCons") [EConstant (Ch c), EConstant (Str s)] =
542629 primRes Str (c:s)
543630 getOp (UN "prim__strHead") [EConstant (Str (c:s))] =
544631 primRes Ch c
632+ getOp (UN "prim__strIndex") [EConstant (Str s), EConstant (I i)]
633+ | i >= 0 && i < length s = primRes Ch (s !! i)
545634 getOp (UN "prim__strRev") [EConstant (Str s)] =
546635 primRes Str (reverse s)
547636 getOp (UN "prim__strTail") [EConstant (Str (c:s))] =
548637 primRes Str s
638+ getOp (UN "prim__strToFloat") [EConstant (Str s)] =
639+ primRes Fl (fromMaybe 0.0 $ readMay s)
640+ getOp (UN "prim__subB16") [EConstant (B16 i1), EConstant (B16 i2)] =
641+ primRes B16 (i1 - i2)
642+ getOp (UN "prim__subB32") [EConstant (B32 i1), EConstant (B32 i2)] =
643+ primRes B32 (i1 - i2)
644+ getOp (UN "prim__subB64") [EConstant (B64 i1), EConstant (B64 i2)] =
645+ primRes B64 (i1 - i2)
646+ getOp (UN "prim__subB8") [EConstant (B8 i1), EConstant (B8 i2)] =
647+ primRes B8 (i1 - i2)
648+ getOp (UN "prim__subBigInt") [EConstant (BI i1), EConstant (BI i2)] =
649+ primRes BI (i1 - i2)
549650 getOp (UN "prim__subFloat") [EConstant (Fl i1), EConstant (Fl i2)] =
550651 primRes Fl (i1 - i2)
551652 getOp (UN "prim__subInt") [EConstant (I i1), EConstant (I i2)] =
552653 primRes I (i1 - i2)
654+ -- DONE TO HERE
553655 getOp (UN "prim__xorInt") [EConstant (I i1), EConstant (I i2)] =
554656 primRes I (i1 `xor` i2)
555657 getOp n args = trace ("No prim " ++ show n ++ " for " ++ take 1000 (show args)) Nothing