Concurrent Clean : CleanJ : StdChar
StdBool, StdRealも移植完了。
ただし、StdCharは、コンパイルは成功したものの、結果が合わない。
Javaの文字型とCharの文字型の内部形式が違うことに起因している可能性もあり、どのように扱うかを考慮中。
-
-
- -
-
結局、何が原因かわかりました。
Cleanの内部では、Char型とInt型を同じものとして扱っているようです。たとえば、
'e' + 'f' - 'a'
は
pushC 'f' pushC 'e' addI ItoC pushC 'a' push_b 1 update_b 1 2 update_b 0 1 pop_b 1 subI ItoC fillC_b 0 0 pop_b 1
というように変換されているみたい。pushCはChar型の値をスタックに積む命令で、addIはInt型の値を足し合わせる命令です。
とりあえず、全てのChar型の値に関するスタック操作は、Int型の値にキャストして行うことにします。