1
0
forked from Mirror/wren

fix issue with docs clearing the writeFn from the config. add complete embedding example to docs + repo

This commit is contained in:
underscorediscovery
2020-07-30 09:09:15 -07:00
parent dead8df82e
commit 81bfbfce23
2 changed files with 99 additions and 1 deletions

View File

@ -128,8 +128,8 @@ And then, we update the configuration to point to it.
<pre class="snippet" data-lang="c"> <pre class="snippet" data-lang="c">
WrenConfiguration config; WrenConfiguration config;
config.writeFn = &writeFn;
wrenInitConfiguration(&config); wrenInitConfiguration(&config);
config.writeFn = &writeFn;
</pre> </pre>
[configuration]: configuring-the-vm.html [configuration]: configuring-the-vm.html
@ -200,6 +200,59 @@ objects when you call this. This makes sure you haven't lost track of any of
them (which leaks memory) and you don't try to use any of them after the VM has them (which leaks memory) and you don't try to use any of them after the VM has
been freed. been freed.
## A complete example
Below is a complete example of the above.
You can find this file in the [example](https://github.com/wren-lang/wren/tree/main/example/embedding) folder.
<pre class="snippet" data-lang="c">
//For more details, visit https://wren.io/embedding/
#include <stdio.h>
#include "wren.h"
static void writeFn(WrenVM* vm, const char* text) {
printf("%s", text);
}
void errorFn(WrenVM* vm, WrenErrorType errorType, const char* module, const int line, const char* msg) {
switch (errorType) {
case WREN_ERROR_COMPILE: {
printf("[%s line %d] [Error] %s\n", module, line, msg);
} break;
case WREN_ERROR_STACK_TRACE: {
printf("[%s line %d] in %s\n", module, line, msg);
} break;
case WREN_ERROR_RUNTIME: {
printf("[Runtime Error] %s\n", msg);
} break;
}
}
int main() {
WrenConfiguration config;
wrenInitConfiguration(&config);
config.writeFn = &writeFn;
config.errorFn = &errorFn;
WrenVM* vm = wrenNewVM(&config);
const char* module = "main";
const char* script = "System.print(\"I am running in a VM!\")";
WrenInterpretResult result = wrenInterpret(vm, module, script);
switch (result) {
case WREN_RESULT_COMPILE_ERROR: { printf("Compile Error!\n"); } break;
case WREN_RESULT_RUNTIME_ERROR: { printf("Runtime Error!\n"); } break;
case WREN_RESULT_SUCCESS: { printf("Success!\n"); } break;
}
wrenFreeVM(vm);
}
</pre>
[handle]: slots-and-handles.html#handles [handle]: slots-and-handles.html#handles
Next, we'll learn to make that VM do useful stuff... Next, we'll learn to make that VM do useful stuff...

45
example/embedding/main.c Normal file
View File

@ -0,0 +1,45 @@
//For more details, visit https://wren.io/embedding/
#include <stdio.h>
#include "wren.h"
static void writeFn(WrenVM* vm, const char* text) {
printf("%s", text);
}
void errorFn(WrenVM* vm, WrenErrorType errorType, const char* module, const int line, const char* msg) {
switch (errorType) {
case WREN_ERROR_COMPILE: {
printf("[%s line %d] [Error] %s\n", module, line, msg);
} break;
case WREN_ERROR_STACK_TRACE: {
printf("[%s line %d] in %s\n", module, line, msg);
} break;
case WREN_ERROR_RUNTIME: {
printf("[Runtime Error] %s\n", msg);
} break;
}
}
int main() {
WrenConfiguration config;
wrenInitConfiguration(&config);
config.writeFn = &writeFn;
config.errorFn = &errorFn;
WrenVM* vm = wrenNewVM(&config);
const char* module = "main";
const char* script = "System.print(\"I am running in a VM!\")";
WrenInterpretResult result = wrenInterpret(vm, module, script);
switch (result) {
case WREN_RESULT_COMPILE_ERROR: { printf("Compile Error!\n"); } break;
case WREN_RESULT_RUNTIME_ERROR: { printf("Runtime Error!\n"); } break;
case WREN_RESULT_SUCCESS: { printf("Success!\n"); } break;
}
wrenFreeVM(vm);
}