偽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で警告がでなかったりとか.