List type and generic base type, char wrapper type
This commit is contained in:
parent
647f739d08
commit
471cf679cd
6 changed files with 124 additions and 5 deletions
|
@ -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;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue