T122 — hanseonc_std GTE(opcode173) 항상거짓 근본수정
개요
T50에서 실측된 "크거나같다(GTE, opcode173) 항상 거짓 반환" 결함을 재현·근본원인 파악·수정.근본원인
opcode 173(GTE)의 VM 구현(crownyc.c, crownyc_vm_core.c) 자체는 정상이었다(고수준 경로 hanseonc_high로a >= b 테스트 시 정상 TRUE 반환 확인).문제는 hanseonc_std.asm(RPN 어셈블러)의 키워드 인식표에 있었다:
이상(GTE) /이하(LTE) 한글 키워드만 등록돼 있었고- 정본 별칭표(
hanseonc_rpn.c/hanseonc_high.c의{"크거나같다",173},{"GTE",173}등)에
- 등록 안 된 토큰은 어떤 emit_* 분기에도 매칭되지 않아 폴백 경로(식별자/라벨 취급)로 빠지며
- 즉 opcode 173은 멀쩡했고, RPN 파서의 키워드 커버리지 누락이 진짜 결함.
수정 내용
/Users/ef/CrownyOS/crownyc/hanseonc_std.asm에 누락된 4개 키워드 분기 추가:
크거나같다(15바이트 UTF-8) → emit_173작거나같다(15바이트 UTF-8) → emit_174GTE(ASCII 3바이트) → emit_173LTE(ASCII 3바이트) → emit_174
이상/이하 분기는 그대로 유지(하위호환).검증
./crownyc compile hanseonc_std.asm /tmp/hanseonc_std_new.toau로 재어셈블- 신규 케이스 전수 PASS:
크거나같다(5>=3=1, 3>=3=1, 2>=3=-1),GTE,작거나같다, 기존이상유지 - 회귀: OLD toau vs NEW toau로 대표 RPN 9종(사칙연산·크다/작다/같다/다르다/또는/그리고) 동일 입력 실행,
hanseonc_std.toau 교체
- 백업:
/tmp/hanseonc_std.toau.beforeT122(교체 전 원본 보관)
관련 파일
/Users/ef/CrownyOS/crownyc/hanseonc_std.asm(소스 수정)/Users/ef/CrownyOS/crownyc/hanseonc_std.toau(라이브 바이너리 교체)/tmp/hanseonc_std.toau.beforeT122(교체 전 백업)
잔여 이슈
- 다른 비교연산자(EQ/NEQ/GT/LT/AND/OR)는 이번 점검에서 영문/별칭 누락 없이 정상 확인됐으나,
- crownyc_vm_core.c(별도 VM 사본)와 crownyc.c(라이브 VM)에 GTE/LTE 구현이 이중으로 존재 —