mirror of
https://github.com/krgamestudios/Toy.git
synced 2026-04-15 14:54:07 +10:00
Functions are working, tests incomplete
This required a massive cross-cutting rework to the scope system, multiple subtle bugfixes and relearning of the parser internals, but it does appear that functions are working correctly. A few caveats: for now, parameters are always constant, regardless of type, return values can't be specified, and some script tests have been written. Most importantly, a key feature is working: closures.
This commit is contained in:
@@ -1,10 +1,18 @@
|
||||
#include "toy_function.h"
|
||||
|
||||
Toy_Function* Toy_createFunctionFromBytecode(Toy_Bucket** bucketHandle, unsigned char* bytecode) {
|
||||
Toy_Function* Toy_createFunctionFromBytecode(Toy_Bucket** bucketHandle, unsigned char* bytecode, Toy_Scope* parentScope) {
|
||||
Toy_Function* fn = (Toy_Function*)Toy_partitionBucket(bucketHandle, sizeof(Toy_Function));
|
||||
|
||||
fn->type = TOY_FUNCTION_CUSTOM;
|
||||
fn->bytecode.code = bytecode;
|
||||
fn->bytecode.parentScope = parentScope;
|
||||
Toy_private_incrementScopeRefCount(fn->bytecode.parentScope);
|
||||
|
||||
return fn;
|
||||
}
|
||||
|
||||
TOY_API void Toy_freeFunction(Toy_Function* fn) {
|
||||
if (fn->type == TOY_FUNCTION_CUSTOM) {
|
||||
Toy_private_decrementScopeRefCount(fn->bytecode.parentScope);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user