diff --git a/ir/interpreter.go b/ir/interpreter.go index 078ad1ac..ac95a92c 100644 --- a/ir/interpreter.go +++ b/ir/interpreter.go @@ -206,7 +206,7 @@ func (p *Program) interpret(instrs []ssa.Instruction, paramKeys []*ssa.Parameter switch typeTo := instr.Type().Underlying().(type) { case *types.Basic: if typeTo.Kind() == types.String { - return i, errors.New("todo: init: cannot convert string") + return i, nil } if _, ok := typeFrom.(*types.Pointer); ok && typeTo.Kind() == types.UnsafePointer { @@ -217,10 +217,10 @@ func (p *Program) interpret(instrs []ssa.Instruction, paramKeys []*ssa.Parameter } else if typeFrom.Info()&types.IsInteger != 0 && typeTo.Info()&types.IsInteger != 0 { locals[instr] = &ConstValue{Expr: ssa.NewConst(x.(*ConstValue).Expr.Value, typeTo)} } else { - return i, errors.New("todo: init: unknown basic-to-basic convert: " + instr.String()) + return i, nil } } else { - return i, errors.New("todo: init: unknown basic convert: " + instr.String()) + return i, nil } case *types.Pointer: if typeFrom, ok := typeFrom.(*types.Basic); ok && typeFrom.Kind() == types.UnsafePointer { @@ -229,7 +229,7 @@ func (p *Program) interpret(instrs []ssa.Instruction, paramKeys []*ssa.Parameter panic("expected unsafe pointer conversion") } default: - return i, errors.New("todo: init: unknown convert: " + instr.String()) + return i, nil } case *ssa.DebugRef: // ignore @@ -384,7 +384,6 @@ func canInterpret(callee *ssa.Function) bool { // above. case *ssa.Alloc: case *ssa.ChangeType: - case *ssa.Convert: case *ssa.DebugRef: case *ssa.Extract: case *ssa.FieldAddr: diff --git a/testdata/init.go b/testdata/init.go index c99d8d9c..f90c1192 100644 --- a/testdata/init.go +++ b/testdata/init.go @@ -6,4 +6,26 @@ func init() { func main() { println("main") + println("v1:", v1) + println("v2:", v2.x, v2.y) + println("v3:", len(v3), cap(v3), v3[0], v3[3]) + println("v4:", len(v4), v4 == nil) + println("v5:", len(v5), v5 == nil) + println("v6:", v6) } + +type ( + t2 struct { + x int + y int + } +) + +var ( + v1 = 3 + v2 = t2{2, 5} + v3 = []int{2, 3, 5, 7} + v4 map[string]int + v5 = map[string]int{} + v6 = float64(v1) < 2.6 +) diff --git a/testdata/init.txt b/testdata/init.txt index 9ac7e015..18d99b82 100644 --- a/testdata/init.txt +++ b/testdata/init.txt @@ -1,2 +1,8 @@ init main +v1: 3 +v2: 2 5 +v3: 4 4 2 7 +v4: 0 true +v5: 0 false +v6: false