lower: 검사된 AST 를 IR 로 내린다 (1차)
함수, 파라미터, 지역, 리터럴, 이름, 산술과 비교, 대입, if, while, break/continue, 호출, 참조, 필드 접근, 포인터 역참조까지. Slot 이 표현식의 결과다 -- 임시값에 든 값이거나 메모리 안의 자리다. 덩어리는 언제나 자리다. 임시값은 레지스터이고 덩어리는 거기 안 들어가기 때문이다. and/or 는 연산이 아니라 제어 흐름으로 내린다. 오른쪽을 평가하지 않아야 하는 경우가 있어서다. 블록에 terminated 플래그를 뒀다. 없으면 분기 안의 return 이 join 으로 가는 점프에 덮인다. --dump-ir 로 볼 수 있다. try/catch/defer/drop/for/배열/옵셔널/에러유니온과 제네릭 인스턴스는 아직이다.
This commit is contained in:
+1
-1
@@ -34,7 +34,7 @@ ROOT = Path(__file__).resolve().parent.parent
|
||||
FIXTURES = ROOT / "fec" / "tests"
|
||||
WATCOM = ROOT / ".dosboxx" / "watcom"
|
||||
SOURCES = ("arena", "diag", "lexer", "ast", "parser", "types", "m7", "own",
|
||||
"check", "resolve", "ir", "driver")
|
||||
"check", "resolve", "ir", "lower", "driver")
|
||||
# Fixtures live here until there is a code generator to run them against.
|
||||
QUARANTINE = "pending-backend"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user