module Base = Lang_base let rec printExpr = function | Base.AnonFunction (args, body) -> String.concat "\n" (["function (" ^ (String.concat ", " (List.map (fun (a,b) -> b) args)) ^ ")"; "{"] @ (Base.indent (List.concat (List.map printStmtLines body))) @ ["}"]) | Base.Array es -> "[ " ^ String.concat ", " (List.map printExpr es) ^ " ]" | e -> Base.printExpr_base printExpr e and printStmtLines = function | Base.InitVar (t, n, e) -> ["var " ^ n ^ " = " ^ printExpr e ^ ";"] | Base.Enum (name, vals) -> let c = Common.counter 0 in printStmtLines (Base.StmtList (List.map (fun n -> Base.InitVar ("var", n, Base.Int (c ()))) vals)) | Base.Function (ret, name, args, body) -> ["function " ^ name ^ "(" ^ (String.concat ", " (List.map (fun (a,b) -> b) args)) ^ ")"; "{"] @ (Base.indent (List.concat (List.map printStmtLines body))) @ ["}"] | s -> Base.printStmtLines_base printExpr printStmtLines s let printStmt s = (String.concat "\n" (printStmtLines s)) ^ "\n"