mirror of
https://github.com/tinygo-org/tinygo.git
synced 2026-08-17 19:23:25 +00:00
Reorder Program.interpret cases
This commit is contained in:
+16
-16
@@ -102,22 +102,6 @@ func (p *Program) interpret(instrs []ssa.Instruction) (int, error) {
|
|||||||
} else {
|
} else {
|
||||||
return i, errors.New("todo: init IndexAddr index: " + instr.Index.String())
|
return i, errors.New("todo: init IndexAddr index: " + instr.Index.String())
|
||||||
}
|
}
|
||||||
case *ssa.UnOp:
|
|
||||||
if instr.Op != token.MUL || instr.CommaOk {
|
|
||||||
return i, errors.New("init: unknown unop: " + instr.String())
|
|
||||||
}
|
|
||||||
valPtr, err := p.getValue(instr.X, locals)
|
|
||||||
if err != nil {
|
|
||||||
return i, err
|
|
||||||
}
|
|
||||||
switch valPtr := valPtr.(type) {
|
|
||||||
case *GlobalValue:
|
|
||||||
locals[instr] = valPtr.Global.initializer
|
|
||||||
case *PointerValue:
|
|
||||||
locals[instr] = *valPtr.Elem
|
|
||||||
default:
|
|
||||||
panic("expected a pointer")
|
|
||||||
}
|
|
||||||
case *ssa.MakeInterface:
|
case *ssa.MakeInterface:
|
||||||
locals[instr] = &InterfaceValue{instr.X.Type(), locals[instr.X]}
|
locals[instr] = &InterfaceValue{instr.X.Type(), locals[instr.X]}
|
||||||
case *ssa.MakeMap:
|
case *ssa.MakeMap:
|
||||||
@@ -177,6 +161,22 @@ func (p *Program) interpret(instrs []ssa.Instruction) (int, error) {
|
|||||||
} else {
|
} else {
|
||||||
return i, errors.New("todo: init Store: " + instr.String())
|
return i, errors.New("todo: init Store: " + instr.String())
|
||||||
}
|
}
|
||||||
|
case *ssa.UnOp:
|
||||||
|
if instr.Op != token.MUL || instr.CommaOk {
|
||||||
|
return i, errors.New("init: unknown unop: " + instr.String())
|
||||||
|
}
|
||||||
|
valPtr, err := p.getValue(instr.X, locals)
|
||||||
|
if err != nil {
|
||||||
|
return i, err
|
||||||
|
}
|
||||||
|
switch valPtr := valPtr.(type) {
|
||||||
|
case *GlobalValue:
|
||||||
|
locals[instr] = valPtr.Global.initializer
|
||||||
|
case *PointerValue:
|
||||||
|
locals[instr] = *valPtr.Elem
|
||||||
|
default:
|
||||||
|
panic("expected a pointer")
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
return i, nil
|
return i, nil
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user