summary refs log blame commit diff stats
path: root/lib/system/hti.nim
blob: 1d62b910a4d0658bec5a9e3aae7a0c126d4dc0c1 (plain) (tree)
1
2
3
4
5
6
7
8
9


                                     
                                         




                                                   





                                       
                                              
                                               
                 










                                                                              
                                                                               







                                   
                                             
                                             

                                                    
                                          






                                             

                                                                     


                                                                            
                                          

                  
                            


                                                                      
                                                           


                                                
#
#
#            Nimrod's Runtime Library
#        (c) Copyright 2012 Andreas Rumpf
#
#    See the file "copying.txt", included in this
#    distribution, for details about the copyright.
#

when defined(NimString): 
  # we are in system module:
  {.pragma: codegenType, compilerproc.}
else:
  {.pragma: codegenType.}

type # This should be he same as ast.TTypeKind
     # many enum fields are not used at runtime
  TNimKind = enum
    tyNone, tyBool, tyChar,
    tyEmpty, tyArrayConstr, tyNil, tyExpr, tyStmt, tyTypeDesc,
    tyGenericInvokation, # ``T[a, b]`` for types to invoke
    tyGenericBody,       # ``T[a, b, body]`` last parameter is the body
    tyGenericInst,       # ``T[a, b, realInstance]`` instantiated generic type
    tyGenericParam,      # ``a`` in the example
    tyDistinct,          # distinct type
    tyEnum,
    tyOrdinal,
    tyArray,
    tyObject,
    tyTuple,             # WARNING: The compiler uses tyTuple for pure objects!
    tySet,
    tyRange,
    tyPtr, tyRef,
    tyVar,
    tySequence,
    tyProc,
    tyPointer, tyOpenArray,
    tyString, tyCString, tyForward,
    tyInt, tyInt8, tyInt16, tyInt32, tyInt64,
    tyFloat, tyFloat32, tyFloat64, tyFloat128

  TNimNodeKind = enum nkNone, nkSlot, nkList, nkCase
  TNimNode {.codegenType, final.} = object
    kind: TNimNodeKind
    offset: int
    typ: ptr TNimType
    name: Cstring
    len: int
    sons: ptr array [0..0x7fff, ptr TNimNode]

  TNimTypeFlag = enum 
    ntfNoRefs = 0,     # type contains no tyRef, tySequence, tyString
    ntfAcyclic = 1,    # type cannot form a cycle
    ntfEnumHole = 2    # enum has holes and thus `$` for them needs the slow
                       # version
  TNimType {.codegenType, final.} = object
    size: int
    kind: TNimKind
    flags: set[TNimTypeFlag]
    base: ptr TNimType
    node: ptr TNimNode # valid for tyRecord, tyObject, tyTuple, tyEnum
    finalizer: pointer # the finalizer for the type
    marker: proc (p: pointer, op: int) # marker proc for GC
  PNimType = ptr TNimType
  
# node.len may be the ``first`` element of a set