start creating base objects for runtime

This commit is contained in:
2025-06-24 01:55:01 +01:00
parent 74c71c3a1b
commit 498cd39c04
16 changed files with 414 additions and 153 deletions

View File

@@ -1,9 +1,17 @@
#include "object.h"
#include "../../memory.h"
#include "../runtime.h"
#include <string.h>
ArgonObject* init_argon_object() {
ArgonObject *object = ar_alloc(sizeof(ArgonObject));
object->type = TYPE_OBJECT;
object->cls = object;
object->fields = createHashmap(8);
object->typeObject = NULL;
object->fields = createHashmap();
memset(&object->value, 0, sizeof(object->value));
return object;
}
void add_field(ArgonObject*target, char* name, ArgonObject *object) {
hashmap_insert(target->fields, siphash64_bytes(name, strlen(name)),name, object, 0);
}

View File

@@ -4,6 +4,11 @@
#include <gmp.h>
#include <stdbool.h>
struct string_struct {
char *data;
size_t length;
};
typedef enum {
TYPE_NULL,
TYPE_BOOL,
@@ -16,14 +21,19 @@ typedef enum {
struct ArgonObject {
ArgonType type;
struct ArgonObject *cls; // class pointer or type object
struct hashmap *fields; // dynamic fields/methods
ArgonObject *typeObject;
struct hashmap *fields; // dynamic fields/methods
union {
mpq_t as_number;
bool as_bool;
char *as_str;
struct string_struct as_str;
void *native_fn;
// others as needed
} value;
};
typedef struct ArgonObject ArgonObject;
ArgonObject *init_argon_object();
void add_field(ArgonObject*target, char* name, ArgonObject *object);
#endif // OBJECT_H

View File

@@ -0,0 +1,16 @@
#include "../object.h"
#include <stdint.h>
ArgonObject *ARGON_STRING_TYPE = NULL;
void init_string_type() {
ARGON_STRING_TYPE = init_argon_object();
}
ArgonObject *init_string_object(char*data, size_t length) {
ArgonObject * object = init_argon_object();
object->typeObject = ARGON_STRING_TYPE;
object->value.as_str.data = data;
object->value.as_str.length = length;
return object;
}

View File

@@ -0,0 +1,11 @@
#ifndef STRING_OBJ_H
#define STRING_OBJ_H
#include "../object.h"
extern ArgonObject *ARGON_STRING_TYPE;
void init_string_type();
ArgonObject *init_string_object(char*data, size_t length);
#endif // STRING_OBJ_H

View File

@@ -1,15 +1,10 @@
#include "../object.h"
#include "../../internals/hashmap/hashmap.h"
#include "../../../memory.h"
#include "../object.h"
#include <string.h>
#include "type.h"
ArgonObject *ARGON_TYPE_OBJ = NULL;
ArgonObject *ARGON_TYPE = NULL;
void init_type_obj() {
ARGON_TYPE_OBJ = ar_alloc(sizeof(ArgonObject));
ARGON_TYPE_OBJ->type = TYPE_OBJECT;
ARGON_TYPE_OBJ->cls = ARGON_TYPE_OBJ;
ARGON_TYPE_OBJ->fields = createHashmap(8);
memset(&ARGON_TYPE_OBJ->value, 0, sizeof(ARGON_TYPE_OBJ->value));
void init_type() {
ARGON_TYPE = init_argon_object();
}

View File

@@ -2,9 +2,9 @@
#define TYPES_H
#include "../object.h"
extern ArgonObject *ARGON_TYPE_OBJ;
extern ArgonObject *ARGON_TYPE;
void init_type_obj();
void init_type();
#endif // TYPES_H