@mbj I totally agree with checking the node type instead of the emitter class, and I also dislike making `save_without_quotes?` a part of public API just to make it available to the parent `HashPair` emitter.

But generally I don't understand why did you decide to implement the code generation with `buffer.append` mechanism if you want to keep the top-down architecture. Wouldn't it feel more natural if every emitter just knows how to collect all of it's children and dump everything altogether in a string? This encapsulates all the logic about a specific node inside a separate class (though in several cases like symbol keys in hashes the parent still needs to make decisions based on children type).