|
@@ -58,6 +58,7 @@ void Activation::runCode(Code *code){
|
|
|
}
|
|
|
} else switch (code->getBlockType()) {
|
|
|
case block_p: // 顺序执行
|
|
|
+ new ExeActivation(code->getSon(), inter);
|
|
|
break;
|
|
|
case block_b:
|
|
|
break;
|
|
@@ -70,28 +71,12 @@ void Activation::runCode(Code *code){
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-TopActivation::TopActivation(Code *code, Inter *inter_)
|
|
|
- : Activation(inter_), start{code}, next{code} {
|
|
|
- varlist = inter_->getGlobalVarlist();
|
|
|
- old_varlist = varlist;
|
|
|
-}
|
|
|
-
|
|
|
-static void ActivationTopProgress(Message *msg, void *) {
|
|
|
- auto *t = dynamic_cast<TopMessage *>(msg);
|
|
|
- if (t)
|
|
|
- t->topProgress();
|
|
|
-};
|
|
|
-
|
|
|
-TopActivation::~TopActivation() {
|
|
|
- down->forEach<void *>(ActivationTopProgress, nullptr);
|
|
|
-}
|
|
|
-
|
|
|
-ActivationStatus TopActivation::getCode(Code *&code) {
|
|
|
+ActivationStatus ExeActivation::getCode(Code *&code){
|
|
|
code = next;
|
|
|
if (code == nullptr)
|
|
|
return as_end;
|
|
|
|
|
|
- if (code->getType() != code_start) {
|
|
|
+ if (!first) {
|
|
|
Message *msg = down->getMessage<NormalMessage>("NORMAL");
|
|
|
if (msg == nullptr) {
|
|
|
return as_end;
|
|
@@ -100,6 +85,22 @@ ActivationStatus TopActivation::getCode(Code *&code) {
|
|
|
delete msg;
|
|
|
}
|
|
|
|
|
|
+ first = false;
|
|
|
next = code->toNext();
|
|
|
return as_run;
|
|
|
}
|
|
|
+
|
|
|
+TopActivation::TopActivation(Code *code, Inter *inter_) : ExeActivation(code, inter_) {
|
|
|
+ varlist = inter_->getGlobalVarlist();
|
|
|
+ old_varlist = varlist;
|
|
|
+}
|
|
|
+
|
|
|
+static void ActivationTopProgress(Message *msg, void *) {
|
|
|
+ auto *t = dynamic_cast<TopMessage *>(msg);
|
|
|
+ if (t)
|
|
|
+ t->topProgress();
|
|
|
+};
|
|
|
+
|
|
|
+TopActivation::~TopActivation() {
|
|
|
+ down->forEach<void *>(ActivationTopProgress, nullptr);
|
|
|
+}
|