type stuff
This commit is contained in:
@@ -171,6 +171,77 @@ ResultType(SolsToken, charptr) identifyToken(const char* token) {
|
|||||||
return Success(SolsToken, charptr, tok);
|
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
|
// FIXME do tihs better sometime
|
||||||
if (strcmp(token, "puts") == 0) {
|
if (strcmp(token, "puts") == 0) {
|
||||||
return Success(SolsToken, charptr, {STT_KW_PUTS});
|
return Success(SolsToken, charptr, {STT_KW_PUTS});
|
||||||
@@ -355,7 +426,7 @@ ResultType(voidptr, charptr) lex(SolsLexer* lexer) {
|
|||||||
DESTROY_ESTR(buf);
|
DESTROY_ESTR(buf);
|
||||||
buf = CREATE_ESTR("");
|
buf = CREATE_ESTR("");
|
||||||
}
|
}
|
||||||
addTokenToSolsTokens(&lexer->output, (SolsToken) {STT_DOT});
|
addTokenToSolsTokens(&lexer->output, (SolsToken) {.type = STT_DOT});
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -380,6 +451,25 @@ ResultType(voidptr, charptr) lex(SolsLexer* lexer) {
|
|||||||
break;
|
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) {
|
if (strcmp(buf.str, "") != 0) {
|
||||||
@@ -396,3 +486,7 @@ ResultType(voidptr, charptr) lex(SolsLexer* lexer) {
|
|||||||
|
|
||||||
return Success(voidptr, charptr, NULL);
|
return Success(voidptr, charptr, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ResultType(Nothing, charptr) processTypeSignature(SolsLexer* lexer) {
|
||||||
|
return Error(Nothing, charptr, "WIP (in processTypeSignature() function)");
|
||||||
|
}
|
||||||
|
|||||||
@@ -44,4 +44,9 @@ ResultType(char, Nothing) lexerConsume(SolsLexer* lexer);
|
|||||||
// Helper function to classify tokens
|
// Helper function to classify tokens
|
||||||
ResultType(SolsToken, charptr) identifyToken(const char* token);
|
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
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user