규칙 3.2
3장, 텍스트 구조와 이름 테스트
A local variable, parameter, module constant or module variable may use any identifier TypeScript permits. Function parameters and body locals occupy a lexical scope inside the module’s: they may shadow a module value, and a closure resolves the nearest declaration. Duplicate declarations in the same scope remain errors. The backend must give a name its target cannot spell a fresh identifier, rewriting its declarations and references consistently. The authored IR, CPU oracle, diagnostics and debugger retain the source name. Other declarations retain their existing emitted-name contract: a name containing $, exactly _, or starting with __ is refused for WGSL; a class or namespace member is flattened to Owner_member.
규칙 본문과 그 아래 항목은 설계 문서에 적힌 컴파일러 원문이라 한국어 페이지에서도 영어로 둡니다.
근거
the shading language’s identifier restrictions govern emitted text; changing a local spelling does not change the source program. Binding, override, entry, struct and field names also participate in host or interface contracts and keep their existing checks.
출처
WGSL’s identifier and reserved-word restrictions, the GLSL ES 3.00 identifier rules, and the source-name contract for the IR and debugger.
검증 방식
테스트로 확인합니다. 테스트나 게이트 스크립트, CI 워크플로가 이 규칙을 가리키고, 아래 파일 가운데 하나라도 규칙을 더는 가리키지 않으면 추적 검사가 실패합니다.
컴파일러가 이 규칙을 적용하는 곳을 규칙이 직접 적은 내용입니다.
sanitizeVariableNamesinsrc/core/passes/variable-names.ts, used on an emitted copy by both backends, with collision avoidance against authored and generated names;reportReservedNamesinsrc/compiler/ts/reserved-names.tsfor declarations whose emitted spelling remains part of the contract;src/compiler/ts/reserved-names.test.ts, includingtarget, dollar and Unicode variables, nested scopes, constants, module variables, CPU values and the editor;src/compiler/ts/function-shadowing.test.tsfor function parameters and locals shadowing module values, nearest closure bindings and unchanged same-scope duplicate refusals;linkPrograminsrc/compiler/ts/link.tsfor names shared by a program’s files (Rule 3.9), pinned bysrc/compiler/ts/link.test.ts.
커밋 c66579bf에서 이 규칙을 확인하는 파일입니다. 파일마다 규칙을 처음 가리키는 줄로 연결했습니다.
설명하는 절
커밋 c66579bf의 표면 문서에서 이 규칙을 설명하는 절입니다.
적용하는 오류 코드
규칙이 Enforced by 항목에서 가리키는 진단 코드와, 레지스트리 설명에서 이 규칙을 가리키는 진단 코드입니다.
-
TS8068RESERVED_NAME - A declared name that a target reserves, checked on the name the emit actually carries:
halfas a struct field, which ANGLE answers with "Illegal use of reserved word" in generated text the author never wrote.
함께 보기
소스
커밋 c66579bf의 규칙 원문:
docs/language-design.md:200(설계 문서)reqs/rules/RULE-0302.md(추적 항목)