How can I use function pointers in Nimrod?

Can i use function pointers in Nimrod?

I tried:

type fptr = (proc(int):int) proc f(x:int): int = result = x+1 var myf : fptr = f echo myf(0) 

but when I try to compile, I get:

 Hint: added path: 'C:\Users\Peter\.babel\pkgs\' [Path] Hint: used config file 'C:\Program Files (x86)\Nimrod\config\nimrod.cfg' [Conf] Hint: system [Processing] Hint: hello3 [Processing] Error: internal error: GetUniqueType Traceback (most recent call last) nimrod.nim nimrod nimrod.nim handleCmdLine main.nim mainCommand main.nim commandCompileToC modules.nim compileProject modules.nim compileModule passes.nim processModule passes.nim processTopLevelStmt cgen.nim myProcess ccgstmts.nim genStmts ccgexprs.nim expr ccgstmts.nim genStmts ccgexprs.nim expr ccgstmts.nim genVarStmt ccgstmts.nim genSingleVar cgen.nim assignGlobalVar ccgtypes.nim getTypeDesc ccgtypes.nim getTypeDescAux ccgtypes.nim genProcParams cgen.nim fillLoc ccgutils.nim getUniqueType msgs.nim internalError msgs.nim rawMessage msgs.nim rawMessage msgs.nim handleError 
+6
source share
1 answer

Of course you can use pointers, the only problem is that you forgot to determine the name of the first parameter and, unfortunately, this is a compiler failure. The following example works:

 type fptr = (proc(x: int):int) proc f(x:int): int = result = x+1 var myf : fptr = f echo myf(0) 

Note that you can omit the type in the declaration of the myf variable. You can also omit the parentheses around the proc type definition. I reported an error that you found to developers at https://github.com/Araq/Nimrod/issues/1183 .

+8
source

All Articles