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",
        },
    }

    // [...]
}