Pass tests
This commit is contained in:
parent
d4a8a65096
commit
31bb7eaffc
@ -478,6 +478,9 @@ impl<'src> Parser<'src> {
|
|||||||
) -> Result<(), ParseError> {
|
) -> Result<(), ParseError> {
|
||||||
let token = self.current_token;
|
let token = self.current_token;
|
||||||
let start_position = self.current_position;
|
let start_position = self.current_position;
|
||||||
|
|
||||||
|
self.advance()?;
|
||||||
|
|
||||||
let local_index = self.parse_identifier_from(token, start_position)?;
|
let local_index = self.parse_identifier_from(token, start_position)?;
|
||||||
let is_mutable = self.chunk.get_local(local_index, start_position)?.mutable;
|
let is_mutable = self.chunk.get_local(local_index, start_position)?.mutable;
|
||||||
|
|
||||||
@ -516,11 +519,11 @@ impl<'src> Parser<'src> {
|
|||||||
start_position,
|
start_position,
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
self.increment_register()?;
|
|
||||||
self.emit_instruction(
|
self.emit_instruction(
|
||||||
Instruction::get_local(self.current_register, local_index),
|
Instruction::get_local(self.current_register, local_index),
|
||||||
self.previous_position,
|
self.previous_position,
|
||||||
);
|
);
|
||||||
|
self.increment_register()?;
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
@ -663,6 +666,8 @@ impl<'src> Parser<'src> {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
self.allow(TokenKind::Semicolon)?;
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -742,7 +747,7 @@ impl<'src> Parser<'src> {
|
|||||||
|
|
||||||
if let Some(prefix_parser) = ParseRule::from(&self.current_token.kind()).prefix {
|
if let Some(prefix_parser) = ParseRule::from(&self.current_token.kind()).prefix {
|
||||||
log::trace!(
|
log::trace!(
|
||||||
"Parsing \"{}\" with prefix parser at precedence {precedence}",
|
"Parsing \"{}\" as prefix at precedence {precedence}",
|
||||||
self.current_token,
|
self.current_token,
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -754,7 +759,7 @@ impl<'src> Parser<'src> {
|
|||||||
while precedence <= infix_rule.precedence {
|
while precedence <= infix_rule.precedence {
|
||||||
if let Some(infix_parser) = infix_rule.infix {
|
if let Some(infix_parser) = infix_rule.infix {
|
||||||
log::trace!(
|
log::trace!(
|
||||||
"Parsing \"{}\" with infix parser at precedence {precedence}",
|
"Parsing \"{}\" as infix at precedence {precedence}",
|
||||||
self.current_token,
|
self.current_token,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -303,7 +303,9 @@ impl Vm {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(None)
|
let final_value = self.pop(Span(0, 0))?;
|
||||||
|
|
||||||
|
Ok(Some(final_value))
|
||||||
}
|
}
|
||||||
|
|
||||||
fn insert(&mut self, value: Value, index: u8, position: Span) -> Result<(), VmError> {
|
fn insert(&mut self, value: Value, index: u8, position: Span) -> Result<(), VmError> {
|
||||||
|
@ -2,7 +2,10 @@ use dust_lang::*;
|
|||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn long_math() {
|
fn long_math() {
|
||||||
assert_eq!(run("1 + 2 * 3 - 4 / 2"), Ok(Some(Value::integer(5))));
|
assert_eq!(
|
||||||
|
run("1 + 2 * 3 - 4 / 2"),
|
||||||
|
Ok(Some(Value::integer(2).into_reference()))
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
Loading…
Reference in New Issue
Block a user