모노모피제이션이 실제로 코드를 만드는 자리가 여기다. 프론트엔드는 어떤 인스턴스가 존재하는지만 정했다. 검사기가 인스턴스마다 선언·바인딩·유닛·링크 이름을 기록하고, lowering 이 그 바인딩을 다시 걸고 같은 본문을 자기 이름으로 내린다. 제네릭 선언 자체는 코드가 없다. comptime 인자는 값이 아니므로 호출에서 넘기지 않고 파라미터 자리도 잡지 않는다. 메서드 호출은 도달한 대상을 첫 인자로 넘긴다 -- self: Self 든 self: &Self 든 수신자의 주소로 같다. 구조체 메서드가 아예 lowering 되지 않고 있었다. exec.py 13/13.
22 lines
481 B
Plaintext
22 lines
481 B
Plaintext
// EXIT:39
|
|
unit generic;
|
|
|
|
struct Box(T) {
|
|
value: T,
|
|
|
|
pub fn new(v: T) -> Self { return Self{ value: v }; }
|
|
pub fn get(self: &Self) -> T { return self.value; }
|
|
}
|
|
|
|
fn id(comptime T: type, v: T) -> T { return v; }
|
|
|
|
fn twice(comptime T: type, v: T) -> T { return v + v; }
|
|
|
|
fn main() -> i32 {
|
|
let a: i32 = id(i32, 7);
|
|
let b: u8 = id(u8, 9 as u8);
|
|
let c: i32 = twice(i32, 10);
|
|
let box: Box(i32) = Box(i32).new(3);
|
|
return a + (b as i32) + c + box.get();
|
|
}
|