-
Notifications
You must be signed in to change notification settings - Fork 13
/
numeric.go
46 lines (36 loc) · 1.18 KB
/
numeric.go
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
package frontend
type Variable struct {
id string
size int
typ varType
offset int
instr *IntInstr
// Amount of elements an array has
elements int
}
func NewNumeric(id string, offset int) *Variable {
return &Variable{id: id, typ: varNumTy, offset: offset, size: 32}
}
func NewArray(id string, offset, count int) *Variable {
return &Variable{id: id, typ: varArrTy, offset: offset, size: 32 * count, elements: count}
}
func (self *Variable) Id() string { return self.id }
func (self *Variable) Type() varType { return self.typ }
func (self *Variable) SetType(t varType) { self.typ = t }
func (self *Variable) Offset() int { return self.offset }
func (self *Variable) Size() int { return self.size }
func (self *Variable) SetSize(s int) { self.size = s }
func (self *Variable) Instr() *IntInstr { return self.instr }
func (self *Variable) SetInstr(instr *IntInstr) { self.instr = instr }
func IsNum(v Var) bool {
return v.Type() == varNumTy
}
func IsArray(v Var) bool {
return v.Type() == varArrTy
}
func VarLength(v Var) int {
return v.Size() / 32
}
func IsPtr(v Var) bool {
return v.Type() == varPtrTy
}