aboutsummaryrefslogtreecommitdiff
path: root/pkg/lang/vm
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/lang/vm')
-rw-r--r--pkg/lang/vm/exec.go34
1 files changed, 21 insertions, 13 deletions
diff --git a/pkg/lang/vm/exec.go b/pkg/lang/vm/exec.go
index 241e5f8..f50d60b 100644
--- a/pkg/lang/vm/exec.go
+++ b/pkg/lang/vm/exec.go
@@ -45,29 +45,33 @@ func (vm *VM) execAdd() {
switch x.Type().Kind {
case value.IntType:
- xv := x.Data().(int64)
+ xv := int64(x.Data().(value.IntData))
switch y.Type().Kind {
case value.IntType:
- res = value.NewInt(xv + y.Data().(int64))
+ yv := int64(y.Data().(value.IntData))
+ res = value.NewInt(xv + yv)
case value.FloatType:
- res = value.NewFloat(float64(xv) + y.Data().(float64))
+ yv := float64(y.Data().(value.FloatData))
+ res = value.NewFloat(float64(xv) + yv)
default:
panic("invalid operand types")
}
case value.FloatType:
- xv := x.Data().(float64)
+ xv := float64(x.Data().(value.FloatData))
switch y.Type().Kind {
case value.IntType:
- res = value.NewFloat(xv + float64(y.Data().(int64)))
+ yv := float64(y.Data().(value.IntData))
+ res = value.NewFloat(xv + yv)
case value.FloatType:
- res = value.NewFloat(xv + y.Data().(float64))
+ yv := float64(y.Data().(value.FloatData))
+ res = value.NewFloat(xv + yv)
default:
panic("invalid operand types")
}
case value.StringType:
switch y.Type().Kind {
case value.StringType:
- res = value.NewString(x.Data().(string) + y.Data().(string))
+ res = value.NewString(string(x.Data().(value.StringData)) + string(y.Data().(value.StringData)))
default:
panic("invalid operand types")
}
@@ -88,22 +92,26 @@ func (vm *VM) execSub() {
switch x.Type().Kind {
case value.IntType:
- xv := x.Data().(int64)
+ xv := int64(x.Data().(value.IntData))
switch y.Type().Kind {
case value.IntType:
- res = value.NewInt(xv - y.Data().(int64))
+ yv := int64(y.Data().(value.IntData))
+ res = value.NewInt(xv - yv)
case value.FloatType:
- res = value.NewFloat(float64(xv) - y.Data().(float64))
+ yv := float64(y.Data().(value.FloatData))
+ res = value.NewFloat(float64(xv) - yv)
default:
panic("invalid operand types")
}
case value.FloatType:
- xv := x.Data().(float64)
+ xv := float64(x.Data().(value.FloatData))
switch y.Type().Kind {
case value.IntType:
- res = value.NewFloat(xv - float64(y.Data().(int64)))
+ yv := float64(y.Data().(value.IntData))
+ res = value.NewFloat(xv - yv)
case value.FloatType:
- res = value.NewFloat(xv - y.Data().(float64))
+ yv := float64(y.Data().(value.FloatData))
+ res = value.NewFloat(xv - yv)
default:
panic("invalid operand types")
}