metasepi / idiomaticca

Translate IDIOMATIC C into human-readable ATS
http://metasepi.org/
GNU Affero General Public License v3.0
3 stars 0 forks source link

Estimate AST of regress/noinc/temp_variable #10

Closed master-q closed 5 years ago

master-q commented 5 years ago

C language:

$ cat regress/noinc/temp_variable/main.c
int main() {
        int input = 1, ret;

        ret = input + 2;

        return ret - 3;
}
$ stack run dumpc regress/noinc/temp_variable/main.c
CTranslUnit [CFDefExt (CFunDef [CTypeSpec (CIntType (NodeInfo ("regress/noinc/temp_variable/main.c": line 1) (("regress/noinc/temp_variable/main.c": line 1),3) (Name {nameId = 1})))] (CDeclr (Just (Ident "main" 232419565 (NodeInfo ("regress/noinc/temp_variable/main.c": line 1) (("regress/noinc/temp_variable/main.c": line 1),4) (Name {nameId = 0})))) [CFunDeclr (Right ([],False)) [] (NodeInfo ("regress/noinc/temp_variable/main.c": line 1) (("regress/noinc/temp_variable/main.c": line 1),1) (Name {nameId = 3}))] Nothing [] (NodeInfo ("regress/noinc/temp_variable/main.c": line 1) (("regress/noinc/temp_variable/main.c": line 1),4) (Name {nameId = 2}))) [] (CCompound [] [CBlockDecl (CDecl [CTypeSpec (CIntType (NodeInfo ("regress/noinc/temp_variable/main.c": line 2) (("regress/noinc/temp_variable/main.c": line 2),3) (Name {nameId = 5})))] [(Just (CDeclr (Just (Ident "input" 247216093 (NodeInfo ("regress/noinc/temp_variable/main.c": line 2) (("regress/noinc/temp_variable/main.c": line 2),5) (Name {nameId = 4})))) [] Nothing [] (NodeInfo ("regress/noinc/temp_variable/main.c": line 2) (("regress/noinc/temp_variable/main.c": line 2),5) (Name {nameId = 6}))),Just (CInitExpr (CConst (CIntConst 1 (NodeInfo ("regress/noinc/temp_variable/main.c": line 2) (("regress/noinc/temp_variable/main.c": line 2),1) (Name {nameId = 7})))) (NodeInfo ("regress/noinc/temp_variable/main.c": line 2) (("regress/noinc/temp_variable/main.c": line 2),1) (Name {nameId = 8}))),Nothing),(Just (CDeclr (Just (Ident "ret" 1913586 (NodeInfo ("regress/noinc/temp_variable/main.c": line 2) (("regress/noinc/temp_variable/main.c": line 2),3) (Name {nameId = 10})))) [] Nothing [] (NodeInfo ("regress/noinc/temp_variable/main.c": line 2) (("regress/noinc/temp_variable/main.c": line 2),3) (Name {nameId = 11}))),Nothing,Nothing)] (NodeInfo ("regress/noinc/temp_variable/main.c": line 2) (("regress/noinc/temp_variable/main.c": line 2),1) (Name {nameId = 9}))),CBlockStmt (CExpr (Just (CAssign CAssignOp (CVar (Ident "ret" 1913586 (NodeInfo ("regress/noinc/temp_variable/main.c": line 4) (("regress/noinc/temp_variable/main.c": line 4),3) (Name {nameId = 12}))) (NodeInfo ("regress/noinc/temp_variable/main.c": line 4) (("regress/noinc/temp_variable/main.c": line 4),3) (Name {nameId = 13}))) (CBinary CAddOp (CVar (Ident "input" 247216093 (NodeInfo ("regress/noinc/temp_variable/main.c": line 4) (("regress/noinc/temp_variable/main.c": line 4),5) (Name {nameId = 14}))) (NodeInfo ("regress/noinc/temp_variable/main.c": line 4) (("regress/noinc/temp_variable/main.c": line 4),5) (Name {nameId = 15}))) (CConst (CIntConst 2 (NodeInfo ("regress/noinc/temp_variable/main.c": line 4) (("regress/noinc/temp_variable/main.c": line 4),1) (Name {nameId = 16})))) (NodeInfo ("regress/noinc/temp_variable/main.c": line 4) (("regress/noinc/temp_variable/main.c": line 4),1) (Name {nameId = 17}))) (NodeInfo ("regress/noinc/temp_variable/main.c": line 4) (("regress/noinc/temp_variable/main.c": line 4),1) (Name {nameId = 18})))) (NodeInfo ("regress/noinc/temp_variable/main.c": line 4) (("regress/noinc/temp_variable/main.c": line 4),1) (Name {nameId = 19}))),CBlockStmt (CReturn (Just (CBinary CSubOp (CVar (Ident "ret" 1913586 (NodeInfo ("regress/noinc/temp_variable/main.c": line 6) (("regress/noinc/temp_variable/main.c": line 6),3) (Name {nameId = 20}))) (NodeInfo ("regress/noinc/temp_variable/main.c": line 6) (("regress/noinc/temp_variable/main.c": line 6),3) (Name {nameId = 21}))) (CConst (CIntConst 3 (NodeInfo ("regress/noinc/temp_variable/main.c": line 6) (("regress/noinc/temp_variable/main.c": line 6),1) (Name {nameId = 22})))) (NodeInfo ("regress/noinc/temp_variable/main.c": line 6) (("regress/noinc/temp_variable/main.c": line 6),1) (Name {nameId = 23})))) (NodeInfo ("regress/noinc/temp_variable/main.c": line 6) (("regress/noinc/temp_variable/main.c": line 6),1) (Name {nameId = 24})))] (NodeInfo ("regress/noinc/temp_variable/main.c": line 1) (("regress/noinc/temp_variable/main.c": line 7),1) (Name {nameId = 25}))) (NodeInfo ("regress/noinc/temp_variable/main.c": line 1) (("regress/noinc/temp_variable/main.c": line 7),1) (Name {nameId = 26})))] (NodeInfo ("regress/noinc/temp_variable/main.c": line 1) (("regress/noinc/temp_variable/main.c": line 7),1) (Name {nameId = 27}))
master-q commented 5 years ago

ATS language

$ cat ~/tmp/ats/idiomaticca/main.dats
#include "share/atspre_staload.hats"

implement main () = let
    var input : int = 1
    var ret : int
    val () = ret := input + 2
  in
    ret - 3
  end
$ stack run dumpats ~/tmp/ats/idiomaticca/main.dats
ATS {unATS = [Include "\"share/atspre_staload.hats\"",Impl {implArgs = Nothing, _impl = Implement {pos = AlexPn 56 3 19, preUniversalsI = [], implicits = [], universalsI = [], nameI = Unqualified "main", iArgs = Just [], _iExpression = Right (Let (AlexPn 58 3 21) (ATS {unATS = [Var {varT = Just (Named (Unqualified "int")), varPat = UniversalPattern (AlexPn 70 4 9) "input" [] Nothing, _varExpr1 = Just (IntLit 1), _varExpr2 = Nothing},Var {varT = Just (Named (Unqualified "int")), varPat = UniversalPattern (AlexPn 94 5 9) "ret" [] Nothing, _varExpr1 = Nothing, _varExpr2 = Nothing},Val {add = None, valT = Nothing, valPat = Just (PLiteral (VoidLiteral (AlexPn 112 6 9))), _valExpression = Just (Binary Mutate (NamedVal (Unqualified "ret")) (BinList {_op = Add, _exprs = [NamedVal (Unqualified "input"),IntLit 2]}))}]}) (Just (Binary Sub (NamedVal (Unqualified "ret")) (IntLit 3))))}}]}