Files
ivy/doc/mie/sample/Person.mie

147 lines
3.5 KiB
Plaintext

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
}