NODE_HASH
ハッシュリテラルです。
{"aaa",3,"bbb",4} {"ccc"=>5,"ddd"=>6}
newarrayのハッシュ版命令「newhash」があるので、実はこれも、左から順に要素をスタックに積んで、newhashするだけなのです。重要なとこだけコンパイラのコードを抜粋すると、こうです。
case NODE_HASH:{ ... 略 ... compile_array(iseq, list, node->nd_head, Qfalse); size = OPERAND_AT(POP_ELEMENT(list), 0); ADD_SEQ(ret, list); ADD_INSN1(ret, nd_line(node), newhash, size);
compile_array して(最後のQfalseはリテラル最適化をしないという意味です)、最後の命令、つまり newarray を取り除いて、かわりに newhash を付け加えています。
奇数個しか要素のないハッシュリテラル {1,2,3} などは、構文解析の段階ではじかれていて、ここでは気にしていません。