CodegenDecl 编译指示

codegenDecl 指示可以用于直接影响 Nim 的代码生成器。 它接收一个格式字符串,该字符串决定了在生成的代码中如何声明变量、过程或对象类型。

对于变量,格式字符串中的 $1 表示变量的类型,$2 表示变量的名称,$# 按出现的先后顺序依次表示 $1、$2。

以下 Nim 代码:

  1. var
  2. a {.codegenDecl: "$# progmem $#".}: int

将生成此 C 代码:

  1. int progmem a

对过程而言,$1是过程的返回值类型,$2是过程的名字,$3是参数列表,$# 按出现的先后顺序依次表示 $1、$2、$3。

以下 Nim 代码:

  1. proc myinterrupt() {.codegenDecl: "__interrupt $# $#$#".} =
  2. echo "realistic interrupt handler"

将生成此代码:

  1. __interrupt void myinterrupt()

对于对象类型,$1代表对象类型的名称,$2 是字段列表,$3 是基类型。

  1. const strTemplate = """
  2. struct $1 {
  3. $2
  4. };
  5. """
  6. type Foo {.codegenDecl:strTemplate.} = object
  7. a, b: int

将生成此代码:

  1. struct Foo {
  2. NI a;
  3. NI b;
  4. };