extlibs can now add variables and structs!

This commit is contained in:
2026-01-20 21:26:40 +11:00
parent 8eef78c310
commit c6762a7966
2 changed files with 40 additions and 2 deletions

View File

@@ -1,4 +1,3 @@
#include "lexer.h"
#include "parser.h"
#include "interpreter.h"
#include "types.h"
@@ -68,11 +67,34 @@ GroundValue groundCreateValue(GroundValueType type, ...) {
return createListGroundValue(va_arg(args, List));
break;
}
default: {
case FUNCTION: {
return createFunctionGroundValue(va_arg(args, GroundFunction*));
break;
}
case STRUCTVAL: {
GroundValue gv;
gv.type = STRUCTVAL;
gv.data.structVal = malloc(sizeof(GroundStruct));
*gv.data.structVal = va_arg(args, GroundStruct);
return gv;
}
case CUSTOM: {
// FIXME do this later lmao
return createNoneGroundValue();
break;
}
case ERROR: {
return createErrorGroundValue(va_arg(args, GroundError));
break;
}
case NONE: {
return createNoneGroundValue();
break;
}
}
return createNoneGroundValue();
va_end(args);
}
@@ -90,3 +112,18 @@ void groundPrintProgram(GroundProgram* program) {
GroundProgram groundParseFile(const char* code) {
return parseFile(code);
}
GroundStruct groundCreateStruct() {
GroundStruct gs;
gs.size = 0;
gs.fields = malloc(sizeof(GroundStructField));
return gs;
}
void groundAddValueToScope(GroundScope* gs, const char* name, GroundValue value) {
addVariable(gs->variables, name, value);
}
void groundAddFieldToStruct(GroundStruct* gstruct, char* name, GroundValue field) {
addFieldToStruct(gstruct, name, field);
}