about summary refs log tree commit diff
path: root/pkg/lang/vm/value/data.go
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/lang/vm/value/data.go')
-rw-r--r--pkg/lang/vm/value/data.go73
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{}