Commit 81955ca5 authored by Taddeüs Kroes's avatar Taddeüs Kroes

Cleanup

parent f5c9feb6
...@@ -159,7 +159,12 @@ let compile_c memsize program = ...@@ -159,7 +159,12 @@ let compile_c memsize program =
let rec compile_commands buf = function let rec compile_commands buf = function
| [] -> buf | [] -> buf
| cmd :: tl -> compile_commands (buf ^ compile_command cmd ^ "\n") tl | cmd :: tl -> compile_commands (buf ^ compile_command cmd ^ "\n") tl
and compile_offset o = function and compile_command = function
| Loop p ->
"while (*p) {\n" ^ indent (compile_commands "" p) ^ "}"
| Offset (o, cmd) ->
begin
match cmd with
| Shift n -> "p" ^ add n | Shift n -> "p" ^ add n
| Add n -> ptr o ^ add n | Add n -> ptr o ^ add n
| Goto 0 -> "p = mem" | Goto 0 -> "p = mem"
...@@ -170,11 +175,10 @@ let compile_c memsize program = ...@@ -170,11 +175,10 @@ let compile_c memsize program =
| Mul (x, 1) -> ptr o ^ " += " ^ ptr (o + x) | Mul (x, 1) -> ptr o ^ " += " ^ ptr (o + x)
| Mul (x, -1) -> ptr o ^ " -= " ^ ptr (o + x) | Mul (x, -1) -> ptr o ^ " -= " ^ ptr (o + x)
| Mul (x, y) -> ptr o ^ " += " ^ ptr (o + x) ^ " * " ^ string_of_int y | Mul (x, y) -> ptr o ^ " += " ^ ptr (o + x) ^ " * " ^ string_of_int y
| cmd -> failwith "cannot offset command: " ^ string_of_command cmd | _ -> failwith "cannot compile: " ^ string_of_command cmd
and compile_command = function end ^ ";"
| Loop p -> "while (*p != 0) {\n" ^ indent (compile_commands "" p) ^ "}" | cmd ->
| Offset (o, cmd) -> compile_offset o cmd ^ ";" compile_command (Offset (0, cmd))
| cmd -> compile_offset 0 cmd ^ ";"
in in
"#include <stdio.h>\n" ^ "#include <stdio.h>\n" ^
"#include <stdlib.h>\n" ^ "#include <stdlib.h>\n" ^
......
#!/usr/bin/env bash #!/usr/bin/env bash
set -e set -e
make -s bf cat > _tmp.b
./bf | opt -O3 -o prog.bc make -s _tmp-opt
make -s prog ./_tmp-opt
./prog rm -f _tmp*
rm -f prog{,.bc,.o}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment