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

Commit

Permalink
println <:String> takes reference
Browse files Browse the repository at this point in the history
  • Loading branch information
gavrilikhin-d committed May 20, 2024
1 parent 9355cf7 commit 4f2669a
Show file tree
Hide file tree
Showing 61 changed files with 1,180 additions and 802 deletions.
2 changes: 1 addition & 1 deletion ppl/src/core.ppl
Original file line number Diff line number Diff line change
Expand Up @@ -191,7 +191,7 @@ fn <:String> + <:String> -> String
fn print <:&String>

/// Print string with a newline at the end
fn println <str: String> => print (str + "\n")
fn println <str: &String> => print (str + "\n")

@mangle_as("destroy_string")
fn destroy <:&mut String>
Expand Down
6 changes: 4 additions & 2 deletions src/tests/snapshots/ppl__tests__address_of.hir.snap
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,8 @@ let x_mut_ref: ReferenceMut<Integer> = `<:Type<Integer>> at <:Reference<MemoryAd
fn String from <$arg0: Integer> -> String
fn println <x: Integer> -> None:
let $tmp@176: None = `println <:String>`(`String from <:Integer>`((copy x:Integer)))
let $tmp@185: String = `String from <:Integer>`((copy x:Integer))
let $tmp@176: None = `println <:Reference<String>>`((&$tmp@185:Reference<String>))
return ($tmp@176:None)
Expand All @@ -32,5 +33,6 @@ fn<Integer> <ty: Type<Integer>> at <address: Reference<MemoryAddress>> -> Refere
fn String from <$arg0: Integer> -> String
fn println <x: Integer> -> None:
let $tmp@176: None = `println <:String>`(`String from <:Integer>`((copy x:Integer)))
let $tmp@185: String = `String from <:Integer>`((copy x:Integer))
let $tmp@176: None = `println <:Reference<String>>`((&$tmp@185:Reference<String>))
return ($tmp@176:None)
8 changes: 5 additions & 3 deletions src/tests/snapshots/ppl__tests__address_of.ir.snap
Original file line number Diff line number Diff line change
Expand Up @@ -149,17 +149,19 @@ define private void @"println <:Integer>"(%Integer %0) !dbg !35 {
store %Integer %0, ptr %x, align 8
%2 = load %Integer, ptr %x, align 8, !dbg !36
%3 = call %String @integer_as_string(%Integer %2), !dbg !36
call void @"println <:String>"(%String %3), !dbg !36
%"$tmp@185" = alloca %String, align 8, !dbg !36
store %String %3, ptr %"$tmp@185", align 8, !dbg !36
call void @"println <:Reference<String>>"(ptr %"$tmp@185"), !dbg !36
br label %return, !dbg !36

return: ; preds = %1
ret void
}

declare void @"println <:String>"(%String)

declare %String @integer_as_string(%Integer)

declare void @"println <:Reference<String>>"(ptr)

declare %Integer @clone_integer(ptr)

define private void @initialize.6() !dbg !37 {
Expand Down
44 changes: 26 additions & 18 deletions src/tests/snapshots/ppl__tests__array.hir.snap
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,16 @@ expression: hir
let mut arr: Array<Integer> = `<:Type<Integer>> [ ]`((copy Type<Integer>:Type<Integer>))
`println <:Array<Integer>>`((copy arr:Array<Integer>))
if `<:Reference<Array<Integer>>> is empty`((&arr:ReferenceMut<Array<Integer>>)):
`println <:String>`("Empty")
let $tmp@62: String = "Empty"
`println <:Reference<String>>`((&$tmp@62:Reference<String>))
`destroy <:ReferenceMut<String>>`(($tmp@62:String))

`push <:Integer> to <:ReferenceMut<Array<Integer>>>`(1, (&arr:ReferenceMut<Array<Integer>>))
`println <:Array<Integer>>`((copy arr:Array<Integer>))
if `<:Reference<Array<Integer>>> is not empty`((&arr:ReferenceMut<Array<Integer>>)):
`println <:String>`("Not empty")
let $tmp@126: String = "Not empty"
`println <:Reference<String>>`((&$tmp@126:Reference<String>))
`destroy <:ReferenceMut<String>>`(($tmp@126:String))

`println <:Integer>`(`clone <:Reference<Integer>>`((*`<:ReferenceMut<Array<Integer>>> [ <:Integer> ]`((&arr:ReferenceMut<Array<Integer>>), 0):Integer)))
let mut i: Integer = 2
Expand All @@ -25,8 +29,8 @@ while `<:Integer> <= <:Integer>`(`clone <:Reference<Integer>>`((i:Integer)), 10)


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


fn<Integer> allocate <n: Integer> <$arg1: Type<Integer>> -> MemoryAddress:
Expand Down Expand Up @@ -60,7 +64,8 @@ fn<Integer> String from <array: Array<Integer>> -> String:


fn println <x: Array<Integer>> -> None:
let $tmp@176: None = `println <:String>`(`String from <:Array<Integer>>`((copy x:Array<Integer>)))
let $tmp@185: String = `String from <:Array<Integer>>`((copy x:Array<Integer>))
let $tmp@176: None = `println <:Reference<String>>`((&$tmp@185:Reference<String>))
return ($tmp@176:None)


Expand All @@ -71,13 +76,13 @@ fn<Integer> <array: Reference<Array<Integer>>> is empty -> Bool:


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


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


fn<Integer> allocate <n: Integer> <$arg1: Type<Integer>> -> MemoryAddress:
Expand Down Expand Up @@ -134,7 +139,8 @@ fn<Integer> String from <array: Array<Integer>> -> String:


fn println <x: Array<Integer>> -> None:
let $tmp@176: None = `println <:String>`(`String from <:Array<Integer>>`((copy x:Array<Integer>)))
let $tmp@185: String = `String from <:Array<Integer>>`((copy x:Array<Integer>))
let $tmp@176: None = `println <:Reference<String>>`((&$tmp@185:Reference<String>))
return ($tmp@176:None)


Expand All @@ -145,8 +151,8 @@ fn<Integer> <array: Reference<Array<Integer>>> is not empty -> Bool:


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


@mangle_as("read_memory")
Expand All @@ -169,7 +175,8 @@ fn<Integer> <array: ReferenceMut<Array<Integer>>> [ <i: Integer> ] -> ReferenceM
fn String from <$arg0: Integer> -> String

fn println <x: Integer> -> None:
let $tmp@176: None = `println <:String>`(`String from <:Integer>`((copy x:Integer)))
let $tmp@185: String = `String from <:Integer>`((copy x:Integer))
let $tmp@176: None = `println <:Reference<String>>`((&$tmp@185:Reference<String>))
return ($tmp@176:None)


Expand All @@ -190,13 +197,13 @@ fn <x: Integer> <= <y: Integer> -> Bool:


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


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


fn<Integer> allocate <n: Integer> <$arg1: Type<Integer>> -> MemoryAddress:
Expand Down Expand Up @@ -260,5 +267,6 @@ fn<Integer> String from <array: Array<Integer>> -> String:


fn println <x: Array<Integer>> -> None:
let $tmp@176: None = `println <:String>`(`String from <:Array<Integer>>`((copy x:Array<Integer>)))
let $tmp@185: String = `String from <:Array<Integer>>`((copy x:Array<Integer>))
let $tmp@176: None = `println <:Reference<String>>`((&$tmp@185:Reference<String>))
return ($tmp@176:None)
Loading

0 comments on commit 4f2669a

Please sign in to comment.