lower: 제네릭 인스턴스와 메서드

모노모피제이션이 실제로 코드를 만드는 자리가 여기다. 프론트엔드는 어떤
인스턴스가 존재하는지만 정했다. 검사기가 인스턴스마다 선언·바인딩·유닛·링크
이름을 기록하고, lowering 이 그 바인딩을 다시 걸고 같은 본문을 자기 이름으로
내린다. 제네릭 선언 자체는 코드가 없다.

comptime 인자는 값이 아니므로 호출에서 넘기지 않고 파라미터 자리도 잡지
않는다. 메서드 호출은 도달한 대상을 첫 인자로 넘긴다 -- self: Self 든
self: &Self 든 수신자의 주소로 같다. 구조체 메서드가 아예 lowering 되지
않고 있었다.

exec.py 13/13.
This commit is contained in:
2026-08-17 06:26:20 +09:00
parent eba6f63530
commit 231c7d564b
4 changed files with 157 additions and 19 deletions
+21
View File
@@ -0,0 +1,21 @@
// 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();
}