Skip to content

Commit 6d9958c

Browse files
committed
Refactor Expression Handling and Type Information: Remove unnecessary type info parameters from Expression variants; update related code in Builder, TypeChecker, and WatEmitter to handle new structure; enhance Uzumaki expression handling with type info management.
1 parent 9584053 commit 6d9958c

File tree

6 files changed

+190
-121
lines changed

6 files changed

+190
-121
lines changed

ast/src/builder.rs

Lines changed: 34 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -680,38 +680,29 @@ impl<'a> Builder<'a, InitState> {
680680
match node_kind {
681681
"array_index_access_expression" => Expression::ArrayIndexAccess(
682682
self.build_array_index_access_expression(parent_id, node, code),
683-
None,
684-
),
685-
"member_access_expression" => Expression::MemberAccess(
686-
self.build_member_access_expression(parent_id, node, code),
687-
None,
688-
),
689-
"type" => Expression::Type(self.build_type(parent_id, node, code), None),
690-
"function_call_expression" => Expression::FunctionCall(
691-
self.build_function_call_expression(parent_id, node, code),
692-
None,
693-
),
694-
"prefix_unary_expression" => Expression::PrefixUnary(
695-
self.build_prefix_unary_expression(parent_id, node, code),
696-
None,
697683
),
684+
"member_access_expression" => {
685+
Expression::MemberAccess(self.build_member_access_expression(parent_id, node, code))
686+
}
687+
"type" => Expression::Type(self.build_type(parent_id, node, code)),
688+
"function_call_expression" => {
689+
Expression::FunctionCall(self.build_function_call_expression(parent_id, node, code))
690+
}
691+
"prefix_unary_expression" => {
692+
Expression::PrefixUnary(self.build_prefix_unary_expression(parent_id, node, code))
693+
}
698694
"parenthesized_expression" => Expression::Parenthesized(
699695
self.build_parenthesized_expression(parent_id, node, code),
700-
None,
701696
),
702697
"binary_expression" => {
703-
Expression::Binary(self.build_binary_expression(parent_id, node, code), None)
698+
Expression::Binary(self.build_binary_expression(parent_id, node, code))
704699
}
705700
"bool_literal" | "string_literal" | "number_literal" | "array_literal"
706-
| "unit_literal" => {
707-
Expression::Literal(self.build_literal(parent_id, node, code), None)
708-
}
701+
| "unit_literal" => Expression::Literal(self.build_literal(parent_id, node, code)),
709702
"uzumaki_keyword" => {
710-
Expression::Uzumaki(self.build_uzumaki_expression(parent_id, node, code), None)
711-
}
712-
"identifier" => {
713-
Expression::Identifier(self.build_identifier(parent_id, node, code), None)
703+
Expression::Uzumaki(self.build_uzumaki_expression(parent_id, node, code))
714704
}
705+
"identifier" => Expression::Identifier(self.build_identifier(parent_id, node, code)),
715706
_ => panic!("Unexpected expression node kind: {node_kind}"),
716707
}
717708
}
@@ -748,7 +739,7 @@ impl<'a> Builder<'a, InitState> {
748739

749740
let node = Rc::new(ArrayIndexAccessExpression::new(id, location, array, index));
750741
self.arena.add_node(
751-
AstNode::Expression(Expression::ArrayIndexAccess(node.clone(), None)),
742+
AstNode::Expression(Expression::ArrayIndexAccess(node.clone())),
752743
parent_id,
753744
);
754745
node
@@ -767,7 +758,7 @@ impl<'a> Builder<'a, InitState> {
767758
let name = self.build_identifier(id, &node.child_by_field_name("name").unwrap(), code);
768759
let node = Rc::new(MemberAccessExpression::new(id, location, expression, name));
769760
self.arena.add_node(
770-
AstNode::Expression(Expression::MemberAccess(node.clone(), None)),
761+
AstNode::Expression(Expression::MemberAccess(node.clone())),
771762
parent_id,
772763
);
773764
node
@@ -794,7 +785,7 @@ impl<'a> Builder<'a, InitState> {
794785
match field {
795786
"argument_name" => {
796787
let expr = self.build_expression(id, &child, code);
797-
if let Expression::Identifier(ident, _) = expr {
788+
if let Expression::Identifier(ident) = expr {
798789
pending_name = Some(ident);
799790
}
800791
}
@@ -822,7 +813,7 @@ impl<'a> Builder<'a, InitState> {
822813
id, location, function, arguments,
823814
));
824815
self.arena.add_node(
825-
AstNode::Expression(Expression::FunctionCall(node.clone(), None)),
816+
AstNode::Expression(Expression::FunctionCall(node.clone())),
826817
parent_id,
827818
);
828819
node
@@ -848,7 +839,7 @@ impl<'a> Builder<'a, InitState> {
848839
id, location, expression, operator,
849840
));
850841
self.arena.add_node(
851-
AstNode::Expression(Expression::PrefixUnary(node.clone(), None)),
842+
AstNode::Expression(Expression::PrefixUnary(node.clone())),
852843
parent_id,
853844
);
854845
node
@@ -899,7 +890,7 @@ impl<'a> Builder<'a, InitState> {
899890

900891
let node = Rc::new(ParenthesizedExpression::new(id, location, expression));
901892
self.arena.add_node(
902-
AstNode::Expression(Expression::Parenthesized(node.clone(), None)),
893+
AstNode::Expression(Expression::Parenthesized(node.clone())),
903894
parent_id,
904895
);
905896
node
@@ -942,7 +933,7 @@ impl<'a> Builder<'a, InitState> {
942933

943934
let node = Rc::new(BinaryExpression::new(id, location, left, operator, right));
944935
self.arena.add_node(
945-
AstNode::Expression(Expression::Binary(node.clone(), None)),
936+
AstNode::Expression(Expression::Binary(node.clone())),
946937
parent_id,
947938
);
948939
node
@@ -975,7 +966,7 @@ impl<'a> Builder<'a, InitState> {
975966

976967
let node = Rc::new(ArrayLiteral::new(id, location, elements));
977968
self.arena.add_node(
978-
AstNode::Expression(Expression::Literal(Literal::Array(node.clone()), None)),
969+
AstNode::Expression(Expression::Literal(Literal::Array(node.clone()))),
979970
parent_id,
980971
);
981972
node
@@ -992,7 +983,7 @@ impl<'a> Builder<'a, InitState> {
992983

993984
let node = Rc::new(BoolLiteral::new(id, location, value));
994985
self.arena.add_node(
995-
AstNode::Expression(Expression::Literal(Literal::Bool(node.clone()), None)),
986+
AstNode::Expression(Expression::Literal(Literal::Bool(node.clone()))),
996987
parent_id,
997988
);
998989
node
@@ -1009,7 +1000,7 @@ impl<'a> Builder<'a, InitState> {
10091000
let value = node.utf8_text(code).unwrap().to_string();
10101001
let node = Rc::new(StringLiteral::new(id, location, value));
10111002
self.arena.add_node(
1012-
AstNode::Expression(Expression::Literal(Literal::String(node.clone()), None)),
1003+
AstNode::Expression(Expression::Literal(Literal::String(node.clone()))),
10131004
parent_id,
10141005
);
10151006
node
@@ -1026,7 +1017,7 @@ impl<'a> Builder<'a, InitState> {
10261017
let value = node.utf8_text(code).unwrap().to_string();
10271018
let node = Rc::new(NumberLiteral::new(id, location, value));
10281019
self.arena.add_node(
1029-
AstNode::Expression(Expression::Literal(Literal::Number(node.clone()), None)),
1020+
AstNode::Expression(Expression::Literal(Literal::Number(node.clone()))),
10301021
parent_id,
10311022
);
10321023
node
@@ -1037,7 +1028,7 @@ impl<'a> Builder<'a, InitState> {
10371028
let location = Self::get_location(node, code);
10381029
let node = Rc::new(UnitLiteral::new(id, location));
10391030
self.arena.add_node(
1040-
AstNode::Expression(Expression::Literal(Literal::Unit(node.clone()), None)),
1031+
AstNode::Expression(Expression::Literal(Literal::Unit(node.clone()))),
10411032
parent_id,
10421033
);
10431034
node
@@ -1083,7 +1074,7 @@ impl<'a> Builder<'a, InitState> {
10831074

10841075
let node = Rc::new(TypeArray::new(id, location, element_type, size));
10851076
self.arena.add_node(
1086-
AstNode::Expression(Expression::Type(Type::Array(node.clone()), None)),
1077+
AstNode::Expression(Expression::Type(Type::Array(node.clone()))),
10871078
parent_id,
10881079
);
10891080
node
@@ -1096,7 +1087,7 @@ impl<'a> Builder<'a, InitState> {
10961087
self.types.push(SymbolType::Global(name.clone()));
10971088
let node = Rc::new(SimpleType::new(id, location, name));
10981089
self.arena.add_node(
1099-
AstNode::Expression(Expression::Type(Type::Simple(node.clone()), None)),
1090+
AstNode::Expression(Expression::Type(Type::Simple(node.clone()))),
11001091
parent_id,
11011092
);
11021093
node
@@ -1118,7 +1109,7 @@ impl<'a> Builder<'a, InitState> {
11181109

11191110
let node = Rc::new(GenericType::new(id, location, base, parameters));
11201111
self.arena.add_node(
1121-
AstNode::Expression(Expression::Type(Type::Generic(node.clone()), None)),
1112+
AstNode::Expression(Expression::Type(Type::Generic(node.clone()))),
11221113
parent_id,
11231114
);
11241115
node
@@ -1148,7 +1139,7 @@ impl<'a> Builder<'a, InitState> {
11481139
}
11491140
let node = Rc::new(FunctionType::new(id, location, arguments, returns));
11501141
self.arena.add_node(
1151-
AstNode::Expression(Expression::Type(Type::Function(node.clone()), None)),
1142+
AstNode::Expression(Expression::Type(Type::Function(node.clone()))),
11521143
parent_id,
11531144
);
11541145
node
@@ -1167,7 +1158,7 @@ impl<'a> Builder<'a, InitState> {
11671158

11681159
let node = Rc::new(TypeQualifiedName::new(id, location, alias, name));
11691160
self.arena.add_node(
1170-
AstNode::Expression(Expression::Type(Type::Qualified(node.clone()), None)),
1161+
AstNode::Expression(Expression::Type(Type::Qualified(node.clone()))),
11711162
parent_id,
11721163
);
11731164
node
@@ -1187,7 +1178,7 @@ impl<'a> Builder<'a, InitState> {
11871178

11881179
let node = Rc::new(QualifiedName::new(id, location, qualifier, name));
11891180
self.arena.add_node(
1190-
AstNode::Expression(Expression::Type(Type::QualifiedName(node.clone()), None)),
1181+
AstNode::Expression(Expression::Type(Type::QualifiedName(node.clone()))),
11911182
parent_id,
11921183
);
11931184
node
@@ -1203,7 +1194,7 @@ impl<'a> Builder<'a, InitState> {
12031194
let location = Self::get_location(node, code);
12041195
let node = Rc::new(UzumakiExpression::new(id, location));
12051196
self.arena.add_node(
1206-
AstNode::Expression(Expression::Uzumaki(node.clone(), None)),
1197+
AstNode::Expression(Expression::Uzumaki(node.clone())),
12071198
parent_id,
12081199
);
12091200
node
@@ -1215,7 +1206,7 @@ impl<'a> Builder<'a, InitState> {
12151206
let name = node.utf8_text(code).unwrap().to_string();
12161207
let node = Rc::new(Identifier::new(id, name, location));
12171208
self.arena.add_node(
1218-
AstNode::Expression(Expression::Identifier(node.clone(), None)),
1209+
AstNode::Expression(Expression::Identifier(node.clone())),
12191210
parent_id,
12201211
);
12211212
node

0 commit comments

Comments
 (0)