Fix NamedVarRefrence tokenrange
This commit is contained in:
parent
d2ee61e888
commit
ce645519ce
@ -103,14 +103,13 @@ pub struct IfExpression(
|
||||
);
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
pub struct LetStatement(
|
||||
pub String,
|
||||
pub Option<Type>,
|
||||
/// Mutability
|
||||
pub bool,
|
||||
pub Expression,
|
||||
pub TokenRange,
|
||||
);
|
||||
pub struct LetStatement {
|
||||
pub name: String,
|
||||
pub ty: Option<Type>,
|
||||
pub mutable: bool,
|
||||
pub value: Expression,
|
||||
pub name_range: TokenRange,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
pub struct ImportStatement(pub Vec<String>, pub TokenRange);
|
||||
|
@ -318,17 +318,18 @@ impl Parse for LetStatement {
|
||||
let mutability = stream.expect(Token::MutKeyword).is_ok();
|
||||
|
||||
if let Some(Token::Identifier(variable)) = stream.next() {
|
||||
let range = stream.get_range_prev().unwrap();
|
||||
stream.expect(Token::Equals)?;
|
||||
|
||||
let expression = stream.parse()?;
|
||||
stream.expect(Token::Semi)?;
|
||||
Ok(LetStatement(
|
||||
variable,
|
||||
None, // TODO add possibility to name type
|
||||
mutability,
|
||||
expression,
|
||||
stream.get_range().unwrap(),
|
||||
))
|
||||
Ok(LetStatement {
|
||||
name: variable,
|
||||
ty: None,
|
||||
mutable: mutability,
|
||||
value: expression,
|
||||
name_range: range,
|
||||
})
|
||||
} else {
|
||||
Err(stream.expected_err("identifier")?)
|
||||
}
|
||||
|
@ -114,17 +114,17 @@ impl ast::Block {
|
||||
mir::StmtKind::Let(
|
||||
mir::NamedVariableRef(
|
||||
s_let
|
||||
.1
|
||||
.ty
|
||||
.clone()
|
||||
.map(|t| t.0.into())
|
||||
.unwrap_or(mir::TypeKind::Vague(mir::VagueType::Unknown)),
|
||||
s_let.0.clone(),
|
||||
s_let.4.as_meta(module_id),
|
||||
s_let.name.clone(),
|
||||
s_let.name_range.as_meta(module_id),
|
||||
),
|
||||
s_let.2,
|
||||
s_let.3.process(module_id),
|
||||
s_let.mutable,
|
||||
s_let.value.process(module_id),
|
||||
),
|
||||
s_let.4,
|
||||
s_let.name_range + s_let.value.1,
|
||||
),
|
||||
ast::BlockLevelStatement::Set(var_ref, expression, range) => (
|
||||
StmtKind::Set(var_ref.process(module_id), expression.process(module_id)),
|
||||
|
@ -181,6 +181,15 @@ impl<'a, 'b> TokenStream<'a, 'b> {
|
||||
end: self.position,
|
||||
})
|
||||
}
|
||||
|
||||
/// Gets range from the previous position to the current. Useful when using
|
||||
/// with [`TokenStream::next`]
|
||||
pub fn get_range_prev(&self) -> Option<TokenRange> {
|
||||
self.ref_position.as_ref().map(|ref_pos| TokenRange {
|
||||
start: **ref_pos,
|
||||
end: self.position - 1,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
impl Drop for TokenStream<'_, '_> {
|
||||
|
@ -5,9 +5,9 @@ fn changer(param: &mut u32) {
|
||||
}
|
||||
|
||||
fn main() -> u32 {
|
||||
let mut value = 6;
|
||||
let value = 6;
|
||||
|
||||
changer(&mut value);
|
||||
let mut a = &value;
|
||||
|
||||
return value;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user