/
hooks_list.go
100 lines (85 loc) · 3.8 KB
/
hooks_list.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
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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
// File provided by the K Framework Go backend. Timestamp: 2019-08-28 22:25:14.706
package ieletestinginterpreter
import (
m "github.com/ElrondNetwork/elrond-vm/iele/elrond/node/iele-testing-kompiled/ieletestingmodel"
)
type listHooksType int
const listHooks listHooksType = 0
func (listHooksType) unit(lbl m.KLabel, sort m.Sort, config m.KReference, interpreter *Interpreter) (m.KReference, error) {
data := make([]m.KReference, 0)
return interpreter.Model.NewList(sort, m.CollectionFor(lbl), data), nil
}
func (listHooksType) element(e m.KReference, lbl m.KLabel, sort m.Sort, config m.KReference, interpreter *Interpreter) (m.KReference, error) {
data := make([]m.KReference, 1)
data[0] = e
return interpreter.Model.NewList(sort, m.CollectionFor(lbl), data), nil
}
func (listHooksType) concat(klist1 m.KReference, klist2 m.KReference, lbl m.KLabel, sort m.Sort, config m.KReference, interpreter *Interpreter) (m.KReference, error) {
l1, isList1 := interpreter.Model.GetListObject(klist1)
l2, isList2 := interpreter.Model.GetListObject(klist2)
if !isList1 || !isList2 {
return invalidArgsResult()
}
if len(l1.Data) == 0 {
return klist2, nil
}
if len(l2.Data) == 0 {
return klist1, nil
}
data := append(l1.Data, l2.Data...)
return interpreter.Model.NewList(sort, m.CollectionFor(lbl), data), nil
}
func (listHooksType) in(e m.KReference, klist m.KReference, lbl m.KLabel, sort m.Sort, config m.KReference, interpreter *Interpreter) (m.KReference, error) {
l, isList := interpreter.Model.GetListObject(klist)
if !isList {
return invalidArgsResult()
}
for _, x := range l.Data {
if x == e {
return m.BoolTrue, nil
}
}
return m.BoolFalse, nil
}
func (listHooksType) get(klist m.KReference, kindex m.KReference, lbl m.KLabel, sort m.Sort, config m.KReference, interpreter *Interpreter) (m.KReference, error) {
l, isList := interpreter.Model.GetListObject(klist)
index, isInt := interpreter.Model.GetInt(kindex)
if !isList || !isInt {
return invalidArgsResult()
}
if index < 0 {
index = len(l.Data) + index // count from the end, e.g. -1 is the last element
}
if index < 0 || index >= len(l.Data) {
return m.InternedBottom, nil
}
return l.Data[index], nil
}
func (listHooksType) listRange(klist m.KReference, start m.KReference, end m.KReference, lbl m.KLabel, sort m.Sort, config m.KReference, interpreter *Interpreter) (m.KReference, error) {
l, ok1 := interpreter.Model.GetListObject(klist)
si, ok2 := interpreter.Model.GetUint(start)
ei, ok3 := interpreter.Model.GetUint(end)
if !ok1 || !ok2 || !ok3 {
return invalidArgsResult()
}
return interpreter.Model.NewList(l.Sort, l.Label, l.Data[si:ei]), nil
}
func (listHooksType) size(klist m.KReference, lbl m.KLabel, sort m.Sort, config m.KReference, interpreter *Interpreter) (m.KReference, error) {
l, isList := interpreter.Model.GetListObject(klist)
if !isList {
return invalidArgsResult()
}
return interpreter.Model.FromInt(len(l.Data)), nil
}
func (listHooksType) make(c1 m.KReference, c2 m.KReference, lbl m.KLabel, sort m.Sort, config m.KReference, interpreter *Interpreter) (m.KReference, error) {
return m.NoResult, m.GetHookNotImplementedError()
}
func (listHooksType) fill(c1 m.KReference, c2 m.KReference, c3 m.KReference, c4 m.KReference, lbl m.KLabel, sort m.Sort, config m.KReference, interpreter *Interpreter) (m.KReference, error) {
return m.NoResult, m.GetHookNotImplementedError()
}
func (listHooksType) update(c1 m.KReference, c2 m.KReference, c3 m.KReference, lbl m.KLabel, sort m.Sort, config m.KReference, interpreter *Interpreter) (m.KReference, error) {
return m.NoResult, m.GetHookNotImplementedError()
}
func (listHooksType) updateAll(c1 m.KReference, c2 m.KReference, c3 m.KReference, lbl m.KLabel, sort m.Sort, config m.KReference, interpreter *Interpreter) (m.KReference, error) {
return m.NoResult, m.GetHookNotImplementedError()
}