TS8008
프런트엔드 코드 LOOP_INDUCTION
for 루프의 카운터가 i32나 u32 타입의 let 하나가 아니거나, 갱신이 상수만큼 움직이지 않습니다.
레지스트리에는 이 상수에 대한 문서 주석이 없습니다. 그래서 위 설명은 컴파일러가 이 코드와 함께 내는 메시지를 보고 이 사이트가 쓴 것입니다.
레지스트리 설명과 컴파일러 메시지는 컴파일러 원문이라 한국어 페이지에서도 영어로 둡니다.
예제
"use typeshade"
@fragmentexport function main(@location(0) uv: vec2): vec4 { let g = 0. for (let t: f32 = 0.; t < 1.; t += 0.25) { g += t * uv.x } return vec4(g, g, g, 1.)}빌드할 때 고정된 컴파일러로 이 프로그램을 컴파일하면 다음 진단이 나옵니다.
TS8008 error, 6행: for induction must be i32 or u32, got f32.
고치는 법
같은 프로그램을 고친 모습입니다. 진단 없이 컴파일됩니다.
"use typeshade"
@fragmentexport function main(@location(0) uv: vec2): vec4 { let g = 0. for (let i = 0; i < 4; i++) { g += f32(i) * 0.25 * uv.x } return vec4(g, g, g, 1.)}이 코드가 적용하는 규칙
- 규칙 7.5 테스트
- A
forloop must be counted: ani32oru32induction variable, a constant step, and an exit that compares the induction variable to a bound; the start and the bound may be runtime values, the loop body must not write the bound, and the step must move the variable toward the bound.
함께 보기
소스
커밋 c66579bf에서 컴파일러가 이 코드를 내는 곳입니다. 파일마다 한 줄씩 적었습니다.