これはほとんど機能しますが、新しいバージョンの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 は、Specman 6.1 ドキュメント#ifdef
での使用例であるにもかかわらず、内の import ステートメントが好きではありません。#ifdef
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
、新しいファイルを生成する手間をかけずに、その場で解析されるコードを生成する .