2

我正在使用--red-only详细程度设置为 2 的开关来将一个非常简单的 Red 程序编译为其 Red/System 等效程序。该程序是:

Red []

red-load: func [source  [file! url! string! binary!]] [
    load source
]

它产生一定数量的输出,我将其重定向到一个文件。我的目标是为此添加一个 Red/System 标头并构建它。

在去掉一些注释行之后,下一个障碍是这段代码至少没有扩展一些宏,所以我不得不添加一个#includefor runtime/macros.reds。但是后来我在其中一个(宏 TO_CTX)的扩展中遇到了这个错误:

*** Compilation Error: invalid target type casting: red-context! 
*** in file: %/home/hostilefork/Projects/red/embedme.reds 
*** in function: f_modulo
*** at line: 11 
*** near: (as red-context! ((as series! ctx15/value) + 1))

我见过Red 运行时代码中使用的red-context!其他一些red-*!数据类型……当 Red/System 需要谈论它从 Red 获得的值时。但是Red/System 规范中没有提到它们。它们可以在普通的红色/系统代码中使用,还是有一些“特殊”的东西只允许它们在内部使用?

4

1 回答 1

3

如果您想获得完整的红色/系统输出,详细程度 2 不是正确的设置,详细程度应设置为 3 ( -v 3)。我从未尝试过实际编译这样的输出,所以我不确定它是否能正常工作。该--red-only?选项用于调试来自高级 Red 编译器的 Red/System 输出。

定义是 Red 内部结构上的red-*!宏,它们不是 Red/System 的一部分。它们在 Red运行时库中定义。

于 2014-11-28T15:05:15.043 回答