Here you go:
    
    
    import macros
    
    template myTemplate(x): untyped = (x, 3)
    
    macro flatten(x: typed): untyped =
      result = newNimNode(nnkBracket, x)
      for y in x:
        if y.kind == nnkTupleConstr and y.len == 2:
          result.add y[0]
          result.add y[1]
        else:
          result.add y
      result = newCall("@", result)
    
    var a: seq[int] = flatten((1, myTemplate(13), 2))
    assert(a == @[1, 13, 3, 2])
    
    
    Run

But the original code in C is convoluted, why replicate it.

Reply via email to