Files
Toy/source/toy_vm.h
Kayne Ruse 639250f028 WIP return keyword, read more
Functions are having issues with being copied around, especially
between buckets, leading to the scopes getting looped. The program gets
stuck in 'incrementRefCount()'.

It's past my time limit, so I'll keep working on it tomorrow with a
fresh mind.

All function stuff is still untested.

See #163
2025-02-17 19:10:24 +11:00

59 lines
1.5 KiB
C

#pragma once
#include "toy_common.h"
#include "toy_bucket.h"
#include "toy_scope.h"
#include "toy_module.h"
#include "toy_value.h"
#include "toy_string.h"
#include "toy_stack.h"
#include "toy_array.h"
#include "toy_table.h"
#include "toy_function.h"
typedef struct Toy_VM {
//raw instructions to be executed
unsigned char* code;
//metadata
unsigned int jumpsCount;
unsigned int paramCount;
unsigned int dataCount;
unsigned int subsCount;
unsigned int codeAddr;
unsigned int jumpsAddr;
unsigned int paramAddr;
unsigned int dataAddr;
unsigned int subsAddr;
//execution utils
unsigned int programCounter;
//scope - block-level key/value pairs
Toy_Scope* scope;
//stack - immediate-level values only
Toy_Stack* stack;
//easy access to memory
Toy_Bucket* literalBucket; //stores the value literals (strings, functions, etc.)
Toy_Bucket* scopeBucket; //stores the scope instances
Toy_Bucket** scopeBucketHandle; //for reusing the scope bucket to save on alloc/free
} Toy_VM;
TOY_API void Toy_resetVM(Toy_VM* vm, bool preserveScope);
TOY_API void Toy_initVM(Toy_VM* vm); //creates memory
TOY_API void Toy_inheritVM(Toy_VM* vm, Toy_VM* parent); //inherits scope bucket
TOY_API void Toy_bindVM(Toy_VM* vm, Toy_Module* module, bool preserveScope);
TOY_API unsigned int Toy_runVM(Toy_VM* vm);
TOY_API void Toy_freeVM(Toy_VM* vm);
TOY_API Toy_Array* Toy_extractResultsFromVM(Toy_Bucket** bucketHandle, Toy_VM* subVM, unsigned int resultCount);
//TODO: inject extra data (hook system for external libraries)