diff --git a/src/lexer/lexer.c b/src/lexer/lexer.c index 986506b..fe75693 100644 --- a/src/lexer/lexer.c +++ b/src/lexer/lexer.c @@ -171,6 +171,77 @@ ResultType(SolsToken, charptr) identifyToken(const char* token) { return Success(SolsToken, charptr, tok); } + // Process base types + if (strcmp(token, "int") == 0) { + ResultType(SolsType, charptr) type = createSolsType(STT_INT); + if (type.error) { + Estr e = CREATE_ESTR(type.as.error); + APPEND_ESTR(e, " (in identifyToken() function)"); + return Error(SolsToken, charptr, e.str); + } + SolsToken tok = { + .type = STT_TYPE, + .as.type = type.as.success + }; + return Success(SolsToken, charptr, tok); + } + + if (strcmp(token, "double") == 0) { + ResultType(SolsType, charptr) type = createSolsType(STT_DOUBLE); + if (type.error) { + Estr e = CREATE_ESTR(type.as.error); + APPEND_ESTR(e, " (in identifyToken() function)"); + return Error(SolsToken, charptr, e.str); + } + SolsToken tok = { + .type = STT_TYPE, + .as.type = type.as.success + }; + return Success(SolsToken, charptr, tok); + } + + if (strcmp(token, "string") == 0) { + ResultType(SolsType, charptr) type = createSolsType(STT_STRING); + if (type.error) { + Estr e = CREATE_ESTR(type.as.error); + APPEND_ESTR(e, " (in identifyToken() function)"); + return Error(SolsToken, charptr, e.str); + } + SolsToken tok = { + .type = STT_TYPE, + .as.type = type.as.success + }; + return Success(SolsToken, charptr, tok); + } + + if (strcmp(token, "char") == 0) { + ResultType(SolsType, charptr) type = createSolsType(STT_CHAR); + if (type.error) { + Estr e = CREATE_ESTR(type.as.error); + APPEND_ESTR(e, " (in identifyToken() function)"); + return Error(SolsToken, charptr, e.str); + } + SolsToken tok = { + .type = STT_TYPE, + .as.type = type.as.success + }; + return Success(SolsToken, charptr, tok); + } + + if (strcmp(token, "bool") == 0) { + ResultType(SolsType, charptr) type = createSolsType(STT_BOOL); + if (type.error) { + Estr e = CREATE_ESTR(type.as.error); + APPEND_ESTR(e, " (in identifyToken() function)"); + return Error(SolsToken, charptr, e.str); + } + SolsToken tok = { + .type = STT_TYPE, + .as.type = type.as.success + }; + return Success(SolsToken, charptr, tok); + } + // FIXME do tihs better sometime if (strcmp(token, "puts") == 0) { return Success(SolsToken, charptr, {STT_KW_PUTS}); @@ -355,7 +426,7 @@ ResultType(voidptr, charptr) lex(SolsLexer* lexer) { DESTROY_ESTR(buf); buf = CREATE_ESTR(""); } - addTokenToSolsTokens(&lexer->output, (SolsToken) {STT_DOT}); + addTokenToSolsTokens(&lexer->output, (SolsToken) {.type = STT_DOT}); } break; } @@ -380,6 +451,25 @@ ResultType(voidptr, charptr) lex(SolsLexer* lexer) { break; } } + + // Check whether we need to parse types + if (strcmp(buf.str, "fun") == 0) { + if (!lexerPeek(lexer, 1).error && lexerPeek(lexer, 1).as.success == '(') { + // do stuff + } + } + + if (strcmp(buf.str, "template") == 0 ) { + if (!lexerPeek(lexer, 1).error && lexerPeek(lexer, 1).as.success == '(') { + + } + } + + if (strcmp(buf.str, "object") == 0 ) { + if (!lexerPeek(lexer, 1).error && lexerPeek(lexer, 1).as.success == '(') { + + } + } } if (strcmp(buf.str, "") != 0) { @@ -396,3 +486,7 @@ ResultType(voidptr, charptr) lex(SolsLexer* lexer) { return Success(voidptr, charptr, NULL); } + +ResultType(Nothing, charptr) processTypeSignature(SolsLexer* lexer) { + return Error(Nothing, charptr, "WIP (in processTypeSignature() function)"); +} diff --git a/src/lexer/lexer.h b/src/lexer/lexer.h index 8cc6874..16bcfb6 100644 --- a/src/lexer/lexer.h +++ b/src/lexer/lexer.h @@ -44,4 +44,9 @@ ResultType(char, Nothing) lexerConsume(SolsLexer* lexer); // Helper function to classify tokens ResultType(SolsToken, charptr) identifyToken(const char* token); +Result(Nothing, charptr); + +// Helper function to lex type signatures into tokens +ResultType(Nothing, charptr) processTypeSignature(SolsLexer* lexer); + #endif