규칙 5.1
5장, 리터럴과 타입 결정 테스트
An integer-written literal must take the integer type the position around it declares. An unannotated function-local let or const initialized by such a literal takes i32 or u32 when declared uses require that one type for the local: direct calls to declared, nongeneric functions, constructor and instance or static method arguments, and explicitly typed initialization or simple assignment. A simple assignment can take the type of its destination or of a right-hand side that declares its type independently of the local. Resolve the local, callee and receiver by their declarations, including through nested scopes and inherited members; an override supplies its own signature. A concrete member parameter independent of generic arguments can establish a demand; an unresolved generic parameter or circular inference cannot. Conflicting concrete scalar types must be refused with an annotation or cast remedy. Where no integer type is established, the literal must be an f32.
규칙 본문과 그 아래 항목은 설계 문서에 적힌 컴파일러 원문이라 한국어 페이지에서도 영어로 둡니다.
근거
this is WGSL’s abstract-integer rule narrowed to the positions where a type is stated, and the f32 default is the surface’s history rather than WGSL’s rule.
출처
Abstract Numeric Types and Conversion Rank; surface §13.
검증 방식
테스트로 확인합니다. 테스트나 게이트 스크립트, CI 워크플로가 이 규칙을 가리키고, 아래 파일 가운데 하나라도 규칙을 더는 가리키지 않으면 추적 검사가 실패합니다.
컴파일러가 이 규칙을 적용하는 곳을 규칙이 직접 적은 내용입니다.
src/compiler/ts/lit-coerce.ts, src/compiler/ts/local-numeric-inference.ts, src/compiler/ts/local-numeric-inference.test.ts, src/compiler/ts/int-lit-context.test.ts, and int-lit-coerce.test.ts.
커밋 c66579bf에서 이 규칙을 확인하는 파일입니다. 파일마다 규칙을 처음 가리키는 줄로 연결했습니다.
설명하는 절
커밋 c66579bf의 표면 문서에서 이 규칙을 설명하는 절입니다.
함께 보기
소스
커밋 c66579bf의 규칙 원문:
docs/language-design.md:341(설계 문서)reqs/rules/RULE-0501.md(추적 항목)