演算子によって、一項か二項か扱いが違う?

インクリメント演算子を実装してみて、気づいたけれど、

hoge ++ moge

と、しても moge が引数にならなくなったようだ。
ただ、これは演算子に依るようで、右辺(?) が引数扱いになるものもあるみたい。

m := method(
  v,
  "call message arguments => " print
  call message arguments println

  "call message next => " print
  call message next println

  "v => " print
  v println
)

Number % := getSlot("m")
Number %% := getSlot("m")
Number @ := getSlot("m")
Number @@ := getSlot("m")

"<<% のばやい>>" println
  (1 % 2) println

"<<%% のばやい>>" println
  (1 %% 2) println

"<<@ のばやい>>" println
  (1 @ 2) println

"<<@@ のばやい>>" println
  (1 @@ 2) println

このコードの結果

<<% のばやい>>
call message arguments => list(2)
call message next => nil
v => 2
2
<<%% のばやい>>
call message arguments => list()
call message next => 2
v => nil
2
<<@ のばやい>>
call message arguments => list(2)
call message next => nil
v => 2
2
<<@@ のばやい>>
call message arguments => list(2)
call message next => nil
v => 2
2

io のバージョンは、20090105

正確な仕様は?

この辺りはどこかにドキュメントされているのかな?