# 019: Integer が多倍長になっていない [↑up](bunny_notes) - issued: 2020-04-12 - 分類: 分類:C 改善項目 - status: Closed (2020-05-06) ## 概要 ランタイムにおいて、Int, Integer が同じ扱いになっているのを改める。 ## 調査ログ ### 2020-05-06 [060](bissue060) にて、fromInteger にも対応して整数リテラルが正しく多相になったので、 本件に取り掛かりたい。 壊さずに段階的に改変していきたい。 - runtime に IntegerLiteral を追加し、関連関数もそれにあわせて修正 - CodeGen にて、LitInt は上述の IntegerLiteral になるよう修正する 本件のついでに、instance Enum Integer も実装して、Integer 型の arithmeticseq も test/sample に加えたい あと、現状では IntLiteral の内部データが int になっていたように思うので、それを long に直しておきたい。 ### 実装 以下のように、すんなり進められた: - 準備: BoxedIntObj, LitInt のデータを Integer から long に変更 - BoxedIntegerObj, LitInteger を追加 - LitInteger ファクトリである RTLib.mkLitInteger を追加 - integer[Eq|Le|Add|Sub|Mul] および intFromInteger を修正 - RT にて LitInteger の評価を追加 また、instance Enum Integer の定義を lib/Prelude.hs に追加(そのために Prim.integerFromInt を追加など若干の修正も) 以下のテストを追加した: - sample177: long に収まらない値のサンプル - sample178: Arithmetic Sequences の Integer バージョン