you can implement 3. yourself with a macro. like this:
    
    
    macro unordered(def) =
      def.expectKind nnkTypeDef
      def[2].expectKind nnkEnumTy
      var fields: OrderedTable[int, NimNode]
      for field in def[2][1..^1]:
        field.expectKind nnkEnumFieldDef
        let i =
          if field[1].kind == nnkIntLit:
            field[1].intVal
          elif field[1].kind == nnkTupleConstr and field[1][0].kind == 
nnkIntLit:
            field[1][0].intVal
          else:
            error "no int value found"; return
        fields[i] = field
      var sortedTy = nnkEnumTy.newTree(def[2][0])
      fields.sort do(a, b: (int, NimNode)) -> int: a[0]-b[0]
      for field in fields.values:
        sortedTy.add(field)
      result = def
      result[2] = sortedTy
    
    
    Run
    
    
    type
      SomeEnum {.unordered.} = enum
        seA = 3
        seB = 1
        seC = (6, "foo")
    
    
    Run

Reply via email to