-
Notifications
You must be signed in to change notification settings - Fork 1
/
pyfloat.go
69 lines (63 loc) · 1.99 KB
/
pyfloat.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
package vm
import (
"strconv"
)
type PyFloat struct {
val float64
Dict map[string]func(this *PyFloat, args []PyObject) PyObject
}
func NewPyFloat(val float64) *PyFloat {
dict := make(map[string]func(this *PyFloat, args []PyObject) PyObject)
dict["__add__"] = func(this *PyFloat, args []PyObject) PyObject {
return NewPyFloat(this.val + args[0].(*PyFloat).val)
}
dict["__sub__"] = func(this *PyFloat, args []PyObject) PyObject {
return NewPyFloat(this.val - args[0].(*PyFloat).val)
}
dict["__mul__"] = func(this *PyFloat, args []PyObject) PyObject {
return NewPyFloat(this.val * args[0].(*PyFloat).val)
}
dict["__floordiv__"] = func(this *PyFloat, args []PyObject) PyObject {
return NewPyFloat(this.val / args[0].(*PyFloat).val)
}
dict["__eq__"] = func(this *PyFloat, args []PyObject) PyObject {
return NewPyBool(this.val == args[0].(*PyFloat).val)
}
dict["__lt__"] = func(this *PyFloat, args []PyObject) PyObject {
return NewPyBool(this.val < args[0].(*PyFloat).val)
}
dict["__gt__"] = func(this *PyFloat, args []PyObject) PyObject {
return NewPyBool(this.val > args[0].(*PyFloat).val)
}
dict["__le__"] = func(this *PyFloat, args []PyObject) PyObject {
return NewPyBool(this.val <= args[0].(*PyFloat).val)
}
dict["__ge__"] = func(this *PyFloat, args []PyObject) PyObject {
return NewPyBool(this.val >= args[0].(*PyFloat).val)
}
dict["__float__"] = func(this *PyFloat, args []PyObject) PyObject {
return this
}
dict["__int__"] = func(this *PyFloat, args []PyObject) PyObject {
return NewPyInt(int(this.val))
}
dict["__str__"] = func(this *PyFloat, args []PyObject) PyObject {
return NewPyStr(this.toString())
}
dict["__type__"] = func(this *PyFloat, args []PyObject) PyObject {
return this.getType()
}
return &PyFloat{
val: val,
Dict: dict,
}
}
func (this *PyFloat) getType() *PyType {
return PyTypes[PyFloatType]
}
func (this *PyFloat) toString() string {
return strconv.FormatFloat(this.val, 'f', -1, 64)
}
func (this *PyFloat) getVal() float64 {
return this.val
}