List type and generic base type, char wrapper type

This commit is contained in:
vegowotenks 2024-10-10 18:53:40 +02:00
parent 647f739d08
commit 471cf679cd
6 changed files with 124 additions and 5 deletions

View file

@ -1,5 +1,6 @@
#include "interpreter.h"
#include "builtin-functions.h"
#include "object-type.h"
#include <stdio.h>
#include <stdalign.h>
@ -484,6 +485,11 @@ int Interpreter_ExecuteNext(Interpreter* self, size_t stop_token)
top_frame->instruction_pointer++;
break;
case TOKENTYPE_STRING:
{
}
break;
case TOKENTYPE_PIPE:
case TOKENTYPE_SEMICOLON:
case TOKENTYPE_LEFT_BRACE:
@ -500,7 +506,6 @@ int Interpreter_ExecuteNext(Interpreter* self, size_t stop_token)
case TOKENTYPE_COMMA:
case TOKENTYPE_LEFT_PAREN:
case TOKENTYPE_RIGHT_PAREN:
case TOKENTYPE_STRING:
fprintf(stderr, "Unexpected token with type: %s, continuing with next token...\n", TokenType_ToString(t->type));
top_frame->instruction_pointer++;
break;
@ -620,6 +625,40 @@ int Interpreter_Run(Interpreter* self)
return EXIT_SUCCESS;
}
int Interpreter_Startup(Interpreter* self, CallFrame* root_frame)
{
ObjectType* base_type = CallFrame_Reserve(root_frame, sizeof(ObjectType), alignof(ObjectType));
if (ObjectType_Create(base_type, StringView_FromString("Base"), base_type, 0, NULL)) {
return ENOMEM;
}
ObjectType* list_type = CallFrame_Reserve(root_frame, sizeof(ObjectType), alignof(ObjectType));
if (ObjectType_Create(list_type, StringView_FromString("List"), base_type, 2, NULL)) {
return ENOMEM;
}
if (ObjectType_DefineObjectAttribute(list_type, base_type, StringView_FromString("value"))) {
return ENOMEM;
}
if (ObjectType_DefineObjectAttribute(list_type, list_type, StringView_FromString("tail"))) {
return ENOMEM;
}
if (CallFrame_DefineObjectType(root_frame, list_type)) {
return ENOMEM;
}
ObjectType* char_type = CallFrame_Reserve(root_frame, sizeof(ObjectType), alignof(ObjectType));
if (ObjectType_Create(char_type, StringView_FromString("Char"), base_type, 2, NULL)) {
return ENOMEM;
}
if (ObjectType_DefinePrimitiveAttribute(list_type, VALUETYPE_BYTE, StringView_FromString("char"))) {
return ENOMEM;
}
self->implicit_char_type = char_type;
self->implicit_base_type = base_type;
return EXIT_SUCCESS;
}
int Interpreter_Interpret(Interpreter* self)
{
CallFrame* first_frame;