summaryrefslogtreecommitdiff
path: root/usr/austin/eval/value.go
diff options
context:
space:
mode:
Diffstat (limited to 'usr/austin/eval/value.go')
-rw-r--r--usr/austin/eval/value.go731
1 files changed, 0 insertions, 731 deletions
diff --git a/usr/austin/eval/value.go b/usr/austin/eval/value.go
deleted file mode 100644
index 1a64a6d96..000000000
--- a/usr/austin/eval/value.go
+++ /dev/null
@@ -1,731 +0,0 @@
-// Copyright 2009 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package eval
-
-import (
- "bignum";
- "fmt";
-)
-
-type Value interface {
- String() string;
- // Assign copies another value into this one. It should
- // assume that the other value satisfies the same specific
- // value interface (BoolValue, etc.), but must not assume
- // anything about its specific type.
- Assign(t *Thread, o Value);
-}
-
-type BoolValue interface {
- Value;
- Get(*Thread) bool;
- Set(*Thread, bool);
-}
-
-type UintValue interface {
- Value;
- Get(*Thread) uint64;
- Set(*Thread, uint64);
-}
-
-type IntValue interface {
- Value;
- Get(*Thread) int64;
- Set(*Thread, int64);
-}
-
-// TODO(austin) IdealIntValue and IdealFloatValue should not exist
-// because ideals are not l-values.
-type IdealIntValue interface {
- Value;
- Get() *bignum.Integer;
-}
-
-type FloatValue interface {
- Value;
- Get(*Thread) float64;
- Set(*Thread, float64);
-}
-
-type IdealFloatValue interface {
- Value;
- Get() *bignum.Rational;
-}
-
-type StringValue interface {
- Value;
- Get(*Thread) string;
- Set(*Thread, string);
-}
-
-type ArrayValue interface {
- Value;
- // TODO(austin) Get() is here for uniformity, but is
- // completely useless. If a lot of other types have similarly
- // useless Get methods, just special-case these uses.
- Get(*Thread) ArrayValue;
- Elem(*Thread, int64) Value;
- // Sub returns an ArrayValue backed by the same array that
- // starts from element i and has length len.
- Sub(i int64, len int64) ArrayValue;
-}
-
-type StructValue interface {
- Value;
- // TODO(austin) This is another useless Get()
- Get(*Thread) StructValue;
- Field(*Thread, int) Value;
-}
-
-type PtrValue interface {
- Value;
- Get(*Thread) Value;
- Set(*Thread, Value);
-}
-
-type Func interface {
- NewFrame() *Frame;
- Call(*Thread);
-}
-
-type FuncValue interface {
- Value;
- Get(*Thread) Func;
- Set(*Thread, Func);
-}
-
-type Slice struct {
- Base ArrayValue;
- Len, Cap int64;
-}
-
-type SliceValue interface {
- Value;
- Get(*Thread) Slice;
- Set(*Thread, Slice);
-}
-
-type Map interface {
- Len(*Thread) int64;
- // Retrieve an element from the map, returning nil if it does
- // not exist.
- Elem(t *Thread, key interface{}) Value;
- // Set an entry in the map. If val is nil, delete the entry.
- SetElem(t *Thread, key interface{}, val Value);
- // TODO(austin) Perhaps there should be an iterator interface instead.
- Iter(func(key interface{}, val Value) bool);
-}
-
-type MapValue interface {
- Value;
- Get(*Thread) Map;
- Set(*Thread, Map);
-}
-
-/*
- * Bool
- */
-
-type boolV bool
-
-func (v *boolV) String() string {
- return fmt.Sprint(*v);
-}
-
-func (v *boolV) Assign(t *Thread, o Value) {
- *v = boolV(o.(BoolValue).Get(t));
-}
-
-func (v *boolV) Get(*Thread) bool {
- return bool(*v);
-}
-
-func (v *boolV) Set(t *Thread, x bool) {
- *v = boolV(x);
-}
-
-/*
- * Uint
- */
-
-type uint8V uint8
-
-func (v *uint8V) String() string {
- return fmt.Sprint(*v);
-}
-
-func (v *uint8V) Assign(t *Thread, o Value) {
- *v = uint8V(o.(UintValue).Get(t));
-}
-
-func (v *uint8V) Get(*Thread) uint64 {
- return uint64(*v);
-}
-
-func (v *uint8V) Set(t *Thread, x uint64) {
- *v = uint8V(x);
-}
-
-type uint16V uint16
-
-func (v *uint16V) String() string {
- return fmt.Sprint(*v);
-}
-
-func (v *uint16V) Assign(t *Thread, o Value) {
- *v = uint16V(o.(UintValue).Get(t));
-}
-
-func (v *uint16V) Get(*Thread) uint64 {
- return uint64(*v);
-}
-
-func (v *uint16V) Set(t *Thread, x uint64) {
- *v = uint16V(x);
-}
-
-type uint32V uint32
-
-func (v *uint32V) String() string {
- return fmt.Sprint(*v);
-}
-
-func (v *uint32V) Assign(t *Thread, o Value) {
- *v = uint32V(o.(UintValue).Get(t));
-}
-
-func (v *uint32V) Get(*Thread) uint64 {
- return uint64(*v);
-}
-
-func (v *uint32V) Set(t *Thread, x uint64) {
- *v = uint32V(x);
-}
-
-type uint64V uint64
-
-func (v *uint64V) String() string {
- return fmt.Sprint(*v);
-}
-
-func (v *uint64V) Assign(t *Thread, o Value) {
- *v = uint64V(o.(UintValue).Get(t));
-}
-
-func (v *uint64V) Get(*Thread) uint64 {
- return uint64(*v);
-}
-
-func (v *uint64V) Set(t *Thread, x uint64) {
- *v = uint64V(x);
-}
-
-type uintV uint
-
-func (v *uintV) String() string {
- return fmt.Sprint(*v);
-}
-
-func (v *uintV) Assign(t *Thread, o Value) {
- *v = uintV(o.(UintValue).Get(t));
-}
-
-func (v *uintV) Get(*Thread) uint64 {
- return uint64(*v);
-}
-
-func (v *uintV) Set(t *Thread, x uint64) {
- *v = uintV(x);
-}
-
-type uintptrV uintptr
-
-func (v *uintptrV) String() string {
- return fmt.Sprint(*v);
-}
-
-func (v *uintptrV) Assign(t *Thread, o Value) {
- *v = uintptrV(o.(UintValue).Get(t));
-}
-
-func (v *uintptrV) Get(*Thread) uint64 {
- return uint64(*v);
-}
-
-func (v *uintptrV) Set(t *Thread, x uint64) {
- *v = uintptrV(x);
-}
-
-/*
- * Int
- */
-
-type int8V int8
-
-func (v *int8V) String() string {
- return fmt.Sprint(*v);
-}
-
-func (v *int8V) Assign(t *Thread, o Value) {
- *v = int8V(o.(IntValue).Get(t));
-}
-
-func (v *int8V) Get(*Thread) int64 {
- return int64(*v);
-}
-
-func (v *int8V) Set(t *Thread, x int64) {
- *v = int8V(x);
-}
-
-type int16V int16
-
-func (v *int16V) String() string {
- return fmt.Sprint(*v);
-}
-
-func (v *int16V) Assign(t *Thread, o Value) {
- *v = int16V(o.(IntValue).Get(t));
-}
-
-func (v *int16V) Get(*Thread) int64 {
- return int64(*v);
-}
-
-func (v *int16V) Set(t *Thread, x int64) {
- *v = int16V(x);
-}
-
-type int32V int32
-
-func (v *int32V) String() string {
- return fmt.Sprint(*v);
-}
-
-func (v *int32V) Assign(t *Thread, o Value) {
- *v = int32V(o.(IntValue).Get(t));
-}
-
-func (v *int32V) Get(*Thread) int64 {
- return int64(*v);
-}
-
-func (v *int32V) Set(t *Thread, x int64) {
- *v = int32V(x);
-}
-
-type int64V int64
-
-func (v *int64V) String() string {
- return fmt.Sprint(*v);
-}
-
-func (v *int64V) Assign(t *Thread, o Value) {
- *v = int64V(o.(IntValue).Get(t));
-}
-
-func (v *int64V) Get(*Thread) int64 {
- return int64(*v);
-}
-
-func (v *int64V) Set(t *Thread, x int64) {
- *v = int64V(x);
-}
-
-type intV int
-
-func (v *intV) String() string {
- return fmt.Sprint(*v);
-}
-
-func (v *intV) Assign(t *Thread, o Value) {
- *v = intV(o.(IntValue).Get(t));
-}
-
-func (v *intV) Get(*Thread) int64 {
- return int64(*v);
-}
-
-func (v *intV) Set(t *Thread, x int64) {
- *v = intV(x);
-}
-
-/*
- * Ideal int
- */
-
-type idealIntV struct {
- V *bignum.Integer;
-}
-
-func (v *idealIntV) String() string {
- return v.V.String();
-}
-
-func (v *idealIntV) Assign(t *Thread, o Value) {
- v.V = o.(IdealIntValue).Get();
-}
-
-func (v *idealIntV) Get() *bignum.Integer {
- return v.V;
-}
-
-/*
- * Float
- */
-
-type float32V float32
-
-func (v *float32V) String() string {
- return fmt.Sprint(*v);
-}
-
-func (v *float32V) Assign(t *Thread, o Value) {
- *v = float32V(o.(FloatValue).Get(t));
-}
-
-func (v *float32V) Get(*Thread) float64 {
- return float64(*v);
-}
-
-func (v *float32V) Set(t *Thread, x float64) {
- *v = float32V(x);
-}
-
-type float64V float64
-
-func (v *float64V) String() string {
- return fmt.Sprint(*v);
-}
-
-func (v *float64V) Assign(t *Thread, o Value) {
- *v = float64V(o.(FloatValue).Get(t));
-}
-
-func (v *float64V) Get(*Thread) float64 {
- return float64(*v);
-}
-
-func (v *float64V) Set(t *Thread, x float64) {
- *v = float64V(x);
-}
-
-type floatV float
-
-func (v *floatV) String() string {
- return fmt.Sprint(*v);
-}
-
-func (v *floatV) Assign(t *Thread, o Value) {
- *v = floatV(o.(FloatValue).Get(t));
-}
-
-func (v *floatV) Get(*Thread) float64 {
- return float64(*v);
-}
-
-func (v *floatV) Set(t *Thread, x float64) {
- *v = floatV(x);
-}
-
-/*
- * Ideal float
- */
-
-type idealFloatV struct {
- V *bignum.Rational;
-}
-
-func (v *idealFloatV) String() string {
- return ratToString(v.V);
-}
-
-func (v *idealFloatV) Assign(t *Thread, o Value) {
- v.V = o.(IdealFloatValue).Get();
-}
-
-func (v *idealFloatV) Get() *bignum.Rational {
- return v.V;
-}
-
-/*
- * String
- */
-
-type stringV string
-
-func (v *stringV) String() string {
- return fmt.Sprint(*v);
-}
-
-func (v *stringV) Assign(t *Thread, o Value) {
- *v = stringV(o.(StringValue).Get(t));
-}
-
-func (v *stringV) Get(*Thread) string {
- return string(*v);
-}
-
-func (v *stringV) Set(t *Thread, x string) {
- *v = stringV(x);
-}
-
-/*
- * Array
- */
-
-type arrayV []Value
-
-func (v *arrayV) String() string {
- res := "{";
- for i, e := range *v {
- if i > 0 {
- res += ", ";
- }
- res += e.String();
- }
- return res + "}";
-}
-
-func (v *arrayV) Assign(t *Thread, o Value) {
- oa := o.(ArrayValue);
- l := int64(len(*v));
- for i := int64(0); i < l; i++ {
- (*v)[i].Assign(t, oa.Elem(t, i));
- }
-}
-
-func (v *arrayV) Get(*Thread) ArrayValue {
- return v;
-}
-
-func (v *arrayV) Elem(t *Thread, i int64) Value {
- return (*v)[i];
-}
-
-func (v *arrayV) Sub(i int64, len int64) ArrayValue {
- res := (*v)[i:i+len];
- return &res;
-}
-
-/*
- * Struct
- */
-
-type structV []Value
-
-// TODO(austin) Should these methods (and arrayV's) be on structV
-// instead of *structV?
-func (v *structV) String() string {
- res := "{";
- for i, v := range *v {
- if i > 0 {
- res += ", ";
- }
- res += v.String();
- }
- return res + "}";
-}
-
-func (v *structV) Assign(t *Thread, o Value) {
- oa := o.(StructValue);
- l := len(*v);
- for i := 0; i < l; i++ {
- (*v)[i].Assign(t, oa.Field(t, i));
- }
-}
-
-func (v *structV) Get(*Thread) StructValue {
- return v;
-}
-
-func (v *structV) Field(t *Thread, i int) Value {
- return (*v)[i];
-}
-
-/*
- * Pointer
- */
-
-type ptrV struct {
- // nil if the pointer is nil
- target Value;
-}
-
-func (v *ptrV) String() string {
- if v.target == nil {
- return "<nil>";
- }
- return "&" + v.target.String();
-}
-
-func (v *ptrV) Assign(t *Thread, o Value) {
- v.target = o.(PtrValue).Get(t);
-}
-
-func (v *ptrV) Get(*Thread) Value {
- return v.target;
-}
-
-func (v *ptrV) Set(t *Thread, x Value) {
- v.target = x;
-}
-
-/*
- * Functions
- */
-
-type funcV struct {
- target Func;
-}
-
-func (v *funcV) String() string {
- // TODO(austin) Rob wants to see the definition
- return "func {...}";
-}
-
-func (v *funcV) Assign(t *Thread, o Value) {
- v.target = o.(FuncValue).Get(t);
-}
-
-func (v *funcV) Get(*Thread) Func {
- return v.target;
-}
-
-func (v *funcV) Set(t *Thread, x Func) {
- v.target = x;
-}
-
-/*
- * Slices
- */
-
-type sliceV struct {
- Slice;
-}
-
-func (v *sliceV) String() string {
- if v.Base == nil {
- return "<nil>";
- }
- return v.Base.Sub(0, v.Len).String();
-}
-
-func (v *sliceV) Assign(t *Thread, o Value) {
- v.Slice = o.(SliceValue).Get(t);
-}
-
-func (v *sliceV) Get(*Thread) Slice {
- return v.Slice;
-}
-
-func (v *sliceV) Set(t *Thread, x Slice) {
- v.Slice = x;
-}
-
-/*
- * Maps
- */
-
-type mapV struct {
- target Map;
-}
-
-func (v *mapV) String() string {
- if v.target == nil {
- return "<nil>";
- }
- res := "map[";
- i := 0;
- v.target.Iter(func(key interface{}, val Value) bool {
- if i > 0 {
- res += ", ";
- }
- i++;
- res += fmt.Sprint(key) + ":" + val.String();
- return true;
- });
- return res + "]";
-}
-
-func (v *mapV) Assign(t *Thread, o Value) {
- v.target = o.(MapValue).Get(t);
-}
-
-func (v *mapV) Get(*Thread) Map {
- return v.target;
-}
-
-func (v *mapV) Set(t *Thread, x Map) {
- v.target = x;
-}
-
-type evalMap map[interface{}] Value
-
-func (m evalMap) Len(t *Thread) int64 {
- return int64(len(m));
-}
-
-func (m evalMap) Elem(t *Thread, key interface{}) Value {
- if v, ok := m[key]; ok {
- return v;
- }
- return nil;
-}
-
-func (m evalMap) SetElem(t *Thread, key interface{}, val Value) {
- if val == nil {
- m[key] = nil, false;
- } else {
- m[key] = val;
- }
-}
-
-func (m evalMap) Iter(cb func(key interface{}, val Value) bool) {
- for k, v := range m {
- if !cb(k, v) {
- break;
- }
- }
-}
-
-/*
- * Multi-values
- */
-
-type multiV []Value
-
-func (v multiV) String() string {
- res := "(";
- for i, v := range v {
- if i > 0 {
- res += ", ";
- }
- res += v.String();
- }
- return res + ")";
-}
-
-func (v multiV) Assign(t *Thread, o Value) {
- omv := o.(multiV);
- for i := range v {
- v[i].Assign(t, omv[i]);
- }
-}
-
-/*
- * Universal constants
- */
-
-// TODO(austin) Nothing complains if I accidentally define init with
-// arguments. Is this intentional?
-func init() {
- s := universe;
-
- true := boolV(true);
- s.DefineConst("true", universePos, BoolType, &true);
- false := boolV(false);
- s.DefineConst("false", universePos, BoolType, &false);
-}