偽lisp
パース部分がc++のソースなのに,微妙にlispっぽくなってかっこいい.
ソース中では
Expression *lhs = CreateIntLiteral(1); ret = AddBiInst( rhs, Compose( op, lhs)); ret = AddBiInst( ret, CreateOp2( codeStore, type, index));
みたいなコードになってるけど,合体させれば,
ret = AddBiInst( AddBiInst( rhs , Compose( op, CreateIntLiteral(1))) , CreateOp2( codeStore, type, index));
と,(ほぼ)等価だし.
一部,副作用のある関数が混じってて,評価順序の影響を受けるので,無理やりくっつけると意図しない挙動になった.たとえば,未初期化の変数iをi = i;って書いたとき,下のように全部つなげて記述したら,左のiを先に評価してしまい,右のiで警告がでなかったりとか.