규칙 8.4
8장, 함수와 진입점 테스트
A function must not take part in a call cycle, directly or through other functions; the check reads the calls a body writes, and the calls a method call, an accessor and new lower to, before any optimisation, so a call in a branch the optimizer would drop is a cycle too.
규칙 본문과 그 아래 항목은 설계 문서에 적힌 컴파일러 원문이라 한국어 페이지에서도 영어로 둡니다.
근거
WGSL has no call stack, and matching the optimizer would make the answer depend on constant folding an author cannot predict.
A call on a value (this.g(n), o.m()), a read or write of an accessor and new name no function in their text, so the check reads them as lowered; before that, a cycle through a method reached Tint.
출처
Restrictions on Functions (“recursion is disallowed because cycles are not permitted among any kinds of declarations”); surface §4.
검증 방식
테스트로 확인합니다. 테스트나 게이트 스크립트, CI 워크플로가 이 규칙을 가리키고, 아래 파일 가운데 하나라도 규칙을 더는 가리키지 않으면 추적 검사가 실패합니다.
컴파일러가 이 규칙을 적용하는 곳을 규칙이 직접 적은 내용입니다.
TS8031 RECURSION, on the call that closes the cycle, naming the whole cycle as the author writes its members (Recursive call: "N.f" -> "N.g" -> "N.f". WGSL has no call stack, so a function must not take part in a call cycle.), once for a body a class inherits and once for every instance of a generic function; pinned by src/compiler/ts/namespace.test.ts, src/compiler/ts/default-args.test.ts and src/compiler/ts/class-syntax.test.ts.
커밋 c66579bf에서 이 규칙을 확인하는 파일입니다. 파일마다 규칙을 처음 가리키는 줄로 연결했습니다.
설명하는 절
커밋 c66579bf의 표면 문서에서 이 규칙을 설명하는 절입니다.
적용하는 오류 코드
규칙이 Enforced by 항목에서 가리키는 진단 코드와, 레지스트리 설명에서 이 규칙을 가리키는 진단 코드입니다.
-
TS8031RECURSION - A call cycle: a function that reaches itself, directly or through other functions.
함께 보기
소스
커밋 c66579bf의 규칙 원문:
docs/language-design.md:644(설계 문서)reqs/rules/RULE-0804.md(추적 항목)