pocketlang/docs/try/main.c

53 lines
1.2 KiB
C
Raw Normal View History

2021-05-12 18:57:35 +08:00
/*
* Copyright (c) 2021 Thakee Nathees
* Licensed under: MIT License
*/
#include <emscripten.h>
#include <pocketlang.h>
#include <string.h>
2021-05-12 18:57:35 +08:00
// IO api functions.
extern void js_errorPrint(int type, int line, const char* message);
2021-05-12 18:57:35 +08:00
extern void js_writeFunction(const char* message);
void errorPrint(PKVM* vm, PkErrorType type, const char* file, int line,
2021-05-12 18:57:35 +08:00
const char* message) {
// No need to pass the file (since there is only script that'll ever run on
// the browser.
js_errorPrint((int)type, line, message);
2021-05-12 18:57:35 +08:00
}
void writeFunction(PKVM* vm, const char* text) {
js_writeFunction(text);
}
pkStringPtr resolvePath(PKVM* vm, const char* from, const char* name) {
pkStringPtr result;
result.string = NULL;
2021-05-12 18:57:35 +08:00
return result;
}
pkStringPtr loadScript(PKVM* vm, const char* path) {
pkStringPtr result;
result.string = NULL;
2021-05-12 18:57:35 +08:00
return result;
}
EMSCRIPTEN_KEEPALIVE
int runSource(const char* source) {
2021-05-19 02:59:09 +08:00
pkConfiguration config = pkNewConfiguration();
2021-05-12 18:57:35 +08:00
config.error_fn = errorPrint;
config.write_fn = writeFunction;
config.load_script_fn = loadScript;
config.resolve_path_fn = resolvePath;
PKVM* vm = pkNewVM(&config);
PkInterpretResult result = pkInterpretSource(vm, source, "@try");
pkFreeVM(vm);
2021-05-12 18:57:35 +08:00
return (int)result;
}