如何创建 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
除了描述 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