这几乎可以工作,但看起来新版本的specman不允许#ifdef
进口..如果你能弄清楚ifdef
用法那么这将工作......
top.e
+--------/| \----------+
/ | \
macro.e macro_call.e generated_loader.e
|
generated.e
top.e
有:
<'
import macro;
import macro_call;
import generated_loader;
'>
macro.e
有:
<'
define <GENERATOR'statement> "GENERATOR" as computed {
compute system("printf \"<'\\nextend sys{run() is first { print \\\"in generated.e\\\"; }; };\\n'>\\n\">generated.e");
};
#define ENABLE_GENERATOR_LOADER 1;
'>
macro_call.e
有:
<'
GENERATOR;
'>
generated_loader.e
有:
<'
#ifdef ENABLE_GENERATOR_LOADER {
import generated.e;
};
'>
然后在宏运行generated.e
后应该有以下内容:GENERATOR
<'
extend sys{run() is first { print "in generated.e"; }; };
'>
但是,Specman 的 10 版不喜欢 中的 import 语句#ifdef
,尽管这是#ifdef
Specman 6.1 文档中的一个使用示例:
specman -c 'load top; test'
产量:
[...]
Loading generated_loader.e (imported by top.e) ...
read...parse...update...
*** Error: Import Statements should be placed at the top of the file -
please change the statements order, pay attention to the imported module
'generated.e'.
at line 4 in generated_loader.e
import generated.e;
编辑
再想一想,您可能只想define as computed
生成要在适当位置解析的代码,而无需经历生成新文件的麻烦。