From e379afb0351911a7d1d6e3d1c7ad06cf2b7e41bb Mon Sep 17 00:00:00 2001 From: Max Wash Date: Fri, 11 Apr 2025 13:42:27 +0100 Subject: [PATCH] doc: add sample Mie IR for Person.im --- doc/mie/sample/Person.mie | 169 +++++++++++++++++++++++++++++++------- 1 file changed, 138 insertions(+), 31 deletions(-) diff --git a/doc/mie/sample/Person.mie b/doc/mie/sample/Person.mie index b32e56b..3e41cb1 100644 --- a/doc/mie/sample/Person.mie +++ b/doc/mie/sample/Person.mie @@ -1,39 +1,146 @@ -record package_scope = "net.doorstuck.test" +record package_scope = str "net.doorstuck.test" -record import = { "std.io" } +record import = { str "std.io" } -define void @L0001(id %0) lambda { +data @cout = external global id +data @StringBuffer = external global id + +data @.str.0 = str "Received " +data @.str.1 = str ", " + +data @.atom.0 = atom "years" +data @.atom.1 = atom "months" +data @.atom.2 = atom "days" + +type @_ZN3net9doorstuck4testC6PersonE = class { + id @name, + id @age, + id @val +} + +define void @_ZN3net9doorstuck4testC6PersonM4init4name3ageE(id %self, id %0) instance { +%entry: + %1 = getelementptr class @_ZN3net9doorstuck4testC6PersonE, id %self, i32 #0 + store id %0, ptr %1 + + %2 = getelementptr class @_ZN33net9doorstuck4testC6PersonE, id %self, i32 #1 + store id %1, ptr %2 + + ret void +} + +define void @_ZN3net9doorstuck4testC6PersonM4test5param0E(id %0, id %1) instance { +%entry: + %2 = load id, ptr @cout + + ; %4 = StringBuilder new + %3 = load id, ptr @StringBuilder + %4 = msg id %3, @_M3newE() + + ; (void) tempstr append:'Received ' + %5 = load id, ptr @.str.0 + msg void, id %3, @_M06appendE(id %5) + + ; (void) tempstr append:data (param 0) + msg void, id %3, @_M06appendE(id %0) + + ; (void) tempstr append:', ' + %6 = load id, ptr @.str.1 + msg void, id %3, @_M06appendE(id %6) + + ; (void) tempstr append:extra (param 1) + msg void, id %3, @_M06appendE(id %1) + + ; %7 = tempstr toString + %7 = msg id, id %3, @_M8toStringE() + + ; cout put:'Received {data}, {extra}' + msg void, id %2, @_M03put(id %7) + + ret void +} + +define id @_ZN3net9doorstuck4testC6PersonM4nameE(id %self) instance { +%entry: + %0 = getelementptr class @_ZN33net9doorstuck4testC6PersonE, id %self, i32 #0 + %1 = load id, ptr %0 + ret id %1 +} + +define id @_ZN3net9doorstuck4testC6PersonM3ageE(id %self) instance { +%entry: + %0 = getelementptr class @_ZN33net9doorstuck4testC6PersonE, id %self, i32 #1 + %1 = load id, ptr %0 + ret id %1 +} + +define id @_ZN3net9doorstuck4testC6PersonM11ageInMonthsE(id %self, id %0) instance { +%entry: + %1 = getelementptr class @_ZN33net9doorstuck4testC6PersonE, id %self, i32 #1 + %2 = load id, ptr %1 + ret id %1 +} + +define void @_ZN3net9doorstuck4testC6PersonM07setNameE(id %self, id %1) instance { +%entry: + %2 = getelementptr class @_ZN33net9doorstuck4testC6PersonE, id %self, i32 #1 + store id %1, ptr %2 + ret void +} + +define void @_ZN3net9doorstuck4testC6PersonM06setAge6inUnitE(id %self, i32 %1, id %2) instance { +%entry: + %3 = load atom, ptr @.atom.0 + %4 = load atom, ptr @.atom.1 + %5 = load atom, ptr @.atom.2 + + switch id %2, label %default [ + atom %3, label %years + atom %4, label %months + atom %5, label %days + ] + +%years: + %6 = getelementptr class @_ZN33net9doorstuck4testC6PersonE, id %self, i32 #1 + store i32 %2, ptr %6 + br label %end + +%months: + %7 = getelementptr class @_ZN33net9doorstuck4testC6PersonE, id %self, i32 #1 + %8 = div i32 %2, #12 + store i32 %8, ptr %7 + br label %end + +%days: + %9 = getelementptr class @_ZN33net9doorstuck4testC6PersonE, id %self, i32 #1 + %10 = div i32 %2, #365 + store i32 %10, ptr %9 + br label %end + +%default: + %11 = getelementptr class @_ZN33net9doorstuck4testC6PersonE, id %self, i32 #1 + store i32 #0, ptr %11 + br label %end + +%end: + ret void +} + +define id @_ZN3net9doorstuck4testC6PersonM012getAgeInUnitE(id %0, id %1) instance { +%entry: } -define void @Person::@_M4init4name3ageE(id %0, id %1) instance { - +define id @_ZN3net9doorstuck4testC6PersonP15examplePropertyG(id %self) instance { +%entry: + %0 = getelementptr class @_ZN33net9doorstuck4testC6PersonE, id %self, i32 #2 + %1 = load id, ptr %0 + ret id %1 } -define void @Person::@_M4test5param0E(id %0, id %1) instance { - -} - -define id @Person::@_M4nameE(id %0, id %1) instance { - -} - -define id @Person::@_M3ageE(id %0, id %1) instance { - -} - -define id @Person::@_M11ageInMonthsE(id %0, id %1) instance { - -} - -define void @Person::@_M07setNameE(id %0, id %1) instance { - -} - -define void @Person::@_M06setAge6inUnitE(id %0, id %1) instance { - -} - -define id @Person::@_M012getAgeInUnitE(id %0, id %1) instance { - +define void @_ZN3net9doorstuck4testC6PersonP15examplePropertyS(id %self, id %0) instance { +%entry: + %1 = getelementptr class @_ZN33net9doorstuck4testC6PersonE, id %self, i32 #2 + store id %0, ptr %1 + ret void }