Reorder Program.interpret cases
Этот коммит содержится в:
родитель
75477eb14e
коммит
25344bc08f
1 изменённых файлов: 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
|
||||||
}
|
}
|
||||||
|
|
Загрузка…
Создание таблицы
Сослаться в новой задаче