import "exp/eval"

このパッケージは、初期段階のGo言語インタプリタです。簡単なGoプログラムを実行できますが、インタフェース値やパッケージは未実装です。

パッケージファイル

abort.go bridge.go compiler.go expr.go expr1.go func.go scope.go stmt.go type.go typec.go value.go world.go

変数

var (
    Uint8Type  = universe.DefineType("uint8", universePos, &uintType{commonType{}, 8, false, "uint8"})
    Uint16Type = universe.DefineType("uint16", universePos, &uintType{commonType{}, 16, false, "uint16"})
    Uint32Type = universe.DefineType("uint32", universePos, &uintType{commonType{}, 32, false, "uint32"})
    Uint64Type = universe.DefineType("uint64", universePos, &uintType{commonType{}, 64, false, "uint64"})

    UintType    = universe.DefineType("uint", universePos, &uintType{commonType{}, 0, false, "uint"})
    UintptrType = universe.DefineType("uintptr", universePos, &uintType{commonType{}, 0, true, "uintptr"})
)
var (
    Int8Type  = universe.DefineType("int8", universePos, &intType{commonType{}, 8, "int8"})
    Int16Type = universe.DefineType("int16", universePos, &intType{commonType{}, 16, "int16"})
    Int32Type = universe.DefineType("int32", universePos, &intType{commonType{}, 32, "int32"})
    Int64Type = universe.DefineType("int64", universePos, &intType{commonType{}, 64, "int64"})

    IntType = universe.DefineType("int", universePos, &intType{commonType{}, 0, "int"})
)
var (
    Float32Type = universe.DefineType("float32", universePos, &floatType{commonType{}, 32, "float32"})
    Float64Type = universe.DefineType("float64", universePos, &floatType{commonType{}, 64, "float64"})
    FloatType   = universe.DefineType("float", universePos, &floatType{commonType{}, 0, "float"})
)
var BoolType = universe.DefineType("bool", universePos, &boolType{})
var StringType = universe.DefineType("string", universePos, &stringType{})

ArrayType型

type ArrayType struct {
    Len  int64
    Elem Type
    // contains unexported fields
}

NewArrayType関数

func NewArrayType(len int64, elem Type) *ArrayType

(*ArrayType) String関数

func (t *ArrayType) String() string

(*ArrayType) Zero関数

func (t *ArrayType) Zero() Value

ArrayValue型

type ArrayValue interface {
    Value
    // TODO(austin) Get()は、一貫性のためにここに記述されていますが、
    // 全く役に立ちません。 他の多くの型でもGetメソッドが役立たないなら、
    // このメソッドを使う方が特殊ケースとなります。
    Get(*Thread) ArrayValue
    Elem(*Thread, int64) Value
    // Subは、同一の配列を基に、i番目の要素で始まり、
    // lenの長さを持つArrayValueを返します。
    Sub(i int64, len int64) ArrayValue
}

BoolValue型

type BoolValue interface {
    Value
    Get(*Thread) bool
    Set(*Thread, bool)
}

BoundedType型

type BoundedType interface {
    Type
    // contains unexported methods
}

Code型

type Code interface {
    // Runの戻り値の型。Runがnilを返すときはnil。
    Type() Type

    // Runは、コードを実行します。このコードが、値を持つ式であれば、
    // その値を返します。それ以外はnilを変えします。
    Run() (Value, os.Error)
}

Constant型

type Constant struct {
    ConstPos token.Pos
    Type     Type
    Value    Value
}

(*Constant) Pos関数

func (c *Constant) Pos() token.Pos

Def型

*Variable、*Constant、Type型に成り得る定義です。

type Def interface {
    Pos() token.Pos
}

DivByZeroError型

type DivByZeroError struct{}

(DivByZeroError) String関数

func (DivByZeroError) String() string

FloatValue型

type FloatValue interface {
    Value
    Get(*Thread) float64
    Set(*Thread, float64)
}

Frame型

type Frame struct {
    Outer *Frame
    Vars  []Value
}

(*Frame) Get関数

func (f *Frame) Get(level int, index int) Value

Func型

type Func interface {
    NewFrame() *Frame
    Call(*Thread)
}

FuncDecl型

type FuncDecl struct {
    Type *FuncType
    Name *ast.Ident // 関数リテラルのときnil
    // この関数が可変引数を持つときは、InNamesはType.Inより
    // ひとつ長くなります。
    InNames  []*ast.Ident
    OutNames []*ast.Ident
}

(*FuncDecl) String関数

func (t *FuncDecl) String() string

FuncType型

type FuncType struct {

    // TODO(austin) メソッドをレシーバ型と分離すべきか?
    In       []Type
    Variadic bool
    Out      []Type
    // contains unexported fields
}

FuncFromNativeTyped関数

func FuncFromNativeTyped(fn func(*Thread, []Value, []Value), t interface{}) (*FuncType, FuncValue)

FuncFromNativeTypedは、FuncFromNativeとほぼ同じですが、リフレクションを使って関数のポインタから関数型を作成します。一般的に、作成しようとする関数型は、その関数と同じシグネチャを持つnilポインタとして渡します。

NewFuncType関数

func NewFuncType(in []Type, variadic bool, out []Type) *FuncType

(*FuncType) String関数

func (t *FuncType) String() string

(*FuncType) Zero関数

func (t *FuncType) Zero() Value

FuncValue型

type FuncValue interface {
    Value
    Get(*Thread) Func
    Set(*Thread, Func)
}

FuncFromNative関数

func FuncFromNative(fn func(*Thread, []Value, []Value), t *FuncType) FuncValue

FuncFromNativeは、入出と出力パラメータにインタプリタのValue型のスライスを取るネィティブな関数から、インタプリタ関数を作成します。関数のパラメータの順番は無効化されます。

IMethod型

type IMethod struct {
    Name string
    Type *FuncType
}

IdealFloatValue型

type IdealFloatValue interface {
    Value
    Get() *big.Rat
}

IdealIntValue型

TODO(austin) IdealIntValueとIdealFloatValueは、idealsが左辺値ではないため存在してはなりません。

type IdealIntValue interface {
    Value
    Get() *big.Int
}

IndexError型

type IndexError struct {
    Idx, Len int64
}

(IndexError) String関数

func (e IndexError) String() string

IntValue型

type IntValue interface {
    Value
    Get(*Thread) int64
    Set(*Thread, int64)
}

Interface型

type Interface struct {
    Type  Type
    Value Value
}

InterfaceType型

type InterfaceType struct {
    // contains unexported fields
}

NewInterfaceType関数

func NewInterfaceType(methods []IMethod, embeds []*InterfaceType) *InterfaceType

(*InterfaceType) String関数

func (t *InterfaceType) String() string

(*InterfaceType) Zero関数

func (t *InterfaceType) Zero() Value

InterfaceValue型

type InterfaceValue interface {
    Value
    Get(*Thread) Interface
    Set(*Thread, Interface)
}

KeyError型

type KeyError struct {
    Key interface{}
}

(KeyError) String関数

func (e KeyError) String() string

Map型

type Map interface {
    Len(*Thread) int64
    // マップから要素を取り出します。
    // 要素が存在しないときは、nilを返します。
    Elem(t *Thread, key interface{}) Value
    // マップにエントリを登録します。valがnilのとき、エントリを削除します。
    SetElem(t *Thread, key interface{}, val Value)
    // TODO(austin)  これの代わりにイテレータインタフェースがあるべきではないか。
    Iter(func(key interface{}, val Value) bool)
}

MapType型

type MapType struct {
    Key  Type
    Elem Type
    // contains unexported fields
}

NewMapType関数

func NewMapType(key Type, elem Type) *MapType

(*MapType) String関数

func (t *MapType) String() string

(*MapType) Zero関数

func (t *MapType) Zero() Value

MapValue型

type MapValue interface {
    Value
    Get(*Thread) Map
    Set(*Thread, Map)
}

Method型

type Method struct {
    // contains unexported fields
}

MultiType型

MultiTypeは、複数の値(2つの型)の式を使う特殊な型です。通常、言語内からはアクセスできません。

type MultiType struct {
    Elems []Type
    // contains unexported fields
}

NewMultiType関数

func NewMultiType(elems []Type) *MultiType

(*MultiType) String関数

func (t *MultiType) String() string

(*MultiType) Zero関数

func (t *MultiType) Zero() Value

NamedType型

type NamedType struct {
    NamePos token.Pos
    Name    string
    // 内部の型。incompleteがtrueのときはnilです。
    // incompleteがfalseで、かつこの値もnilのとき、
    // これはエラーを表すプレースフォルダ型です。
    Def Type
    // contains unexported fields
}

NewNamedType関数

func NewNamedType(name string) *NamedType

TODO(austin) この関数は、デバッガのリモート型パーサー用に一時的に必要です。これは、block.DefineTypeにだけ適用されるべきです。

(*NamedType) Complete関数

func (t *NamedType) Complete(def Type)

(*NamedType) Pos関数

func (t *NamedType) Pos() token.Pos

(*NamedType) String関数

func (t *NamedType) String() string

(*NamedType) Zero関数

func (t *NamedType) Zero() Value

NegativeCapacityError型

type NegativeCapacityError struct {
    Len int64
}

(NegativeCapacityError) String関数

func (e NegativeCapacityError) String() string

NegativeLengthError型

type NegativeLengthError struct {
    Len int64
}

(NegativeLengthError) String関数

func (e NegativeLengthError) String() string

NilPointerError型

type NilPointerError struct{}

(NilPointerError) String関数

func (NilPointerError) String() string

PtrType型

type PtrType struct {
    Elem Type
    // contains unexported fields
}

NewPtrType関数

func NewPtrType(elem Type) *PtrType

(*PtrType) String関数

func (t *PtrType) String() string

(*PtrType) Zero関数

func (t *PtrType) Zero() Value

PtrValue型

type PtrValue interface {
    Value
    Get(*Thread) Value
    Set(*Thread, Value)
}

RedefinitionError型

type RedefinitionError struct {
    Name string
    Prev Def
}

(*RedefinitionError) String関数

func (e *RedefinitionError) String() string

Scope型

Scopeは、コンパイル時のFrameともいえます。ブロックのサブツリーをいくつか持っています。

type Scope struct {
    // contains unexported fields
}

(*Scope) NewFrame関数

func (s *Scope) NewFrame(outer *Frame) *Frame

Slice型

type Slice struct {
    Base     ArrayValue
    Len, Cap int64
}

SliceError型

type SliceError struct {
    Lo, Hi, Cap int64
}

(SliceError) String関数

func (e SliceError) String() string

SliceType型

type SliceType struct {
    Elem Type
    // contains unexported fields
}

NewSliceType関数

func NewSliceType(elem Type) *SliceType

(*SliceType) String関数

func (t *SliceType) String() string

(*SliceType) Zero関数

func (t *SliceType) Zero() Value

SliceValue型

type SliceValue interface {
    Value
    Get(*Thread) Slice
    Set(*Thread, Slice)
}

StringValue型

type StringValue interface {
    Value
    Get(*Thread) string
    Set(*Thread, string)
}

StructField型

type StructField struct {
    Name      string
    Type      Type
    Anonymous bool
}

StructType型

type StructType struct {
    Elems []StructField
    // contains unexported fields
}

NewStructType関数

func NewStructType(fields []StructField) *StructType

(*StructType) String関数

func (t *StructType) String() string

(*StructType) Zero関数

func (t *StructType) Zero() Value

StructValue型

type StructValue interface {
    Value
    // TODO(austin) これも、同様に役に立たないGet()です。
    Get(*Thread) StructValue
    Field(*Thread, int) Value
}

Thread型

type Thread struct {
    // contains unexported fields
}

(*Thread) Abort関数

func (t *Thread) Abort(err os.Error)

Abortは、このThreadのカレントの処理を中断します。最も内側で実行したTryがこのerrを返します。

(*Thread) Try関数

func (t *Thread) Try(f func(t *Thread)) os.Error

Tryは、処理を実行します。処理がAbortしたときは、この関数はAbortに渡されたエラーを返します。

Type型

type Type interface {

    // Zeroは、この型の新しいゼロ値を返します。
    Zero() Value
    // Stringは、この型の文字列表現を返します。
    String() string
    // この型が定義された位置を返します。(返せるときだけ)
    Pos() token.Pos
    // contains unexported methods
}
var EmptyType Type = NewMultiType([]Type{})
var IdealFloatType Type = &idealFloatType{}
var IdealIntType Type = &idealIntType{}

TypeFromNative関数

func TypeFromNative(t reflect.Type) Type

TypeFromNativeは、通常のGo言語の型を対応するインタプリタ型に変換します。

TypeOfNative関数

func TypeOfNative(v interface{}) Type

TypeOfNativeは、通常のGo言語の値に対応する、インタプリタ型を返します。

UintValue型

type UintValue interface {
    Value
    Get(*Thread) uint64
    Set(*Thread, uint64)
}

Value型

type Value interface {
    String() string
    // Assignは、他のValueをここにコピーします。
    // この関数は、その他のValueが同一のValueインタフェース
    // (BoolValueなど)を満たしているとみなしますが、
    // 型については感知しません。
    Assign(t *Thread, o Value)
}

Variable型

type Variable struct {
    VarPos token.Pos
    // Frame構造体内の変数のインデックス
    Index int
    // この変数の静的な型
    Type Type
    // この変数の値。 これはScope.NewFrameでのみ使用されます。
    // そのため、これはグローバルスコープで使われます。
    // 関数スコープで使うことはできません。
    Init Value
}

(*Variable) Pos関数

func (v *Variable) Pos() token.Pos

World型

type World struct {
    // contains unexported fields
}

NewWorld関数

func NewWorld() *World

(*World) Compile関数

func (w *World) Compile(fset *token.FileSet, text string) (Code, os.Error)

(*World) CompileDeclList関数

func (w *World) CompileDeclList(fset *token.FileSet, decls []ast.Decl) (Code, os.Error)

(*World) CompileExpr関数

func (w *World) CompileExpr(fset *token.FileSet, e ast.Expr) (Code, os.Error)

(*World) CompileStmtList関数

func (w *World) CompileStmtList(fset *token.FileSet, stmts []ast.Stmt) (Code, os.Error)

(*World) DefineConst関数

func (w *World) DefineConst(name string, t Type, val Value) os.Error

(*World) DefineVar関数

func (w *World) DefineVar(name string, t Type, val Value) os.Error