21 #include <format/format.h> 22 #include "../bscript/berror.h" 23 #include "../bscript/bobject.h" 24 #include "../clib/logfacility.h" 25 #include "../clib/passert.h" 26 #include "../clib/refptr.h" 27 #include "../plib/systemstate.h" 91 if ( clocksleft <= 0 )
93 if ( clocksleft == 0 )
108 *pclocksleft = clocksleft;
122 if ( clocksleft >= 0 )
156 if ( program.
get() == nullptr )
158 ERROR_PRINT <<
"Error reading script " << filename <<
"\n";
159 throw std::runtime_error(
"Error starting script" );
163 if ( program->haveProgram )
174 throw std::runtime_error(
"Error starting script." );
185 if ( program.
get() == nullptr )
193 if ( program->haveProgram && ( param !=
nullptr ) )
222 if ( program.
get() == nullptr )
230 if ( program->haveProgram )
232 if ( param3 !=
nullptr )
234 if ( param2 !=
nullptr )
236 if ( param1 !=
nullptr )
238 if ( param0 !=
nullptr )
266 if ( program->haveProgram && ( param !=
nullptr ) )
275 throw std::runtime_error(
"Error starting script." );
284 using namespace Module;
323 for (
int i = 0; ( i < 1000 ) && ex.
runnable(); i++ )
330 return ( ex.
error_ ==
false );
338 if ( program.
get() == nullptr )
340 ERROR_PRINT <<
"Error reading script " << filename <<
"\n";
345 if ( program->haveProgram )
355 if ( program.
get() == nullptr )
357 ERROR_PRINT <<
"Error reading script " << filename <<
"\n";
370 if ( program.
get() == nullptr )
387 bool reported =
false;
417 return ex.
ValueStack.back().get()->impptr()->copy();
553 catch ( std::exception& )
566 catch ( std::exception& )
579 catch ( std::exception& )
592 catch ( std::exception& )
607 catch ( std::exception& )
622 catch ( std::exception& )
638 catch ( std::exception& )
655 std::unique_ptr<UOExecutor> ex(
new UOExecutor );
721 tmp << uoexec->prog_->name.get();
723 tmp <<
" Gl=" << uoexec->
Globals2.size();
725 tmp <<
" Lc=" << uoexec->
Locals2->size();
738 for (
auto& exec : ls )
759 for (
auto& exec : ls )
void list_crit_script(UOExecutor *uoexec)
const ExecList & getRanlist()
ref_ptr< Bscript::EScriptProgram > find_script2(const ScriptDef &script, bool complain_if_not_found, bool cache_script)
void setDebugLevel(DEBUG_LEVEL level)
ValueStackCont ValueStack
std::string scripts_thread_script
bool find_uoexec(unsigned int pid, UOExecutor **pp_uoexec)
const HoldList & getHoldlist()
void addModule(ExecutorModule *module)
void list_scripts(const char *desc, const ExecList &ls)
bool find_exec(unsigned int pid, UOExecutor **exec)
#define THREAD_CHECKPOINT(thread, check)
const ExecList & getRunlist()
const std::string & name() const
void pushArg(BObjectImp *arg)
bool call_script(const ScriptDef &script, Bscript::BObjectImp *param0)
UOExecutor * create_full_script_executor()
UOExecutor * create_script_executor()
std::vector< ReturnContext > ControlStack
std::vector< BObjectRefVec * > upperLocals2
polclock_t calc_script_clocksleft(polclock_t now)
std::deque< UOExecutor * > ExecList
bool run_script_to_completion_worker(UOExecutor &ex, Bscript::EScriptProgram *prog)
bool setProgram(EScriptProgram *prog)
static UninitObject * create()
Core::polclock_t sleep_until_clock_
void check_blocked(polclock_t *pclocksleft)
void list_script(UOExecutor *uoexec)
StateManager stateManager
ScriptScheduler scriptScheduler
void step_scripts(polclock_t *clocksleft, bool *pactivity)
const std::string & scriptname() const
void add_common_exmods(Core::UOExecutor &ex)
void schedule(UOExecutor *exec)
ExecutorModule * CreateFileAccessExecutorModule(Executor &exec)
bool run_script_to_completion(const char *filename, Bscript::BObjectImp *parameter)
const NoTimeoutHoldList & getNoTimeoutHoldlist()
void list_crit_scripts(const char *desc, const ExecList &ls)
void schedule_executor(UOExecutor *ex)
ref_ptr< Bscript::EScriptProgram > find_script(const std::string &name, bool complain_if_not_found, bool cache_script)
#define passert_always(exp)
void start_script(const char *filename, Bscript::BObjectImp *param0, Bscript::BObjectImp *param1)
void set_running_to_completion(bool to_completion)
const polclock_t POLCLOCKS_PER_SEC
BObjectImp * run_executor_to_completion(UOExecutor &ex, const ScriptDef &script)
Module::OSExecutorModule * os_module
unsigned scripts_thread_scriptPC
#define INC_PROFILEVAR(counter)