on master help sign in
Null pointer primitive
commitffe8706cb78347f5f0b607ee40885da47236e63b authorEdward Amsden <edward@edwardamsden.com> dateTue 5 Nov 2013, 14:38 (13 years ago) parent029da07
6 files changed+12−1
lib/Builtins.idr+3 src/IRTS/CodegenC.hs+1 src/IRTS/CodegenJavaScript.hs+3 src/IRTS/Java/JTypes.hs+1 src/IRTS/Lang.hs+1 src/Idris/Primitives.hs+3−1
lib/Builtins.idr+3
@@ -369,5 +369,8 @@ strIndex = prim__strIndex
369369reverse : String -> String
370370reverse = prim__strRev
371371
372+null : Ptr
373+null = prim__null
374+
372375}
373376
src/IRTS/CodegenC.hs+1
@@ -446,6 +446,7 @@ doOp v LStdErr [] = v ++ "MKPTR(vm, stderr)"
446446doOp v LFork [x] = v ++ "MKPTR(vm, vmThread(vm, " ++ cname (MN 0 "EVAL") ++ ", " ++ creg x ++ "))"
447447doOp v LPar [x] = v ++ creg x -- "MKPTR(vm, vmThread(vm, " ++ cname (MN 0 "EVAL") ++ ", " ++ creg x ++ "))"
448448doOp v LVMPtr [] = v ++ "MKPTR(vm, vm)"
449+doOp v LNullPtr [] = v ++ "MKPTR(vm, NULL)"
449450doOp v (LChInt ITNative) args = v ++ creg (last args)
450451doOp v (LChInt ITChar) args = doOp v (LChInt ITNative) args
451452doOp v (LIntCh ITNative) args = v ++ creg (last args)
src/IRTS/CodegenJavaScript.hs+3
@@ -991,6 +991,9 @@ translateExpression (SOp op vars)
991991 | LStrTail <- op
992992 , (arg:_) <- vars = let v = translateVariableName arg in
993993 JSRaw $ v ++ ".substr(1," ++ v ++ ".length-1)"
994+ | LNullPtr <- op
995+ , (_) <- vars = JSNull
996+
994997 where
995998 translateBinaryOp :: String -> LVar -> LVar -> JS
996999 translateBinaryOp f lhs rhs = JSOp f (JSVar lhs) (JSVar rhs)
src/IRTS/Java/JTypes.hs+1
@@ -293,6 +293,7 @@ sourceTypes (LStdErr) = []
293293sourceTypes (LFork) = [objectType]
294294sourceTypes (LPar) = [objectType]
295295sourceTypes (LVMPtr) = []
296+sourceTypes (LNullPtr) = [objectType]
296297sourceTypes (LNoOp) = repeat objectType
297298
298299
src/IRTS/Lang.hs+1
@@ -54,6 +54,7 @@ data PrimFn = LPlus ArithTy | LMinus ArithTy | LTimes ArithTy
5454 | LPar -- evaluate argument anywhere, possibly on another
5555 -- core or another machine. 'id' is a valid implementation
5656 | LVMPtr
57+ | LNullPtr
5758 | LNoOp
5859 deriving (Show, Eq)
5960
src/Idris/Primitives.hs+3−1
@@ -169,7 +169,9 @@ primitives =
169169 (0, LVMPtr) total,
170170 -- Streams
171171 Prim (UN "prim__stdin") (ty [] PtrType) 0 (p_cantreduce)
172− (0, LStdIn) partial
172+ (0, LStdIn) partial,
173+ Prim (UN "prim__null") (ty [] PtrType) 0 (p_cantreduce)
174+ (0, LNullPtr) total
173175 ] ++ concatMap intOps [ITFixed IT8, ITFixed IT16, ITFixed IT32, ITFixed IT64, ITBig, ITNative, ITChar]
174176 ++ concatMap vecOps vecTypes
175177 ++ vecBitcasts vecTypes