diff options
| author | Mel <einebeere@gmail.com> | 2022-05-20 00:01:11 +0200 |
|---|---|---|
| committer | Mel <einebeere@gmail.com> | 2022-05-20 00:01:11 +0200 |
| commit | fe93d5c015e8e2c883d2c1e74f2e5ce071256cb5 (patch) | |
| tree | 2d153d41fb5799828c8e8ebd8dc1158ddac9e9ac /pkg/lang/vm/value/data.go | |
| parent | bfa32b8b880b42eda6007ba81f8fbbd340009322 (diff) | |
| download | jinx-fe93d5c015e8e2c883d2c1e74f2e5ce071256cb5.tar.zst jinx-fe93d5c015e8e2c883d2c1e74f2e5ce071256cb5.zip | |
Access methods for VM data and stop Array copying
Diffstat (limited to 'pkg/lang/vm/value/data.go')
| -rw-r--r-- | pkg/lang/vm/value/data.go | 73 |
1 files changed, 72 insertions, 1 deletions
diff --git a/pkg/lang/vm/value/data.go b/pkg/lang/vm/value/data.go index 1d63d32..6365f45 100644 --- a/pkg/lang/vm/value/data.go +++ b/pkg/lang/vm/value/data.go @@ -1,14 +1,85 @@ package value +import ( + "fmt" + "strconv" + "strings" +) + +type Data fmt.Stringer + type IntData int64 +func (i IntData) Get() int64 { + return int64(i) +} + +func (i IntData) String() string { + return strconv.FormatInt(int64(i), 10) +} + type FloatData float64 +func (f FloatData) Get() float64 { + return float64(f) +} + +func (f FloatData) String() string { + return strconv.FormatFloat(float64(f), 'f', -1, 64) +} + type StringData string +func (s StringData) Get() string { + return string(s) +} + +func (s StringData) String() string { + return "\"" + string(s) + "\"" +} + type BoolData bool -type ArrayData []Value +func (b BoolData) Get() bool { + return bool(b) +} + +func (b BoolData) String() string { + return strconv.FormatBool(bool(b)) +} + +type ArrayData struct { + arr *[]Value +} + +func (a ArrayData) Get() *[]Value { + return a.arr +} + +func (a ArrayData) String() string { + builder := strings.Builder{} + builder.WriteString("[") + for i, v := range *a.arr { + if i > 0 { + builder.WriteString(", ") + } + builder.WriteString(v.Data().String()) + } + builder.WriteString("]") + return builder.String() +} + +func (a ArrayData) Len() int { + return len(*a.arr) +} + +func (a ArrayData) At(i int) Value { + return (*a.arr)[i] +} + +func (a ArrayData) Push(v Value) { + *a.arr = append(*a.arr, v) +} type NullData struct{} |
