uCBQN/src/vm.h
2021-05-11 16:10:49 +03:00

49 lines
829 B
C

#pragma once
#include "h.h"
typedef struct Block Block;
typedef struct Body Body;
typedef struct Scope Scope;
typedef struct Comp {
struct Value;
B bc;
B src;
B indices;
HArr* objs;
u32 blockAm;
Block* blocks[];
} Comp;
struct Block {
struct Value;
bool imm;
u8 ty;
Body* body;
};
typedef struct NSDesc NSDesc;
struct Body {
struct Value;
Comp* comp;
// B* objs;
i32* bc; // pointer in comp->bc
u32 maxStack;
u16 maxPSC;
u16 varAm;
u32 endStack;
NSDesc* nsDesc;
i32 varIDs[];
};
struct Scope {
struct Value;
Scope* psc;
Body* body;
u16 varAm;
B vars[];
};
typedef struct FunBlock { struct Fun; Scope* sc; Block* bl; } FunBlock;
typedef struct Md1Block { struct Md1; Scope* sc; Block* bl; } Md1Block;
typedef struct Md2Block { struct Md2; Scope* sc; Block* bl; } Md2Block;