record package_scope = str "net.doorstuck.test" record import = { str "std.io" } 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 id @_ZN3net9doorstuck4testC6PersonP15examplePropertyG(id %self) instance { entry: %0 = getelementptr class @_ZN33net9doorstuck4testC6PersonE, id %self, i32 #2 %1 = load id, ptr %0 ret id %1 } define void @_ZN3net9doorstuck4testC6PersonP15examplePropertyS(id %self, id %0) instance { entry: %1 = getelementptr class @_ZN33net9doorstuck4testC6PersonE, id %self, i32 #2 store id %0, ptr %1 ret void }