Open2
Go言語で作るインタプリタ

159ページ
書籍では env.Set(node.Name.Value, val)
の下の行の return val
が抜けている
case *ast.LetStatement:
// [...]
env.Set(node.Name.Value, val)
return val

153ページ
BlockStatementの途中でエラーが起こった時の考慮がない場合でも、テストが通ってしまっていたので、テストケースを追加して保護しておく。
5ではなくErrorを返すという仕様を表現するテストを書いた。
func TestErrorHandling(t *testing.T) {
tests := []struct {
input string
expectedMessage string
}{
// [...]
{
`
if (10 > 1) {
true + false;
return 5;
}
`,
"unknown operator: BOOLEAN + BOOLEAN",
},
}
// [...]
}