如何创建 nnkUInt16Lit NimNode

How to create a nnkUInt16Lit NimNode

除了描述 nnkUInt16Lit 枚举变体和此 AST 表示 42'i16 - nnkInt16Lit(intVal = 42).

外,没有关于此的文档

当我像使用常规 nnkIntLit 一样使用它时,它失败了。

macro test(): stmt =
  var n = newNimNode(nnkUInt16Lit)
  n.intVal = 1

  result = newLetStmt(ident("foo"), n)

test()
echo foo

这给出了一个错误:

field intVal cannot be found

(这不是我的实际用法,只是演示问题。)

我在 intVal 上尝试了不同的变体,但错误总是变成 undeclared identifier。我会使用 parseExpr(),但似乎 int 上的 $ proc 在编译时不起作用。

我已经尝试寻找 NimNode 类型定义的源代码来检查它,但到目前为止找不到它。

那么如何在宏中创建 uint16 NimNode?

这应该有效:

var n = parseExpr "1'u16"

有了这个拉取请求,您的原始代码也可以工作:https://github.com/nim-lang/Nim/pull/2754