Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
45 commits
Select commit Hold shift + click to select a range
b10fca5
Add parser
ioannessh Mar 16, 2025
b92de8c
Add closure conversion
ioannessh Mar 16, 2025
bdc5890
Add lambda lifting
ioannessh Mar 16, 2025
dd12050
Add anf conversion
ioannessh Mar 16, 2025
8d5f8b2
Add pretty print and typedtree
ioannessh Mar 16, 2025
5a40eda
Add riscv64 runtime
ioannessh Mar 16, 2025
89b2f26
Add anf unit tests
ioannessh Mar 16, 2025
d096ca1
Add demo
ioannessh Mar 16, 2025
c4e6bfa
Add quick check
ioannessh Mar 16, 2025
c2141e2
Add demo profile for rules and change repo link
ioannessh Mar 16, 2025
389a203
Comment print
ioannessh Mar 16, 2025
28ada7c
Split quick chack
ioannessh Mar 16, 2025
cad8e99
Add parser tests
ioannessh Mar 17, 2025
ce9eaaf
Add tests
ioannessh Mar 18, 2025
befd1b6
Add manytests
ioannessh Mar 18, 2025
8153b2d
Add () and temp var
ioannessh Mar 19, 2025
b3845b6
Fix naming in ll
ioannessh Mar 19, 2025
539a48e
Add do_not_type tests
ioannessh Mar 19, 2025
ab32ea9
Add exec test
ioannessh Mar 20, 2025
e01b2c6
Fix unix fmt
ioannessh Mar 21, 2025
dc4733a
Promote new tests
ioannessh Mar 21, 2025
4ffdd7d
Replace test dir
ioannessh Mar 21, 2025
8e56476
Add coverage
ioannessh Mar 21, 2025
dff250b
Format dune files
ioannessh Mar 21, 2025
66fa675
Return unit tests
shurenkov Mar 30, 2025
dd48adc
Add anon cnt
shurenkov Mar 30, 2025
1e2e3e2
Rewrite part app
shurenkov Apr 8, 2025
974e5bb
Rewrite closure conversion
shurenkov Apr 10, 2025
310a4fa
Fix closure conversion for () and in global env
shurenkov Apr 10, 2025
edcda0a
Rewrite cc and eq in riscv
shurenkov Apr 13, 2025
cfba31c
Rewrite app func
shurenkov Apr 13, 2025
8c431c5
Fix seg fault in part app
shurenkov Apr 14, 2025
33784ef
Format
shurenkov Apr 14, 2025
ed3ba19
Add tests for anf and format
shurenkov Apr 14, 2025
f589e6d
Rename
shurenkov Apr 16, 2025
dffa1ef
Format and replace manytests
shurenkov Apr 21, 2025
fca208c
Fmt and promote test
shurenkov Apr 21, 2025
f0c5749
Fmt
shurenkov Apr 21, 2025
bdd1fcd
Fmt
shurenkov Apr 21, 2025
1bf294d
Change format pp ANF
shurenkov Apr 21, 2025
317b15f
Rewrite pp and remove debug info
shurenkov Apr 22, 2025
778e2c0
Return test fac
shurenkov Apr 22, 2025
0cf81b0
Rewrite app for lambda lifting
shurenkov Apr 23, 2025
21c02f8
Add ordering
shurenkov Apr 24, 2025
b380447
Format
shurenkov Apr 24, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions slarnML/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
.vscode
_build
_coverage
trash

*.o
*.out
demo/main.S
test/manytests
test/manytests_
2 changes: 2 additions & 0 deletions slarnML/.ocamlformat
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
version=0.26.2
profile=janestreet
23 changes: 23 additions & 0 deletions slarnML/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
.PHONY: repl tests test fmt lint celan

all:
dune build

repl:
dune build ./slarn.exe && rlwrap _build/default/slarn.exe

test:
dune runtest

clean:
@$(RM) -r _build

fmt:
dune build @fmt --auto-promote

lint:
dune build @lint --force

release:
dune build --profile=release
dune runtest --profile=release
85 changes: 85 additions & 0 deletions slarnML/demo/.gdb_history
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
b _start
c
ni
ni
ni
ni
ni
exit
c
b main
c
b fac
c
b fac_fack
b fack_fack
b fack_fac
c
ni
ni
ni
ni
ni
ni
ni
ni
ni
ni
ni
ni
ni
ni
ni
ni
ni
ni
ni
ni
ni
ni
ni
ni
ni
ni
ni
ni
ni
ni
ni
ni
ni
ni
ni
ni
ni
ni
ni
ni
ni
ni
exit
b fac_fack
b fack_fac
c
c
ni
ni
ni
ni
ni
ni
ni
ni
ni
ni
ni
ni
ni
ni
ni
ni
ni
ni
ni
ni
exit
23 changes: 23 additions & 0 deletions slarnML/demo/.gdbinit
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
set history save
set architecture riscv:rv64
set sysroot /usr/riscv64−linux−gnu
target remote :1234
tui enable
tui new-layout example {-horizontal regs 1 asm 1} 2 status 0 cmd 1
layout example
# tui disable
focus cmd
b _start
b .breakpoint0
b .breakpoint1
b .breakpoint2
b .breakpoint3
b .breakpoint4
b .breakpoint5
b .breakpoint6
b .breakpoint7
b .breakpoint8
b .breakpoint9
b print_int
# c
# x/8xg $sp
23 changes: 23 additions & 0 deletions slarnML/demo/demo.ml
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
open SlarnML_lib.Res

let () =
let s = Stdio.In_channel.input_all Stdlib.stdin in
let result =
match SlarnML_lib.Parser.parser s with
| Ok ast ->
SlarnML_lib.Clos_conv.clos_conv ast
>>= (fun ast -> SlarnML_lib.Lambda_lifting.lambda_lifting ast)
>>= fun ast ->
Result (SlarnML_lib.Anf_conv.anf ast)
>>= (fun anf -> SlarnML_lib.Riscv.asm anf)
>>= fun prog ->
Result
(String.concat
"\n"
(List.map (SlarnML_lib.Pprint_riscv.pp_instruction "\t") prog))
| Error message -> SlarnML_lib.Res.Error message
in
match result with
| SlarnML_lib.Res.Result r -> print_string @@ r
| Error e -> Printf.eprintf "%s" e
;;
72 changes: 72 additions & 0 deletions slarnML/demo/dune
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
;(rule
; (targets part_app.o)
; (deps ../lib/riscv64/part_app.c)
; (mode
; (promote (until-clean)))
; (action
; (run
; riscv64-linux-gnu-gcc
; -march=rv64gc
; -O2
; -nostdlib
; -nostartfiles
; -ffreestanding
; -c
; %{deps}
; -o
; %{targets}))
; (enabled_if
; (= %{profile} demo)))
;
;(rule
; (targets main.S)
; (deps
; demo.ml
; main.ml)
; (mode
; (promote (until-clean)))
; (action
; (run dune exec demo < main.ml))
; (enabled_if
; (= %{profile} demo)))
;
;(rule
; (targets main.o)
; (deps main.S)
; (mode
; (promote (until-clean)))
; (action
; (run riscv64-linux-gnu-as -march=rv64gc %{deps} -o %{targets}))
; (enabled_if
; (= %{profile} demo)))
;
;(rule
; (targets print.o)
; (deps ../lib/riscv64/print.S)
; (mode
; (promote (until-clean)))
; (action
; (run riscv64-linux-gnu-as -march=rv64gc %{deps} -o %{targets}))
; (enabled_if
; (= %{profile} demo)))
;
;(rule
; (targets a.out)
; (deps print.o part_app.o main.o)
; (mode
; (promote (until-clean)))
; (action
; (run riscv64-linux-gnu-ld -lc %{deps} -o %{targets}))
; (enabled_if
; (= %{profile} demo)))
;
;(executable
; (name demo)
; (public_name demo)
; (modules demo)
; (libraries slarnML.lib stdio))
;
; (cram
; (applies_to riscvDemo)
; (deps ./a.out ./demoRiscv.exe))
;
6 changes: 6 additions & 0 deletions slarnML/demo/main.ml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
let fac n =
let rec fack n f = if n <= 1 then f 1 else fack (n - 1) (fun x -> x * f n) in
fack n (fun x -> x)
;;

let main = print_int (fac 3)
33 changes: 33 additions & 0 deletions slarnML/dune-project
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
(lang dune 2.9)

(name slarnML)

(generate_opam_files true)

(cram enable)

(license LGPL-3.0-or-later)

(source
(github ioannessh/comp24))

(authors "Ivan Shurenkov")

(maintainers "Ivan Shurenkov")

(package
(name slarnML)
(synopsis "SlarnML")
(version 0.0)
(depends
ocaml
dune
angstrom
base
(ppx_inline_test :with-test)
ppx_expect
ppx_deriving
bisect_ppx
(odoc :with-doc)
(ocamlformat :build)))

35 changes: 35 additions & 0 deletions slarnML/lib/anf/anf_ast.ml
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
(** Copyright 2024-2025, Ivan Shurenkov *)

(** SPDX-License-Identifier: LGPL-2.1-or-later *)

type immexpr =
| AId of string
| AInt of int
| ABool of bool
| AUnit
[@@deriving show { with_path = false }]

type cexpr =
| ANot of immexpr
| AOr of immexpr * immexpr
| AAnd of immexpr * immexpr
| AEq of immexpr * immexpr
| AGt of immexpr * immexpr
| ALt of immexpr * immexpr
| AGte of immexpr * immexpr
| ALte of immexpr * immexpr
| AAdd of immexpr * immexpr
| ASub of immexpr * immexpr
| AMul of immexpr * immexpr
| ADiv of immexpr * immexpr
| CImmExpr of immexpr
| AIf of immexpr * aexpr * aexpr
| AApp of immexpr * immexpr list
[@@deriving show { with_path = false }]

and aexpr =
| ALet of string * cexpr * aexpr
| ACExpr of cexpr
[@@deriving show { with_path = false }]

type afun = AFun of string * string list * aexpr [@@deriving show { with_path = false }]
Loading
Loading