Files
Chloride/src/arobject.h
2025-08-15 05:41:26 +01:00

83 lines
1.6 KiB
C

/*
* SPDX-FileCopyrightText: 2025 William Bell
*
* SPDX-License-Identifier: GPL-3.0-or-later
*/
#ifndef AROBJECT_H
#define AROBJECT_H
#include "dynamic_array/darray.h"
#include "runtime/internals/dynamic_array_armem/darray_armem.h"
#include "runtime/internals/hashmap/hashmap.h"
#include <gmp.h>
typedef struct ArErr ArErr;
typedef struct RuntimeState RuntimeState;
typedef struct ArgonObject ArgonObject; // forward declaration
typedef ArgonObject *(*native_fn)(size_t argc, ArgonObject **argv, ArErr *err,
RuntimeState *state);
typedef enum ArgonType {
TYPE_NULL,
TYPE_BOOL,
TYPE_NUMBER,
TYPE_STRING,
TYPE_FUNCTION,
TYPE_NATIVE_FUNCTION,
TYPE_METHOD,
TYPE_OBJECT,
} ArgonType;
typedef struct {
void *data;
size_t capacity;
size_t size;
struct hashmap *hashmap;
} ConstantArena;
typedef struct {
uint8_t registerCount;
DArray *return_jumps;
DArray bytecode;
ConstantArena constants;
char *path;
} Translated;
struct string_struct {
char *data;
size_t length;
};
typedef struct Stack {
struct hashmap_GC *scope;
struct Stack *prev;
} Stack;
struct argon_function_struct {
Translated translated;
uint8_t *bytecode;
size_t bytecode_length;
Stack *stack;
size_t number_of_parameters;
struct string_struct *parameters;
uint64_t line;
uint64_t column;
};
// full definition of ArgonObject (no typedef again!)
struct ArgonObject {
ArgonType type;
ArgonType child_type;
struct hashmap_GC *dict;
union {
mpq_t *as_number;
struct string_struct as_str;
native_fn native_fn;
struct argon_function_struct argon_fn;
} value;
};
#endif // AROBJECT_H