docs: disambiguate match scrutinees

This commit is contained in:
2026-08-16 08:33:19 +09:00
parent 3aa7618d0c
commit 95de333da4
2 changed files with 16 additions and 1 deletions
+12
View File
@@ -14,3 +14,15 @@
- 명세 반영: 예제의 비교를 `c.^ == '\n' as u8`로 수정하고 §4.1에 규칙을 명시했다.
- 구현 영향: 타입 검사기는 `char`를 독립 기본 타입으로 취급해야 하고, C 방출 시 같은
크기의 정수 표현을 사용할 수 있어도 Ferro 단계에서는 `char`/`u8` 혼용을 거부해야 한다.
## 2026-08-16 — v0.1.4
### `match` scrutinee와 구조체 초기화의 중괄호 모호성
- 문제: `match expr { arms }``Type{ fields }`가 모두 식별자 뒤에 `{`를 사용하므로
`match value { ... }`의 arm 블록을 구조체 초기화로 잘못 소비할 수 있었다.
- 결정: `match` scrutinee 바로 뒤의 `{`는 항상 arm 블록으로 해석한다. 구조체 초기화식
자체를 scrutinee로 쓸 때는 `match (Type{ ... }) { ... }`처럼 괄호가 필수다.
- 구현 영향: match 문맥의 식 파서는 최상위 `{` 앞에서 scrutinee 파싱을 멈춰야 하며,
괄호 안에서는 일반 구조체 초기화 규칙을 그대로 적용한다. 오류 복구는 모든 반복에서
적어도 한 토큰을 소비해 같은 진단을 무한 반복하지 않아야 한다.