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
use crate::ts::TS;
use crate::stack::Stack;
use rust_dynamic::value::Value;
impl TS {
pub fn current(&mut self) -> Option<&mut Stack<Value>> {
match self.ensure().stack.peek() {
Some(curr) => Some(curr),
None => {
return None
}
}
}
pub fn pull(&mut self) -> Option<Value> {
match self.ensure().stack.peek() {
Some(curr) => curr.pull(),
None => {
return None
}
}
}
pub fn swap(&mut self) -> &mut TS {
if self.stack_len() >= 2 {
match self.pull() {
Some(x) => {
match self.pull() {
Some(y) => {
self.push(x);
self.push(y);
}
None => {}
}
}
None => {}
}
}
self
}
pub fn dup(&mut self) -> &mut TS {
if self.stack_len() >= 1 {
match self.pull() {
Some(x) => {
match x.dup() {
Ok(y) => {
self.push(x).push(y);
}
Err(_) => {}
}
}
None => {}
}
}
self
}
}