diff --git a/README.md b/README.md index 5e082c3d..47b6e935 100644 --- a/README.md +++ b/README.md @@ -29,12 +29,15 @@ * [x] Fix memory leak due to pointers to builtin types * [x] Destructors for parameters * [x] No tmps for literals inside of constructors +* [x] Fix recursive trait (AsString with prints) --- ### Current task -* [ ] Sum of series benchmark +* [ ] Benchmark for linear algebra --- +* [ ] Sum of series benchmark +* [ ] Find test that is taking infinite time +* [ ] Use traits to check for `clone` and `destructoy` functions * [ ] Forbid recursion without `@recursive` annotation -* [ ] Fix recursive trait (AsString with prints) * [ ] Generate clone for types with clonable members * [ ] Generate destructors for types with destructible members * [ ] Add type aliases diff --git a/ppl/src/array.ppl b/ppl/src/array.ppl index f50301cd..d5a2c625 100644 --- a/ppl/src/array.ppl +++ b/ppl/src/array.ppl @@ -2,7 +2,7 @@ use core.* use math.* use memory.* -use as_string.* +use printable.* /// Array of values type Array: @@ -48,7 +48,7 @@ fn push to >: fn > is empty => array.size == 0 fn > is not empty => array.size > 0 -fn String from > -> String: +fn String from > -> String: let mut str = "[" if array is not empty: str += (String from array[0]) diff --git a/ppl/src/as_string.ppl b/ppl/src/as_string.ppl deleted file mode 100644 index 0ec402b1..00000000 --- a/ppl/src/as_string.ppl +++ /dev/null @@ -1,11 +0,0 @@ -use core.* - -/// Trait for things that may be interpreted as string -trait AsString: - fn String from <:Self> -> String - -/// Print anything that may be interpreted as String -fn print => print (String from x) - -/// Print anything that may be interpreted as String with newline -fn println => println (String from x) \ No newline at end of file diff --git a/ppl/src/lib.ppl b/ppl/src/lib.ppl index b253a21e..f5aa7f78 100644 --- a/ppl/src/lib.ppl +++ b/ppl/src/lib.ppl @@ -6,4 +6,4 @@ use f64.* use memory.* use threads.* use math.* -use as_string.* \ No newline at end of file +use printable.* \ No newline at end of file diff --git a/ppl/src/printable.ppl b/ppl/src/printable.ppl new file mode 100644 index 00000000..badb4cde --- /dev/null +++ b/ppl/src/printable.ppl @@ -0,0 +1,9 @@ +use core.* + +/// Trait for things that may be printed +trait Printable: + fn String from <:Self> -> String + + fn print => print (String from x) + + fn println => println (String from x) \ No newline at end of file diff --git a/src/ir/to_ir.rs b/src/ir/to_ir.rs index bdc896aa..34273a86 100644 --- a/src/ir/to_ir.rs +++ b/src/ir/to_ir.rs @@ -289,11 +289,12 @@ impl<'llvm> DeclareGlobal<'llvm> for FunctionData { context.module.add_function( &self.mangled_name(), ty, - // Private linkage for monomorphized generic functions - if self.generic_types.is_empty() || self.mangled_name.is_some() { - None - } else { + // Private linkage for monomorphized generic functions or functions from traits + if self.mangled_name.is_none() && (!self.generic_types.is_empty() || self.tr.is_some()) + { Some(Linkage::Private) + } else { + None }, ) } diff --git a/src/semantics/contexts/function.rs b/src/semantics/contexts/function.rs index 1a294d69..a06afdf2 100644 --- a/src/semantics/contexts/function.rs +++ b/src/semantics/contexts/function.rs @@ -59,6 +59,21 @@ impl FindDeclaration for FunctionContext<'_> { fn parent(&self) -> Option<&dyn FindDeclaration> { Some(self.parent as _) } + + fn functions_with_n_name_parts(&self, n: usize) -> Vec { + let mut functions: Vec<_> = self + .functions_with_n_name_parts_here(n) + .into_iter() + .chain( + FindDeclaration::parent(self) + .and_then(|p| Some(p.functions_with_n_name_parts(n))) + .unwrap_or_default(), + ) + .collect(); + // TODO: allow recursion, if has @recursive + functions.retain(|f| *f != self.function); + functions + } } impl AddDeclaration for FunctionContext<'_> { diff --git a/src/tests/snapshots/ppl__tests__address_of.hir.snap b/src/tests/snapshots/ppl__tests__address_of.hir.snap index bdf032ed..cddd1319 100644 --- a/src/tests/snapshots/ppl__tests__address_of.hir.snap +++ b/src/tests/snapshots/ppl__tests__address_of.hir.snap @@ -20,16 +20,17 @@ fn address of > -> MemoryAddress fn > at -> ReferenceMut @mangle_as("integer_as_string") -fn String from <:Integer> -> String +fn String from <$arg0: Integer> -> String + +fn println -> None: + let $tmp@176: None = println String from (x:Integer) + return ($tmp@176:None) -fn println -> None: - let $tmp@314: None = println String from (x:Integer) - return ($tmp@314:None) @mangle_as("integer_as_string") -fn String from <:Integer> -> String +fn String from <$arg0: Integer> -> String -fn println -> None: - let $tmp@314: None = println String from (x:Integer) - return ($tmp@314:None) +fn println -> None: + let $tmp@176: None = println String from (x:Integer) + return ($tmp@176:None) diff --git a/src/tests/snapshots/ppl__tests__array.hir.snap b/src/tests/snapshots/ppl__tests__array.hir.snap index 9036c85f..a26a6b93 100644 --- a/src/tests/snapshots/ppl__tests__array.hir.snap +++ b/src/tests/snapshots/ppl__tests__array.hir.snap @@ -42,8 +42,8 @@ fn <$arg0: Type> [ ] -> Array: fn iterator for >> -> Iterator: - let $tmp@1686: Iterator = Iterator { array: (array:Reference>), index: 0 } - return ($tmp@1686:Iterator) + let $tmp@1687: Iterator = Iterator { array: (array:Reference>), index: 0 } + return ($tmp@1687:Iterator) fn String from >> -> String: @@ -59,14 +59,15 @@ fn String from >> -> String: destroy (i:Integer) (&str:ReferenceMut) += "]" - let $tmp@1461: String = clone (str:String) + let $tmp@1462: String = clone (str:String) destroy (str:String) - return ($tmp@1461:String) + return ($tmp@1462:String) -fn> println > -> None: - let $tmp@314: None = println String from (x:Array) - return ($tmp@314:None) +fn println > -> None: + let $tmp@176: None = println String from (x:Array) + return ($tmp@176:None) + fn >> is empty -> Bool: @@ -147,14 +148,15 @@ fn String from >> -> String: destroy (i:Integer) (&str:ReferenceMut) += "]" - let $tmp@1461: String = clone (str:String) + let $tmp@1462: String = clone (str:String) destroy (str:String) - return ($tmp@1461:String) + return ($tmp@1462:String) + +fn println > -> None: + let $tmp@176: None = println String from (x:Array) + return ($tmp@176:None) -fn> println > -> None: - let $tmp@314: None = println String from (x:Array) - return ($tmp@314:None) fn >> is not empty -> Bool: @@ -181,16 +183,17 @@ fn >> [ ] -> Reference -> String +fn String from <$arg0: Integer> -> String + +fn println -> None: + let $tmp@176: None = println String from (x:Integer) + return ($tmp@176:None) -fn println -> None: - let $tmp@314: None = println String from (x:Integer) - return ($tmp@314:None) fn >> exists -> Bool: - let $tmp@1754: Bool = clone (*it:Iterator).index < clone (*(*it:Iterator).array:Array).size - return ($tmp@1754:Bool) + let $tmp@1755: Bool = clone (*it:Iterator).index < clone (*(*it:Iterator).array:Array).size + return ($tmp@1755:Bool) fn size of > -> Integer: @@ -220,16 +223,17 @@ fn >> [ ] -> Reference value from >> -> Reference: - let $tmp@1885: Reference = (*it:Iterator).array [ clone (*it:Iterator).index ] - return ($tmp@1885:Reference) + let $tmp@1886: Reference = (*it:Iterator).array [ clone (*it:Iterator).index ] + return ($tmp@1886:Reference) @mangle_as("integer_as_string") -fn String from <:Integer> -> String +fn String from <$arg0: Integer> -> String + +fn println -> None: + let $tmp@176: None = println String from (x:Integer) + return ($tmp@176:None) -fn println -> None: - let $tmp@314: None = println String from (x:Integer) - return ($tmp@314:None) fn advance >> -> None: diff --git a/src/tests/snapshots/ppl__tests__array.ir.snap b/src/tests/snapshots/ppl__tests__array.ir.snap index cfa42082..99216449 100644 --- a/src/tests/snapshots/ppl__tests__array.ir.snap +++ b/src/tests/snapshots/ppl__tests__array.ir.snap @@ -234,9 +234,9 @@ define private %"Iterator" @"iterator for <:Reference>>" %4 = call %Integer @integer_from_i64(i64 0), !dbg !41 store %Integer %4, ptr %"Iterator.index", align 8, !dbg !41 %5 = load %"Iterator", ptr %2, align 8, !dbg !41 - %"$tmp@1686" = alloca %"Iterator", align 8, !dbg !41 - store %"Iterator" %5, ptr %"$tmp@1686", align 8, !dbg !41 - %6 = load %"Iterator", ptr %"$tmp@1686", align 8, !dbg !41 + %"$tmp@1687" = alloca %"Iterator", align 8, !dbg !41 + store %"Iterator" %5, ptr %"$tmp@1687", align 8, !dbg !41 + %6 = load %"Iterator", ptr %"$tmp@1687", align 8, !dbg !41 store %"Iterator" %6, ptr %return_value, align 8, !dbg !41 br label %return, !dbg !41 @@ -250,7 +250,7 @@ define private void @"println <:Array>"(%"Array" %0) !dbg !42 store %"Array" %0, ptr %x, align 8 %2 = call %String @"String from <:Reference>>"(ptr %x), !dbg !43 call void @"println <:String>"(%String %2), !dbg !43 - br label %return, !dbg !43 + br label %return, !dbg !44 return: ; preds = %1 ret void @@ -258,82 +258,82 @@ return: ; preds = %1 declare void @"println <:String>"(%String) -define private %String @"String from <:Reference>>"(ptr %0) !dbg !44 { +define private %String @"String from <:Reference>>"(ptr %0) !dbg !45 { %return_value = alloca %String, align 8 %array = alloca ptr, align 8 store ptr %0, ptr %array, align 8 - %2 = call %String @string_from_c_string_and_length(ptr @2, i64 1), !dbg !45 - %str = alloca %String, align 8, !dbg !45 - store %String %2, ptr %str, align 8, !dbg !45 - br label %if.condition, !dbg !45 + %2 = call %String @string_from_c_string_and_length(ptr @2, i64 1), !dbg !46 + %str = alloca %String, align 8, !dbg !46 + store %String %2, ptr %str, align 8, !dbg !46 + br label %if.condition, !dbg !46 if.condition: ; preds = %1 - %3 = call i1 @"<:Reference>> is not empty"(ptr %array), !dbg !45 - br i1 %3, label %if.body, label %10, !dbg !45 + %3 = call i1 @"<:Reference>> is not empty"(ptr %array), !dbg !46 + br i1 %3, label %if.body, label %10, !dbg !46 if.body: ; preds = %if.condition - %4 = call %Integer @integer_from_i64(i64 0), !dbg !45 - %5 = call ptr @"<:Reference>> [ <:Integer> ]"(ptr %array, %Integer %4), !dbg !45 - %6 = load %Integer, ptr %5, align 8, !dbg !45 - %7 = call %String @integer_as_string(%Integer %6), !dbg !45 - call void @"<:ReferenceMut> += <:String>"(ptr %str, %String %7), !dbg !45 - %8 = call %Integer @integer_from_i64(i64 1), !dbg !45 - %i = alloca %Integer, align 8, !dbg !45 - store %Integer %8, ptr %i, align 8, !dbg !45 - br label %while.condition, !dbg !45 + %4 = call %Integer @integer_from_i64(i64 0), !dbg !46 + %5 = call ptr @"<:Reference>> [ <:Integer> ]"(ptr %array, %Integer %4), !dbg !46 + %6 = load %Integer, ptr %5, align 8, !dbg !46 + %7 = call %String @integer_as_string(%Integer %6), !dbg !46 + call void @"<:ReferenceMut> += <:String>"(ptr %str, %String %7), !dbg !46 + %8 = call %Integer @integer_from_i64(i64 1), !dbg !46 + %i = alloca %Integer, align 8, !dbg !46 + store %Integer %8, ptr %i, align 8, !dbg !46 + br label %while.condition, !dbg !46 return: ; preds = %10 %9 = load %String, ptr %return_value, align 8 ret %String %9 10: ; preds = %if.condition, %24 - %11 = call %String @string_from_c_string_and_length(ptr @4, i64 1), !dbg !45 - call void @"<:ReferenceMut> += <:String>"(ptr %str, %String %11), !dbg !45 - %12 = call %String @clone_string(ptr %str), !dbg !45 - %"$tmp@1461" = alloca %String, align 8, !dbg !45 - store %String %12, ptr %"$tmp@1461", align 8, !dbg !45 - call void @destroy_string(ptr %str), !dbg !45 - %13 = load %String, ptr %"$tmp@1461", align 8, !dbg !45 - store %String %13, ptr %return_value, align 8, !dbg !45 - br label %return, !dbg !45 + %11 = call %String @string_from_c_string_and_length(ptr @4, i64 1), !dbg !46 + call void @"<:ReferenceMut> += <:String>"(ptr %str, %String %11), !dbg !46 + %12 = call %String @clone_string(ptr %str), !dbg !46 + %"$tmp@1462" = alloca %String, align 8, !dbg !46 + store %String %12, ptr %"$tmp@1462", align 8, !dbg !46 + call void @destroy_string(ptr %str), !dbg !46 + %13 = load %String, ptr %"$tmp@1462", align 8, !dbg !46 + store %String %13, ptr %return_value, align 8, !dbg !46 + br label %return, !dbg !46 while.condition: ; preds = %while.body, %if.body - %14 = call %Integer @clone_integer(ptr %i), !dbg !45 - %15 = load ptr, ptr %array, align 8, !dbg !45 - %size = getelementptr inbounds %"Array", ptr %15, i32 0, i32 0, !dbg !45 - %16 = call %Integer @clone_integer(ptr %size), !dbg !45 - %17 = call i1 @integer_less_integer(%Integer %14, %Integer %16), !dbg !45 - br i1 %17, label %while.body, label %24, !dbg !45 + %14 = call %Integer @clone_integer(ptr %i), !dbg !46 + %15 = load ptr, ptr %array, align 8, !dbg !46 + %size = getelementptr inbounds %"Array", ptr %15, i32 0, i32 0, !dbg !46 + %16 = call %Integer @clone_integer(ptr %size), !dbg !46 + %17 = call i1 @integer_less_integer(%Integer %14, %Integer %16), !dbg !46 + br i1 %17, label %while.body, label %24, !dbg !46 while.body: ; preds = %while.condition - %18 = call %String @string_from_c_string_and_length(ptr @3, i64 2), !dbg !45 - call void @"<:ReferenceMut> += <:String>"(ptr %str, %String %18), !dbg !45 - %19 = call %Integer @clone_integer(ptr %i), !dbg !45 - %20 = call ptr @"<:Reference>> [ <:Integer> ]"(ptr %array, %Integer %19), !dbg !45 - %21 = load %Integer, ptr %20, align 8, !dbg !45 - %22 = call %String @integer_as_string(%Integer %21), !dbg !45 - call void @"<:ReferenceMut> += <:String>"(ptr %str, %String %22), !dbg !45 - %23 = call %Integer @integer_from_i64(i64 1), !dbg !45 - call void @"<:ReferenceMut> += <:Integer>"(ptr %i, %Integer %23), !dbg !45 - br label %while.condition, !dbg !45 + %18 = call %String @string_from_c_string_and_length(ptr @3, i64 2), !dbg !46 + call void @"<:ReferenceMut> += <:String>"(ptr %str, %String %18), !dbg !46 + %19 = call %Integer @clone_integer(ptr %i), !dbg !46 + %20 = call ptr @"<:Reference>> [ <:Integer> ]"(ptr %array, %Integer %19), !dbg !46 + %21 = load %Integer, ptr %20, align 8, !dbg !46 + %22 = call %String @integer_as_string(%Integer %21), !dbg !46 + call void @"<:ReferenceMut> += <:String>"(ptr %str, %String %22), !dbg !46 + %23 = call %Integer @integer_from_i64(i64 1), !dbg !46 + call void @"<:ReferenceMut> += <:Integer>"(ptr %i, %Integer %23), !dbg !46 + br label %while.condition, !dbg !46 24: ; preds = %while.condition - call void @destroy_integer(ptr %i), !dbg !45 - br label %10, !dbg !45 + call void @destroy_integer(ptr %i), !dbg !46 + br label %10, !dbg !46 } -define void @"<:ReferenceMut> += <:String>"(ptr %0, %String %1) !dbg !46 { +define private void @"<:ReferenceMut> += <:String>"(ptr %0, %String %1) !dbg !47 { %self = alloca ptr, align 8 store ptr %0, ptr %self, align 8 %other = alloca %String, align 8 store %String %1, ptr %other, align 8 - %3 = load ptr, ptr %self, align 8, !dbg !47 - %4 = load ptr, ptr %self, align 8, !dbg !48 - %5 = load %String, ptr %4, align 8, !dbg !48 - %6 = load %String, ptr %other, align 8, !dbg !49 - %7 = call %String @string_plus_string(%String %5, %String %6), !dbg !49 - store %String %7, ptr %3, align 8, !dbg !49 - br label %return, !dbg !49 + %3 = load ptr, ptr %self, align 8, !dbg !48 + %4 = load ptr, ptr %self, align 8, !dbg !49 + %5 = load %String, ptr %4, align 8, !dbg !49 + %6 = load %String, ptr %other, align 8, !dbg !50 + %7 = call %String @string_plus_string(%String %5, %String %6), !dbg !50 + store %String %7, ptr %3, align 8, !dbg !50 + br label %return, !dbg !50 return: ; preds = %2 ret void @@ -343,27 +343,27 @@ declare %String @string_plus_string(%String, %String) declare %String @integer_as_string(%Integer) -define private ptr @"<:Reference>> [ <:Integer> ]"(ptr %0, %Integer %1) !dbg !50 { +define private ptr @"<:Reference>> [ <:Integer> ]"(ptr %0, %Integer %1) !dbg !51 { %return_value = alloca ptr, align 8 %array = alloca ptr, align 8 store ptr %0, ptr %array, align 8 %i = alloca %Integer, align 8 store %Integer %1, ptr %i, align 8 - %3 = load ptr, ptr %array, align 8, !dbg !51 - %data = getelementptr inbounds %"Array", ptr %3, i32 0, i32 2, !dbg !51 - %4 = load %MemoryAddress, ptr %data, align 8, !dbg !51 - %5 = load %Integer, ptr %i, align 8, !dbg !51 - %6 = load %"Type", ptr @"Type", align 8, !dbg !51 - %7 = call %Integer @"size of <:Type>"(%"Type" %6), !dbg !51 - %8 = call %Integer @integer_star_integer(%Integer %5, %Integer %7), !dbg !51 - %9 = call %MemoryAddress @"<:MemoryAddress> + <:Integer>"(%MemoryAddress %4, %Integer %8), !dbg !51 - %address = alloca %MemoryAddress, align 8, !dbg !51 - store %MemoryAddress %9, ptr %address, align 8, !dbg !51 - %10 = load %"Type", ptr @"Type", align 8, !dbg !51 - %11 = load %MemoryAddress, ptr %address, align 8, !dbg !51 - %12 = call ptr @read_memory(%"Type" %10, %MemoryAddress %11), !dbg !51 - store ptr %12, ptr %return_value, align 8, !dbg !51 - br label %return, !dbg !51 + %3 = load ptr, ptr %array, align 8, !dbg !52 + %data = getelementptr inbounds %"Array", ptr %3, i32 0, i32 2, !dbg !52 + %4 = load %MemoryAddress, ptr %data, align 8, !dbg !52 + %5 = load %Integer, ptr %i, align 8, !dbg !52 + %6 = load %"Type", ptr @"Type", align 8, !dbg !52 + %7 = call %Integer @"size of <:Type>"(%"Type" %6), !dbg !52 + %8 = call %Integer @integer_star_integer(%Integer %5, %Integer %7), !dbg !52 + %9 = call %MemoryAddress @"<:MemoryAddress> + <:Integer>"(%MemoryAddress %4, %Integer %8), !dbg !52 + %address = alloca %MemoryAddress, align 8, !dbg !52 + store %MemoryAddress %9, ptr %address, align 8, !dbg !52 + %10 = load %"Type", ptr @"Type", align 8, !dbg !52 + %11 = load %MemoryAddress, ptr %address, align 8, !dbg !52 + %12 = call ptr @read_memory(%"Type" %10, %MemoryAddress %11), !dbg !52 + store ptr %12, ptr %return_value, align 8, !dbg !52 + br label %return, !dbg !52 return: ; preds = %2 %13 = load ptr, ptr %return_value, align 8 @@ -374,18 +374,18 @@ declare %MemoryAddress @"<:MemoryAddress> + <:Integer>"(%MemoryAddress, %Integer declare ptr @read_memory(%"Type", %MemoryAddress) -define void @"<:ReferenceMut> += <:Integer>"(ptr %0, %Integer %1) !dbg !52 { +define private void @"<:ReferenceMut> += <:Integer>"(ptr %0, %Integer %1) !dbg !53 { %self = alloca ptr, align 8 store ptr %0, ptr %self, align 8 %other = alloca %Integer, align 8 store %Integer %1, ptr %other, align 8 - %3 = load ptr, ptr %self, align 8, !dbg !53 - %4 = load ptr, ptr %self, align 8, !dbg !54 - %5 = load %Integer, ptr %4, align 8, !dbg !54 - %6 = load %Integer, ptr %other, align 8, !dbg !55 - %7 = call %Integer @integer_plus_integer(%Integer %5, %Integer %6), !dbg !55 - store %Integer %7, ptr %3, align 8, !dbg !55 - br label %return, !dbg !55 + %3 = load ptr, ptr %self, align 8, !dbg !54 + %4 = load ptr, ptr %self, align 8, !dbg !55 + %5 = load %Integer, ptr %4, align 8, !dbg !55 + %6 = load %Integer, ptr %other, align 8, !dbg !56 + %7 = call %Integer @integer_plus_integer(%Integer %5, %Integer %6), !dbg !56 + store %Integer %7, ptr %3, align 8, !dbg !56 + br label %return, !dbg !56 return: ; preds = %2 ret void @@ -395,37 +395,37 @@ declare %Integer @integer_plus_integer(%Integer, %Integer) declare i1 @integer_less_integer(%Integer, %Integer) -define private i1 @"<:Reference>> is not empty"(ptr %0) !dbg !56 { +define private i1 @"<:Reference>> is not empty"(ptr %0) !dbg !57 { %return_value = alloca i1, align 1 %array = alloca ptr, align 8 store ptr %0, ptr %array, align 8 - %2 = load ptr, ptr %array, align 8, !dbg !57 - %size = getelementptr inbounds %"Array", ptr %2, i32 0, i32 0, !dbg !57 - %3 = load %Integer, ptr %size, align 8, !dbg !57 - %4 = call %Integer @integer_from_i64(i64 0), !dbg !57 - %5 = call i1 @"<:Integer> > <:Integer>"(%Integer %3, %Integer %4), !dbg !57 - store i1 %5, ptr %return_value, align 1, !dbg !57 - br label %return, !dbg !57 + %2 = load ptr, ptr %array, align 8, !dbg !58 + %size = getelementptr inbounds %"Array", ptr %2, i32 0, i32 0, !dbg !58 + %3 = load %Integer, ptr %size, align 8, !dbg !58 + %4 = call %Integer @integer_from_i64(i64 0), !dbg !58 + %5 = call i1 @"<:Integer> > <:Integer>"(%Integer %3, %Integer %4), !dbg !58 + store i1 %5, ptr %return_value, align 1, !dbg !58 + br label %return, !dbg !58 return: ; preds = %1 %6 = load i1, ptr %return_value, align 1 ret i1 %6 } -define i1 @"<:Integer> > <:Integer>"(%Integer %0, %Integer %1) !dbg !58 { +define private i1 @"<:Integer> > <:Integer>"(%Integer %0, %Integer %1) !dbg !59 { %return_value = alloca i1, align 1 %x = alloca %Integer, align 8 store %Integer %0, ptr %x, align 8 %y = alloca %Integer, align 8 store %Integer %1, ptr %y, align 8 - %3 = load %Integer, ptr %y, align 8, !dbg !59 - %4 = load %Integer, ptr %x, align 8, !dbg !59 - %5 = call i1 @integer_less_integer(%Integer %3, %Integer %4), !dbg !59 - %"$tmp@1032" = alloca i1, align 1, !dbg !59 - store i1 %5, ptr %"$tmp@1032", align 1, !dbg !59 - %6 = load i1, ptr %"$tmp@1032", align 1, !dbg !59 - store i1 %6, ptr %return_value, align 1, !dbg !59 - br label %return, !dbg !59 + %3 = load %Integer, ptr %y, align 8, !dbg !60 + %4 = load %Integer, ptr %x, align 8, !dbg !60 + %5 = call i1 @integer_less_integer(%Integer %3, %Integer %4), !dbg !60 + %"$tmp@1032" = alloca i1, align 1, !dbg !60 + store i1 %5, ptr %"$tmp@1032", align 1, !dbg !60 + %6 = load i1, ptr %"$tmp@1032", align 1, !dbg !60 + store i1 %6, ptr %return_value, align 1, !dbg !60 + br label %return, !dbg !60 return: ; preds = %2 %7 = load i1, ptr %return_value, align 1 @@ -436,20 +436,20 @@ declare %String @clone_string(ptr) declare void @destroy_string(ptr) -define private i1 @"<:Reference>> is empty"(ptr %0) !dbg !60 { +define private i1 @"<:Reference>> is empty"(ptr %0) !dbg !61 { %return_value = alloca i1, align 1 %array = alloca ptr, align 8 store ptr %0, ptr %array, align 8 - %2 = load ptr, ptr %array, align 8, !dbg !61 - %size = getelementptr inbounds %"Array", ptr %2, i32 0, i32 0, !dbg !61 - %3 = call %Integer @clone_integer(ptr %size), !dbg !61 - %4 = call %Integer @integer_from_i64(i64 0), !dbg !61 - %5 = call i1 @integer_eq_integer(%Integer %3, %Integer %4), !dbg !61 - %"$tmp@1137" = alloca i1, align 1, !dbg !61 - store i1 %5, ptr %"$tmp@1137", align 1, !dbg !61 - %6 = load i1, ptr %"$tmp@1137", align 1, !dbg !61 - store i1 %6, ptr %return_value, align 1, !dbg !61 - br label %return, !dbg !61 + %2 = load ptr, ptr %array, align 8, !dbg !62 + %size = getelementptr inbounds %"Array", ptr %2, i32 0, i32 0, !dbg !62 + %3 = call %Integer @clone_integer(ptr %size), !dbg !62 + %4 = call %Integer @integer_from_i64(i64 0), !dbg !62 + %5 = call i1 @integer_eq_integer(%Integer %3, %Integer %4), !dbg !62 + %"$tmp@1137" = alloca i1, align 1, !dbg !62 + store i1 %5, ptr %"$tmp@1137", align 1, !dbg !62 + %6 = load i1, ptr %"$tmp@1137", align 1, !dbg !62 + store i1 %6, ptr %return_value, align 1, !dbg !62 + br label %return, !dbg !62 return: ; preds = %1 %7 = load i1, ptr %return_value, align 1 @@ -458,187 +458,187 @@ return: ; preds = %1 declare i1 @integer_eq_integer(%Integer, %Integer) -define private void @"push <:Integer> to <:ReferenceMut>>"(%Integer %0, ptr %1) !dbg !62 { +define private void @"push <:Integer> to <:ReferenceMut>>"(%Integer %0, ptr %1) !dbg !63 { %x = alloca %Integer, align 8 store %Integer %0, ptr %x, align 8 %array = alloca ptr, align 8 store ptr %1, ptr %array, align 8 - br label %if.condition, !dbg !63 + br label %if.condition, !dbg !64 if.condition: ; preds = %2 - %3 = load ptr, ptr %array, align 8, !dbg !63 - %size4 = getelementptr inbounds %"Array", ptr %3, i32 0, i32 0, !dbg !63 - %4 = call %Integer @clone_integer(ptr %size4), !dbg !63 - %5 = load ptr, ptr %array, align 8, !dbg !63 - %capacity5 = getelementptr inbounds %"Array", ptr %5, i32 0, i32 1, !dbg !63 - %6 = call %Integer @clone_integer(ptr %capacity5), !dbg !63 - %7 = call i1 @integer_eq_integer(%Integer %4, %Integer %6), !dbg !63 - br i1 %7, label %if.body, label %16, !dbg !63 + %3 = load ptr, ptr %array, align 8, !dbg !64 + %size4 = getelementptr inbounds %"Array", ptr %3, i32 0, i32 0, !dbg !64 + %4 = call %Integer @clone_integer(ptr %size4), !dbg !64 + %5 = load ptr, ptr %array, align 8, !dbg !64 + %capacity5 = getelementptr inbounds %"Array", ptr %5, i32 0, i32 1, !dbg !64 + %6 = call %Integer @clone_integer(ptr %capacity5), !dbg !64 + %7 = call i1 @integer_eq_integer(%Integer %4, %Integer %6), !dbg !64 + br i1 %7, label %if.body, label %16, !dbg !64 if.body: ; preds = %if.condition - %8 = load ptr, ptr %array, align 8, !dbg !63 - %capacity = getelementptr inbounds %"Array", ptr %8, i32 0, i32 1, !dbg !63 - %9 = call %Integer @clone_integer(ptr %capacity), !dbg !63 - %10 = call %Integer @integer_from_i64(i64 2), !dbg !63 - %11 = call %Integer @integer_star_integer(%Integer %9, %Integer %10), !dbg !63 - %new_capacity = alloca %Integer, align 8, !dbg !63 - store %Integer %11, ptr %new_capacity, align 8, !dbg !63 - %12 = call %Integer @clone_integer(ptr %new_capacity), !dbg !63 - %13 = load %"Type", ptr @"Type", align 8, !dbg !63 - %14 = call %MemoryAddress @"allocate <:Integer> <:Type>"(%Integer %12, %"Type" %13), !dbg !63 - %new_data = alloca %MemoryAddress, align 8, !dbg !63 - store %MemoryAddress %14, ptr %new_data, align 8, !dbg !63 - %15 = call %Integer @integer_from_i64(i64 0), !dbg !63 - %i = alloca %Integer, align 8, !dbg !63 - store %Integer %15, ptr %i, align 8, !dbg !63 - br label %while.condition, !dbg !63 + %8 = load ptr, ptr %array, align 8, !dbg !64 + %capacity = getelementptr inbounds %"Array", ptr %8, i32 0, i32 1, !dbg !64 + %9 = call %Integer @clone_integer(ptr %capacity), !dbg !64 + %10 = call %Integer @integer_from_i64(i64 2), !dbg !64 + %11 = call %Integer @integer_star_integer(%Integer %9, %Integer %10), !dbg !64 + %new_capacity = alloca %Integer, align 8, !dbg !64 + store %Integer %11, ptr %new_capacity, align 8, !dbg !64 + %12 = call %Integer @clone_integer(ptr %new_capacity), !dbg !64 + %13 = load %"Type", ptr @"Type", align 8, !dbg !64 + %14 = call %MemoryAddress @"allocate <:Integer> <:Type>"(%Integer %12, %"Type" %13), !dbg !64 + %new_data = alloca %MemoryAddress, align 8, !dbg !64 + store %MemoryAddress %14, ptr %new_data, align 8, !dbg !64 + %15 = call %Integer @integer_from_i64(i64 0), !dbg !64 + %i = alloca %Integer, align 8, !dbg !64 + store %Integer %15, ptr %i, align 8, !dbg !64 + br label %while.condition, !dbg !64 return: ; preds = %16 ret void 16: ; preds = %if.condition, %48 - %17 = load %"Type", ptr @"Type", align 8, !dbg !63 - %18 = load ptr, ptr %array, align 8, !dbg !63 - %data6 = getelementptr inbounds %"Array", ptr %18, i32 0, i32 2, !dbg !63 - %19 = load %MemoryAddress, ptr %data6, align 8, !dbg !63 - %20 = load ptr, ptr %array, align 8, !dbg !63 - %size7 = getelementptr inbounds %"Array", ptr %20, i32 0, i32 0, !dbg !63 - %21 = call %Integer @clone_integer(ptr %size7), !dbg !63 - %22 = call %MemoryAddress @"<:MemoryAddress> + <:Integer>"(%MemoryAddress %19, %Integer %21), !dbg !63 - %23 = call ptr @read_memory(%"Type" %17, %MemoryAddress %22), !dbg !63 - %value8 = alloca ptr, align 8, !dbg !63 - store ptr %23, ptr %value8, align 8, !dbg !63 - %24 = load ptr, ptr %value8, align 8, !dbg !63 - %25 = load %Integer, ptr %x, align 8, !dbg !63 - store %Integer %25, ptr %24, align 8, !dbg !63 - %26 = load ptr, ptr %array, align 8, !dbg !63 - %size9 = getelementptr inbounds %"Array", ptr %26, i32 0, i32 0, !dbg !63 - call void @destroy_integer(ptr %size9), !dbg !63 - %27 = load ptr, ptr %array, align 8, !dbg !63 - %size10 = getelementptr inbounds %"Array", ptr %27, i32 0, i32 0, !dbg !63 - %28 = load ptr, ptr %array, align 8, !dbg !63 - %size11 = getelementptr inbounds %"Array", ptr %28, i32 0, i32 0, !dbg !63 - %29 = call %Integer @clone_integer(ptr %size11), !dbg !63 - %30 = call %Integer @integer_from_i64(i64 1), !dbg !63 - %31 = call %Integer @integer_plus_integer(%Integer %29, %Integer %30), !dbg !63 - store %Integer %31, ptr %size10, align 8, !dbg !63 - br label %return, !dbg !63 + %17 = load %"Type", ptr @"Type", align 8, !dbg !64 + %18 = load ptr, ptr %array, align 8, !dbg !64 + %data6 = getelementptr inbounds %"Array", ptr %18, i32 0, i32 2, !dbg !64 + %19 = load %MemoryAddress, ptr %data6, align 8, !dbg !64 + %20 = load ptr, ptr %array, align 8, !dbg !64 + %size7 = getelementptr inbounds %"Array", ptr %20, i32 0, i32 0, !dbg !64 + %21 = call %Integer @clone_integer(ptr %size7), !dbg !64 + %22 = call %MemoryAddress @"<:MemoryAddress> + <:Integer>"(%MemoryAddress %19, %Integer %21), !dbg !64 + %23 = call ptr @read_memory(%"Type" %17, %MemoryAddress %22), !dbg !64 + %value8 = alloca ptr, align 8, !dbg !64 + store ptr %23, ptr %value8, align 8, !dbg !64 + %24 = load ptr, ptr %value8, align 8, !dbg !64 + %25 = load %Integer, ptr %x, align 8, !dbg !64 + store %Integer %25, ptr %24, align 8, !dbg !64 + %26 = load ptr, ptr %array, align 8, !dbg !64 + %size9 = getelementptr inbounds %"Array", ptr %26, i32 0, i32 0, !dbg !64 + call void @destroy_integer(ptr %size9), !dbg !64 + %27 = load ptr, ptr %array, align 8, !dbg !64 + %size10 = getelementptr inbounds %"Array", ptr %27, i32 0, i32 0, !dbg !64 + %28 = load ptr, ptr %array, align 8, !dbg !64 + %size11 = getelementptr inbounds %"Array", ptr %28, i32 0, i32 0, !dbg !64 + %29 = call %Integer @clone_integer(ptr %size11), !dbg !64 + %30 = call %Integer @integer_from_i64(i64 1), !dbg !64 + %31 = call %Integer @integer_plus_integer(%Integer %29, %Integer %30), !dbg !64 + store %Integer %31, ptr %size10, align 8, !dbg !64 + br label %return, !dbg !64 while.condition: ; preds = %while.body, %if.body - %32 = call %Integer @clone_integer(ptr %i), !dbg !63 - %33 = load ptr, ptr %array, align 8, !dbg !63 - %size = getelementptr inbounds %"Array", ptr %33, i32 0, i32 0, !dbg !63 - %34 = call %Integer @clone_integer(ptr %size), !dbg !63 - %35 = call i1 @integer_less_integer(%Integer %32, %Integer %34), !dbg !63 - br i1 %35, label %while.body, label %48, !dbg !63 + %32 = call %Integer @clone_integer(ptr %i), !dbg !64 + %33 = load ptr, ptr %array, align 8, !dbg !64 + %size = getelementptr inbounds %"Array", ptr %33, i32 0, i32 0, !dbg !64 + %34 = call %Integer @clone_integer(ptr %size), !dbg !64 + %35 = call i1 @integer_less_integer(%Integer %32, %Integer %34), !dbg !64 + br i1 %35, label %while.body, label %48, !dbg !64 while.body: ; preds = %while.condition - %36 = load %"Type", ptr @"Type", align 8, !dbg !63 - %37 = load %MemoryAddress, ptr %new_data, align 8, !dbg !63 - %38 = call %Integer @clone_integer(ptr %i), !dbg !63 - %39 = call %MemoryAddress @"<:MemoryAddress> + <:Integer>"(%MemoryAddress %37, %Integer %38), !dbg !63 - %40 = call ptr @read_memory(%"Type" %36, %MemoryAddress %39), !dbg !63 - %value = alloca ptr, align 8, !dbg !63 - store ptr %40, ptr %value, align 8, !dbg !63 - %41 = load ptr, ptr %value, align 8, !dbg !63 - %42 = call %Integer @clone_integer(ptr %i), !dbg !63 - %43 = call ptr @"<:Reference>> [ <:Integer> ]"(ptr %array, %Integer %42), !dbg !63 - %44 = load %Integer, ptr %43, align 8, !dbg !63 - store %Integer %44, ptr %41, align 8, !dbg !63 - call void @destroy_integer(ptr %i), !dbg !63 - %45 = call %Integer @clone_integer(ptr %i), !dbg !63 - %46 = call %Integer @integer_from_i64(i64 1), !dbg !63 - %47 = call %Integer @integer_plus_integer(%Integer %45, %Integer %46), !dbg !63 - store %Integer %47, ptr %i, align 8, !dbg !63 - br label %while.condition, !dbg !63 + %36 = load %"Type", ptr @"Type", align 8, !dbg !64 + %37 = load %MemoryAddress, ptr %new_data, align 8, !dbg !64 + %38 = call %Integer @clone_integer(ptr %i), !dbg !64 + %39 = call %MemoryAddress @"<:MemoryAddress> + <:Integer>"(%MemoryAddress %37, %Integer %38), !dbg !64 + %40 = call ptr @read_memory(%"Type" %36, %MemoryAddress %39), !dbg !64 + %value = alloca ptr, align 8, !dbg !64 + store ptr %40, ptr %value, align 8, !dbg !64 + %41 = load ptr, ptr %value, align 8, !dbg !64 + %42 = call %Integer @clone_integer(ptr %i), !dbg !64 + %43 = call ptr @"<:Reference>> [ <:Integer> ]"(ptr %array, %Integer %42), !dbg !64 + %44 = load %Integer, ptr %43, align 8, !dbg !64 + store %Integer %44, ptr %41, align 8, !dbg !64 + call void @destroy_integer(ptr %i), !dbg !64 + %45 = call %Integer @clone_integer(ptr %i), !dbg !64 + %46 = call %Integer @integer_from_i64(i64 1), !dbg !64 + %47 = call %Integer @integer_plus_integer(%Integer %45, %Integer %46), !dbg !64 + store %Integer %47, ptr %i, align 8, !dbg !64 + br label %while.condition, !dbg !64 48: ; preds = %while.condition - %49 = load ptr, ptr %array, align 8, !dbg !63 - %data = getelementptr inbounds %"Array", ptr %49, i32 0, i32 2, !dbg !63 - %50 = load %MemoryAddress, ptr %data, align 8, !dbg !63 - call void @free_memory(%MemoryAddress %50), !dbg !63 - %51 = load ptr, ptr %array, align 8, !dbg !63 - %data1 = getelementptr inbounds %"Array", ptr %51, i32 0, i32 2, !dbg !63 - %52 = load %MemoryAddress, ptr %new_data, align 8, !dbg !63 - store %MemoryAddress %52, ptr %data1, align 8, !dbg !63 - %53 = load ptr, ptr %array, align 8, !dbg !63 - %capacity2 = getelementptr inbounds %"Array", ptr %53, i32 0, i32 1, !dbg !63 - call void @destroy_integer(ptr %capacity2), !dbg !63 - %54 = load ptr, ptr %array, align 8, !dbg !63 - %capacity3 = getelementptr inbounds %"Array", ptr %54, i32 0, i32 1, !dbg !63 - %55 = call %Integer @clone_integer(ptr %new_capacity), !dbg !63 - store %Integer %55, ptr %capacity3, align 8, !dbg !63 - call void @destroy_integer(ptr %new_capacity), !dbg !63 - call void @destroy_integer(ptr %i), !dbg !63 - br label %16, !dbg !63 + %49 = load ptr, ptr %array, align 8, !dbg !64 + %data = getelementptr inbounds %"Array", ptr %49, i32 0, i32 2, !dbg !64 + %50 = load %MemoryAddress, ptr %data, align 8, !dbg !64 + call void @free_memory(%MemoryAddress %50), !dbg !64 + %51 = load ptr, ptr %array, align 8, !dbg !64 + %data1 = getelementptr inbounds %"Array", ptr %51, i32 0, i32 2, !dbg !64 + %52 = load %MemoryAddress, ptr %new_data, align 8, !dbg !64 + store %MemoryAddress %52, ptr %data1, align 8, !dbg !64 + %53 = load ptr, ptr %array, align 8, !dbg !64 + %capacity2 = getelementptr inbounds %"Array", ptr %53, i32 0, i32 1, !dbg !64 + call void @destroy_integer(ptr %capacity2), !dbg !64 + %54 = load ptr, ptr %array, align 8, !dbg !64 + %capacity3 = getelementptr inbounds %"Array", ptr %54, i32 0, i32 1, !dbg !64 + %55 = call %Integer @clone_integer(ptr %new_capacity), !dbg !64 + store %Integer %55, ptr %capacity3, align 8, !dbg !64 + call void @destroy_integer(ptr %new_capacity), !dbg !64 + call void @destroy_integer(ptr %i), !dbg !64 + br label %16, !dbg !64 } declare void @free_memory(%MemoryAddress) -define private void @"println <:Integer>"(%Integer %0) !dbg !64 { +define private void @"println <:Integer>"(%Integer %0) !dbg !65 { %x = alloca %Integer, align 8 store %Integer %0, ptr %x, align 8 - %2 = load %Integer, ptr %x, align 8, !dbg !65 - %3 = call %String @integer_as_string(%Integer %2), !dbg !65 - call void @"println <:String>"(%String %3), !dbg !65 - br label %return, !dbg !65 + %2 = load %Integer, ptr %x, align 8, !dbg !66 + %3 = call %String @integer_as_string(%Integer %2), !dbg !66 + call void @"println <:String>"(%String %3), !dbg !66 + br label %return, !dbg !67 return: ; preds = %1 ret void } -define private ptr @"value from <:Reference>>"(ptr %0) !dbg !66 { +define private ptr @"value from <:Reference>>"(ptr %0) !dbg !68 { %return_value = alloca ptr, align 8 %it = alloca ptr, align 8 store ptr %0, ptr %it, align 8 - %2 = load ptr, ptr %it, align 8, !dbg !67 - %array = getelementptr inbounds %"Iterator", ptr %2, i32 0, i32 0, !dbg !67 - %3 = load ptr, ptr %it, align 8, !dbg !67 - %index = getelementptr inbounds %"Iterator", ptr %3, i32 0, i32 1, !dbg !67 - %4 = call %Integer @clone_integer(ptr %index), !dbg !67 - %5 = call ptr @"<:Reference>> [ <:Integer> ]"(ptr %array, %Integer %4), !dbg !67 - %"$tmp@1885" = alloca ptr, align 8, !dbg !67 - store ptr %5, ptr %"$tmp@1885", align 8, !dbg !67 - %6 = load ptr, ptr %"$tmp@1885", align 8, !dbg !67 - store ptr %6, ptr %return_value, align 8, !dbg !67 - br label %return, !dbg !67 + %2 = load ptr, ptr %it, align 8, !dbg !69 + %array = getelementptr inbounds %"Iterator", ptr %2, i32 0, i32 0, !dbg !69 + %3 = load ptr, ptr %it, align 8, !dbg !69 + %index = getelementptr inbounds %"Iterator", ptr %3, i32 0, i32 1, !dbg !69 + %4 = call %Integer @clone_integer(ptr %index), !dbg !69 + %5 = call ptr @"<:Reference>> [ <:Integer> ]"(ptr %array, %Integer %4), !dbg !69 + %"$tmp@1886" = alloca ptr, align 8, !dbg !69 + store ptr %5, ptr %"$tmp@1886", align 8, !dbg !69 + %6 = load ptr, ptr %"$tmp@1886", align 8, !dbg !69 + store ptr %6, ptr %return_value, align 8, !dbg !69 + br label %return, !dbg !69 return: ; preds = %1 %7 = load ptr, ptr %return_value, align 8 ret ptr %7 } -define private void @"advance <:ReferenceMut>>"(ptr %0) !dbg !68 { +define private void @"advance <:ReferenceMut>>"(ptr %0) !dbg !70 { %it = alloca ptr, align 8 store ptr %0, ptr %it, align 8 - %2 = load ptr, ptr %it, align 8, !dbg !69 - %index = getelementptr inbounds %"Iterator", ptr %2, i32 0, i32 1, !dbg !69 - %3 = call %Integer @integer_from_i64(i64 1), !dbg !69 - call void @"<:ReferenceMut> += <:Integer>"(ptr %index, %Integer %3), !dbg !69 - br label %return, !dbg !69 + %2 = load ptr, ptr %it, align 8, !dbg !71 + %index = getelementptr inbounds %"Iterator", ptr %2, i32 0, i32 1, !dbg !71 + %3 = call %Integer @integer_from_i64(i64 1), !dbg !71 + call void @"<:ReferenceMut> += <:Integer>"(ptr %index, %Integer %3), !dbg !71 + br label %return, !dbg !71 return: ; preds = %1 ret void } -define private i1 @"<:Reference>> exists"(ptr %0) !dbg !70 { +define private i1 @"<:Reference>> exists"(ptr %0) !dbg !72 { %return_value = alloca i1, align 1 %it = alloca ptr, align 8 store ptr %0, ptr %it, align 8 - %2 = load ptr, ptr %it, align 8, !dbg !71 - %index = getelementptr inbounds %"Iterator", ptr %2, i32 0, i32 1, !dbg !71 - %3 = call %Integer @clone_integer(ptr %index), !dbg !71 - %4 = load ptr, ptr %it, align 8, !dbg !71 - %array = getelementptr inbounds %"Iterator", ptr %4, i32 0, i32 0, !dbg !71 - %5 = load ptr, ptr %array, align 8, !dbg !71 - %size = getelementptr inbounds %"Array", ptr %5, i32 0, i32 0, !dbg !71 - %6 = call %Integer @clone_integer(ptr %size), !dbg !71 - %7 = call i1 @integer_less_integer(%Integer %3, %Integer %6), !dbg !71 - %"$tmp@1754" = alloca i1, align 1, !dbg !71 - store i1 %7, ptr %"$tmp@1754", align 1, !dbg !71 - %8 = load i1, ptr %"$tmp@1754", align 1, !dbg !71 - store i1 %8, ptr %return_value, align 1, !dbg !71 - br label %return, !dbg !71 + %2 = load ptr, ptr %it, align 8, !dbg !73 + %index = getelementptr inbounds %"Iterator", ptr %2, i32 0, i32 1, !dbg !73 + %3 = call %Integer @clone_integer(ptr %index), !dbg !73 + %4 = load ptr, ptr %it, align 8, !dbg !73 + %array = getelementptr inbounds %"Iterator", ptr %4, i32 0, i32 0, !dbg !73 + %5 = load ptr, ptr %array, align 8, !dbg !73 + %size = getelementptr inbounds %"Array", ptr %5, i32 0, i32 0, !dbg !73 + %6 = call %Integer @clone_integer(ptr %size), !dbg !73 + %7 = call i1 @integer_less_integer(%Integer %3, %Integer %6), !dbg !73 + %"$tmp@1755" = alloca i1, align 1, !dbg !73 + store i1 %7, ptr %"$tmp@1755", align 1, !dbg !73 + %8 = load i1, ptr %"$tmp@1755", align 1, !dbg !73 + store i1 %8, ptr %return_value, align 1, !dbg !73 + br label %return, !dbg !73 return: ; preds = %1 %9 = load i1, ptr %return_value, align 1 @@ -651,17 +651,17 @@ return: ; preds = %1 !0 = !{i32 2, !"Debug Info Version", i32 3} !1 = distinct !DICompileUnit(language: DW_LANG_C, file: !2, producer: "ppl", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, splitDebugInlining: false, sysroot: "/") !2 = !DIFile(filename: "src/main.ppl", directory: ".") -!3 = distinct !DISubprogram(name: "initialize", linkageName: "initialize", scope: !2, file: !2, line: 12, type: !4, spFlags: DISPFlagDefinition, unit: !1) +!3 = distinct !DISubprogram(name: "initialize", linkageName: "initialize", scope: !2, file: !2, line: 7, type: !4, spFlags: DISPFlagDefinition, unit: !1) !4 = !DISubroutineType(types: !5) !5 = !{!6} !6 = !DIBasicType(name: "i32", size: 32, encoding: DW_ATE_signed) -!7 = !DILocation(line: 12, column: 3, scope: !3) +!7 = !DILocation(line: 7, column: 18, scope: !3) !8 = !DILocation(line: 0, scope: !3) !9 = distinct !DISubprogram(name: "initialize.1", linkageName: "initialize.1", scope: !2, file: !2, type: !4, spFlags: DISPFlagDefinition, unit: !1) !10 = !DILocation(line: 0, column: 14, scope: !9) !11 = !DILocation(line: 0, scope: !9) !12 = distinct !DISubprogram(name: "main.execute", linkageName: "main.execute", scope: !2, file: !2, type: !4, spFlags: DISPFlagDefinition, unit: !1) -!13 = !DILocation(line: 12, column: 3, scope: !12) +!13 = !DILocation(line: 7, column: 18, scope: !12) !14 = !DILocation(line: 0, column: 14, scope: !12) !15 = !DILocation(line: 10, column: 13, scope: !12) !16 = !DILocation(line: 1, column: 8, scope: !12) @@ -690,33 +690,35 @@ return: ; preds = %1 !39 = !DILocation(line: 10, column: 26, scope: !38) !40 = distinct !DISubprogram(name: "iterator for <:Reference>>", linkageName: "iterator for <:Reference>>", scope: !38, file: !2, line: 13, type: !4, spFlags: DISPFlagDefinition, unit: !1) !41 = !DILocation(line: 13, column: 11, scope: !40) -!42 = distinct !DISubprogram(name: "println <:Array>", linkageName: "println <:Array>", scope: !12, file: !2, line: 13, type: !4, spFlags: DISPFlagDefinition, unit: !1) -!43 = !DILocation(line: 13, column: 11, scope: !42) -!44 = distinct !DISubprogram(name: "String from <:Reference>>", linkageName: "String from <:Reference>>", scope: !42, file: !2, line: 13, type: !4, spFlags: DISPFlagDefinition, unit: !1) -!45 = !DILocation(line: 13, column: 11, scope: !44) -!46 = distinct !DISubprogram(name: "<:ReferenceMut> += <:String>", linkageName: "<:ReferenceMut> += <:String>", scope: !44, file: !2, line: 10, type: !4, spFlags: DISPFlagDefinition, unit: !1) -!47 = !DILocation(line: 12, column: 22, scope: !46) -!48 = !DILocation(line: 13, column: 4, scope: !46) -!49 = !DILocation(line: 13, column: 11, scope: !46) -!50 = distinct !DISubprogram(name: "<:Reference>> [ <:Integer> ]", linkageName: "<:Reference>> [ <:Integer> ]", scope: !44, file: !2, line: 13, type: !4, spFlags: DISPFlagDefinition, unit: !1) -!51 = !DILocation(line: 13, column: 11, scope: !50) -!52 = distinct !DISubprogram(name: "<:ReferenceMut> += <:Integer>", linkageName: "<:ReferenceMut> += <:Integer>", scope: !44, file: !2, line: 10, type: !4, spFlags: DISPFlagDefinition, unit: !1) -!53 = !DILocation(line: 12, column: 22, scope: !52) -!54 = !DILocation(line: 13, column: 4, scope: !52) -!55 = !DILocation(line: 13, column: 11, scope: !52) -!56 = distinct !DISubprogram(name: "<:Reference>> is not empty", linkageName: "<:Reference>> is not empty", scope: !44, file: !2, line: 13, type: !4, spFlags: DISPFlagDefinition, unit: !1) -!57 = !DILocation(line: 13, column: 11, scope: !56) -!58 = distinct !DISubprogram(name: "<:Integer> > <:Integer>", linkageName: "<:Integer> > <:Integer>", scope: !56, file: !2, line: 13, type: !4, spFlags: DISPFlagDefinition, unit: !1) -!59 = !DILocation(line: 13, column: 11, scope: !58) -!60 = distinct !DISubprogram(name: "<:Reference>> is empty", linkageName: "<:Reference>> is empty", scope: !12, file: !2, line: 13, type: !4, spFlags: DISPFlagDefinition, unit: !1) -!61 = !DILocation(line: 13, column: 11, scope: !60) -!62 = distinct !DISubprogram(name: "push <:Integer> to <:ReferenceMut>>", linkageName: "push <:Integer> to <:ReferenceMut>>", scope: !12, file: !2, line: 13, type: !4, spFlags: DISPFlagDefinition, unit: !1) -!63 = !DILocation(line: 13, column: 11, scope: !62) -!64 = distinct !DISubprogram(name: "println <:Integer>", linkageName: "println <:Integer>", scope: !12, file: !2, line: 13, type: !4, spFlags: DISPFlagDefinition, unit: !1) -!65 = !DILocation(line: 13, column: 11, scope: !64) -!66 = distinct !DISubprogram(name: "value from <:Reference>>", linkageName: "value from <:Reference>>", scope: !12, file: !2, line: 13, type: !4, spFlags: DISPFlagDefinition, unit: !1) -!67 = !DILocation(line: 13, column: 11, scope: !66) -!68 = distinct !DISubprogram(name: "advance <:ReferenceMut>>", linkageName: "advance <:ReferenceMut>>", scope: !12, file: !2, line: 13, type: !4, spFlags: DISPFlagDefinition, unit: !1) +!42 = distinct !DISubprogram(name: "println <:Array>", linkageName: "println <:Array>", scope: !12, file: !2, line: 8, type: !4, spFlags: DISPFlagDefinition, unit: !1) +!43 = !DILocation(line: 11, column: 13, scope: !42) +!44 = !DILocation(line: 10, column: 22, scope: !42) +!45 = distinct !DISubprogram(name: "String from <:Reference>>", linkageName: "String from <:Reference>>", scope: !42, file: !2, line: 13, type: !4, spFlags: DISPFlagDefinition, unit: !1) +!46 = !DILocation(line: 13, column: 11, scope: !45) +!47 = distinct !DISubprogram(name: "<:ReferenceMut> += <:String>", linkageName: "<:ReferenceMut> += <:String>", scope: !45, file: !2, line: 10, type: !4, spFlags: DISPFlagDefinition, unit: !1) +!48 = !DILocation(line: 12, column: 22, scope: !47) +!49 = !DILocation(line: 13, column: 4, scope: !47) +!50 = !DILocation(line: 13, column: 11, scope: !47) +!51 = distinct !DISubprogram(name: "<:Reference>> [ <:Integer> ]", linkageName: "<:Reference>> [ <:Integer> ]", scope: !45, file: !2, line: 13, type: !4, spFlags: DISPFlagDefinition, unit: !1) +!52 = !DILocation(line: 13, column: 11, scope: !51) +!53 = distinct !DISubprogram(name: "<:ReferenceMut> += <:Integer>", linkageName: "<:ReferenceMut> += <:Integer>", scope: !45, file: !2, line: 10, type: !4, spFlags: DISPFlagDefinition, unit: !1) +!54 = !DILocation(line: 12, column: 22, scope: !53) +!55 = !DILocation(line: 13, column: 4, scope: !53) +!56 = !DILocation(line: 13, column: 11, scope: !53) +!57 = distinct !DISubprogram(name: "<:Reference>> is not empty", linkageName: "<:Reference>> is not empty", scope: !45, file: !2, line: 13, type: !4, spFlags: DISPFlagDefinition, unit: !1) +!58 = !DILocation(line: 13, column: 11, scope: !57) +!59 = distinct !DISubprogram(name: "<:Integer> > <:Integer>", linkageName: "<:Integer> > <:Integer>", scope: !57, file: !2, line: 13, type: !4, spFlags: DISPFlagDefinition, unit: !1) +!60 = !DILocation(line: 13, column: 11, scope: !59) +!61 = distinct !DISubprogram(name: "<:Reference>> is empty", linkageName: "<:Reference>> is empty", scope: !12, file: !2, line: 13, type: !4, spFlags: DISPFlagDefinition, unit: !1) +!62 = !DILocation(line: 13, column: 11, scope: !61) +!63 = distinct !DISubprogram(name: "push <:Integer> to <:ReferenceMut>>", linkageName: "push <:Integer> to <:ReferenceMut>>", scope: !12, file: !2, line: 13, type: !4, spFlags: DISPFlagDefinition, unit: !1) +!64 = !DILocation(line: 13, column: 11, scope: !63) +!65 = distinct !DISubprogram(name: "println <:Integer>", linkageName: "println <:Integer>", scope: !12, file: !2, line: 8, type: !4, spFlags: DISPFlagDefinition, unit: !1) +!66 = !DILocation(line: 11, column: 13, scope: !65) +!67 = !DILocation(line: 10, column: 22, scope: !65) +!68 = distinct !DISubprogram(name: "value from <:Reference>>", linkageName: "value from <:Reference>>", scope: !12, file: !2, line: 13, type: !4, spFlags: DISPFlagDefinition, unit: !1) !69 = !DILocation(line: 13, column: 11, scope: !68) -!70 = distinct !DISubprogram(name: "<:Reference>> exists", linkageName: "<:Reference>> exists", scope: !12, file: !2, line: 13, type: !4, spFlags: DISPFlagDefinition, unit: !1) +!70 = distinct !DISubprogram(name: "advance <:ReferenceMut>>", linkageName: "advance <:ReferenceMut>>", scope: !12, file: !2, line: 13, type: !4, spFlags: DISPFlagDefinition, unit: !1) !71 = !DILocation(line: 13, column: 11, scope: !70) +!72 = distinct !DISubprogram(name: "<:Reference>> exists", linkageName: "<:Reference>> exists", scope: !12, file: !2, line: 13, type: !4, spFlags: DISPFlagDefinition, unit: !1) +!73 = !DILocation(line: 13, column: 11, scope: !72) diff --git a/src/tests/snapshots/ppl__tests__clone.hir.snap b/src/tests/snapshots/ppl__tests__clone.hir.snap index f6b850e7..5043aa0f 100644 --- a/src/tests/snapshots/ppl__tests__clone.hir.snap +++ b/src/tests/snapshots/ppl__tests__clone.hir.snap @@ -17,32 +17,35 @@ destroy (y:Integer) @mangle_as("integer_as_string") -fn String from <:Integer> -> String +fn String from <$arg0: Integer> -> String + +fn println -> None: + let $tmp@176: None = println String from (x:Integer) + return ($tmp@176:None) -fn println -> None: - let $tmp@314: None = println String from (x:Integer) - return ($tmp@314:None) @mangle_as("integer_as_string") -fn String from <:Integer> -> String +fn String from <$arg0: Integer> -> String + +fn println -> None: + let $tmp@176: None = println String from (x:Integer) + return ($tmp@176:None) -fn println -> None: - let $tmp@314: None = println String from (x:Integer) - return ($tmp@314:None) @mangle_as("integer_as_string") -fn String from <:Integer> -> String +fn String from <$arg0: Integer> -> String + +fn println -> None: + let $tmp@176: None = println String from (x:Integer) + return ($tmp@176:None) -fn println -> None: - let $tmp@314: None = println String from (x:Integer) - return ($tmp@314:None) @mangle_as("integer_as_string") -fn String from <:Integer> -> String +fn String from <$arg0: Integer> -> String -fn println -> None: - let $tmp@314: None = println String from (x:Integer) - return ($tmp@314:None) +fn println -> None: + let $tmp@176: None = println String from (x:Integer) + return ($tmp@176:None) diff --git a/src/tests/snapshots/ppl__tests__deref_member_ref.hir.snap b/src/tests/snapshots/ppl__tests__deref_member_ref.hir.snap index 64275345..c482613b 100644 --- a/src/tests/snapshots/ppl__tests__deref_member_ref.hir.snap +++ b/src/tests/snapshots/ppl__tests__deref_member_ref.hir.snap @@ -18,8 +18,8 @@ println x of (&$tmp@80:Reference) @mangle_as("integer_as_string") -fn String from <:Integer> -> String +fn String from <$arg0: Integer> -> String -fn println -> None: - let $tmp@314: None = println String from (x:Integer) - return ($tmp@314:None) +fn println -> None: + let $tmp@176: None = println String from (x:Integer) + return ($tmp@176:None) diff --git a/src/tests/snapshots/ppl__tests__destructor.ir.snap b/src/tests/snapshots/ppl__tests__destructor.ir.snap index 2deb6af1..8842c9d1 100644 --- a/src/tests/snapshots/ppl__tests__destructor.ir.snap +++ b/src/tests/snapshots/ppl__tests__destructor.ir.snap @@ -78,14 +78,14 @@ return: ; preds = %0 !0 = !{i32 2, !"Debug Info Version", i32 3} !1 = distinct !DICompileUnit(language: DW_LANG_C, file: !2, producer: "ppl", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, splitDebugInlining: false, sysroot: "/") !2 = !DIFile(filename: "src/main.ppl", directory: ".") -!3 = distinct !DISubprogram(name: "initialize", linkageName: "initialize", scope: !2, file: !2, line: 9, type: !4, spFlags: DISPFlagDefinition, unit: !1) +!3 = distinct !DISubprogram(name: "initialize", linkageName: "initialize", scope: !2, file: !2, line: 5, type: !4, spFlags: DISPFlagDefinition, unit: !1) !4 = !DISubroutineType(types: !5) !5 = !{!6} !6 = !DIBasicType(name: "i32", size: 32, encoding: DW_ATE_signed) -!7 = !DILocation(line: 9, column: 24, scope: !3) +!7 = !DILocation(line: 5, column: 31, scope: !3) !8 = !DILocation(line: 0, scope: !3) !9 = distinct !DISubprogram(name: "main.execute", linkageName: "main.execute", scope: !2, file: !2, type: !4, spFlags: DISPFlagDefinition, unit: !1) -!10 = !DILocation(line: 9, column: 24, scope: !9) +!10 = !DILocation(line: 5, column: 31, scope: !9) !11 = !DILocation(line: 4, column: 12, scope: !9) !12 = !DILocation(line: 5, scope: !9) !13 = !DILocation(line: 5, column: 4, scope: !9) diff --git a/src/tests/snapshots/ppl__tests__empty_constructor.hir.snap b/src/tests/snapshots/ppl__tests__empty_constructor.hir.snap index 114b302f..efbd508f 100644 --- a/src/tests/snapshots/ppl__tests__empty_constructor.hir.snap +++ b/src/tests/snapshots/ppl__tests__empty_constructor.hir.snap @@ -19,6 +19,6 @@ fn String from > -> String: return ($tmp@4331:String) -fn> println > -> None: - let $tmp@314: None = println String from (x:Type) - return ($tmp@314:None) +fn println > -> None: + let $tmp@176: None = println String from (x:Type) + return ($tmp@176:None) diff --git a/src/tests/snapshots/ppl__tests__generics.hir.snap b/src/tests/snapshots/ppl__tests__generics.hir.snap index 22ddcf79..855cb9e1 100644 --- a/src/tests/snapshots/ppl__tests__generics.hir.snap +++ b/src/tests/snapshots/ppl__tests__generics.hir.snap @@ -39,9 +39,10 @@ fn String from -> String: return ($tmp@1260:String) -fn println -> None: - let $tmp@314: None = println String from (x:Bool) - return ($tmp@314:None) +fn println -> None: + let $tmp@176: None = println String from (x:Bool) + return ($tmp@176:None) + fn id -> Integer: @@ -57,9 +58,10 @@ fn String from -> String: return ($tmp@1260:String) -fn println -> None: - let $tmp@314: None = println String from (x:Bool) - return ($tmp@314:None) +fn println -> None: + let $tmp@176: None = println String from (x:Bool) + return ($tmp@176:None) + fn id -> String: diff --git a/src/tests/snapshots/ppl__tests__generics.ir.snap b/src/tests/snapshots/ppl__tests__generics.ir.snap index 4d6eee6e..2896263a 100644 --- a/src/tests/snapshots/ppl__tests__generics.ir.snap +++ b/src/tests/snapshots/ppl__tests__generics.ir.snap @@ -103,7 +103,7 @@ define private void @"println <:Bool>"(i1 %0) !dbg !27 { %2 = load i1, ptr %x, align 1, !dbg !28 %3 = call %String @"String from <:Bool>"(i1 %2), !dbg !28 call void @"println <:String>"(%String %3), !dbg !28 - br label %return, !dbg !28 + br label %return, !dbg !29 return: ; preds = %1 ret void @@ -117,39 +117,39 @@ declare i1 @integer_eq_integer(%Integer, %Integer) declare %Integer @clone_integer(ptr) -define private %Integer @"id <:Integer>"(%Integer %0) !dbg !29 { +define private %Integer @"id <:Integer>"(%Integer %0) !dbg !30 { %return_value = alloca %Integer, align 8 %x = alloca %Integer, align 8 store %Integer %0, ptr %x, align 8 - %2 = load %Integer, ptr %x, align 8, !dbg !30 - store %Integer %2, ptr %return_value, align 8, !dbg !30 - br label %return, !dbg !30 + %2 = load %Integer, ptr %x, align 8, !dbg !31 + store %Integer %2, ptr %return_value, align 8, !dbg !31 + br label %return, !dbg !31 return: ; preds = %1 %3 = load %Integer, ptr %return_value, align 8 ret %Integer %3 } -define private %String @"id <:String>"(%String %0) !dbg !31 { +define private %String @"id <:String>"(%String %0) !dbg !32 { %return_value = alloca %String, align 8 %x = alloca %String, align 8 store %String %0, ptr %x, align 8 - %2 = load %String, ptr %x, align 8, !dbg !32 - store %String %2, ptr %return_value, align 8, !dbg !32 - br label %return, !dbg !32 + %2 = load %String, ptr %x, align 8, !dbg !33 + store %String %2, ptr %return_value, align 8, !dbg !33 + br label %return, !dbg !33 return: ; preds = %1 %3 = load %String, ptr %return_value, align 8 ret %String %3 } -define private %"Point" @"id <:Point>"(%"Point" %0) !dbg !33 { +define private %"Point" @"id <:Point>"(%"Point" %0) !dbg !34 { %return_value = alloca %"Point", align 8 %x = alloca %"Point", align 8 store %"Point" %0, ptr %x, align 8 - %2 = load %"Point", ptr %x, align 8, !dbg !34 - store %"Point" %2, ptr %return_value, align 8, !dbg !34 - br label %return, !dbg !34 + %2 = load %"Point", ptr %x, align 8, !dbg !35 + store %"Point" %2, ptr %return_value, align 8, !dbg !35 + br label %return, !dbg !35 return: ; preds = %1 %3 = load %"Point", ptr %return_value, align 8 @@ -164,14 +164,14 @@ declare void @destroy_integer(ptr) !0 = !{i32 2, !"Debug Info Version", i32 3} !1 = distinct !DICompileUnit(language: DW_LANG_C, file: !2, producer: "ppl", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, splitDebugInlining: false, sysroot: "/") !2 = !DIFile(filename: "src/main.ppl", directory: ".") -!3 = distinct !DISubprogram(name: "initialize", linkageName: "initialize", scope: !2, file: !2, line: 13, type: !4, spFlags: DISPFlagDefinition, unit: !1) +!3 = distinct !DISubprogram(name: "initialize", linkageName: "initialize", scope: !2, file: !2, line: 10, type: !4, spFlags: DISPFlagDefinition, unit: !1) !4 = !DISubroutineType(types: !5) !5 = !{!6} !6 = !DIBasicType(name: "i32", size: 32, encoding: DW_ATE_signed) -!7 = !DILocation(line: 13, scope: !3) +!7 = !DILocation(line: 10, column: 5, scope: !3) !8 = !DILocation(line: 0, scope: !3) !9 = distinct !DISubprogram(name: "main.execute", linkageName: "main.execute", scope: !2, file: !2, type: !4, spFlags: DISPFlagDefinition, unit: !1) -!10 = !DILocation(line: 13, scope: !9) +!10 = !DILocation(line: 10, column: 5, scope: !9) !11 = !DILocation(line: 5, column: 8, scope: !9) !12 = !DILocation(line: 6, column: 8, scope: !9) !13 = !DILocation(line: 6, column: 13, scope: !9) @@ -188,11 +188,12 @@ declare void @destroy_integer(ptr) !24 = !DILocation(line: 5, column: 30, scope: !21) !25 = distinct !DISubprogram(name: "x of <:Point>", linkageName: "x of <:Point>", scope: !21, file: !2, line: 3, type: !4, spFlags: DISPFlagDefinition, unit: !1) !26 = !DILocation(line: 3, column: 28, scope: !25) -!27 = distinct !DISubprogram(name: "println <:Bool>", linkageName: "println <:Bool>", scope: !9, file: !2, line: 13, type: !4, spFlags: DISPFlagDefinition, unit: !1) +!27 = distinct !DISubprogram(name: "println <:Bool>", linkageName: "println <:Bool>", scope: !9, file: !2, line: 11, type: !4, spFlags: DISPFlagDefinition, unit: !1) !28 = !DILocation(line: 13, scope: !27) -!29 = distinct !DISubprogram(name: "id <:Integer>", linkageName: "id <:Integer>", scope: !9, file: !2, line: 8, type: !4, spFlags: DISPFlagDefinition, unit: !1) -!30 = !DILocation(line: 8, column: 19, scope: !29) -!31 = distinct !DISubprogram(name: "id <:String>", linkageName: "id <:String>", scope: !9, file: !2, line: 8, type: !4, spFlags: DISPFlagDefinition, unit: !1) -!32 = !DILocation(line: 8, column: 19, scope: !31) -!33 = distinct !DISubprogram(name: "id <:Point>", linkageName: "id <:Point>", scope: !9, file: !2, line: 8, type: !4, spFlags: DISPFlagDefinition, unit: !1) -!34 = !DILocation(line: 8, column: 19, scope: !33) +!29 = !DILocation(line: 12, column: 5, scope: !27) +!30 = distinct !DISubprogram(name: "id <:Integer>", linkageName: "id <:Integer>", scope: !9, file: !2, line: 8, type: !4, spFlags: DISPFlagDefinition, unit: !1) +!31 = !DILocation(line: 8, column: 19, scope: !30) +!32 = distinct !DISubprogram(name: "id <:String>", linkageName: "id <:String>", scope: !9, file: !2, line: 8, type: !4, spFlags: DISPFlagDefinition, unit: !1) +!33 = !DILocation(line: 8, column: 19, scope: !32) +!34 = distinct !DISubprogram(name: "id <:Point>", linkageName: "id <:Point>", scope: !9, file: !2, line: 8, type: !4, spFlags: DISPFlagDefinition, unit: !1) +!35 = !DILocation(line: 8, column: 19, scope: !34) diff --git a/src/tests/snapshots/ppl__tests__import_all.hir.snap b/src/tests/snapshots/ppl__tests__import_all.hir.snap index 292304a9..f9beca1f 100644 --- a/src/tests/snapshots/ppl__tests__import_all.hir.snap +++ b/src/tests/snapshots/ppl__tests__import_all.hir.snap @@ -14,14 +14,15 @@ fn String from <$arg0: None> -> String: return ($tmp@737:String) -fn println -> None: - let $tmp@314: None = println String from (x:None) - return ($tmp@314:None) +fn println -> None: + let $tmp@176: None = println String from (x:None) + return ($tmp@176:None) + @mangle_as("integer_as_string") -fn String from <:Integer> -> String +fn String from <$arg0: Integer> -> String -fn println -> None: - let $tmp@314: None = println String from (x:Integer) - return ($tmp@314:None) +fn println -> None: + let $tmp@176: None = println String from (x:Integer) + return ($tmp@176:None) diff --git a/src/tests/snapshots/ppl__tests__integer.hir.snap b/src/tests/snapshots/ppl__tests__integer.hir.snap index 62bd36db..b75cde3c 100644 --- a/src/tests/snapshots/ppl__tests__integer.hir.snap +++ b/src/tests/snapshots/ppl__tests__integer.hir.snap @@ -15,64 +15,71 @@ println 14 / 2 @mangle_as("integer_as_string") -fn String from <:Integer> -> String +fn String from <$arg0: Integer> -> String + +fn println -> None: + let $tmp@176: None = println String from (x:Integer) + return ($tmp@176:None) -fn println -> None: - let $tmp@314: None = println String from (x:Integer) - return ($tmp@314:None) @mangle_as("integer_as_string") -fn String from <:Integer> -> String +fn String from <$arg0: Integer> -> String + +fn println -> None: + let $tmp@176: None = println String from (x:Integer) + return ($tmp@176:None) -fn println -> None: - let $tmp@314: None = println String from (x:Integer) - return ($tmp@314:None) @mangle_as("integer_as_string") -fn String from <:Integer> -> String +fn String from <$arg0: Integer> -> String + +fn println -> None: + let $tmp@176: None = println String from (x:Integer) + return ($tmp@176:None) -fn println -> None: - let $tmp@314: None = println String from (x:Integer) - return ($tmp@314:None) @mangle_as("integer_as_string") -fn String from <:Integer> -> String +fn String from <$arg0: Integer> -> String + +fn println -> None: + let $tmp@176: None = println String from (x:Integer) + return ($tmp@176:None) -fn println -> None: - let $tmp@314: None = println String from (x:Integer) - return ($tmp@314:None) @mangle_as("integer_as_string") -fn String from <:Integer> -> String +fn String from <$arg0: Integer> -> String + +fn println -> None: + let $tmp@176: None = println String from (x:Integer) + return ($tmp@176:None) -fn println -> None: - let $tmp@314: None = println String from (x:Integer) - return ($tmp@314:None) @mangle_as("integer_as_string") -fn String from <:Integer> -> String +fn String from <$arg0: Integer> -> String + +fn println -> None: + let $tmp@176: None = println String from (x:Integer) + return ($tmp@176:None) -fn println -> None: - let $tmp@314: None = println String from (x:Integer) - return ($tmp@314:None) @mangle_as("integer_as_string") -fn String from <:Integer> -> String +fn String from <$arg0: Integer> -> String + +fn println -> None: + let $tmp@176: None = println String from (x:Integer) + return ($tmp@176:None) -fn println -> None: - let $tmp@314: None = println String from (x:Integer) - return ($tmp@314:None) @mangle_as("rational_as_string") -fn String from <:Rational> -> String +fn String from <$arg0: Rational> -> String -fn println -> None: - let $tmp@314: None = println String from (x:Rational) - return ($tmp@314:None) +fn println -> None: + let $tmp@176: None = println String from (x:Rational) + return ($tmp@176:None) diff --git a/src/tests/snapshots/ppl__tests__memory.hir.snap b/src/tests/snapshots/ppl__tests__memory.hir.snap index 19cf4ee2..bc2661c6 100644 --- a/src/tests/snapshots/ppl__tests__memory.hir.snap +++ b/src/tests/snapshots/ppl__tests__memory.hir.snap @@ -27,16 +27,17 @@ fn allocate <$arg1: Type> -> MemoryAddress: fn > at -> ReferenceMut @mangle_as("integer_as_string") -fn String from <:Integer> -> String +fn String from <$arg0: Integer> -> String + +fn println -> None: + let $tmp@176: None = println String from (x:Integer) + return ($tmp@176:None) -fn println -> None: - let $tmp@314: None = println String from (x:Integer) - return ($tmp@314:None) @mangle_as("integer_as_string") -fn String from <:Integer> -> String +fn String from <$arg0: Integer> -> String -fn println -> None: - let $tmp@314: None = println String from (x:Integer) - return ($tmp@314:None) +fn println -> None: + let $tmp@176: None = println String from (x:Integer) + return ($tmp@176:None) diff --git a/src/tests/snapshots/ppl__tests__monomorphize.hir.snap b/src/tests/snapshots/ppl__tests__monomorphize.hir.snap index cd8dc702..fd99a505 100644 --- a/src/tests/snapshots/ppl__tests__monomorphize.hir.snap +++ b/src/tests/snapshots/ppl__tests__monomorphize.hir.snap @@ -23,6 +23,6 @@ fn String from -> String: return ($tmp@1260:String) -fn println -> None: - let $tmp@314: None = println String from (x:Bool) - return ($tmp@314:None) +fn println -> None: + let $tmp@176: None = println String from (x:Bool) + return ($tmp@176:None) diff --git a/src/tests/snapshots/ppl__tests__plus_assign.hir.snap b/src/tests/snapshots/ppl__tests__plus_assign.hir.snap index 1134256d..281390c3 100644 --- a/src/tests/snapshots/ppl__tests__plus_assign.hir.snap +++ b/src/tests/snapshots/ppl__tests__plus_assign.hir.snap @@ -16,11 +16,12 @@ destroy (str:String) @mangle_as("rational_as_string") -fn String from <:Rational> -> String +fn String from <$arg0: Rational> -> String + +fn println -> None: + let $tmp@176: None = println String from (x:Rational) + return ($tmp@176:None) -fn println -> None: - let $tmp@314: None = println String from (x:Rational) - return ($tmp@314:None) @mangle_as("rational_plus_rational") @@ -31,11 +32,12 @@ fn > += -> None: @mangle_as("rational_as_string") -fn String from <:Rational> -> String +fn String from <$arg0: Rational> -> String + +fn println -> None: + let $tmp@176: None = println String from (x:Rational) + return ($tmp@176:None) -fn println -> None: - let $tmp@314: None = println String from (x:Rational) - return ($tmp@314:None) @mangle_as("string_plus_string") diff --git a/src/tests/snapshots/ppl__tests__plus_assign.ir.snap b/src/tests/snapshots/ppl__tests__plus_assign.ir.snap index 5b5719e8..d41f9043 100644 --- a/src/tests/snapshots/ppl__tests__plus_assign.ir.snap +++ b/src/tests/snapshots/ppl__tests__plus_assign.ir.snap @@ -99,7 +99,7 @@ declare %String @rational_as_string(%Rational) declare %Rational @clone_rational(ptr) -define void @"<:ReferenceMut> += <:Rational>"(ptr %0, %Rational %1) !dbg !26 { +define private void @"<:ReferenceMut> += <:Rational>"(ptr %0, %Rational %1) !dbg !26 { %self = alloca ptr, align 8 store ptr %0, ptr %self, align 8 %other = alloca %Rational, align 8 @@ -118,7 +118,7 @@ return: ; preds = %2 declare %Rational @rational_plus_rational(%Rational, %Rational) -define void @"<:ReferenceMut> += <:String>"(ptr %0, %String %1) !dbg !28 { +define private void @"<:ReferenceMut> += <:String>"(ptr %0, %String %1) !dbg !28 { %self = alloca ptr, align 8 store ptr %0, ptr %self, align 8 %other = alloca %String, align 8 diff --git a/src/tests/snapshots/ppl__tests__ppl.hir.snap b/src/tests/snapshots/ppl__tests__ppl.hir.snap index ed35a508..cbff71d0 100644 --- a/src/tests/snapshots/ppl__tests__ppl.hir.snap +++ b/src/tests/snapshots/ppl__tests__ppl.hir.snap @@ -9,6 +9,6 @@ use f64.* use memory.* use threads.* use math.* -use as_string.* +use printable.* ==MONOMORPHIZED== diff --git a/src/tests/snapshots/ppl__tests__predeclare_function.hir.snap b/src/tests/snapshots/ppl__tests__predeclare_function.hir.snap index 527382ad..14859e7d 100644 --- a/src/tests/snapshots/ppl__tests__predeclare_function.hir.snap +++ b/src/tests/snapshots/ppl__tests__predeclare_function.hir.snap @@ -20,8 +20,8 @@ println 2 plus two @mangle_as("integer_as_string") -fn String from <:Integer> -> String +fn String from <$arg0: Integer> -> String -fn println -> None: - let $tmp@314: None = println String from (x:Integer) - return ($tmp@314:None) +fn println -> None: + let $tmp@176: None = println String from (x:Integer) + return ($tmp@176:None) diff --git a/src/tests/snapshots/ppl__tests__predeclare_vars.hir.snap b/src/tests/snapshots/ppl__tests__predeclare_vars.hir.snap index e05dc904..64ac8338 100644 --- a/src/tests/snapshots/ppl__tests__predeclare_vars.hir.snap +++ b/src/tests/snapshots/ppl__tests__predeclare_vars.hir.snap @@ -22,8 +22,8 @@ destroy (y:Integer) @mangle_as("integer_as_string") -fn String from <:Integer> -> String +fn String from <$arg0: Integer> -> String -fn println -> None: - let $tmp@314: None = println String from (x:Integer) - return ($tmp@314:None) +fn println -> None: + let $tmp@176: None = println String from (x:Integer) + return ($tmp@176:None) diff --git a/src/tests/snapshots/ppl__tests__rational.hir.snap b/src/tests/snapshots/ppl__tests__rational.hir.snap index 631ce538..e144ca3c 100644 --- a/src/tests/snapshots/ppl__tests__rational.hir.snap +++ b/src/tests/snapshots/ppl__tests__rational.hir.snap @@ -22,59 +22,66 @@ println 1.0 >= 0.0 @mangle_as("rational_as_string") -fn String from <:Rational> -> String +fn String from <$arg0: Rational> -> String + +fn println -> None: + let $tmp@176: None = println String from (x:Rational) + return ($tmp@176:None) -fn println -> None: - let $tmp@314: None = println String from (x:Rational) - return ($tmp@314:None) @mangle_as("rational_as_string") -fn String from <:Rational> -> String +fn String from <$arg0: Rational> -> String + +fn println -> None: + let $tmp@176: None = println String from (x:Rational) + return ($tmp@176:None) -fn println -> None: - let $tmp@314: None = println String from (x:Rational) - return ($tmp@314:None) @mangle_as("rational_as_string") -fn String from <:Rational> -> String +fn String from <$arg0: Rational> -> String + +fn println -> None: + let $tmp@176: None = println String from (x:Rational) + return ($tmp@176:None) -fn println -> None: - let $tmp@314: None = println String from (x:Rational) - return ($tmp@314:None) @mangle_as("rational_as_string") -fn String from <:Rational> -> String +fn String from <$arg0: Rational> -> String + +fn println -> None: + let $tmp@176: None = println String from (x:Rational) + return ($tmp@176:None) -fn println -> None: - let $tmp@314: None = println String from (x:Rational) - return ($tmp@314:None) @mangle_as("rational_as_string") -fn String from <:Rational> -> String +fn String from <$arg0: Rational> -> String + +fn println -> None: + let $tmp@176: None = println String from (x:Rational) + return ($tmp@176:None) -fn println -> None: - let $tmp@314: None = println String from (x:Rational) - return ($tmp@314:None) @mangle_as("rational_as_string") -fn String from <:Rational> -> String +fn String from <$arg0: Rational> -> String + +fn println -> None: + let $tmp@176: None = println String from (x:Rational) + return ($tmp@176:None) -fn println -> None: - let $tmp@314: None = println String from (x:Rational) - return ($tmp@314:None) @mangle_as("rational_as_string") -fn String from <:Rational> -> String +fn String from <$arg0: Rational> -> String + +fn println -> None: + let $tmp@176: None = println String from (x:Rational) + return ($tmp@176:None) -fn println -> None: - let $tmp@314: None = println String from (x:Rational) - return ($tmp@314:None) fn String from -> String: @@ -86,9 +93,10 @@ fn String from -> String: return ($tmp@1260:String) -fn println -> None: - let $tmp@314: None = println String from (x:Bool) - return ($tmp@314:None) +fn println -> None: + let $tmp@176: None = println String from (x:Bool) + return ($tmp@176:None) + @mangle_as("rational_eq_rational") @@ -109,9 +117,10 @@ fn String from -> String: return ($tmp@1260:String) -fn println -> None: - let $tmp@314: None = println String from (x:Bool) - return ($tmp@314:None) +fn println -> None: + let $tmp@176: None = println String from (x:Bool) + return ($tmp@176:None) + fn String from -> String: @@ -123,9 +132,10 @@ fn String from -> String: return ($tmp@1260:String) -fn println -> None: - let $tmp@314: None = println String from (x:Bool) - return ($tmp@314:None) +fn println -> None: + let $tmp@176: None = println String from (x:Bool) + return ($tmp@176:None) + @mangle_as("rational_less_rational") @@ -146,9 +156,10 @@ fn String from -> String: return ($tmp@1260:String) -fn println -> None: - let $tmp@314: None = println String from (x:Bool) - return ($tmp@314:None) +fn println -> None: + let $tmp@176: None = println String from (x:Bool) + return ($tmp@176:None) + @mangle_as("rational_less_rational") @@ -175,9 +186,10 @@ fn String from -> String: return ($tmp@1260:String) -fn println -> None: - let $tmp@314: None = println String from (x:Bool) - return ($tmp@314:None) +fn println -> None: + let $tmp@176: None = println String from (x:Bool) + return ($tmp@176:None) + @mangle_as("rational_less_rational") @@ -204,9 +216,10 @@ fn String from -> String: return ($tmp@1260:String) -fn println -> None: - let $tmp@314: None = println String from (x:Bool) - return ($tmp@314:None) +fn println -> None: + let $tmp@176: None = println String from (x:Bool) + return ($tmp@176:None) + @mangle_as("rational_less_rational") @@ -227,9 +240,10 @@ fn String from -> String: return ($tmp@1260:String) -fn println -> None: - let $tmp@314: None = println String from (x:Bool) - return ($tmp@314:None) +fn println -> None: + let $tmp@176: None = println String from (x:Bool) + return ($tmp@176:None) + @mangle_as("rational_less_rational") @@ -250,6 +264,6 @@ fn String from -> String: return ($tmp@1260:String) -fn println -> None: - let $tmp@314: None = println String from (x:Bool) - return ($tmp@314:None) +fn println -> None: + let $tmp@176: None = println String from (x:Bool) + return ($tmp@176:None) diff --git a/src/tests/snapshots/ppl__tests__rational.ir.snap b/src/tests/snapshots/ppl__tests__rational.ir.snap index 95d1d320..025c8288 100644 --- a/src/tests/snapshots/ppl__tests__rational.ir.snap +++ b/src/tests/snapshots/ppl__tests__rational.ir.snap @@ -131,7 +131,7 @@ define private void @"println <:Rational>"(%Rational %0) !dbg !39 { %2 = load %Rational, ptr %x, align 8, !dbg !40 %3 = call %String @rational_as_string(%Rational %2), !dbg !40 call void @"println <:String>"(%String %3), !dbg !40 - br label %return, !dbg !40 + br label %return, !dbg !41 return: ; preds = %1 ret void @@ -157,13 +157,13 @@ declare %Rational @rational_slash_rational(%Rational, %Rational) declare %Rational @integer_slash_integer(%Integer, %Integer) -define private void @"println <:Bool>"(i1 %0) !dbg !41 { +define private void @"println <:Bool>"(i1 %0) !dbg !42 { %x = alloca i1, align 1 store i1 %0, ptr %x, align 1 - %2 = load i1, ptr %x, align 1, !dbg !42 - %3 = call %String @"String from <:Bool>"(i1 %2), !dbg !42 - call void @"println <:String>"(%String %3), !dbg !42 - br label %return, !dbg !42 + %2 = load i1, ptr %x, align 1, !dbg !43 + %3 = call %String @"String from <:Bool>"(i1 %2), !dbg !43 + call void @"println <:String>"(%String %3), !dbg !43 + br label %return, !dbg !44 return: ; preds = %1 ret void @@ -173,21 +173,21 @@ declare %String @"String from <:Bool>"(i1) declare i1 @rational_eq_rational(%Rational, %Rational) -define i1 @"<:Rational> != <:Rational>"(%Rational %0, %Rational %1) !dbg !43 { +define private i1 @"<:Rational> != <:Rational>"(%Rational %0, %Rational %1) !dbg !45 { %return_value = alloca i1, align 1 %x = alloca %Rational, align 8 store %Rational %0, ptr %x, align 8 %y = alloca %Rational, align 8 store %Rational %1, ptr %y, align 8 - %3 = load %Rational, ptr %x, align 8, !dbg !44 - %4 = load %Rational, ptr %y, align 8, !dbg !44 - %5 = call i1 @rational_eq_rational(%Rational %3, %Rational %4), !dbg !44 - %6 = call i1 @"not <:Bool>"(i1 %5), !dbg !44 - %"$tmp@776" = alloca i1, align 1, !dbg !44 - store i1 %6, ptr %"$tmp@776", align 1, !dbg !44 - %7 = load i1, ptr %"$tmp@776", align 1, !dbg !44 - store i1 %7, ptr %return_value, align 1, !dbg !44 - br label %return, !dbg !44 + %3 = load %Rational, ptr %x, align 8, !dbg !46 + %4 = load %Rational, ptr %y, align 8, !dbg !46 + %5 = call i1 @rational_eq_rational(%Rational %3, %Rational %4), !dbg !46 + %6 = call i1 @"not <:Bool>"(i1 %5), !dbg !46 + %"$tmp@776" = alloca i1, align 1, !dbg !46 + store i1 %6, ptr %"$tmp@776", align 1, !dbg !46 + %7 = load i1, ptr %"$tmp@776", align 1, !dbg !46 + store i1 %7, ptr %return_value, align 1, !dbg !46 + br label %return, !dbg !46 return: ; preds = %2 %8 = load i1, ptr %return_value, align 1 @@ -198,62 +198,62 @@ declare i1 @"not <:Bool>"(i1) declare i1 @rational_less_rational(%Rational, %Rational) -define i1 @"<:Rational> > <:Rational>"(%Rational %0, %Rational %1) !dbg !45 { +define private i1 @"<:Rational> > <:Rational>"(%Rational %0, %Rational %1) !dbg !47 { %return_value = alloca i1, align 1 %x = alloca %Rational, align 8 store %Rational %0, ptr %x, align 8 %y = alloca %Rational, align 8 store %Rational %1, ptr %y, align 8 - %3 = load %Rational, ptr %y, align 8, !dbg !46 - %4 = load %Rational, ptr %x, align 8, !dbg !46 - %5 = call i1 @rational_less_rational(%Rational %3, %Rational %4), !dbg !46 - %"$tmp@1032" = alloca i1, align 1, !dbg !46 - store i1 %5, ptr %"$tmp@1032", align 1, !dbg !46 - %6 = load i1, ptr %"$tmp@1032", align 1, !dbg !46 - store i1 %6, ptr %return_value, align 1, !dbg !46 - br label %return, !dbg !46 + %3 = load %Rational, ptr %y, align 8, !dbg !48 + %4 = load %Rational, ptr %x, align 8, !dbg !48 + %5 = call i1 @rational_less_rational(%Rational %3, %Rational %4), !dbg !48 + %"$tmp@1032" = alloca i1, align 1, !dbg !48 + store i1 %5, ptr %"$tmp@1032", align 1, !dbg !48 + %6 = load i1, ptr %"$tmp@1032", align 1, !dbg !48 + store i1 %6, ptr %return_value, align 1, !dbg !48 + br label %return, !dbg !48 return: ; preds = %2 %7 = load i1, ptr %return_value, align 1 ret i1 %7 } -define i1 @"<:Rational> <= <:Rational>"(%Rational %0, %Rational %1) !dbg !47 { +define private i1 @"<:Rational> <= <:Rational>"(%Rational %0, %Rational %1) !dbg !49 { %return_value = alloca i1, align 1 %x = alloca %Rational, align 8 store %Rational %0, ptr %x, align 8 %y = alloca %Rational, align 8 store %Rational %1, ptr %y, align 8 - %3 = load %Rational, ptr %x, align 8, !dbg !48 - %4 = load %Rational, ptr %y, align 8, !dbg !48 - %5 = call i1 @"<:Rational> > <:Rational>"(%Rational %3, %Rational %4), !dbg !48 - %6 = call i1 @"not <:Bool>"(i1 %5), !dbg !48 - %"$tmp@1068" = alloca i1, align 1, !dbg !48 - store i1 %6, ptr %"$tmp@1068", align 1, !dbg !48 - %7 = load i1, ptr %"$tmp@1068", align 1, !dbg !48 - store i1 %7, ptr %return_value, align 1, !dbg !48 - br label %return, !dbg !48 + %3 = load %Rational, ptr %x, align 8, !dbg !50 + %4 = load %Rational, ptr %y, align 8, !dbg !50 + %5 = call i1 @"<:Rational> > <:Rational>"(%Rational %3, %Rational %4), !dbg !50 + %6 = call i1 @"not <:Bool>"(i1 %5), !dbg !50 + %"$tmp@1068" = alloca i1, align 1, !dbg !50 + store i1 %6, ptr %"$tmp@1068", align 1, !dbg !50 + %7 = load i1, ptr %"$tmp@1068", align 1, !dbg !50 + store i1 %7, ptr %return_value, align 1, !dbg !50 + br label %return, !dbg !50 return: ; preds = %2 %8 = load i1, ptr %return_value, align 1 ret i1 %8 } -define i1 @"<:Rational> >= <:Rational>"(%Rational %0, %Rational %1) !dbg !49 { +define private i1 @"<:Rational> >= <:Rational>"(%Rational %0, %Rational %1) !dbg !51 { %return_value = alloca i1, align 1 %x = alloca %Rational, align 8 store %Rational %0, ptr %x, align 8 %y = alloca %Rational, align 8 store %Rational %1, ptr %y, align 8 - %3 = load %Rational, ptr %x, align 8, !dbg !50 - %4 = load %Rational, ptr %y, align 8, !dbg !50 - %5 = call i1 @rational_less_rational(%Rational %3, %Rational %4), !dbg !50 - %6 = call i1 @"not <:Bool>"(i1 %5), !dbg !50 - %"$tmp@1110" = alloca i1, align 1, !dbg !50 - store i1 %6, ptr %"$tmp@1110", align 1, !dbg !50 - %7 = load i1, ptr %"$tmp@1110", align 1, !dbg !50 - store i1 %7, ptr %return_value, align 1, !dbg !50 - br label %return, !dbg !50 + %3 = load %Rational, ptr %x, align 8, !dbg !52 + %4 = load %Rational, ptr %y, align 8, !dbg !52 + %5 = call i1 @rational_less_rational(%Rational %3, %Rational %4), !dbg !52 + %6 = call i1 @"not <:Bool>"(i1 %5), !dbg !52 + %"$tmp@1110" = alloca i1, align 1, !dbg !52 + store i1 %6, ptr %"$tmp@1110", align 1, !dbg !52 + %7 = load i1, ptr %"$tmp@1110", align 1, !dbg !52 + store i1 %7, ptr %return_value, align 1, !dbg !52 + br label %return, !dbg !52 return: ; preds = %2 %8 = load i1, ptr %return_value, align 1 @@ -266,14 +266,14 @@ return: ; preds = %2 !0 = !{i32 2, !"Debug Info Version", i32 3} !1 = distinct !DICompileUnit(language: DW_LANG_C, file: !2, producer: "ppl", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, splitDebugInlining: false, sysroot: "/") !2 = !DIFile(filename: "src/main.ppl", directory: ".") -!3 = distinct !DISubprogram(name: "initialize", linkageName: "initialize", scope: !2, file: !2, line: 11, type: !4, spFlags: DISPFlagDefinition, unit: !1) +!3 = distinct !DISubprogram(name: "initialize", linkageName: "initialize", scope: !2, file: !2, line: 8, type: !4, spFlags: DISPFlagDefinition, unit: !1) !4 = !DISubroutineType(types: !5) !5 = !{!6} !6 = !DIBasicType(name: "i32", size: 32, encoding: DW_ATE_signed) -!7 = !DILocation(line: 11, column: 16, scope: !3) +!7 = !DILocation(line: 8, column: 2, scope: !3) !8 = !DILocation(line: 0, scope: !3) !9 = distinct !DISubprogram(name: "main.execute", linkageName: "main.execute", scope: !2, file: !2, type: !4, spFlags: DISPFlagDefinition, unit: !1) -!10 = !DILocation(line: 11, column: 16, scope: !9) +!10 = !DILocation(line: 8, column: 2, scope: !9) !11 = !DILocation(line: 0, column: 8, scope: !9) !12 = !DILocation(line: 1, column: 9, scope: !9) !13 = !DILocation(line: 2, column: 9, scope: !9) @@ -302,15 +302,17 @@ return: ; preds = %2 !36 = !DILocation(line: 13, column: 15, scope: !9) !37 = !DILocation(line: 14, column: 8, scope: !9) !38 = !DILocation(line: 14, column: 15, scope: !9) -!39 = distinct !DISubprogram(name: "println <:Rational>", linkageName: "println <:Rational>", scope: !9, file: !2, line: 14, type: !4, spFlags: DISPFlagDefinition, unit: !1) -!40 = !DILocation(line: 14, column: 18, scope: !39) -!41 = distinct !DISubprogram(name: "println <:Bool>", linkageName: "println <:Bool>", scope: !9, file: !2, line: 14, type: !4, spFlags: DISPFlagDefinition, unit: !1) -!42 = !DILocation(line: 14, column: 18, scope: !41) -!43 = distinct !DISubprogram(name: "<:Rational> != <:Rational>", linkageName: "<:Rational> != <:Rational>", scope: !9, file: !2, line: 14, type: !4, spFlags: DISPFlagDefinition, unit: !1) -!44 = !DILocation(line: 14, column: 18, scope: !43) -!45 = distinct !DISubprogram(name: "<:Rational> > <:Rational>", linkageName: "<:Rational> > <:Rational>", scope: !9, file: !2, line: 14, type: !4, spFlags: DISPFlagDefinition, unit: !1) +!39 = distinct !DISubprogram(name: "println <:Rational>", linkageName: "println <:Rational>", scope: !9, file: !2, line: 9, type: !4, spFlags: DISPFlagDefinition, unit: !1) +!40 = !DILocation(line: 11, column: 9, scope: !39) +!41 = !DILocation(line: 10, column: 6, scope: !39) +!42 = distinct !DISubprogram(name: "println <:Bool>", linkageName: "println <:Bool>", scope: !9, file: !2, line: 9, type: !4, spFlags: DISPFlagDefinition, unit: !1) +!43 = !DILocation(line: 11, column: 9, scope: !42) +!44 = !DILocation(line: 10, column: 6, scope: !42) +!45 = distinct !DISubprogram(name: "<:Rational> != <:Rational>", linkageName: "<:Rational> != <:Rational>", scope: !9, file: !2, line: 14, type: !4, spFlags: DISPFlagDefinition, unit: !1) !46 = !DILocation(line: 14, column: 18, scope: !45) -!47 = distinct !DISubprogram(name: "<:Rational> <= <:Rational>", linkageName: "<:Rational> <= <:Rational>", scope: !9, file: !2, line: 14, type: !4, spFlags: DISPFlagDefinition, unit: !1) +!47 = distinct !DISubprogram(name: "<:Rational> > <:Rational>", linkageName: "<:Rational> > <:Rational>", scope: !9, file: !2, line: 14, type: !4, spFlags: DISPFlagDefinition, unit: !1) !48 = !DILocation(line: 14, column: 18, scope: !47) -!49 = distinct !DISubprogram(name: "<:Rational> >= <:Rational>", linkageName: "<:Rational> >= <:Rational>", scope: !9, file: !2, line: 14, type: !4, spFlags: DISPFlagDefinition, unit: !1) +!49 = distinct !DISubprogram(name: "<:Rational> <= <:Rational>", linkageName: "<:Rational> <= <:Rational>", scope: !9, file: !2, line: 14, type: !4, spFlags: DISPFlagDefinition, unit: !1) !50 = !DILocation(line: 14, column: 18, scope: !49) +!51 = distinct !DISubprogram(name: "<:Rational> >= <:Rational>", linkageName: "<:Rational> >= <:Rational>", scope: !9, file: !2, line: 14, type: !4, spFlags: DISPFlagDefinition, unit: !1) +!52 = !DILocation(line: 14, column: 18, scope: !51) diff --git a/src/tests/snapshots/ppl__tests__reference_mut.hir.snap b/src/tests/snapshots/ppl__tests__reference_mut.hir.snap index 226af50f..3e484d9c 100644 --- a/src/tests/snapshots/ppl__tests__reference_mut.hir.snap +++ b/src/tests/snapshots/ppl__tests__reference_mut.hir.snap @@ -19,24 +19,26 @@ fn reference to mutable > -> ReferenceMut -> String +fn String from <$arg0: Integer> -> String + +fn println -> None: + let $tmp@176: None = println String from (x:Integer) + return ($tmp@176:None) -fn println -> None: - let $tmp@314: None = println String from (x:Integer) - return ($tmp@314:None) @mangle_as("integer_as_string") -fn String from <:Integer> -> String +fn String from <$arg0: Integer> -> String + +fn println -> None: + let $tmp@176: None = println String from (x:Integer) + return ($tmp@176:None) -fn println -> None: - let $tmp@314: None = println String from (x:Integer) - return ($tmp@314:None) @mangle_as("integer_as_string") -fn String from <:Integer> -> String +fn String from <$arg0: Integer> -> String -fn println -> None: - let $tmp@314: None = println String from (x:Integer) - return ($tmp@314:None) +fn println -> None: + let $tmp@176: None = println String from (x:Integer) + return ($tmp@176:None) diff --git a/src/tests/snapshots/ppl__tests__reference_to_literal.hir.snap b/src/tests/snapshots/ppl__tests__reference_to_literal.hir.snap index 312f4fb8..a5473d94 100644 --- a/src/tests/snapshots/ppl__tests__reference_to_literal.hir.snap +++ b/src/tests/snapshots/ppl__tests__reference_to_literal.hir.snap @@ -14,8 +14,8 @@ destroy ($tmp@39:Integer) @mangle_as("integer_as_string") -fn String from <:Integer> -> String +fn String from <$arg0: Integer> -> String -fn println -> None: - let $tmp@314: None = println String from (x:Integer) - return ($tmp@314:None) +fn println -> None: + let $tmp@176: None = println String from (x:Integer) + return ($tmp@176:None) diff --git a/src/tests/snapshots/ppl__tests__references.hir.snap b/src/tests/snapshots/ppl__tests__references.hir.snap index 3f50f4a2..8fa3febb 100644 --- a/src/tests/snapshots/ppl__tests__references.hir.snap +++ b/src/tests/snapshots/ppl__tests__references.hir.snap @@ -24,16 +24,17 @@ fn size of > -> Integer: fn > at -> ReferenceMut @mangle_as("i32_as_string") -fn String from <:I32> -> String +fn String from <$arg0: I32> -> String + +fn println -> None: + let $tmp@176: None = println String from (x:I32) + return ($tmp@176:None) -fn println -> None: - let $tmp@314: None = println String from (x:I32) - return ($tmp@314:None) @mangle_as("i32_as_string") -fn String from <:I32> -> String +fn String from <$arg0: I32> -> String -fn println -> None: - let $tmp@314: None = println String from (x:I32) - return ($tmp@314:None) +fn println -> None: + let $tmp@176: None = println String from (x:I32) + return ($tmp@176:None) diff --git a/src/tests/snapshots/ppl__tests__references.ir.snap b/src/tests/snapshots/ppl__tests__references.ir.snap index 26394039..a8b7b8df 100644 --- a/src/tests/snapshots/ppl__tests__references.ir.snap +++ b/src/tests/snapshots/ppl__tests__references.ir.snap @@ -146,7 +146,7 @@ define private void @"println <:I32>"(i32 %0) !dbg !35 { %2 = load i32, ptr %x, align 4, !dbg !36 %3 = call %String @i32_as_string(i32 %2), !dbg !36 call void @"println <:String>"(%String %3), !dbg !36 - br label %return, !dbg !36 + br label %return, !dbg !37 return: ; preds = %1 ret void @@ -166,17 +166,17 @@ declare void @destroy_integer(ptr) !0 = !{i32 2, !"Debug Info Version", i32 3} !1 = distinct !DICompileUnit(language: DW_LANG_C, file: !2, producer: "ppl", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, splitDebugInlining: false, sysroot: "/") !2 = !DIFile(filename: "src/main.ppl", directory: ".") -!3 = distinct !DISubprogram(name: "initialize", linkageName: "initialize", scope: !2, file: !2, line: 8, type: !4, spFlags: DISPFlagDefinition, unit: !1) +!3 = distinct !DISubprogram(name: "initialize", linkageName: "initialize", scope: !2, file: !2, line: 5, type: !4, spFlags: DISPFlagDefinition, unit: !1) !4 = !DISubroutineType(types: !5) !5 = !{!6} !6 = !DIBasicType(name: "i32", size: 32, encoding: DW_ATE_signed) -!7 = !DILocation(line: 8, column: 12, scope: !3) +!7 = !DILocation(line: 5, column: 7, scope: !3) !8 = !DILocation(line: 0, scope: !3) !9 = distinct !DISubprogram(name: "initialize.1", linkageName: "initialize.1", scope: !2, file: !2, type: !4, spFlags: DISPFlagDefinition, unit: !1) !10 = !DILocation(line: 0, column: 16, scope: !9) !11 = !DILocation(line: 0, scope: !9) !12 = distinct !DISubprogram(name: "main.execute", linkageName: "main.execute", scope: !2, file: !2, type: !4, spFlags: DISPFlagDefinition, unit: !1) -!13 = !DILocation(line: 8, column: 12, scope: !12) +!13 = !DILocation(line: 5, column: 7, scope: !12) !14 = !DILocation(line: 0, column: 16, scope: !12) !15 = !DILocation(line: 0, column: 8, scope: !12) !16 = !DILocation(line: 2, column: 14, scope: !12) @@ -198,5 +198,6 @@ declare void @destroy_integer(ptr) !32 = distinct !DISubprogram(name: "initialize.4", linkageName: "initialize.4", scope: !12, file: !2, line: 3, type: !4, spFlags: DISPFlagDefinition, unit: !1) !33 = !DILocation(line: 3, column: 12, scope: !32) !34 = !DILocation(line: 3, column: 19, scope: !32) -!35 = distinct !DISubprogram(name: "println <:I32>", linkageName: "println <:I32>", scope: !12, file: !2, line: 8, type: !4, spFlags: DISPFlagDefinition, unit: !1) +!35 = distinct !DISubprogram(name: "println <:I32>", linkageName: "println <:I32>", scope: !12, file: !2, line: 6, type: !4, spFlags: DISPFlagDefinition, unit: !1) !36 = !DILocation(line: 8, column: 12, scope: !35) +!37 = !DILocation(line: 8, column: 3, scope: !35) diff --git a/src/tests/snapshots/ppl__tests__star.hir.snap b/src/tests/snapshots/ppl__tests__star.hir.snap index 6e523054..ce7f84bb 100644 --- a/src/tests/snapshots/ppl__tests__star.hir.snap +++ b/src/tests/snapshots/ppl__tests__star.hir.snap @@ -8,8 +8,8 @@ println 2 + 2 * 2 @mangle_as("integer_as_string") -fn String from <:Integer> -> String +fn String from <$arg0: Integer> -> String -fn println -> None: - let $tmp@314: None = println String from (x:Integer) - return ($tmp@314:None) +fn println -> None: + let $tmp@176: None = println String from (x:Integer) + return ($tmp@176:None) diff --git a/src/tests/snapshots/ppl__tests__string.ir.snap b/src/tests/snapshots/ppl__tests__string.ir.snap index 180ade2a..cb066e03 100644 --- a/src/tests/snapshots/ppl__tests__string.ir.snap +++ b/src/tests/snapshots/ppl__tests__string.ir.snap @@ -165,11 +165,11 @@ return: ; preds = %1 !0 = !{i32 2, !"Debug Info Version", i32 3} !1 = distinct !DICompileUnit(language: DW_LANG_C, file: !2, producer: "ppl", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, splitDebugInlining: false, sysroot: "/") !2 = !DIFile(filename: "src/main.ppl", directory: ".") -!3 = distinct !DISubprogram(name: "initialize", linkageName: "initialize", scope: !2, file: !2, line: 7, type: !4, spFlags: DISPFlagDefinition, unit: !1) +!3 = distinct !DISubprogram(name: "initialize", linkageName: "initialize", scope: !2, file: !2, line: 4, type: !4, spFlags: DISPFlagDefinition, unit: !1) !4 = !DISubroutineType(types: !5) !5 = !{!6} !6 = !DIBasicType(name: "i32", size: 32, encoding: DW_ATE_signed) -!7 = !DILocation(line: 7, column: 9, scope: !3) +!7 = !DILocation(line: 4, column: 20, scope: !3) !8 = !DILocation(line: 0, scope: !3) !9 = distinct !DISubprogram(name: "initialize.1", linkageName: "initialize.1", scope: !2, file: !2, line: 6, type: !4, spFlags: DISPFlagDefinition, unit: !1) !10 = !DILocation(line: 6, column: 21, scope: !9) @@ -178,7 +178,7 @@ return: ; preds = %1 !13 = !DILocation(line: 7, column: 21, scope: !12) !14 = !DILocation(line: 0, scope: !12) !15 = distinct !DISubprogram(name: "main.execute", linkageName: "main.execute", scope: !2, file: !2, type: !4, spFlags: DISPFlagDefinition, unit: !1) -!16 = !DILocation(line: 7, column: 9, scope: !15) +!16 = !DILocation(line: 4, column: 20, scope: !15) !17 = !DILocation(line: 6, column: 21, scope: !15) !18 = !DILocation(line: 7, column: 21, scope: !15) !19 = !DILocation(line: 0, column: 8, scope: !15) diff --git a/src/tests/snapshots/ppl__tests__supertraits.ir.snap b/src/tests/snapshots/ppl__tests__supertraits.ir.snap index 00b3337d..011dfe60 100644 --- a/src/tests/snapshots/ppl__tests__supertraits.ir.snap +++ b/src/tests/snapshots/ppl__tests__supertraits.ir.snap @@ -80,14 +80,14 @@ return: ; preds = %0 !0 = !{i32 2, !"Debug Info Version", i32 3} !1 = distinct !DICompileUnit(language: DW_LANG_C, file: !2, producer: "ppl", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, splitDebugInlining: false, sysroot: "/") !2 = !DIFile(filename: "src/main.ppl", directory: ".") -!3 = distinct !DISubprogram(name: "initialize", linkageName: "initialize", scope: !2, file: !2, line: 15, type: !4, spFlags: DISPFlagDefinition, unit: !1) +!3 = distinct !DISubprogram(name: "initialize", linkageName: "initialize", scope: !2, file: !2, line: 9, type: !4, spFlags: DISPFlagDefinition, unit: !1) !4 = !DISubroutineType(types: !5) !5 = !{!6} !6 = !DIBasicType(name: "i32", size: 32, encoding: DW_ATE_signed) -!7 = !DILocation(line: 15, column: 11, scope: !3) +!7 = !DILocation(line: 9, column: 24, scope: !3) !8 = !DILocation(line: 0, scope: !3) !9 = distinct !DISubprogram(name: "main.execute", linkageName: "main.execute", scope: !2, file: !2, type: !4, spFlags: DISPFlagDefinition, unit: !1) -!10 = !DILocation(line: 15, column: 11, scope: !9) +!10 = !DILocation(line: 9, column: 24, scope: !9) !11 = !DILocation(line: 15, column: 7, scope: !9) !12 = distinct !DISubprogram(name: "foo <:None>", linkageName: "foo <:None>", scope: !9, file: !2, line: 8, type: !4, spFlags: DISPFlagDefinition, unit: !1) !13 = !DILocation(line: 8, column: 24, scope: !12) diff --git a/src/tests/snapshots/ppl__tests__traits.hir.snap b/src/tests/snapshots/ppl__tests__traits.hir.snap index bc9ec31a..7965f8aa 100644 --- a/src/tests/snapshots/ppl__tests__traits.hir.snap +++ b/src/tests/snapshots/ppl__tests__traits.hir.snap @@ -29,8 +29,8 @@ fn default -> Integer: @mangle_as("integer_as_string") -fn String from <:Integer> -> String +fn String from <$arg0: Integer> -> String -fn println -> None: - let $tmp@314: None = println String from (x:Integer) - return ($tmp@314:None) +fn println -> None: + let $tmp@176: None = println String from (x:Integer) + return ($tmp@176:None) diff --git a/src/tests/snapshots/ppl__tests__traits.ir.snap b/src/tests/snapshots/ppl__tests__traits.ir.snap index 3941cee3..084d8b70 100644 --- a/src/tests/snapshots/ppl__tests__traits.ir.snap +++ b/src/tests/snapshots/ppl__tests__traits.ir.snap @@ -67,7 +67,7 @@ return: ; preds = %0 ret void } -define %Integer @"default <:Integer>"(%Integer %0) !dbg !19 { +define private %Integer @"default <:Integer>"(%Integer %0) !dbg !19 { %return_value = alloca %Integer, align 8 %x = alloca %Integer, align 8 store %Integer %0, ptr %x, align 8 @@ -104,14 +104,14 @@ declare %Integer @clone_integer(ptr) !0 = !{i32 2, !"Debug Info Version", i32 3} !1 = distinct !DICompileUnit(language: DW_LANG_C, file: !2, producer: "ppl", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, splitDebugInlining: false, sysroot: "/") !2 = !DIFile(filename: "src/main.ppl", directory: ".") -!3 = distinct !DISubprogram(name: "initialize", linkageName: "initialize", scope: !2, file: !2, line: 10, type: !4, spFlags: DISPFlagDefinition, unit: !1) +!3 = distinct !DISubprogram(name: "initialize", linkageName: "initialize", scope: !2, file: !2, line: 9, type: !4, spFlags: DISPFlagDefinition, unit: !1) !4 = !DISubroutineType(types: !5) !5 = !{!6} !6 = !DIBasicType(name: "i32", size: 32, encoding: DW_ATE_signed) -!7 = !DILocation(line: 10, column: 11, scope: !3) +!7 = !DILocation(line: 9, column: 4, scope: !3) !8 = !DILocation(line: 0, scope: !3) !9 = distinct !DISubprogram(name: "main.execute", linkageName: "main.execute", scope: !2, file: !2, type: !4, spFlags: DISPFlagDefinition, unit: !1) -!10 = !DILocation(line: 10, column: 11, scope: !9) +!10 = !DILocation(line: 9, column: 4, scope: !9) !11 = !DILocation(line: 9, column: 10, scope: !9) !12 = !DILocation(line: 10, column: 8, scope: !9) !13 = !DILocation(line: 9, scope: !9) diff --git a/src/tests/snapshots/ppl__tests__type_as_value.hir.snap b/src/tests/snapshots/ppl__tests__type_as_value.hir.snap index 19b077e8..08dc3bef 100644 --- a/src/tests/snapshots/ppl__tests__type_as_value.hir.snap +++ b/src/tests/snapshots/ppl__tests__type_as_value.hir.snap @@ -29,9 +29,10 @@ fn String from -> String: return ($tmp@1260:String) -fn println -> None: - let $tmp@314: None = println String from (x:Bool) - return ($tmp@314:None) +fn println -> None: + let $tmp@176: None = println String from (x:Bool) + return ($tmp@176:None) + fn size of > -> Integer: @@ -48,9 +49,10 @@ fn String from -> String: return ($tmp@1260:String) -fn println -> None: - let $tmp@314: None = println String from (x:Bool) - return ($tmp@314:None) +fn println -> None: + let $tmp@176: None = println String from (x:Bool) + return ($tmp@176:None) + fn String from > -> String: @@ -77,9 +79,10 @@ fn String from -> String: return ($tmp@1260:String) -fn println -> None: - let $tmp@314: None = println String from (x:Bool) - return ($tmp@314:None) +fn println -> None: + let $tmp@176: None = println String from (x:Bool) + return ($tmp@176:None) + fn String from > -> String: @@ -87,6 +90,6 @@ fn String from > -> String: return ($tmp@4331:String) -fn> println > -> None: - let $tmp@314: None = println String from (x:Type) - return ($tmp@314:None) +fn println > -> None: + let $tmp@176: None = println String from (x:Type) + return ($tmp@176:None) diff --git a/src/tests/snapshots/ppl__tests__type_as_value.ir.snap b/src/tests/snapshots/ppl__tests__type_as_value.ir.snap index 29c52a5b..0e8589dc 100644 --- a/src/tests/snapshots/ppl__tests__type_as_value.ir.snap +++ b/src/tests/snapshots/ppl__tests__type_as_value.ir.snap @@ -174,7 +174,7 @@ define private void @"println <:Bool>"(i1 %0) !dbg !39 { %2 = load i1, ptr %x, align 1, !dbg !40 %3 = call %String @"String from <:Bool>"(i1 %2), !dbg !40 call void @"println <:String>"(%String %3), !dbg !40 - br label %return, !dbg !40 + br label %return, !dbg !41 return: ; preds = %1 ret void @@ -186,51 +186,51 @@ declare %String @"String from <:Bool>"(i1) declare i1 @integer_eq_integer(%Integer, %Integer) -define private %Integer @"size of <:Type>"(%"Type" %0) !dbg !41 { +define private %Integer @"size of <:Type>"(%"Type" %0) !dbg !42 { %return_value = alloca %Integer, align 8 %ty = alloca %"Type", align 8 store %"Type" %0, ptr %ty, align 8 - %size = getelementptr inbounds %"Type", ptr %ty, i32 0, i32 1, !dbg !42 - %2 = call %Integer @clone_integer(ptr %size), !dbg !42 - %"$tmp@4399" = alloca %Integer, align 8, !dbg !42 - store %Integer %2, ptr %"$tmp@4399", align 8, !dbg !42 - %3 = load %Integer, ptr %"$tmp@4399", align 8, !dbg !42 - store %Integer %3, ptr %return_value, align 8, !dbg !42 - br label %return, !dbg !42 + %size = getelementptr inbounds %"Type", ptr %ty, i32 0, i32 1, !dbg !43 + %2 = call %Integer @clone_integer(ptr %size), !dbg !43 + %"$tmp@4399" = alloca %Integer, align 8, !dbg !43 + store %Integer %2, ptr %"$tmp@4399", align 8, !dbg !43 + %3 = load %Integer, ptr %"$tmp@4399", align 8, !dbg !43 + store %Integer %3, ptr %return_value, align 8, !dbg !43 + br label %return, !dbg !43 return: ; preds = %1 %4 = load %Integer, ptr %return_value, align 8 ret %Integer %4 } -define private %Integer @"size of <:Type>"(%"Type" %0) !dbg !43 { +define private %Integer @"size of <:Type>"(%"Type" %0) !dbg !44 { %return_value = alloca %Integer, align 8 %ty = alloca %"Type", align 8 store %"Type" %0, ptr %ty, align 8 - %size = getelementptr inbounds %"Type", ptr %ty, i32 0, i32 1, !dbg !44 - %2 = call %Integer @clone_integer(ptr %size), !dbg !44 - %"$tmp@4399" = alloca %Integer, align 8, !dbg !44 - store %Integer %2, ptr %"$tmp@4399", align 8, !dbg !44 - %3 = load %Integer, ptr %"$tmp@4399", align 8, !dbg !44 - store %Integer %3, ptr %return_value, align 8, !dbg !44 - br label %return, !dbg !44 + %size = getelementptr inbounds %"Type", ptr %ty, i32 0, i32 1, !dbg !45 + %2 = call %Integer @clone_integer(ptr %size), !dbg !45 + %"$tmp@4399" = alloca %Integer, align 8, !dbg !45 + store %Integer %2, ptr %"$tmp@4399", align 8, !dbg !45 + %3 = load %Integer, ptr %"$tmp@4399", align 8, !dbg !45 + store %Integer %3, ptr %return_value, align 8, !dbg !45 + br label %return, !dbg !45 return: ; preds = %1 %4 = load %Integer, ptr %return_value, align 8 ret %Integer %4 } -define private %String @"String from <:Type>"(%"Type" %0) !dbg !45 { +define private %String @"String from <:Type>"(%"Type" %0) !dbg !46 { %return_value = alloca %String, align 8 %ty = alloca %"Type", align 8 store %"Type" %0, ptr %ty, align 8 - %name = getelementptr inbounds %"Type", ptr %ty, i32 0, i32 0, !dbg !46 - %2 = call %String @clone_string(ptr %name), !dbg !46 - %"$tmp@4331" = alloca %String, align 8, !dbg !46 - store %String %2, ptr %"$tmp@4331", align 8, !dbg !46 - %3 = load %String, ptr %"$tmp@4331", align 8, !dbg !46 - store %String %3, ptr %return_value, align 8, !dbg !46 - br label %return, !dbg !46 + %name = getelementptr inbounds %"Type", ptr %ty, i32 0, i32 0, !dbg !47 + %2 = call %String @clone_string(ptr %name), !dbg !47 + %"$tmp@4331" = alloca %String, align 8, !dbg !47 + store %String %2, ptr %"$tmp@4331", align 8, !dbg !47 + %3 = load %String, ptr %"$tmp@4331", align 8, !dbg !47 + store %String %3, ptr %return_value, align 8, !dbg !47 + br label %return, !dbg !47 return: ; preds = %1 %4 = load %String, ptr %return_value, align 8 @@ -239,63 +239,63 @@ return: ; preds = %1 declare %String @clone_string(ptr) -define private %String @"String from <:Type>>"(%"Type>" %0) !dbg !47 { +define private %String @"String from <:Type>>"(%"Type>" %0) !dbg !48 { %return_value = alloca %String, align 8 %ty = alloca %"Type>", align 8 store %"Type>" %0, ptr %ty, align 8 - %name = getelementptr inbounds %"Type>", ptr %ty, i32 0, i32 0, !dbg !48 - %2 = call %String @clone_string(ptr %name), !dbg !48 - %"$tmp@4331" = alloca %String, align 8, !dbg !48 - store %String %2, ptr %"$tmp@4331", align 8, !dbg !48 - %3 = load %String, ptr %"$tmp@4331", align 8, !dbg !48 - store %String %3, ptr %return_value, align 8, !dbg !48 - br label %return, !dbg !48 + %name = getelementptr inbounds %"Type>", ptr %ty, i32 0, i32 0, !dbg !49 + %2 = call %String @clone_string(ptr %name), !dbg !49 + %"$tmp@4331" = alloca %String, align 8, !dbg !49 + store %String %2, ptr %"$tmp@4331", align 8, !dbg !49 + %3 = load %String, ptr %"$tmp@4331", align 8, !dbg !49 + store %String %3, ptr %return_value, align 8, !dbg !49 + br label %return, !dbg !49 return: ; preds = %1 %4 = load %String, ptr %return_value, align 8 ret %String %4 } -define private %Integer @"size of <:Type>"(%"Type" %0) !dbg !49 { +define private %Integer @"size of <:Type>"(%"Type" %0) !dbg !50 { %return_value = alloca %Integer, align 8 %ty = alloca %"Type", align 8 store %"Type" %0, ptr %ty, align 8 - %size = getelementptr inbounds %"Type", ptr %ty, i32 0, i32 1, !dbg !50 - %2 = call %Integer @clone_integer(ptr %size), !dbg !50 - %"$tmp@4399" = alloca %Integer, align 8, !dbg !50 - store %Integer %2, ptr %"$tmp@4399", align 8, !dbg !50 - %3 = load %Integer, ptr %"$tmp@4399", align 8, !dbg !50 - store %Integer %3, ptr %return_value, align 8, !dbg !50 - br label %return, !dbg !50 + %size = getelementptr inbounds %"Type", ptr %ty, i32 0, i32 1, !dbg !51 + %2 = call %Integer @clone_integer(ptr %size), !dbg !51 + %"$tmp@4399" = alloca %Integer, align 8, !dbg !51 + store %Integer %2, ptr %"$tmp@4399", align 8, !dbg !51 + %3 = load %Integer, ptr %"$tmp@4399", align 8, !dbg !51 + store %Integer %3, ptr %return_value, align 8, !dbg !51 + br label %return, !dbg !51 return: ; preds = %1 %4 = load %Integer, ptr %return_value, align 8 ret %Integer %4 } -define private void @"println <:Type>"(%"Type" %0) !dbg !51 { +define private void @"println <:Type>"(%"Type" %0) !dbg !52 { %x = alloca %"Type", align 8 store %"Type" %0, ptr %x, align 8 - %2 = load %"Type", ptr %x, align 8, !dbg !52 - %3 = call %String @"String from <:Type>"(%"Type" %2), !dbg !52 - call void @"println <:String>"(%String %3), !dbg !52 - br label %return, !dbg !52 + %2 = load %"Type", ptr %x, align 8, !dbg !53 + %3 = call %String @"String from <:Type>"(%"Type" %2), !dbg !53 + call void @"println <:String>"(%String %3), !dbg !53 + br label %return, !dbg !54 return: ; preds = %1 ret void } -define private %String @"String from <:Type>"(%"Type" %0) !dbg !53 { +define private %String @"String from <:Type>"(%"Type" %0) !dbg !55 { %return_value = alloca %String, align 8 %ty = alloca %"Type", align 8 store %"Type" %0, ptr %ty, align 8 - %name = getelementptr inbounds %"Type", ptr %ty, i32 0, i32 0, !dbg !54 - %2 = call %String @clone_string(ptr %name), !dbg !54 - %"$tmp@4331" = alloca %String, align 8, !dbg !54 - store %String %2, ptr %"$tmp@4331", align 8, !dbg !54 - %3 = load %String, ptr %"$tmp@4331", align 8, !dbg !54 - store %String %3, ptr %return_value, align 8, !dbg !54 - br label %return, !dbg !54 + %name = getelementptr inbounds %"Type", ptr %ty, i32 0, i32 0, !dbg !56 + %2 = call %String @clone_string(ptr %name), !dbg !56 + %"$tmp@4331" = alloca %String, align 8, !dbg !56 + store %String %2, ptr %"$tmp@4331", align 8, !dbg !56 + %3 = load %String, ptr %"$tmp@4331", align 8, !dbg !56 + store %String %3, ptr %return_value, align 8, !dbg !56 + br label %return, !dbg !56 return: ; preds = %1 %4 = load %String, ptr %return_value, align 8 @@ -310,11 +310,11 @@ declare void @destroy_integer(ptr) !0 = !{i32 2, !"Debug Info Version", i32 3} !1 = distinct !DICompileUnit(language: DW_LANG_C, file: !2, producer: "ppl", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, splitDebugInlining: false, sysroot: "/") !2 = !DIFile(filename: "src/main.ppl", directory: ".") -!3 = distinct !DISubprogram(name: "initialize", linkageName: "initialize", scope: !2, file: !2, line: 8, type: !4, spFlags: DISPFlagDefinition, unit: !1) +!3 = distinct !DISubprogram(name: "initialize", linkageName: "initialize", scope: !2, file: !2, line: 5, type: !4, spFlags: DISPFlagDefinition, unit: !1) !4 = !DISubroutineType(types: !5) !5 = !{!6} !6 = !DIBasicType(name: "i32", size: 32, encoding: DW_ATE_signed) -!7 = !DILocation(line: 8, column: 15, scope: !3) +!7 = !DILocation(line: 5, column: 15, scope: !3) !8 = !DILocation(line: 0, scope: !3) !9 = distinct !DISubprogram(name: "initialize.1", linkageName: "initialize.1", scope: !2, file: !2, line: 5, type: !4, spFlags: DISPFlagDefinition, unit: !1) !10 = !DILocation(line: 5, column: 8, scope: !9) @@ -329,7 +329,7 @@ declare void @destroy_integer(ptr) !19 = !DILocation(line: 3, column: 21, scope: !18) !20 = !DILocation(line: 0, scope: !18) !21 = distinct !DISubprogram(name: "main.execute", linkageName: "main.execute", scope: !2, file: !2, line: 5, type: !4, spFlags: DISPFlagDefinition, unit: !1) -!22 = !DILocation(line: 8, column: 15, scope: !21) +!22 = !DILocation(line: 5, column: 15, scope: !21) !23 = !DILocation(line: 5, column: 8, scope: !21) !24 = !DILocation(line: 0, column: 17, scope: !21) !25 = !DILocation(line: 1, column: 17, scope: !21) @@ -346,19 +346,21 @@ declare void @destroy_integer(ptr) !36 = !DILocation(line: 5, column: 8, scope: !35) !37 = distinct !DISubprogram(name: "initialize.6", linkageName: "initialize.6", scope: !21, file: !2, line: 6, type: !4, spFlags: DISPFlagDefinition, unit: !1) !38 = !DILocation(line: 6, column: 8, scope: !37) -!39 = distinct !DISubprogram(name: "println <:Bool>", linkageName: "println <:Bool>", scope: !21, file: !2, line: 8, type: !4, spFlags: DISPFlagDefinition, unit: !1) -!40 = !DILocation(line: 8, column: 15, scope: !39) -!41 = distinct !DISubprogram(name: "size of <:Type>", linkageName: "size of <:Type>", scope: !21, file: !2, line: 8, type: !4, spFlags: DISPFlagDefinition, unit: !1) -!42 = !DILocation(line: 8, column: 15, scope: !41) -!43 = distinct !DISubprogram(name: "size of <:Type>", linkageName: "size of <:Type>", scope: !21, file: !2, line: 8, type: !4, spFlags: DISPFlagDefinition, unit: !1) -!44 = !DILocation(line: 8, column: 15, scope: !43) -!45 = distinct !DISubprogram(name: "String from <:Type>", linkageName: "String from <:Type>", scope: !21, file: !2, line: 8, type: !4, spFlags: DISPFlagDefinition, unit: !1) -!46 = !DILocation(line: 8, column: 15, scope: !45) -!47 = distinct !DISubprogram(name: "String from <:Type>>", linkageName: "String from <:Type>>", scope: !21, file: !2, line: 8, type: !4, spFlags: DISPFlagDefinition, unit: !1) -!48 = !DILocation(line: 8, column: 15, scope: !47) -!49 = distinct !DISubprogram(name: "size of <:Type>", linkageName: "size of <:Type>", scope: !21, file: !2, line: 8, type: !4, spFlags: DISPFlagDefinition, unit: !1) -!50 = !DILocation(line: 8, column: 15, scope: !49) -!51 = distinct !DISubprogram(name: "println <:Type>", linkageName: "println <:Type>", scope: !21, file: !2, line: 8, type: !4, spFlags: DISPFlagDefinition, unit: !1) -!52 = !DILocation(line: 8, column: 15, scope: !51) -!53 = distinct !DISubprogram(name: "String from <:Type>", linkageName: "String from <:Type>", scope: !51, file: !2, line: 8, type: !4, spFlags: DISPFlagDefinition, unit: !1) -!54 = !DILocation(line: 8, column: 15, scope: !53) +!39 = distinct !DISubprogram(name: "println <:Bool>", linkageName: "println <:Bool>", scope: !21, file: !2, line: 6, type: !4, spFlags: DISPFlagDefinition, unit: !1) +!40 = !DILocation(line: 8, column: 9, scope: !39) +!41 = !DILocation(line: 7, column: 19, scope: !39) +!42 = distinct !DISubprogram(name: "size of <:Type>", linkageName: "size of <:Type>", scope: !21, file: !2, line: 8, type: !4, spFlags: DISPFlagDefinition, unit: !1) +!43 = !DILocation(line: 8, column: 15, scope: !42) +!44 = distinct !DISubprogram(name: "size of <:Type>", linkageName: "size of <:Type>", scope: !21, file: !2, line: 8, type: !4, spFlags: DISPFlagDefinition, unit: !1) +!45 = !DILocation(line: 8, column: 15, scope: !44) +!46 = distinct !DISubprogram(name: "String from <:Type>", linkageName: "String from <:Type>", scope: !21, file: !2, line: 8, type: !4, spFlags: DISPFlagDefinition, unit: !1) +!47 = !DILocation(line: 8, column: 15, scope: !46) +!48 = distinct !DISubprogram(name: "String from <:Type>>", linkageName: "String from <:Type>>", scope: !21, file: !2, line: 8, type: !4, spFlags: DISPFlagDefinition, unit: !1) +!49 = !DILocation(line: 8, column: 15, scope: !48) +!50 = distinct !DISubprogram(name: "size of <:Type>", linkageName: "size of <:Type>", scope: !21, file: !2, line: 8, type: !4, spFlags: DISPFlagDefinition, unit: !1) +!51 = !DILocation(line: 8, column: 15, scope: !50) +!52 = distinct !DISubprogram(name: "println <:Type>", linkageName: "println <:Type>", scope: !21, file: !2, line: 6, type: !4, spFlags: DISPFlagDefinition, unit: !1) +!53 = !DILocation(line: 8, column: 9, scope: !52) +!54 = !DILocation(line: 7, column: 19, scope: !52) +!55 = distinct !DISubprogram(name: "String from <:Type>", linkageName: "String from <:Type>", scope: !52, file: !2, line: 8, type: !4, spFlags: DISPFlagDefinition, unit: !1) +!56 = !DILocation(line: 8, column: 15, scope: !55) diff --git a/src/tests/snapshots/ppl__tests__type_of.hir.snap b/src/tests/snapshots/ppl__tests__type_of.hir.snap index 7ffe5237..a0c89cc0 100644 --- a/src/tests/snapshots/ppl__tests__type_of.hir.snap +++ b/src/tests/snapshots/ppl__tests__type_of.hir.snap @@ -18,6 +18,6 @@ fn String from > -> String: return ($tmp@4331:String) -fn> println > -> None: - let $tmp@314: None = println String from (x:Type) - return ($tmp@314:None) +fn println > -> None: + let $tmp@176: None = println String from (x:Type) + return ($tmp@176:None)