Skip to main content

luaur_ast/methods/
printer_advance.rs

1use crate::records::position::Position;
2use crate::records::printer::Printer;
3use luaur_common::macros::luau_assert::LUAU_ASSERT;
4
5pub trait IntoPosition {
6    fn into_position(self) -> Position;
7}
8
9impl IntoPosition for Position {
10    fn into_position(self) -> Position {
11        self
12    }
13}
14
15impl IntoPosition for &Position {
16    fn into_position(self) -> Position {
17        *self
18    }
19}
20
21impl<'a> Printer<'a> {
22    pub fn advance<P: IntoPosition>(&mut self, new_pos: P) {
23        let new_pos = new_pos.into_position();
24        LUAU_ASSERT!(new_pos.has_value());
25        self.writer.advance(&new_pos);
26    }
27}
28
29#[no_mangle]
30pub extern "C" fn printer_advance(this: *mut Printer, new_pos: *const Position) {
31    unsafe {
32        (*this).advance(&*new_pos);
33    }
34}