Fix bug with loading values, parse casts
This commit is contained in:
parent
fa01b22b81
commit
1814ce2cc9
@ -142,7 +142,9 @@ namespace AST {
|
||||
builder.builder->CreateStore(value.value, ptr, false);
|
||||
}
|
||||
|
||||
scope.values[this->m_name] = codegen::StackValue{ ptr, this->m_type };
|
||||
auto ptr_ty = std::shared_ptr<types::Type>{ new types::PointerType{ this->m_type } };
|
||||
|
||||
scope.values[this->m_name] = codegen::StackValue{ ptr, ptr_ty };
|
||||
}
|
||||
|
||||
void IfStatement::codegen(codegen::Builder& builder, codegen::Scope& scope) {
|
||||
|
||||
@ -80,10 +80,39 @@ namespace parsing {
|
||||
}
|
||||
}
|
||||
|
||||
Result<std::shared_ptr<types::Type>, std::string> parse_cast(token::TokenStream& stream) {
|
||||
token::TokenStream inner{ stream };
|
||||
try {
|
||||
inner.expect(token::Type::Symbol, "(");
|
||||
auto ty = parse_type(inner).unwrap();
|
||||
inner.expect(token::Type::Symbol, ")");
|
||||
|
||||
stream.m_position = inner.m_position;
|
||||
|
||||
return ty;
|
||||
}
|
||||
catch (std::runtime_error& error) {
|
||||
return std::string{ error.what() };
|
||||
}
|
||||
}
|
||||
|
||||
Result<std::unique_ptr<AST::Expression>, std::string> parse_primary_expression(token::TokenStream& stream) {
|
||||
token::TokenStream inner{ stream };
|
||||
try {
|
||||
auto before_meta = inner.metadata();
|
||||
|
||||
if (auto cast = parse_cast(inner); cast.ok()) {
|
||||
auto expr = parse_expression(inner).unwrap();
|
||||
stream.m_position = inner.m_position;
|
||||
return std::unique_ptr<AST::Expression>{
|
||||
new AST::CastExpression{
|
||||
before_meta + inner.metadata(),
|
||||
cast.unwrap(),
|
||||
std::move(expr)
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
auto plain_expr = parse_plain_expression(inner);
|
||||
while (inner.peek().content == "(") {
|
||||
inner.next();
|
||||
|
||||
Loading…
Reference in New Issue
Block a user