This is a boiled down test from another thread about using the pegs module at 
compile time. I thought I would throw this out there since there seems to be 
some general CTFE interest going on right now. I poked around in the VM code to 
see if I could figure out why the inherited type initialization doesn't work, 
but I wasn't successful in the (small) amount of time that I spent on it.
    
    
    # test of initializing inherited types in VM
    type
      SomeBaseObj  {.inheritable.} = object of RootObj
        txt : string
      
      InheritedFromBase = object of SomeBaseObj
        other : string
    
    proc initBase(sbo: var SomeBaseObj) =
      sbo.txt = "Initialized string from base"
    
    proc initInherited(ifb: var InheritedFromBase) =
      ifb.txt = "Initialized string from inherited"
    
    static:
      var bo: SomeBaseObj
      initBase(bo)
      doAssert(bo.txt == "Initialized string from base")
      
      var ifb1: InheritedFromBase
      initInherited(ifb1)
      doAssert(ifb1.txt == "Initialized string from inherited")
      
      var ifb2: InheritedFromBase
      initBase(SomeBaseObj(ifb2))
      # This assertion passes because ifb2 gets re-initialized
      doAssert(ifb2.txt == "")
    
    echo "Done"
    
    
    Run

Reply via email to