feat: ADR-024/025/021 — string concat, try/catch/throw, nullable akış-analizi #115
No reviewers
Labels
No Label
cli-ux
faz-plani
felsefe-gozden-gecir
ffi-builtin
fikir
gelecek-vizyon
ir-vm
kalite-mimari
moduller-import
test-senaryosu
tip-sistemi
tooling-lsp
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: saqut/saqut-compiler#115
Loading…
Reference in New Issue
No description provided.
Delete Branch "0.1.0"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Özet
Bu PR üç büyük dil özelliğini uçtan uca ekliyor.
ADR-024 — String cilası
STRING_CONCATIR opcode:s1 + s2ves1 += s2→ yeni immutable string üretirstring + string → stringtests/golden/string/concat.sqtADR-025 — Hata yönetimi (#57)
try { } catch (Error e) { }vethrow <ifade>;ENTER_TRY / LEAVE_TRY / THROWIR opcode + VM unwindErrornesnesiError{line,col,message,trace,code}sembol tablosuna kayıtlıADR-021 (REVİZE) — Null akış-analizi
a!/??/?.yasak — yalnızcaifile null aklama.Typenullable bayrağı +fromName("int?")T?değişken/parametre/dönüş tipi;int? f()dispatch bug düzeltildiTest
fibonacci.sqt→ 55\n55 ✅- CliArgs'e compact bool eklendi; --compact ile boşluksuz JSON çıktısı - symbols çıktısında her sembol için referenceCount (references.size()) alanı eklendi - fibonacci.sqt onarıldı: araç hatası sonucu silinen '{' geri konulduÖnceki: for döngüsü içinde her token için include() 63 kez çağrılıyordu → 66.9M include() çağrısı, zamanın %81'i Sonraki: - Operatör/delimiter: switch(c0) + getchar(1) ile O(1) dispatch - Keyword: readIdentifier() → unordered_map::find() O(1) lookup - include() yalnızca // /* */ için (2-3 çağrı/yorum satırı) Sonuç (2.3MB, 90K satır, debug build): tokens: 11.5s → 2.4s (−79%) check: 12.7s → 3.7s (−71%) gprof ÖNCE: %81 include() (66.9M çağrı) gprof SONRA: include() %0.00 — artık ölçülemez Profil dosyaları: docs/perf-before.txt, docs/perf-after.txtSorun: break ve continue için hiçbir opcode üretilmiyordu (TODO). Düzeltme: her döngüye girerken LoopContext yığına push'lanır, çıkınca pop'lanır. break/continue JMP -1 yazar, instruction indeksi bağlamda toplanır. Döngü üretimi bitince tüm pending jump'lar doğru hedefe patch'lenir: - break → her döngü türünde OUT (döngü sonu) - continue while/do-while → LOOP_START / COND_LABEL - continue for → C_LABEL (güncelleme başı, koşula DEĞİL) (aksi halde i++ atlanır → sonsuz döngü) İç içe döngülerde yığının en üstü en içteki bağlamdır; inner break/continue dıştaki döngüyü etkilemez. Testler (16/16 yeşil): - for_break_continue: continue'nun i++'ı atlamadığını kanıtlar - while_break_continue: while break/continue - nested_break: inner break dış döngüyü etkilemiyor Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>Sorun: TypeChecker < > <= >= için tip kontrolü yapmıyordu; string operandlarda VM sessizce intValue=0 karşılaştırıyordu. Düzeltme: karşılaştırma bloğu ikiye ayrıldı: == / != → string dahil herhangi tip (değişmedi) < > <= >= → isNumeric() kontrolü; string veya diğer sayısal-olmayan tipler E003 üretir, VM'e hiç ulaşmaz Aritmetik (+ - * / %) zaten sayısal-olmayan tipler için E003 üretiyordu; doğrulandı, değiştirilmedi. Altyapı: cmake/run_golden_error.cmake + CMakeLists.txt'e .compile_error desteği — derleme hatası bekleyen negatif golden testler için. Testler (19/19 yeşil): - string/ordering_error: string < → E003 (negatif test) - string/equality: string == / != çalışmaya devam ediyor (regresyon) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>- CLAUDE.md: "Mevcut durum" bölümü yeniden yazıldı — tüm pipeline çalışıyor, bilinen eksikler (#35–#38) listelendi - docs/fikirler.md: "kod üretimi VM henüz yoktur" notu kaldırıldı - docs/adr-frontend-analiz.md: "henüz kodlanmamıştır" uyarısı kaldırıldı - docs/roadmap-frontend.md: tüm fazlar (0–4) ✅ TAMAMLANDI olarak işaretlendi - readme.md: saqut check komutu CLI tablosuna eklendi - GitHub #30–#34 issue'ları kapatıldı (düzeltilmiş bug'lar) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>