on master help sign in
Implement argument access under LLVM codegen
commit5946416fffa0ea7bcb2f8eabac04a67bfb5a902d authorBenjamin Saunders <besaunde@sfu.ca> dateWed 13 Nov 2013, 19:51 (13 years ago) parente8887b6
2 files changed+17
llvm/defs.c+11 src/IRTS/CodegenLLVM.hs+6
llvm/defs.c+11
@@ -169,3 +169,14 @@ char *__idris_strRev(const char *s) {
169169 }
170170 return t;
171171}
172+
173+int __idris_argc;
174+char **__idris_argv;
175+
176+int idris_numArgs() {
177+ return __idris_argc;
178+}
179+
180+const char* idris_getArg(int i) {
181+ return __idris_argv[i];
182+}
src/IRTS/CodegenLLVM.hs+6
@@ -124,6 +124,10 @@ mainDef =
124124 , ConstantOperand . C.GlobalReference . Name $ "__idris_gmpRealloc"
125125 , ConstantOperand . C.GlobalReference . Name $ "__idris_gmpFree"
126126 ]
127+ , Do $ Store False (ConstantOperand . C.GlobalReference . Name $ "__idris_argc")
128+ (LocalReference (Name "argc")) Nothing 0 []
129+ , Do $ Store False (ConstantOperand . C.GlobalReference . Name $ "__idris_argv")
130+ (LocalReference (Name "argv")) Nothing 0 []
127131 , UnName 1 := idrCall "{runMain0}" [] ]
128132 (Do $ Ret (Just (ConstantOperand (C.Int 32 0))) [])
129133 ]}
@@ -198,6 +202,8 @@ initDefs tgt =
198202 , exVar (stdinName tgt) ptrI8
199203 , exVar (stdoutName tgt) ptrI8
200204 , exVar (stderrName tgt) ptrI8
205+ , exVar "__idris_argc" (IntegerType 32)
206+ , exVar "__idris_argv" (PointerType ptrI8 (AddrSpace 0))
201207 , GlobalDefinition mainDef
202208 ] ++ map mpzBinFun ["add", "sub", "mul", "fdiv_q", "fdiv_r", "and", "ior", "xor"]
203209 where