58 lines
1.2 KiB
C
58 lines
1.2 KiB
C
#ifndef FZL_VM_ENV_H
|
|
#define FZL_VM_ENV_H
|
|
|
|
#include <common/fzl_value.h>
|
|
#include <stdbool.h>
|
|
#include <stddef.h>
|
|
#include <vm/fzl_vm_object.h>
|
|
|
|
typedef enum
|
|
{
|
|
FZL_VM_ENV_WRESULT_OK,
|
|
FZL_VM_ENV_WRESULT_ERR,
|
|
FZL_VM_ENV_WRESULT_ERR_EXISTS,
|
|
FZL_VM_ENV_WRESULT_ERR_NOT_FOUND
|
|
} fzl_vm_env_wresult_t;
|
|
|
|
// Environment table entry descriptor
|
|
typedef struct
|
|
{
|
|
char *name;
|
|
fzl_value_t value;
|
|
} fzl_vm_env_entry_t;
|
|
|
|
// Environment table descriptor
|
|
typedef struct
|
|
{
|
|
size_t size;
|
|
size_t remainder;
|
|
|
|
fzl_vm_env_entry_t *table;
|
|
|
|
fzl_vm_object_t **owned_objects;
|
|
size_t owned_objects_remainder;
|
|
size_t owned_objects_count;
|
|
} fzl_vm_env_t;
|
|
|
|
// Allocate env table
|
|
fzl_vm_env_t *fzl_mkenv();
|
|
|
|
// Try get value by name
|
|
bool fzl_env_lookup(fzl_vm_env_t *env, char *name, fzl_value_t *res);
|
|
|
|
// Check name in env table
|
|
bool fzl_env_contains(fzl_vm_env_t *env, char *name);
|
|
|
|
// Store new value
|
|
fzl_vm_env_wresult_t fzl_env_storevalue(fzl_vm_env_t *env, char *name,
|
|
fzl_value_t val);
|
|
|
|
// Overwrite existing value
|
|
fzl_vm_env_wresult_t fzl_env_writevalue(fzl_vm_env_t *env, char *name,
|
|
fzl_value_t newval);
|
|
|
|
// Free env table
|
|
void fzl_freeenv(fzl_vm_env_t *env);
|
|
|
|
#endif // FZL_VM_ENV_H
|