diff --git a/src/plugins/kumircoderun/run.cpp b/src/plugins/kumircoderun/run.cpp index 8a88e8f9332801bf902185d4bb3d5d7b6d78714c..3bf6c920fe354730aef20dc85378b1fe8aa0f15b 100644 --- a/src/plugins/kumircoderun/run.cpp +++ b/src/plugins/kumircoderun/run.cpp @@ -218,6 +218,8 @@ bool Run::makeInputArgument(Variable & reference) } bool Run::makeOutputArgument(const Variable & reference) { + if (!reference.isValid()) + return true; QString repr; emit output(QString::fromStdWString(reference.name())+" = "); if (reference.dimension()==0) { diff --git a/src/shared/vm/vm.hpp b/src/shared/vm/vm.hpp index 51b6e3052b1a9efb539640a17a030171b92b6d44..87b24dd888b4b8645f57a1da56361d6154789266 100644 --- a/src/shared/vm/vm.hpp +++ b/src/shared/vm/vm.hpp @@ -2048,6 +2048,8 @@ void KumirVM::do_store(uint8_t s, uint16_t id) if (m_externalHandler) m_externalHandler->noticeOnValueChange(lineNo, qn); } + if (stack_contexts.top().type==Bytecode::EL_BELOWMAIN) + Variable::unsetError(); s_error = Kumir::Core::getError(); nextIP(); if (m_dontTouchMe) m_dontTouchMe->unlock(); diff --git a/src/tools/run/main.cpp b/src/tools/run/main.cpp index f3ed0e05a23660c191e65845c1486a91e4ed0d01..a3d73bd5093d596e1cc59aa1cdb41f0723762f93 100644 --- a/src/tools/run/main.cpp +++ b/src/tools/run/main.cpp @@ -226,6 +226,8 @@ bool InteractionHandler::makeInputArgument(VM::Variable &reference) } bool InteractionHandler::makeOutputArgument(const VM::Variable & reference) { + if (!reference.isValid()) + return true; Kumir::String repr; output(reference.name()+Kumir::Core::fromAscii(" = ")); if (reference.dimension()==0) {