22#include " daScript/ast/dyn_modules.h"
33#include " grngame/dev/logging.h"
44#include " grngame/platform/directories.h"
5-
5+ # include < cstdio >
66
77DaScriptEngine::DaScriptEngine () : file_access(das::make_smart<das::FsFileAccess>())
88{
@@ -18,31 +18,39 @@ DaScriptEngine::~DaScriptEngine()
1818 das::Module::Shutdown ();
1919}
2020
21- bool DaScriptEngine::CompileScript (const char * script_name)
21+ bool DaScriptEngine::CompileScript (const char * script_name)
2222{
23- main_program = das::compileDaScript (script_name, file_access, text_printer, module_group, policies);
24- if (main_program ->failed ())
23+ auto program = das::compileDaScript (script_name, file_access, text_printer, module_group, policies);
24+ if (program ->failed ())
2525 {
2626 LOG_ERROR (" Failed to compile daScript file '%s':\n " , script_name);
27- LogErrorsOfProgram (main_program );
27+ LogErrorsOfProgram (program );
2828 return false ;
2929 }
3030
31- main_context = new das::Context (main_program ->getContextStackSize ());
31+ contexts[script_name] = das::make_smart<das:: Context>(program ->getContextStackSize ());
3232
33- if (!main_program ->simulate (*main_context , text_printer))
33+ if (!program ->simulate (*contexts[script_name] , text_printer))
3434 {
3535 LOG_ERROR (" Failed to simulate script '%s':\n " , script_name);
36- LogErrorsOfProgram (main_program );
36+ LogErrorsOfProgram (program );
3737 return false ;
3838 }
3939
4040 return true ;
4141}
4242
43- bool DaScriptEngine::RunScript (const char * script_name, const char * entry)
43+ bool DaScriptEngine::RunScript (const char * script_name, const char * entry)
4444{
45- auto functions = main_context->findFunctions (entry);
45+ auto it = contexts.find (script_name);
46+ if (it == contexts.end ())
47+ {
48+ LOG_ERROR (" No such script '%s'\n " , script_name);
49+ return false ;
50+ }
51+
52+ auto functions = it->second ->findFunctions (entry);
53+
4654 if (functions.empty ())
4755 {
4856 LOG_ERROR (" Failed to find function '%s' in script '%s'" , entry, script_name);
@@ -55,14 +63,14 @@ bool DaScriptEngine::RunScript(const char* script_name, const char* entry)
5563 }
5664 else
5765 {
58- main_context ->evalWithCatch (functions.at (0 ), nullptr );
66+ contexts[script_name] ->evalWithCatch (functions.at (0 ), nullptr );
5967 return true ;
6068 }
6169}
6270
63- void DaScriptEngine::LogErrorsOfProgram (const das::ProgramPtr& program)
71+ void DaScriptEngine::LogErrorsOfProgram (const das::ProgramPtr & program)
6472{
65- for (const auto & err : program->errors )
73+ for (const auto & err : program->errors )
6674 {
6775 LOG_ERROR (" - %s\n " , err.what .c_str ()); // TODO better logging
6876 }
0 commit comments