11package thread
22
3- import "fmt"
3+ import (
4+ "fmt"
5+ "math"
6+ )
47
58type OperandStack struct {
69 size int
@@ -13,8 +16,8 @@ func newOperandStack(maxStack uint) *OperandStack {
1316 }
1417}
1518
16- func (s * OperandStack ) PushInt (num int32 ) {
17- s .slots [s .size ].num = num
19+ func (s * OperandStack ) PushInt (val int32 ) {
20+ s .slots [s .size ].num = val
1821 s .size ++
1922}
2023
@@ -23,6 +26,39 @@ func (s *OperandStack) PopInt() int32 {
2326 return s .slots [s .size ].num
2427}
2528
29+ func (s * OperandStack ) PushLong (val int64 ) {
30+ s .slots [s .size ].num = int32 (val >> 32 ) // high
31+ s .slots [s .size + 1 ].num = int32 (val ) // low
32+ s .size += 2
33+ }
34+
35+ func (s * OperandStack ) PopLong () int64 {
36+ s .size -= 2
37+ high := s .slots [s .size ].num
38+ low := s .slots [s .size + 1 ].num
39+ return int64 (high )<< 32 | int64 (low )
40+ }
41+
42+ func (s * OperandStack ) PushFloat (val float32 ) {
43+ s .slots [s .size ].num = int32 (math .Float32bits (val ))
44+ s .size ++
45+ }
46+
47+ func (s * OperandStack ) PopFloat () float32 {
48+ s .size --
49+ return math .Float32frombits (uint32 (s .slots [s .size ].num ))
50+ }
51+
52+ func (s * OperandStack ) PushDouble (val float64 ) {
53+ s .slots [s .size ].num = int32 (math .Float64bits (val ))
54+ s .size ++
55+ }
56+
57+ func (s * OperandStack ) PopDouble () float64 {
58+ s .size --
59+ return math .Float64frombits (uint64 (s .slots [s .size ].num ))
60+ }
61+
2662func (s * OperandStack ) PushString (str string ) {
2763 s .slots [s .size ] = Slot {ref : & Object {str }}
2864 s .size ++
0 commit comments