diff --git a/samples/hello.brc b/samples/hello.brc index b8fa9d7..e93c560 100644 --- a/samples/hello.brc +++ b/samples/hello.brc @@ -1,9 +1,9 @@ -@extern putchar fun: character sint32 -> sint32 +@extern putchar fun: character u32 -> u32 -main fun -> sint32 - text data <- "Hello, world!\n" +main fun -> u32 + text data <- "Hello, world!\n" - rep i sint32 <- 0, text[i] != 0: + rep i u32 <- 0, text[i] != 0: putchar(text[i]) i <- i + 1 ; diff --git a/samples/test.brc b/samples/test.brc index 02f3f71..baa3e8f 100644 --- a/samples/test.brc +++ b/samples/test.brc @@ -49,11 +49,13 @@ i u32 <- 0, rep text[i] != 0: ;*/ main fun -> u32 - /*num1 u8 <- 42 + num1 u8 <- 42 num2 s8 <- 3 - +15 num3 u32 <- 1234123 - num4 s32 <- -345345*/ + num4 s32 <- -345345 num5 r32 <- -42.58 + num5 + num3 + ret 0 ; \ No newline at end of file diff --git a/src/Parser/Expression/ExpressionLiteral.cpp b/src/Parser/Expression/ExpressionLiteral.cpp index 76238a3..4675d40 100644 --- a/src/Parser/Expression/ExpressionLiteral.cpp +++ b/src/Parser/Expression/ExpressionLiteral.cpp @@ -44,10 +44,11 @@ shared_ptr ExpressionLiteral::expressionLiteralForToken(share expression->u32Value = *charValue; return expression; } - case TokenKind::REAL: + case TokenKind::REAL: { expression->r32Value = stof(token->getLexme()); expression->valueType = ValueType::valueTypeForToken(token, nullptr, 0); break; + } default: return nullptr; } @@ -63,15 +64,15 @@ bool ExpressionLiteral::getBoolValue() { } uint8_t ExpressionLiteral::getU8Value() { - return s32Value; + return u8Value; } uint32_t ExpressionLiteral::getU32Value() { - return s32Value; + return u32Value; } int8_t ExpressionLiteral::getS8Value() { - return s32Value; + return s8Value; } int32_t ExpressionLiteral::getS32Value() { diff --git a/src/Parser/Parser.cpp b/src/Parser/Parser.cpp index cd9b957..bdf291f 100644 --- a/src/Parser/Parser.cpp +++ b/src/Parser/Parser.cpp @@ -756,8 +756,8 @@ shared_ptr Parser::matchPrimary() { return expression; expression = matchExpressionArrayLiteral(); - if (expression != nullptr || errors.size() > errorsCount) - return expression; + if (expression != nullptr || errors.size() > errorsCount) + return expression; expression = matchExpressionLiteral(); if (expression != nullptr || errors.size() > errorsCount) diff --git a/src/Parser/ValueType.cpp b/src/Parser/ValueType.cpp index 0230362..566342b 100644 --- a/src/Parser/ValueType.cpp +++ b/src/Parser/ValueType.cpp @@ -37,6 +37,7 @@ shared_ptr ValueType::valueTypeForToken(shared_ptr token, shar case TokenKind::BOOL: return make_shared(ValueTypeKind::BOOL, nullptr, 0); case TokenKind::INTEGER_DEC: + return make_shared(ValueTypeKind::S32, nullptr, 0); case TokenKind::INTEGER_HEX: case TokenKind::INTEGER_BIN: case TokenKind::INTEGER_CHAR: