7#pragma comment(lib, "Advapi32.lib")
19 #if defined(ELYSIA_RUNTIME_HPERF_ENABLE)
20 char *enable_hperf =
nullptr;
21 for (
int i = 0; i < argc; i++) {
22 if (strcmp(argv[i],
"--perf") == 0) {
23 printf(
"[ELysia/INFO] hoshi-lang runtime: hperf enabled.\n");
25 printf(
"[Elysia/ERROR] hoshi-lang runtime: --perf option requires an argument.\n");
28 enable_hperf = argv[i + 1];
34 #if defined(ELYSIA_RUNTIME_BUILD_TYPE_DEBUG) || defined(ELYSIA_RUNTIME_BUILD_PRESERVE_BASIC_INFORMATION)
35 printf(
"[Elysia/DEBUG] hoshi-lang descriptor: %s, build_type: %llu. Runtime linked, invoking yoimiya_entry()...\n", &
yoi_desc,
yoi_build_type);
38 int resultVal =
static_cast<int>(result->
value);
39 basic_int_gc_refcount_decrease(result);
40 #if defined(ELYSIA_RUNTIME_BUILD_TYPE_DEBUG) || defined(ELYSIA_RUNTIME_BUILD_PRESERVE_BASIC_INFORMATION)
41 printf(
"[Elysia/DEBUG] hoshi-lang runtime finished, result: %d.\n", resultVal);
43#if defined(ELYSIA_RUNTIME_ENABLE_BUILTIN_MEMORY_LEAK_DETECTOR)
44 if (runtime_object_allocated > 0) {
45 printf(
"[Elysia/WARNING] hoshi-lang runtime finished with %lld objects allocated, memory leaks detected!\nargv[0]: %s\n", runtime_object_allocated, argv[0]);
46#if defined(ELYSIA_RUNTIME_BUILD_TYPE_DEBUG)
47 runtime_debug_print_current_allocated_memory();
52 #if defined(ELYSIA_RUNTIME_HPERF_ENABLE)
65 auto **argv_start = (
const char **)((
char *)&argv->data);
73 fprintf(stderr,
"%s\n", message);
char hperf_report_filename[2048]
void hperf_write_report(const char *filename)
void hperf_init(const char *filename)
void * runtime_object_alloc(unsigned long size)
int elysia_main(int argc, char *argv[])
void * runtime_get_stdin_fp()
YoiObjectArray * runtime_get_argv()
void * runtime_get_stdout_fp()
void runtime_panic(char *message)
void * runtime_get_stderr_fp()
YoiIntegerObject * yoimiya_entry()
const unsigned long long yoi_build_type
unsigned long long gc_refcount