Specman导入文件生成另一个要导入的文件的时间
我想要一个导入另外两个文件的文件。第一个导入的文件实际上创建了第二个要导入的文件,因此必须在导入后立即执行。这在斯派克曼可能吗?我想我在其中一本手册中读到,在加载文件后,有一些内置函数会立即运行 接下来,我假设第一个文件可以使用Specman的反射来访问以前导入的其他结构/单元,以决定生成什么。 有关使用反射的详细信息: 例如:Specman导入文件生成另一个要导入的文件的时间,specman,Specman,我想要一个导入另外两个文件的文件。第一个导入的文件实际上创建了第二个要导入的文件,因此必须在导入后立即执行。这在斯派克曼可能吗?我想我在其中一本手册中读到,在加载文件后,有一些内置函数会立即运行 接下来,我假设第一个文件可以使用Specman的反射来访问以前导入的其他结构/单元,以决定生成什么。 有关使用反射的详细信息: 例如: File1.e: <' // Function that runs immediately after this file is loaded // an
File1.e:
<'
// Function that runs immediately after this file is loaded
// and generates File2.e
on_load???(){
...
};
'>
File2.e:
<'
// This file was generated by File1.e
'>
top.e:
<'
import File1;
import File2;
'>
File1.e:
文件2.e:
顶部e:
这几乎可以实现,但新版本的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;
'>
<'
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;
'>
<'
GENERATOR;
'>
<'
#ifdef ENABLE_GENERATOR_LOADER {
import generated.e;
};
'>
宏调用.e
具有:
<'
import macro;
import macro_call;
import generated_loader;
'>
<'
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;
'>
<'
GENERATOR;
'>
<'
#ifdef ENABLE_GENERATOR_LOADER {
import generated.e;
};
'>
然后生成。在运行生成器
宏后,e
应具有以下内容:
<'
extend sys{run() is first { print "in generated.e"; }; };
'>
收益率:
[...]
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;
编辑
再想一想,您可能只想将定义为computed
,这将生成要就地解析的代码,而无需经历生成新文件的麻烦