on master help sign in
Added isNull emulation plus another primitive
93fa7ceDavid Christiansen
src/Core/Execute.hs+5
@@ -254,6 +254,9 @@ execApp' env ctxt (EP _ (UN "mkForeign") _) (_:fn:(EHandle h):rest)
254 | Just (FFun "fileClose" _ _) <- foreignFromTT fn = do execIO $ hClose h
254 | Just (FFun "fileClose" _ _) <- foreignFromTT fn = do execIO $ hClose h
255 execApp' env ctxt ioUnit rest
255 execApp' env ctxt ioUnit rest
256
256
257+execApp' env ctxt (EP _ (UN "mkForeign") _) (_:fn:(EPtr p):rest)
258+ | Just (FFun "isNull" _ _) <- foreignFromTT fn = let res = if p == nullPtr then 1 else 0 in
259+ execApp' env ctxt (EConstant (I res)) rest
257
260
258execApp' env ctxt f@(EP _ (UN "mkForeign") _) args@(ty:fn:xs) | Just (FFun _ argTs retT) <- foreignFromTT fn
261execApp' env ctxt f@(EP _ (UN "mkForeign") _) args@(ty:fn:xs) | Just (FFun _ argTs retT) <- foreignFromTT fn
259 , length xs >= length argTs =
262 , length xs >= length argTs =
@@ -300,6 +303,8 @@ execApp' env ctxt f@(EP _ n _) args =
300 primRes Fl (fromRational (toRational i))
303 primRes Fl (fromRational (toRational i))
301 getOp (UN "prim__intToStr") [EConstant (I i)] =
304 getOp (UN "prim__intToStr") [EConstant (I i)] =
302 primRes Str (show i)
305 primRes Str (show i)
306+ getOp (UN "prim_lenString") [EConstant (Str s)] =
307+ primRes I (length s)
303 getOp (UN "prim__ltInt") [EConstant (I i1), EConstant (I i2)] =
308 getOp (UN "prim__ltInt") [EConstant (I i1), EConstant (I i2)] =
304 primResBool (i1 < i2)
309 primResBool (i1 < i2)
305 getOp (UN "prim__mulBigInt") [EConstant (BI i1), EConstant (BI i2)] =
310 getOp (UN "prim__mulBigInt") [EConstant (BI i1), EConstant (BI i2)] =