MCPcopy Create free account
hub / github.com/amber-lang/amber / handle_variable_reference

Function handle_variable_reference

src/modules/variable/mod.rs:110–134  ·  view source on GitHub ↗
(
    meta: &mut ParserMetadata,
    tok: &Option<Token>,
    name: &str,
)

Source from the content-addressed store, hash-verified

108pub struct Then;
109
110pub fn handle_variable_reference(
111 meta: &mut ParserMetadata,
112 tok: &Option<Token>,
113 name: &str,
114) -> Result<VariableDecl, Failure> {
115 handle_identifier_name(meta, name, tok.clone())?;
116 match meta.get_var_used(name) {
117 Some(variable_unit) => {
118 let mut var = variable_unit.clone();
119 if let Some(narrowed) = meta.get_narrowed_type(name) {
120 var.kind = narrowed.clone();
121 }
122 Ok(var)
123 }
124 None => {
125 let message = format!("Variable '{name}' does not exist");
126 // Find other similar variable if exists
127 if let Some(comment) = handle_similar_variable(meta, name) {
128 error!(meta, tok.clone(), message, comment)
129 } else {
130 error!(meta, tok.clone(), message)
131 }
132 }
133 }
134}
135
136pub fn prevent_constant_mutation(
137 meta: &mut ParserMetadata,

Callers 8

typecheckMethod · 0.85
typecheckMethod · 0.85
typecheckMethod · 0.85
typecheckMethod · 0.85
typecheckMethod · 0.85
typecheckMethod · 0.85
typecheckMethod · 0.85
typecheckMethod · 0.85

Calls 4

handle_identifier_nameFunction · 0.85
handle_similar_variableFunction · 0.85
get_var_usedMethod · 0.80
get_narrowed_typeMethod · 0.80

Tested by

no test coverage detected