2

除了描述nnkUInt16Litenum 变体和这个 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

这给出了一个错误:

intVal找不到字段

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

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

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

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

4

1 回答 1

4

这应该有效:

var n = parseExpr "1'u16"

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

于 2015-05-18T19:27:17.460 回答