1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
mod meta;
mod node;
mod stack;
mod state;

use crate::{api::LuaApi, value::value::LuaValue};
pub use {stack::LuaStack, state::LuaState};

impl LuaApi for LuaState {}

/// 用于实现栈相关函数
impl LuaState {
    pub(super) fn stack_get(&self, idx: isize) -> LuaValue {
        let node = self.get_node();
        let stack = node.get_stack();
        stack.get(idx)
    }

    pub(super) fn stack_check(&self, n: usize) {
        let node = self.get_node();
        let mut stack = node.get_stack_mut();
        stack.check(n)
    }

    pub(super) fn stack_push(&self, val: LuaValue) {
        let node = self.get_node();
        let mut stack = node.get_stack_mut();
        stack.push(val)
    }

    pub(super) fn stack_push_n(&self, vals: Vec<LuaValue>, n: isize) {
        let node = self.get_node();
        let mut stack = node.get_stack_mut();
        stack.push_n(vals, n)
    }

    pub(super) fn stack_pop(&self) -> LuaValue {
        let node = self.get_node();
        let mut stack = node.get_stack_mut();
        stack.pop()
    }

    pub(super) fn stack_pop_n(&self, n: usize) -> Vec<LuaValue> {
        let node = self.get_node();
        let mut stack = node.get_stack_mut();
        stack.pop_n(n)
    }

    pub(super) fn stack_abs_index(&self, idx: isize) -> isize {
        let node = self.get_node();
        let stack = node.get_stack();
        stack.abs_index(idx)
    }

    pub(super) fn stack_is_valid(&self, idx: isize) -> bool {
        let node = self.get_node();
        let stack = node.get_stack();
        stack.is_valid(idx)
    }

    pub(super) fn stack_set(&self, idx: isize, val: LuaValue) {
        let node = self.get_node();
        let mut stack = node.get_stack_mut();
        stack.set(idx, val)
    }

    pub(super) fn stack_reverse(&self, from: isize, to: isize) {
        let node = self.get_node();
        let mut stack = node.get_stack_mut();
        stack.reverse(from, to)
    }
}