lower: 전역과 문자열 리터럴, 그리고 defer 실행 검증

전역은 정적 저장소다. 초기값이 컴파일타임 상수면 이미지에 박고 아니면 0이다.
문자열 리터럴은 바이트를 이미지에 두고 포인터와 길이를 값으로 만든다. 같은
글자는 같은 저장소를 쓴다 -- 읽기 전용이라 공유가 공짜다.

defers 프로그램이 defer 순서를 실행으로 고정한다. 등록 역순이고, 이른 return
과 끝까지 간 경로 양쪽 다 돈다.
This commit is contained in:
2026-08-17 06:08:33 +09:00
parent 096a5db411
commit 174e6c569d
5 changed files with 130 additions and 2 deletions
+22
View File
@@ -0,0 +1,22 @@
// EXIT:21921
// body(true): defer 2 then defer 1 -> 2, 21
// body(false): note(9) first -> 219, 2192, 21921
unit defers;
var log: i32 = 0;
fn note(v: i32) -> void { log = log * 10 + v; }
fn body(early: bool) -> i32 {
defer { note(1); }
defer { note(2); }
if early { return 0; }
note(9);
return 0;
}
fn main() -> i32 {
body(true);
body(false);
return log;
}