| 14 | )"; |
| 15 | |
| 16 | int main(int argc, char** argv) { |
| 17 | auto env_desc = make_zeroed<skr::das::EnvironmentDescriptor>(); |
| 18 | env_desc.argc = argc; |
| 19 | env_desc.argv = argv; |
| 20 | skr::das::Environment::Initialize(env_desc); |
| 21 | // make file access, introduce string as if it was a file |
| 22 | auto faccess_desc = make_zeroed<skr::das::FileAccessDescriptor>(); |
| 23 | auto faccess = skr::das::FileAccess::Create(faccess_desc); |
| 24 | faccess->set_text_file(u8"dummy.das", tutorial_text, uint32_t(strlen((const char*)tutorial_text))); |
| 25 | |
| 26 | // output stream for all compiler messages (stdout. for stringstream use TextWriter) |
| 27 | auto tout_desc = make_zeroed<skr::das::TextPrinterDescriptor>(); |
| 28 | auto tout = skr::das::TextPrinter::Create(tout_desc); |
| 29 | |
| 30 | // module group for compiled program |
| 31 | auto lib_desc = make_zeroed<skr::das::LibraryDescriptor>(); |
| 32 | auto library = skr::das::Library::Create(lib_desc); |
| 33 | |
| 34 | // compile script |
| 35 | auto program = skr::das::Environment::compile_dascript(u8"dummy.das", faccess, tout, library); |
| 36 | if (!program) return -1; |
| 37 | |
| 38 | // create context |
| 39 | auto ctx_desc = make_zeroed<skr::das::ContextDescriptor>(); |
| 40 | ctx_desc.stack_size = program->get_ctx_stack_size(); |
| 41 | auto ctx = skr::das::Context::Create(ctx_desc); |
| 42 | if ( !program->simulate(ctx, tout) ) return -2; |
| 43 | |
| 44 | // find function. its up to application to check, if function is not null |
| 45 | auto function = ctx->find_function(u8"test"); |
| 46 | if ( !function ) return -3; |
| 47 | |
| 48 | // call context function |
| 49 | const auto res = ctx->eval(function); |
| 50 | const auto message = skr::format(u8"{}\n", res.load<int32_t>()); |
| 51 | tout->print(message.u8_str()); |
| 52 | |
| 53 | skr::das::Context::Free(ctx); |
| 54 | skr::das::Program::Free(program); |
| 55 | skr::das::Library::Free(library); |
| 56 | skr::das::TextPrinter::Free(tout); |
| 57 | skr::das::FileAccess::Free(faccess); |
| 58 | skr::das::Environment::Finalize(); |
| 59 | return 0; |
| 60 | } |
nothing calls this directly
no test coverage detected