pub struct ExpressionVisitor<'a> {
context: &'a mut CompilationContext,
current_return_type: Option<TypeId>,
}
Expand description
Handles semantic analysis for all expression types
This visitor is responsible for analyzing expression-level constructs including binary operations, unary operations, function calls, variable references, literals, conditionals, and block expressions.
Fields§
§context: &'a mut CompilationContext
§current_return_type: Option<TypeId>
Implementations§
Source§impl<'a> ExpressionVisitor<'a>
impl<'a> ExpressionVisitor<'a>
Sourcepub fn new(context: &'a mut CompilationContext) -> Self
pub fn new(context: &'a mut CompilationContext) -> Self
Create a new expression visitor
§Arguments
context
- The compilation context for type information and symbol lookup
Sourcepub fn with_return_type(
context: &'a mut CompilationContext,
current_return_type: Option<TypeId>,
) -> Self
pub fn with_return_type( context: &'a mut CompilationContext, current_return_type: Option<TypeId>, ) -> Self
Create a new expression visitor with a specific return type context
§Arguments
context
- The compilation context for type information and symbol lookupcurrent_return_type
- The current function’s return type for validation
Sourcepub fn set_return_type(&mut self, return_type: Option<TypeId>)
pub fn set_return_type(&mut self, return_type: Option<TypeId>)
Set the current return type for function analysis
Sourcefn create_type_coordinator(&self) -> TypeCheckingCoordinator<'_>
fn create_type_coordinator(&self) -> TypeCheckingCoordinator<'_>
Create a type checking coordinator for this visitor’s context
Sourcepub fn visit_expression(&mut self, expr: &Expression) -> SemanticResult
pub fn visit_expression(&mut self, expr: &Expression) -> SemanticResult
Visit an expression and determine its type
Sourcepub fn visit_binary_expression(
&mut self,
bin_expr: &BinaryExpr,
) -> SemanticResult
pub fn visit_binary_expression( &mut self, bin_expr: &BinaryExpr, ) -> SemanticResult
Visit a binary expression
Sourcepub fn visit_unary_expression(
&mut self,
unary_expr: &UnaryExpr,
) -> SemanticResult
pub fn visit_unary_expression( &mut self, unary_expr: &UnaryExpr, ) -> SemanticResult
Visit a unary expression
Sourcepub fn visit_call_expression(
&mut self,
call_expr: &FunctionCallExpr,
) -> SemanticResult
pub fn visit_call_expression( &mut self, call_expr: &FunctionCallExpr, ) -> SemanticResult
Visit a function call expression
Sourcepub fn visit_variable_expression(
&mut self,
var_expr: &VariableExpr,
) -> SemanticResult
pub fn visit_variable_expression( &mut self, var_expr: &VariableExpr, ) -> SemanticResult
Visit a variable expression
Sourcepub fn visit_literal_expression(
&mut self,
literal_expr: &LiteralExpr,
) -> SemanticResult
pub fn visit_literal_expression( &mut self, literal_expr: &LiteralExpr, ) -> SemanticResult
Visit a literal expression
Sourcepub fn visit_conditional_expression(
&mut self,
cond_expr: &ConditionalExpr,
) -> SemanticResult
pub fn visit_conditional_expression( &mut self, cond_expr: &ConditionalExpr, ) -> SemanticResult
Visit a conditional expression
Sourcepub fn visit_block_expression(
&mut self,
block_expr: &BlockExpr,
) -> SemanticResult
pub fn visit_block_expression( &mut self, block_expr: &BlockExpr, ) -> SemanticResult
Visit a block expression
Sourcepub fn visit_function_type_expression(
&mut self,
func_type_expr: &FunctionTypeExpr,
) -> SemanticResult
pub fn visit_function_type_expression( &mut self, func_type_expr: &FunctionTypeExpr, ) -> SemanticResult
Visit a function type expression
Sourcefn resolve_value(&self, name: &str) -> Option<&Symbol>
fn resolve_value(&self, name: &str) -> Option<&Symbol>
Resolve a symbol that can be used as a value (variables and functions)