Can anyone familiar with the compiler offer some guidance?

After a function call as an optimization the compiler immediately tries to 
evaluate compile time nodes or ones that have no side effects in the VM 
([https://github.com/nim-lang/Nim/blob/devel/compiler/semexprs.nim#L873)](https://github.com/nim-lang/Nim/blob/devel/compiler/semexprs.nim#L873\)).
 When the call is a function argument it happens regardless of whether it 
actually typechecks, so given:
    
    
    proc f():string {.compileTime.} =
      launchMissiles()
      "hello world"
    
    proc g(i:int) = echo i
    
    g(f())
    
    
    Run

launchMissiles() is invoked even though f() does not typecheck because the 
typechecker does overload resolution before matching up the operand with the 
argument.

If the optimization is disabled f() never gets evaluated by the VM and you get 
an error like:
    
    
    Error: request to generate code for .compileTime proc: f
    
    
    Run

The proper behavior I think is to do the VM evaluation at code gen. time but I 
can't immediately see where to place that call.

Any help is appreciated.

Reply via email to