Merge pull request #31 from e2e4b6b7/1.30

Fixes of x86_64 compiler
This commit is contained in:
danyaberezun 2025-02-28 12:06:36 +02:00 committed by GitHub
commit 1d8d7c4203
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
35 changed files with 85 additions and 97 deletions

View file

@ -24,7 +24,7 @@ runtime.o: runtime.c runtime.h
$(CC) $(PROD_FLAGS) -c runtime.c -o runtime.o
printf.o: printf.S
$(CC) $(PROD_FLAGS) -x assembler-with-cpp -c -g printf.S -o printf.o
$(CC) $(PROD_FLAGS) -Wa,--noexecstack -x assembler-with-cpp -c -g printf.S -o printf.o
clean:
$(RM) *.a *.o *~ negative_scenarios/*.err

View file

@ -1427,7 +1427,7 @@ let compile cmd ((imports, _), p) =
| Expr.Ignore s ->
let ls, env = env#get_label in
add_code (compile_expr tail ls env s) ls false [ DROP ]
| Expr.ElemRef (x, i) -> compile_list tail l env [ x; i ]
| Expr.ElemRef _ -> failwith "Should not happen. Indirect assignemts are temporarily prohibited."
| Expr.Var x -> (
let env, line = env#gen_line x in
let env, acc = env#lookup x in
@ -1438,10 +1438,7 @@ let compile cmd ((imports, _), p) =
false,
line @ [ PROTO (name, env#current_function) ] )
| _ -> (env, false, line @ [ LD acc ]))
| Expr.Ref x ->
let env, line = env#gen_line x in
let env, acc = env#lookup x in
(env, false, line @ [ LDA acc ])
| Expr.Ref _ -> failwith "Should not happen. Indirect assignemts are temporarily prohibited."
| Expr.Const n -> (env, false, [ CONST n ])
| Expr.String s -> (env, false, [ STRING s ])
| Expr.Binop (op, x, y) ->
@ -1496,13 +1493,15 @@ let compile cmd ((imports, _), p) =
let env, line = env#gen_line x in
let env, acc = env#lookup x in
add_code (compile_expr false lassn env e) lassn false (line @ [ ST acc ])
| Expr.Assign (x, e) ->
| Expr.Assign (Expr.ElemRef (x, i), e) ->
let lassn, env = env#get_label in
add_code
(compile_list false lassn env [ x; e ])
(compile_list false lassn env [ x; i; e ])
lassn false
[ (match x with Expr.Ref _ -> STI | _ -> STA) ]
(*Expr.ElemRef _ -> STA | _ -> STI]*)
[ STA ]
| Expr.Assign (x, _) ->
failwith
(Printf.sprintf "Indirect assignment is not supported yet: %s" (show Expr.t x))
| Expr.Skip -> (env, false, [])
| Expr.Seq (s1, s2) -> compile_list tail l env [ s1; s2 ]
| Expr.If (c, s1, s2) ->

View file

@ -260,10 +260,10 @@ let show env instr =
let in_memory = function M _ | S _ | I _ -> true | C _ | R _ | L _ -> false
let mov x s =
(* Numeric literals with more than 32 bits cannot ne directly moved to memory location *)
let big_numeric_literal = function L num -> num > 0xFFFFFFFF | _ -> false in
(* Numeric literals with more than 32 bits cannot be directly moved to memory location *)
let big_numeric_literal = function L num -> (num > 0xFFFFFFFF || num < -0xFFFFFFFF) | _ -> false in
if x = s then []
else if (in_memory x && in_memory s) || big_numeric_literal x then
else if (in_memory x && in_memory s) || (big_numeric_literal x && (in_memory x || in_memory s)) then
[ Mov (x, rax); Mov (rax, s) ]
else [ Mov (x, s) ]
@ -691,16 +691,27 @@ let compile cmd env imports code =
(env, push_closure_code @ mov address l @ call_code)
| CONST n ->
let s, env' = env#allocate in
(env', [ Mov (L (box n), s) ])
(env', mov (L (box n)) s)
| STRING s ->
let addr, env = env#string s in
let l, env = env#allocate in
let env, call = compile_call env ~fname:".string" 1 false in
(env, mov addr l @ call)
| LDA x ->
| LDA _ -> failwith "Should not happen. Indirect assignemts are temporarily prohibited."
(*
let s, env' = (env#variable x)#allocate in
let s', env'' = env'#allocate in
(env'', [ Lea (env'#loc x, rax); Mov (rax, s); Mov (rax, s') ])
let loc_x = env'#loc x in
match loc_x with
| R _ ->
failwith
"We are not able to take an address of a register. This \
is the known limitation of 64-bit compiler. If you \
encountered this issue, just do not use indirect \
assignment :("
| _ ->
();
(env'', [ Lea (loc_x, rax); Mov (rax, s); Mov (rax, s') ])*)
| LD x -> (
let s, env' = (env#variable x)#allocate in
( env',
@ -715,7 +726,8 @@ let compile cmd env imports code =
| S _ | M _ -> [ Mov (s, rax); Mov (rax, env'#loc x) ]
| _ -> [ Mov (s, env'#loc x) ] ))
| STA -> compile_call env ~fname:".sta" 3 false
| STI -> (
| STI -> failwith "Should not happen. Indirect assignemts are temporarily prohibited."
(*
let v, env = env#pop in
let x = env#peek in
( env,
@ -727,7 +739,7 @@ let compile cmd env imports code =
Mov (rdx, I (0, rax));
Mov (rdx, x);
]
| _ -> [ Mov (v, rax); Mov (rax, I (0, x)); Mov (rax, x) ] ))
| _ -> [ Mov (v, rax); Mov (rax, I (0, x)); Mov (rax, x) ] )*)
| BINOP op -> compile_binop env op
| LABEL s | FLABEL s | SLABEL s -> (env, [ Label s ])
| JMP l -> ((env#set_stack l)#set_barrier, [ Jmp l ])
@ -972,23 +984,21 @@ let compile cmd env imports code =
1 false
| LINE line -> env#gen_line line
| FAIL ((line, col), value) ->
let v, env = if value then (env#peek, env) else env#pop in
let value, env = if value then (env#peek, env) else env#pop in
let msg_addr, env = env#string cmd#get_infile in
let vr, env = env#allocate in
let sr, env = env#allocate in
let liner, env = env#allocate in
let colr, env = env#allocate in
let value_arg_addr, env = env#allocate in
let msg_arg_addr, env = env#allocate in
let line_arg_addr, env = env#allocate in
let col_arg_addr, env = env#allocate in
let env, code =
compile_call env ~fname:".match_failure" 4 false
in
let _, env = env#pop in
( env,
[
Mov (L col, colr);
Mov (L line, liner);
Mov (msg_addr, sr);
Mov (v, vr);
]
mov (L col) col_arg_addr
@ mov (L line) line_arg_addr
@ mov msg_addr msg_arg_addr
@ mov value value_arg_addr
@ code )
| i ->
invalid_arg
@ -1304,6 +1314,10 @@ class env prg mode =
Buffer.add_char buf '\\';
Buffer.add_char buf 't';
iterate (i + 2)
| 'r' ->
Buffer.add_char buf '\\';
Buffer.add_char buf 'r';
iterate (i + 2)
| _ ->
Buffer.add_char buf '\\';
Buffer.add_char buf '\\';
@ -1474,8 +1488,8 @@ let build cmd prog =
in
let compiler_flags, linker_flags =
match cmd#target_os with
| Darwin -> ("-arch x86_64", "-ld_classic")
| Linux -> ("", "")
| Darwin -> ("-arch x86_64 -Wa,--noexecstack", "-ld_classic")
| Linux -> ("-Wa,--noexecstack", "")
in
let debug_flags = if cmd#is_debug then "-g" else "" in
match cmd#get_mode with
@ -1493,11 +1507,17 @@ let build cmd prog =
(Buffer.contents buf) cmd#get_runtime_path
(match cmd#march with `X86_32 -> "runtime32" | `AMD64 -> "runtime")
in
Sys.command gcc_cmdline
let result = Sys.command gcc_cmdline in
if result <> 0 then
failwith
(Printf.sprintf "Assembly compiler failed with exit code %d" result)
| `Compile ->
let cmd =
Printf.sprintf "%s %s %s -c -g %s.s" compiler compiler_flags debug_flags
cmd#basename
in
Sys.command cmd
let result = Sys.command cmd in
if result <> 0 then
failwith
(Printf.sprintf "Assembly compiler failed with exit code %d" result)
| _ -> invalid_arg "must not happen"

View file

@ -42,7 +42,7 @@ let () =
if Sys.file_exists !lama_file && i <> 30 then (
(* cram_printfn " $ ls ../x64"; *)
cram_printfn
" $ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test%02d.lama -o test 2>&1 | grep -v 'missing .note.GNU-stack'" i;
" $ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test%02d.lama -o test" i;
cram_printfn " $ ./test";
true)
else false

View file

@ -1,6 +1,5 @@
This file was autogenerated.
$ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test01.lama -o test 2>&1 | grep -v 'missing .note.GNU-stack'
/usr/bin/ld: NOTE: This behaviour is deprecated and will be removed in a future version of the linker
$ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test01.lama -o test
$ ./test
Set internal structure: MNode (63, 1, 0, MNode (31, 1, 0, MNode (15, 1, 0, MNode (7, 1, 0, MNode (3, 1, 0, MNode (1, 1, 0, MNode (0, 1, 0, 0, 0), MNode (2, 1, 0, 0, 0)), MNode (5, 1, 0, MNode (4, 1, 0, 0, 0), MNode (6, 1, 0, 0, 0))), MNode (11, 1, 0, MNode (9, 1, 0, MNode (8, 1, 0, 0, 0), MNode (10, 1, 0, 0, 0)), MNode (13, 1, 0, MNode (12, 1, 0, 0, 0), MNode (14, 1, 0, 0, 0)))), MNode (23, 1, 0, MNode (19, 1, 0, MNode (17, 1, 0, MNode (16, 1, 0, 0, 0), MNode (18, 1, 0, 0, 0)), MNode (21, 1, 0, MNode (20, 1, 0, 0, 0), MNode (22, 1, 0, 0, 0))), MNode (27, 1, 0, MNode (25, 1, 0, MNode (24, 1, 0, 0, 0), MNode (26, 1, 0, 0, 0)), MNode (29, 1, 0, MNode (28, 1, 0, 0, 0), MNode (30, 1, 0, 0, 0))))), MNode (47, 1, 0, MNode (39, 1, 0, MNode (35, 1, 0, MNode (33, 1, 0, MNode (32, 1, 0, 0, 0), MNode (34, 1, 0, 0, 0)), MNode (37, 1, 0, MNode (36, 1, 0, 0, 0), MNode (38, 1, 0, 0, 0))), MNode (43, 1, 0, MNode (41, 1, 0, MNode (40, 1, 0, 0, 0), MNode (42, 1, 0, 0, 0)), MNode (45, 1, 0, MNode (44, 1, 0, 0, 0), MNode (46, 1, 0, 0, 0)))), MNode (55, 1, 0, MNode (51, 1, 0, MNode (49, 1, 0, MNode (48, 1, 0, 0, 0), MNode (50, 1, 0, 0, 0)), MNode (53, 1, 0, MNode (52, 1, 0, 0, 0), MNode (54, 1, 0, 0, 0))), MNode (59, 1, 0, MNode (57, 1, 0, MNode (56, 1, 0, 0, 0), MNode (58, 1, 0, 0, 0)), MNode (61, 1, 0, MNode (60, 1, 0, 0, 0), MNode (62, 1, 0, 0, 0)))))), MNode (79, 1, -1, MNode (71, 1, 0, MNode (67, 1, 0, MNode (65, 1, 0, MNode (64, 1, 0, 0, 0), MNode (66, 1, 0, 0, 0)), MNode (69, 1, 0, MNode (68, 1, 0, 0, 0), MNode (70, 1, 0, 0, 0))), MNode (75, 1, 0, MNode (73, 1, 0, MNode (72, 1, 0, 0, 0), MNode (74, 1, 0, 0, 0)), MNode (77, 1, 0, MNode (76, 1, 0, 0, 0), MNode (78, 1, 0, 0, 0)))), MNode (87, 1, -1, MNode (83, 1, 0, MNode (81, 1, 0, MNode (80, 1, 0, 0, 0), MNode (82, 1, 0, 0, 0)), MNode (85, 1, 0, MNode (84, 1, 0, 0, 0), MNode (86, 1, 0, 0, 0))), MNode (95, 1, 0, MNode (91, 1, 0, MNode (89, 1, 0, MNode (88, 1, 0, 0, 0), MNode (90, 1, 0, 0, 0)), MNode (93, 1, 0, MNode (92, 1, 0, 0, 0), MNode (94, 1, 0, 0, 0))), MNode (97, 1, -1, MNode (96, 1, 0, 0, 0), MNode (98, 1, -1, 0, MNode (99, 1, 0, 0, 0)))))))
Set elements: {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99}

View file

@ -1,5 +1,4 @@
This file was autogenerated.
$ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test02.lama -o test 2>&1 | grep -v 'missing .note.GNU-stack'
/usr/bin/ld: NOTE: This behaviour is deprecated and will be removed in a future version of the linker
$ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test02.lama -o test
$ ./test
Assn ("x", Dec ("3"))

View file

@ -1,6 +1,5 @@
This file was autogenerated.
$ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test03.lama -o test 2>&1 | grep -v 'missing .note.GNU-stack'
/usr/bin/ld: NOTE: This behaviour is deprecated and will be removed in a future version of the linker
$ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test03.lama -o test
$ ./test
-1
1

View file

@ -1,6 +1,5 @@
This file was autogenerated.
$ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test04.lama -o test 2>&1 | grep -v 'missing .note.GNU-stack'
/usr/bin/ld: NOTE: This behaviour is deprecated and will be removed in a future version of the linker
$ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test04.lama -o test
$ ./test
Map internal structure: MNode (63, {630}, 0, MNode (31, {310}, 0, MNode (15, {150}, 0, MNode (7, {70}, 0, MNode (3, {30}, 0, MNode (1, {10}, 0, MNode (0, {0}, 0, 0, 0), MNode (2, {20}, 0, 0, 0)), MNode (5, {50}, 0, MNode (4, {40}, 0, 0, 0), MNode (6, {60}, 0, 0, 0))), MNode (11, {110}, 0, MNode (9, {90}, 0, MNode (8, {80}, 0, 0, 0), MNode (10, {100}, 0, 0, 0)), MNode (13, {130}, 0, MNode (12, {120}, 0, 0, 0), MNode (14, {140}, 0, 0, 0)))), MNode (23, {230}, 0, MNode (19, {190}, 0, MNode (17, {170}, 0, MNode (16, {160}, 0, 0, 0), MNode (18, {180}, 0, 0, 0)), MNode (21, {210}, 0, MNode (20, {200}, 0, 0, 0), MNode (22, {220}, 0, 0, 0))), MNode (27, {270}, 0, MNode (25, {250}, 0, MNode (24, {240}, 0, 0, 0), MNode (26, {260}, 0, 0, 0)), MNode (29, {290}, 0, MNode (28, {280}, 0, 0, 0), MNode (30, {300}, 0, 0, 0))))), MNode (47, {470}, 0, MNode (39, {390}, 0, MNode (35, {350}, 0, MNode (33, {330}, 0, MNode (32, {320}, 0, 0, 0), MNode (34, {340}, 0, 0, 0)), MNode (37, {370}, 0, MNode (36, {360}, 0, 0, 0), MNode (38, {380}, 0, 0, 0))), MNode (43, {430}, 0, MNode (41, {410}, 0, MNode (40, {400}, 0, 0, 0), MNode (42, {420}, 0, 0, 0)), MNode (45, {450}, 0, MNode (44, {440}, 0, 0, 0), MNode (46, {460}, 0, 0, 0)))), MNode (55, {550}, 0, MNode (51, {510}, 0, MNode (49, {490}, 0, MNode (48, {480}, 0, 0, 0), MNode (50, {500}, 0, 0, 0)), MNode (53, {530}, 0, MNode (52, {520}, 0, 0, 0), MNode (54, {540}, 0, 0, 0))), MNode (59, {590}, 0, MNode (57, {570}, 0, MNode (56, {560}, 0, 0, 0), MNode (58, {580}, 0, 0, 0)), MNode (61, {610}, 0, MNode (60, {600}, 0, 0, 0), MNode (62, {620}, 0, 0, 0)))))), MNode (79, {790}, -1, MNode (71, {710}, 0, MNode (67, {670}, 0, MNode (65, {650}, 0, MNode (64, {640}, 0, 0, 0), MNode (66, {660}, 0, 0, 0)), MNode (69, {690}, 0, MNode (68, {680}, 0, 0, 0), MNode (70, {700}, 0, 0, 0))), MNode (75, {750}, 0, MNode (73, {730}, 0, MNode (72, {720}, 0, 0, 0), MNode (74, {740}, 0, 0, 0)), MNode (77, {770}, 0, MNode (76, {760}, 0, 0, 0), MNode (78, {780}, 0, 0, 0)))), MNode (87, {870}, -1, MNode (83, {830}, 0, MNode (81, {810}, 0, MNode (80, {800}, 0, 0, 0), MNode (82, {820}, 0, 0, 0)), MNode (85, {850}, 0, MNode (84, {840}, 0, 0, 0), MNode (86, {860}, 0, 0, 0))), MNode (95, {950}, 0, MNode (91, {910}, 0, MNode (89, {890}, 0, MNode (88, {880}, 0, 0, 0), MNode (90, {900}, 0, 0, 0)), MNode (93, {930}, 0, MNode (92, {920}, 0, 0, 0), MNode (94, {940}, 0, 0, 0))), MNode (97, {970}, -1, MNode (96, {960}, 0, 0, 0), MNode (98, {980}, -1, 0, MNode (99, {990}, 0, 0, 0)))))))
Map elements: {[0, 0], [1, 10], [2, 20], [3, 30], [4, 40], [5, 50], [6, 60], [7, 70], [8, 80], [9, 90], [10, 100], [11, 110], [12, 120], [13, 130], [14, 140], [15, 150], [16, 160], [17, 170], [18, 180], [19, 190], [20, 200], [21, 210], [22, 220], [23, 230], [24, 240], [25, 250], [26, 260], [27, 270], [28, 280], [29, 290], [30, 300], [31, 310], [32, 320], [33, 330], [34, 340], [35, 350], [36, 360], [37, 370], [38, 380], [39, 390], [40, 400], [41, 410], [42, 420], [43, 430], [44, 440], [45, 450], [46, 460], [47, 470], [48, 480], [49, 490], [50, 500], [51, 510], [52, 520], [53, 530], [54, 540], [55, 550], [56, 560], [57, 570], [58, 580], [59, 590], [60, 600], [61, 610], [62, 620], [63, 630], [64, 640], [65, 650], [66, 660], [67, 670], [68, 680], [69, 690], [70, 700], [71, 710], [72, 720], [73, 730], [74, 740], [75, 750], [76, 760], [77, 770], [78, 780], [79, 790], [80, 800], [81, 810], [82, 820], [83, 830], [84, 840], [85, 850], [86, 860], [87, 870], [88, 880], [89, 890], [90, 900], [91, 910], [92, 920], [93, 930], [94, 940], [95, 950], [96, 960], [97, 970], [98, 980], [99, 990]}

View file

@ -1,6 +1,5 @@
This file was autogenerated.
$ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test05.lama -o test 2>&1 | grep -v 'missing .note.GNU-stack'
/usr/bin/ld: NOTE: This behaviour is deprecated and will be removed in a future version of the linker
$ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test05.lama -o test
$ ./test
Cached: 1
Cached: 1

View file

@ -1,6 +1,5 @@
This file was autogenerated.
$ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test06.lama -o test 2>&1 | grep -v 'missing .note.GNU-stack'
/usr/bin/ld: NOTE: This behaviour is deprecated and will be removed in a future version of the linker
$ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test06.lama -o test
$ ./test
Flattening: 0
Flattening: {0, 0, 0, 0}

View file

@ -1,6 +1,5 @@
This file was autogenerated.
$ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test07.lama -o test 2>&1 | grep -v 'missing .note.GNU-stack'
/usr/bin/ld: NOTE: This behaviour is deprecated and will be removed in a future version of the linker
$ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test07.lama -o test
$ ./test
HashTab internal structure: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {[{1, 2, 3}, 100]}, 0, 0, 0]
HashTab internal structure: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {[{1, 2, 3}, 200], [{1, 2, 3}, 100]}, 0, 0, 0]

View file

@ -1,6 +1,5 @@
This file was autogenerated.
$ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test08.lama -o test 2>&1 | grep -v 'missing .note.GNU-stack'
/usr/bin/ld: NOTE: This behaviour is deprecated and will be removed in a future version of the linker
$ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test08.lama -o test
$ ./test
6
120

View file

@ -1,6 +1,5 @@
This file was autogenerated.
$ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test09.lama -o test 2>&1 | grep -v 'missing .note.GNU-stack'
/usr/bin/ld: NOTE: This behaviour is deprecated and will be removed in a future version of the linker
$ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test09.lama -o test
$ ./test
Parsing a*| against "aa"... Succ ({"a", "a"})
Parsing a+| against "aa"... Succ ({"a", "a"})

View file

@ -1,6 +1,5 @@
This file was autogenerated.
$ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test10.lama -o test 2>&1 | grep -v 'missing .note.GNU-stack'
/usr/bin/ld: NOTE: This behaviour is deprecated and will be removed in a future version of the linker
$ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test10.lama -o test
$ ./test
Parsing "aaa" with many ... Succ ({"a", "a", "a"})
Parsing "ab" with bad_alter ... Succ ("ab")

View file

@ -1,6 +1,5 @@
This file was autogenerated.
$ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test11.lama -o test 2>&1 | grep -v 'missing .note.GNU-stack'
/usr/bin/ld: NOTE: This behaviour is deprecated and will be removed in a future version of the linker
$ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test11.lama -o test
$ ./test
Succ ("a")
Succ (Add ("a", "a"))

View file

@ -1,5 +1,4 @@
This file was autogenerated.
$ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test12.lama -o test 2>&1 | grep -v 'missing .note.GNU-stack'
/usr/bin/ld: NOTE: This behaviour is deprecated and will be removed in a future version of the linker
$ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test12.lama -o test
$ ./test
Succ (Mul (Mul (Mul (Mul (Mul (Mul (Mul (Mul (Mul (Mul (Mul (Mul (Mul (Mul (Mul (Mul (Mul (Mul (Mul (Mul (Mul (Mul (Mul (Mul (Mul (Mul (Mul (Mul (Mul (Mul (Mul ("a", "a"), "a"), "a"), "a"), "a"), "a"), "a"), "a"), "a"), "a"), "a"), "a"), "a"), "a"), "a"), "a"), "a"), "a"), "a"), "a"), "a"), "a"), "a"), "a"), "a"), "a"), "a"), "a"), "a"), "a"), "a"))

View file

@ -1,6 +1,5 @@
This file was autogenerated.
$ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test13.lama -o test 2>&1 | grep -v 'missing .note.GNU-stack'
/usr/bin/ld: NOTE: This behaviour is deprecated and will be removed in a future version of the linker
$ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test13.lama -o test
$ ./test
Succ (Add ("a", Sub ("a", "a")))
Succ (Mul (Div (Mul ("a", "a"), "a"), "a"))

View file

@ -1,6 +1,5 @@
This file was autogenerated.
$ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test14.lama -o test 2>&1 | grep -v 'missing .note.GNU-stack'
/usr/bin/ld: NOTE: This behaviour is deprecated and will be removed in a future version of the linker
$ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test14.lama -o test
$ ./test
Succ (Add ("a", Sub ("a", "a")))
Succ (Mul (Div (Mul ("a", "a"), "a"), "a"))

View file

@ -1,6 +1,5 @@
This file was autogenerated.
$ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test15.lama -o test 2>&1 | grep -v 'missing .note.GNU-stack'
/usr/bin/ld: NOTE: This behaviour is deprecated and will be removed in a future version of the linker
$ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test15.lama -o test
$ ./test
Succ (Eq ("a", "a"))
Succ (Eq (Mul ("a", "a"), Mul ("a", "a")))

View file

@ -1,6 +1,5 @@
This file was autogenerated.
$ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test16.lama -o test 2>&1 | grep -v 'missing .note.GNU-stack'
/usr/bin/ld: NOTE: This behaviour is deprecated and will be removed in a future version of the linker
$ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test16.lama -o test
$ ./test
Succ (Eq ("a", "a"))
Succ (Eq ("b", "b"))

View file

@ -1,6 +1,5 @@
This file was autogenerated.
$ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test17.lama -o test 2>&1 | grep -v 'missing .note.GNU-stack'
/usr/bin/ld: NOTE: This behaviour is deprecated and will be removed in a future version of the linker
$ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test17.lama -o test
$ ./test
Lazy body: 0
Lazy body: 1

View file

@ -1,6 +1,5 @@
This file was autogenerated.
$ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test18.lama -o test 2>&1 | grep -v 'missing .note.GNU-stack'
/usr/bin/ld: NOTE: This behaviour is deprecated and will be removed in a future version of the linker
$ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test18.lama -o test
$ ./test
1 =?= 1 = 0
symmetricity: ok

View file

@ -1,6 +1,5 @@
This file was autogenerated.
$ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test20.lama -o test 2>&1 | grep -v 'missing .note.GNU-stack'
/usr/bin/ld: NOTE: This behaviour is deprecated and will be removed in a future version of the linker
$ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test20.lama -o test
$ ./test
Empty
Node (0, Empty, Empty)

View file

@ -1,6 +1,5 @@
This file was autogenerated.
$ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test21.lama -o test 2>&1 | grep -v 'missing .note.GNU-stack'
/usr/bin/ld: NOTE: This behaviour is deprecated and will be removed in a future version of the linker
$ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test21.lama -o test
$ ./test
1
1

View file

@ -1,6 +1,5 @@
This file was autogenerated.
$ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test22.lama -o test 2>&1 | grep -v 'missing .note.GNU-stack'
/usr/bin/ld: NOTE: This behaviour is deprecated and will be removed in a future version of the linker
$ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test22.lama -o test
$ ./test
0
{1, 2, 3, 4}

View file

@ -1,6 +1,5 @@
This file was autogenerated.
$ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test23.lama -o test 2>&1 | grep -v 'missing .note.GNU-stack'
/usr/bin/ld: NOTE: This behaviour is deprecated and will be removed in a future version of the linker
$ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test23.lama -o test
$ ./test
1
{2, 3, 4}

View file

@ -1,6 +1,5 @@
This file was autogenerated.
$ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test24.lama -o test 2>&1 | grep -v 'missing .note.GNU-stack'
/usr/bin/ld: NOTE: This behaviour is deprecated and will be removed in a future version of the linker
$ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test24.lama -o test
$ ./test
3
{1}

View file

@ -1,6 +1,5 @@
This file was autogenerated.
$ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test25.lama -o test 2>&1 | grep -v 'missing .note.GNU-stack'
/usr/bin/ld: NOTE: This behaviour is deprecated and will be removed in a future version of the linker
$ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test25.lama -o test
$ ./test
Cloning int: 5
Cloning string: abc

View file

@ -1,6 +1,5 @@
This file was autogenerated.
$ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test26.lama -o test 2>&1 | grep -v 'missing .note.GNU-stack'
/usr/bin/ld: NOTE: This behaviour is deprecated and will be removed in a future version of the linker
$ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test26.lama -o test
$ ./test
Number of commands-line arguments: 1
arg [0 ] = "./test"

View file

@ -1,5 +1,4 @@
This file was autogenerated.
$ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test27.lama -o test 2>&1 | grep -v 'missing .note.GNU-stack'
/usr/bin/ld: NOTE: This behaviour is deprecated and will be removed in a future version of the linker
$ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test27.lama -o test
$ ./test
Yes

View file

@ -1,6 +1,5 @@
This file was autogenerated.
$ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test28.lama -o test 2>&1 | grep -v 'missing .note.GNU-stack'
/usr/bin/ld: NOTE: This behaviour is deprecated and will be removed in a future version of the linker
$ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test28.lama -o test
$ ./test
Succ (Seq ("a", "b"))
Succ (Alt ("a"))

View file

@ -1,6 +1,5 @@
This file was autogenerated.
$ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test29.lama -o test 2>&1 | grep -v 'missing .note.GNU-stack'
/usr/bin/ld: NOTE: This behaviour is deprecated and will be removed in a future version of the linker
$ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test29.lama -o test
$ ./test
Succ (Seq ("a", "b"))
Succ (Alt ("a"))

View file

@ -1,6 +1,5 @@
This file was autogenerated.
$ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test32.lama -o test 2>&1 | grep -v 'missing .note.GNU-stack'
/usr/bin/ld: NOTE: This behaviour is deprecated and will be removed in a future version of the linker
$ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test32.lama -o test
$ ./test
Flattening: 0
Flattening: {A, B, C, D}

View file

@ -1,6 +1,5 @@
This file was autogenerated.
$ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test33.lama -o test 2>&1 | grep -v 'missing .note.GNU-stack'
/usr/bin/ld: NOTE: This behaviour is deprecated and will be removed in a future version of the linker
$ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test33.lama -o test
$ ./test
{}.string: 0
{}.stringcat:

View file

@ -1,6 +1,5 @@
This file was autogenerated.
$ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test34.lama -o test 2>&1 | grep -v 'missing .note.GNU-stack'
/usr/bin/ld: NOTE: This behaviour is deprecated and will be removed in a future version of the linker
$ ../../src/Driver.exe -runtime ../../runtime -I ../../runtime -I ../../stdlib/x64 -ds -dp test34.lama -o test
$ ./test
' " ` % \ \r
' " ` % \
\h @ $ # ; [ ]