func (cp *ConstPool) GetSym(index int) lisp.Symbol {
	return cp.vals[index].(lisp.Symbol)
}
GetSym is like Get, but result is type asserted to lisp.Symbol.
package dt
import (
	"bytes"
	"magic_pkg/emacs/lisp"
	"strconv"
)
type ConstPool struct {
	vals []interface{}
}
func (cp *ConstPool) Clear() {
	cp.vals = cp.vals[:0]
}
func (cp *ConstPool) InsertInt(x int64) int {
	for i, val := range cp.vals {
		if val == x {
			return i
		}
	}
	cp.vals = append(cp.vals, x)
	return len(cp.vals) - 1
}
func (cp *ConstPool) InsertFloat(x float64) int {
	for i, val := range cp.vals {
		if val == x {
			return i
		}
	}
	cp.vals = append(cp.vals, x)
	return len(cp.vals) - 1
}
func (cp *ConstPool) InsertString(x string) int {
	for i, val := range cp.vals {
		if val == x {
			return i
		}
	}
	cp.vals = append(cp.vals, x)
	return len(cp.vals) - 1
}
func (cp *ConstPool) InsertSym(x string) int {
	sym := lisp.Symbol(x)
	for i, val := range cp.vals {
		if val == sym {
			return i
		}
	}
	cp.vals = append(cp.vals, sym)
	return len(cp.vals) - 1
}
func (cp *ConstPool) Get(index uint16) interface{} {
	return cp.vals[index]
}
func (cp *ConstPool) GetInt(index uint16) int64 {
	return cp.vals[index].(int64)
}
func (cp *ConstPool) GetFloat(index uint16) float64 {
	return cp.vals[index].(float64)
}
func (cp *ConstPool) GetString(index uint16) string {
	return cp.vals[index].(string)
}