Skip to content
This repository has been archived by the owner on Jul 29, 2024. It is now read-only.

Commit

Permalink
+ <:Integer> and + <:Rational> take references (#188)
Browse files Browse the repository at this point in the history
  • Loading branch information
gavrilikhin-d authored May 20, 2024
1 parent 1aad06d commit 2e7a621
Show file tree
Hide file tree
Showing 19 changed files with 201 additions and 161 deletions.
4 changes: 2 additions & 2 deletions ppl/src/core.ppl
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ fn <:Integer> == <:Integer> -> Bool
@mangle_as("integer_less_integer")
fn <:Integer> < <:Integer> -> Bool

fn + <x: Integer> => x
fn + <x: &Integer> => x

@mangle_as("minus_integer")
fn - <:Integer> -> Integer
Expand Down Expand Up @@ -143,7 +143,7 @@ fn <:Rational> == <:Rational> -> Bool
@mangle_as("rational_less_rational")
fn <:Rational> < <:Rational> -> Bool

fn + <x: Rational> => x
fn + <x: &Rational> => x

@mangle_as("minus_rational")
fn - <:Rational> -> Rational
Expand Down
24 changes: 12 additions & 12 deletions src/tests/snapshots/ppl__tests__array.hir.snap
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,8 @@ while `<:Integer> <= <:Integer>`(`clone <:Reference<Integer>>`((i:Integer)), 10)


fn<Integer> size of <ty: Type<Integer>> -> Integer:
let $tmp@4584: Integer = `clone <:Reference<Integer>>`((ty:Type<Integer>).size)
return ($tmp@4584:Integer)
let $tmp@4586: Integer = `clone <:Reference<Integer>>`((ty:Type<Integer>).size)
return ($tmp@4586:Integer)


fn<Integer> allocate <n: Integer> <$arg1: Type<Integer>> -> MemoryAddress:
Expand Down Expand Up @@ -76,13 +76,13 @@ fn<Integer> <array: Reference<Array<Integer>>> is empty -> Bool:


fn<Integer> size of <ty: Type<Integer>> -> Integer:
let $tmp@4584: Integer = `clone <:Reference<Integer>>`((ty:Type<Integer>).size)
return ($tmp@4584:Integer)
let $tmp@4586: Integer = `clone <:Reference<Integer>>`((ty:Type<Integer>).size)
return ($tmp@4586:Integer)


fn<Integer> size of <ty: Type<Integer>> -> Integer:
let $tmp@4584: Integer = `clone <:Reference<Integer>>`((ty:Type<Integer>).size)
return ($tmp@4584:Integer)
let $tmp@4586: Integer = `clone <:Reference<Integer>>`((ty:Type<Integer>).size)
return ($tmp@4586:Integer)


fn<Integer> allocate <n: Integer> <$arg1: Type<Integer>> -> MemoryAddress:
Expand Down Expand Up @@ -151,8 +151,8 @@ fn<Integer> <array: Reference<Array<Integer>>> is not empty -> Bool:


fn<Integer> size of <ty: Type<Integer>> -> Integer:
let $tmp@4584: Integer = `clone <:Reference<Integer>>`((ty:Type<Integer>).size)
return ($tmp@4584:Integer)
let $tmp@4586: Integer = `clone <:Reference<Integer>>`((ty:Type<Integer>).size)
return ($tmp@4586:Integer)


@mangle_as("read_memory")
Expand Down Expand Up @@ -197,13 +197,13 @@ fn <x: Integer> <= <y: Integer> -> Bool:


fn<Integer> size of <ty: Type<Integer>> -> Integer:
let $tmp@4584: Integer = `clone <:Reference<Integer>>`((ty:Type<Integer>).size)
return ($tmp@4584:Integer)
let $tmp@4586: Integer = `clone <:Reference<Integer>>`((ty:Type<Integer>).size)
return ($tmp@4586:Integer)


fn<Integer> size of <ty: Type<Integer>> -> Integer:
let $tmp@4584: Integer = `clone <:Reference<Integer>>`((ty:Type<Integer>).size)
return ($tmp@4584:Integer)
let $tmp@4586: Integer = `clone <:Reference<Integer>>`((ty:Type<Integer>).size)
return ($tmp@4586:Integer)


fn<Integer> allocate <n: Integer> <$arg1: Type<Integer>> -> MemoryAddress:
Expand Down
6 changes: 3 additions & 3 deletions src/tests/snapshots/ppl__tests__array.ir.snap
Original file line number Diff line number Diff line change
Expand Up @@ -272,9 +272,9 @@ define private %Integer @"size of <:Type<Integer>>"(%"Type<Integer>" %0) !dbg !5
store %"Type<Integer>" %0, ptr %ty, align 8
%size = getelementptr inbounds %"Type<Integer>", ptr %ty, i32 0, i32 1, !dbg !51
%2 = call %Integer @clone_integer(ptr %size), !dbg !51
%"$tmp@4584" = alloca %Integer, align 8, !dbg !51
store %Integer %2, ptr %"$tmp@4584", align 8, !dbg !51
%3 = load %Integer, ptr %"$tmp@4584", align 8, !dbg !51
%"$tmp@4586" = alloca %Integer, align 8, !dbg !51
store %Integer %2, ptr %"$tmp@4586", align 8, !dbg !51
%3 = load %Integer, ptr %"$tmp@4586", align 8, !dbg !51
store %Integer %3, ptr %return_value, align 8, !dbg !51
br label %return, !dbg !51

Expand Down
8 changes: 4 additions & 4 deletions src/tests/snapshots/ppl__tests__empty_constructor.hir.snap
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,13 @@ let a: A = A { }
fn<A> type of <$arg0: A> -> Type<A>:
let $tmp@4641: Type<A> = (copy Type<A>:Type<A>)
return ($tmp@4641:Type<A>)
let $tmp@4643: Type<A> = (copy Type<A>:Type<A>)
return ($tmp@4643:Type<A>)
fn<A> String from <ty: Type<A>> -> String:
let $tmp@4516: String = `clone <:Reference<String>>`((ty:Type<A>).name)
return ($tmp@4516:String)
let $tmp@4518: String = `clone <:Reference<String>>`((ty:Type<A>).name)
return ($tmp@4518:String)
fn println <x: Type<A>> -> None:
Expand Down
12 changes: 6 additions & 6 deletions src/tests/snapshots/ppl__tests__empty_constructor.ir.snap
Original file line number Diff line number Diff line change
Expand Up @@ -154,9 +154,9 @@ define private %String @"String from <:Type<A>>"(%"Type<A>" %0) !dbg !29 {
store %"Type<A>" %0, ptr %ty, align 8
%name = getelementptr inbounds %"Type<A>", ptr %ty, i32 0, i32 0, !dbg !30
%2 = call %String @clone_string(ptr %name), !dbg !30
%"$tmp@4516" = alloca %String, align 8, !dbg !30
store %String %2, ptr %"$tmp@4516", align 8, !dbg !30
%3 = load %String, ptr %"$tmp@4516", align 8, !dbg !30
%"$tmp@4518" = alloca %String, align 8, !dbg !30
store %String %2, ptr %"$tmp@4518", align 8, !dbg !30
%3 = load %String, ptr %"$tmp@4518", align 8, !dbg !30
store %String %3, ptr %return_value, align 8, !dbg !30
br label %return, !dbg !30

Expand All @@ -174,9 +174,9 @@ define private %"Type<A>" @"type of <:A>"(ptr %0) !dbg !31 {
%"$arg0" = alloca ptr, align 8
store ptr %0, ptr %"$arg0", align 8
%2 = load %"Type<A>", ptr @"Type<A>", align 8, !dbg !32
%"$tmp@4641" = alloca %"Type<A>", align 8, !dbg !32
store %"Type<A>" %2, ptr %"$tmp@4641", align 8, !dbg !32
%3 = load %"Type<A>", ptr %"$tmp@4641", align 8, !dbg !32
%"$tmp@4643" = alloca %"Type<A>", align 8, !dbg !32
store %"Type<A>" %2, ptr %"$tmp@4643", align 8, !dbg !32
%3 = load %"Type<A>", ptr %"$tmp@4643", align 8, !dbg !32
store %"Type<A>" %3, ptr %return_value, align 8, !dbg !32
br label %return, !dbg !32

Expand Down
4 changes: 3 additions & 1 deletion src/tests/snapshots/ppl__tests__integer.hir.snap
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,15 @@ source: src/tests/mod.rs
expression: hir
---
`println <:Integer>`(`default <:Type<Integer>>`((copy Type<Integer>:Type<Integer>)))
`println <:Integer>`(`+ <:Integer>`(1))
let $tmp@35: Integer = 1
`println <:Integer>`(`clone <:Reference<Integer>>`((*`+ <:Reference<Integer>>`((&$tmp@35:Reference<Integer>)):Integer)))
`println <:Integer>`(`- <:Integer>`(2))
`println <:Integer>`(`<:Integer> + <:Integer>`(2, 1))
`println <:Integer>`(`<:Integer> ^ <:Integer>`(2, 2))
`println <:Integer>`(`<:Integer> - <:Integer>`(5, 0))
`println <:Integer>`(`<:Integer> * <:Integer>`(2, 3))
`println <:Rational>`(`<:Integer> / <:Integer>`(14, 2))
`destroy <:ReferenceMut<Integer>>`(($tmp@35:Integer))
==MONOMORPHIZED==
Expand Down
44 changes: 31 additions & 13 deletions src/tests/snapshots/ppl__tests__integer.ir.snap
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ source_filename = "src/main.ppl"
@3 = private unnamed_addr constant [4 x i8] c"F64\00", align 1
@"Type<Integer>" = private global %"Type<Integer>" zeroinitializer
@4 = private unnamed_addr constant [8 x i8] c"Integer\00", align 1
@"$tmp@35" = global %Integer zeroinitializer

define private void @initialize() !dbg !3 {
%1 = alloca %"Type<String>", align 8, !dbg !7
Expand Down Expand Up @@ -118,8 +119,9 @@ define void @main.execute() !dbg !21 {
%1 = load %"Type<Integer>", ptr @"Type<Integer>", align 8, !dbg !25
%2 = call %Integer @"default <:Type<Integer>>"(%"Type<Integer>" %1), !dbg !25
call void @"println <:Integer>"(%Integer %2), !dbg !25
%3 = call %Integer @integer_from_i64(i64 1), !dbg !26
%4 = call %Integer @"+ <:Integer>"(%Integer %3), !dbg !26
call void @initialize.5(), !dbg !26
%3 = call ptr @"+ <:Reference<Integer>>"(ptr @"$tmp@35"), !dbg !26
%4 = call %Integer @clone_integer(ptr %3), !dbg !26
call void @"println <:Integer>"(%Integer %4), !dbg !26
%5 = call %Integer @integer_from_i64(i64 2), !dbg !27
%6 = call %Integer @minus_integer(%Integer %5), !dbg !27
Expand All @@ -144,7 +146,8 @@ define void @main.execute() !dbg !21 {
%20 = call %Integer @integer_from_i64(i64 2), !dbg !37
%21 = call %Rational @integer_slash_integer(%Integer %19, %Integer %20), !dbg !37
call void @"println <:Rational>"(%Rational %21), !dbg !37
br label %return, !dbg !37
call void @destroy_integer(ptr @"$tmp@35"), !dbg !26
br label %return, !dbg !26

return: ; preds = %0
ret void
Expand All @@ -170,7 +173,18 @@ declare void @"println <:Reference<String>>"(ptr)

declare %Integer @"default <:Type<Integer>>"(%"Type<Integer>")

declare %Integer @"+ <:Integer>"(%Integer)
define private void @initialize.5() !dbg !40 {
%1 = call %Integer @integer_from_i64(i64 1), !dbg !41
store %Integer %1, ptr @"$tmp@35", align 8, !dbg !41
br label %return, !dbg !41

return: ; preds = %0
ret void
}

declare %Integer @clone_integer(ptr)

declare ptr @"+ <:Reference<Integer>>"(ptr)

declare %Integer @minus_integer(%Integer)

Expand All @@ -182,15 +196,15 @@ declare %Integer @"<:Integer> - <:Integer>"(%Integer, %Integer)

declare %Integer @integer_star_integer(%Integer, %Integer)

define private void @"println <:Rational>"(%Rational %0) !dbg !40 {
define private void @"println <:Rational>"(%Rational %0) !dbg !42 {
%x = alloca %Rational, align 8
store %Rational %0, ptr %x, align 8
%2 = load %Rational, ptr %x, align 8, !dbg !41
%3 = call %String @rational_as_string(%Rational %2), !dbg !41
%"$tmp@185" = alloca %String, align 8, !dbg !41
store %String %3, ptr %"$tmp@185", align 8, !dbg !41
call void @"println <:Reference<String>>"(ptr %"$tmp@185"), !dbg !41
br label %return, !dbg !41
%2 = load %Rational, ptr %x, align 8, !dbg !43
%3 = call %String @rational_as_string(%Rational %2), !dbg !43
%"$tmp@185" = alloca %String, align 8, !dbg !43
store %String %3, ptr %"$tmp@185", align 8, !dbg !43
call void @"println <:Reference<String>>"(ptr %"$tmp@185"), !dbg !43
br label %return, !dbg !43

return: ; preds = %1
ret void
Expand All @@ -200,6 +214,8 @@ declare %String @rational_as_string(%Rational)

declare %Rational @integer_slash_integer(%Integer, %Integer)

declare void @destroy_integer(ptr)

!llvm.module.flags = !{!0}
!llvm.dbg.cu = !{!1}

Expand Down Expand Up @@ -243,5 +259,7 @@ declare %Rational @integer_slash_integer(%Integer, %Integer)
!37 = !DILocation(line: 7, column: 13, scope: !21)
!38 = distinct !DISubprogram(name: "println <:Integer>", linkageName: "println <:Integer>", scope: !21, file: !2, line: 7, type: !4, spFlags: DISPFlagDefinition, unit: !1)
!39 = !DILocation(line: 7, column: 14, scope: !38)
!40 = distinct !DISubprogram(name: "println <:Rational>", linkageName: "println <:Rational>", scope: !21, file: !2, line: 7, type: !4, spFlags: DISPFlagDefinition, unit: !1)
!41 = !DILocation(line: 7, column: 14, scope: !40)
!40 = distinct !DISubprogram(name: "initialize.5", linkageName: "initialize.5", scope: !21, file: !2, line: 1, type: !4, spFlags: DISPFlagDefinition, unit: !1)
!41 = !DILocation(line: 1, column: 9, scope: !40)
!42 = distinct !DISubprogram(name: "println <:Rational>", linkageName: "println <:Rational>", scope: !21, file: !2, line: 7, type: !4, spFlags: DISPFlagDefinition, unit: !1)
!43 = !DILocation(line: 7, column: 14, scope: !42)
4 changes: 2 additions & 2 deletions src/tests/snapshots/ppl__tests__memory.hir.snap
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,8 @@ let x: ReferenceMut<Integer> = `<:Type<Integer>> at <:Reference<MemoryAddress>>`
fn<Integer> size of <ty: Type<Integer>> -> Integer:
let $tmp@4584: Integer = `clone <:Reference<Integer>>`((ty:Type<Integer>).size)
return ($tmp@4584:Integer)
let $tmp@4586: Integer = `clone <:Reference<Integer>>`((ty:Type<Integer>).size)
return ($tmp@4586:Integer)
fn<Integer> allocate <n: Integer> <$arg1: Type<Integer>> -> MemoryAddress:
Expand Down
6 changes: 3 additions & 3 deletions src/tests/snapshots/ppl__tests__memory.ir.snap
Original file line number Diff line number Diff line change
Expand Up @@ -183,9 +183,9 @@ define private %Integer @"size of <:Type<Integer>>"(%"Type<Integer>" %0) !dbg !3
store %"Type<Integer>" %0, ptr %ty, align 8
%size = getelementptr inbounds %"Type<Integer>", ptr %ty, i32 0, i32 1, !dbg !40
%2 = call %Integer @clone_integer(ptr %size), !dbg !40
%"$tmp@4584" = alloca %Integer, align 8, !dbg !40
store %Integer %2, ptr %"$tmp@4584", align 8, !dbg !40
%3 = load %Integer, ptr %"$tmp@4584", align 8, !dbg !40
%"$tmp@4586" = alloca %Integer, align 8, !dbg !40
store %Integer %2, ptr %"$tmp@4586", align 8, !dbg !40
%3 = load %Integer, ptr %"$tmp@4586", align 8, !dbg !40
store %Integer %3, ptr %return_value, align 8, !dbg !40
br label %return, !dbg !40

Expand Down
4 changes: 3 additions & 1 deletion src/tests/snapshots/ppl__tests__rational.hir.snap
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@ source: src/tests/mod.rs
expression: hir
---
`println <:Rational>`(0.0)
`println <:Rational>`(`+ <:Rational>`(1.0))
let $tmp@21: Rational = 1.0
`println <:Rational>`(`clone <:Reference<Rational>>`((*`+ <:Reference<Rational>>`((&$tmp@21:Reference<Rational>)):Rational)))
`println <:Rational>`(`- <:Rational>`(2.0))
`println <:Rational>`(`<:Rational> + <:Rational>`(1.0, 2.0))
`println <:Rational>`(`<:Rational> - <:Rational>`(5.0, 1.0))
Expand All @@ -17,6 +18,7 @@ expression: hir
`println <:Bool>`(`<:Rational> <= <:Rational>`(0.0, 1.0))
`println <:Bool>`(`<:Rational> >= <:Rational>`(0.0, 0.0))
`println <:Bool>`(`<:Rational> >= <:Rational>`(1.0, 0.0))
`destroy <:ReferenceMut<Rational>>`(($tmp@21:Rational))
==MONOMORPHIZED==
Expand Down
Loading

0 comments on commit 2e7a621

Please sign in to comment.