saqut
786812c717
feat(string+error+null): ADR-024/025/021 uygulama — string concat, try/catch/throw, nullable akış-analizi
...
## String cilası (ADR-024)
- STRING_CONCAT opcode: s1 + s2 ve s1 += s2 → yeni string üretir
- Tip denetleyicide string + string → string; içerik == zaten vardı
- Golden: tests/golden/string/concat.sqt
## Hata yönetimi (ADR-025, #57 )
- AST: TryStatementNode, ThrowStatementNode
- Parser: try { } catch (Error e) { }, throw <ifade>;
- IR: ENTER_TRY / LEAVE_TRY / THROW opcode'ları + backpatch
- VM: TryFrame yığını + pendingThrow_ unwind; runtime hatalar (DIV/0, OOB)
artık yakalanabilir Error nesnesi olarak yükseltiliyor
- Builtin: Error{line,col,message,trace,code} sembol tablosuna kayıtlı
- Golden: tests/golden/error/basic_catch.sqt, throw_and_nested.sqt
## Null akış-analizi (ADR-021 — REVİZE, a!/??/?. yasak)
- Type: nullable bool alanı; asNullable/asNonNull/equalsBase/isNullLiteral
- fromName("int?") → nullable int; toString() → "int?"
- Parser: T? değişken/parametre/dönüş tipi; int? f() dispatch bug'ı düzeltildi
- IR: LOAD_NULL opcode; null literal → Value::null()
- Tip denetleyici:
- checkAssign: T? ← null OK; T ← T? E003; T? ← T OK (widening)
- Nullable operand aritmetikte/karşılaştırmada E003
- MemberAccess: nullable nesnede doğrudan erişim E003
- Nested: if (a != null) → then'de non-null
- Guard: if (a == null) return; → sonrasında non-null
- &&: sol null-check → sağ tarafta non-null
- Golden: tests/golden/null/{narrowing,and_narrowing,nullable_assign_error,nullable_operand_error}
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YAu3MGu3sWAUvTu7N9agPk
2026-06-20 21:34:25 +03:00
saqut
f1cb983b69
feat(array): GC-hazır nesne modeli + array runtime (ADR-020/022/023)
...
- src/vm/object.hpp: Object, ArrayObject, Heap (v1: toplama yok, mark-sweep kancaları hazır)
- src/vm/value.hpp: ValueKind::Ref + Nil eklendi (ADR-020/021)
- src/ir/instruction.hpp: ARRAY_NEW/GET/SET/LEN opcodes
- src/ir/ir_generator: array literal + a[i] okuma/yazma codegen
- src/parser: [1,2,3] array literal, int[] tip sözdizimi (Java/C# stili)
- src/vm/interpreter: ARRAY_NEW/GET/SET/LEN, sınır kontrolü, referans semantiği
- EQUAL_EQUAL/NOT_EQUAL: Ref türü için kimlik karşılaştırması (ADR-023)
- type.hpp: Type::fromName "int[]" vb. array tipleri destekliyor
- golden test: tests/golden/array/ref_semantics.sqt (referans semantiği, kimlik ==)
- 20 golden test geçiyor
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-20 16:18:23 +03:00
Claude
f69654bbca
docs: dökümanlar ve issue'lar gerçek durumla güncellendi
...
- 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>
2026-06-19 19:07:11 +00:00
saqut
c5fb57412a
fix(ir): && ve || kısa devre dallanmasıyla üret (ADR-008)
...
Sorun: IR üretici && ve || için case içermiyordu, default koluna
düşüp LOAD_CONST 0 üretiyordu — değişken operandlarda her zaman
false dönüyordu (sabit katlama yolu zaten doğruydu).
Düzeltme: her iki operatör artık dallanma olarak üretiliyor:
a && b → JIF_FALSE (a false ise b'yi atla)
a || b → JIF_TRUE (a true ise b'yi atla)
JIF_TRUE yeni opcode olarak eklendi (instruction.hpp + interpreter.cpp).
do-while'ın mevcut "== 1 karşılaştırması" geçici çözümü bu opcode'dan
faydalanabilir — ayrı düzeltme (B4).
Test: tests/golden/logic/short_circuit.sqt — yan etkinin gerçekten
atlandığını çıktıyla kanıtlar (12/12 test yeşil).
ADR: docs/adr/ADR-008-kisa-devre-mantiksal-operatorler.md
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-19 15:54:03 +03:00
abdussamedulutas
98bf8385d2
refactor(opt): klon sadece ast komutunda — run/ir yerinde optimize eder
...
ADR-007 düzeltmesi: klon yalnızca ast komutunun öncesi/sonrası karşılaştırması
için gerekli; diğer komutlar tek versiyon üretiyor, klona gerek yok.
- OptimizationManager: runPassesInPlace() (klon yok) + optimize() (klon, sadece ast)
- run.hpp + ir.hpp: optimize() → runPassesInPlace(); activeAst/optimizedAst dansı kalktı
- ast.hpp: değişmedi — hâlâ optimize() (klon) kullanıyor
- ADR-007: "sembol tablosu remap edilir" yanlış kararı düzeltildi;
Symbol::references konum listesi, refcount değil — paylaşım güvenli
11/11 ctest geçti
2026-06-18 23:15:27 +03:00
abdussamedulutas
698d03f4dd
docs: README yeniden yazıldı — GitHub vitrin formatı, mimari referans docs/architecture.md'ye taşındı
2026-06-18 21:53:08 +03:00
abdussamedulutas
68a9e07f8e
perf(tokenizer): switch dispatch + unordered_map keyword lookup
...
Ö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.txt
2026-06-18 18:35:10 +03:00
abdussamedulutas
3e459bde64
docs: belgeleri yeniden hizala (IR+VM modeli, kilitli kararlar)
...
- Calistirma modeli: "JIT" terimi birakildi -> IR + bytecode VM birincil;
makine-kodu JIT kapsam disi (ADR-015). C-transpile ikinci backend.
- readme.md bastan yazildi: toolbox cercevesi, yapilan vs planlanan ayrimi.
- ADR amend: 007 (klon yuk tasir), 009 (fixpoint degismezi + analiz
yeniden hesabi), 010 (literal baglama-gore tipleme), 011 (global baslatici
uc-parcali kural + dongusel struct E010), 014 (bellek gerekcesi).
- Yeni ADR: 015 (IR+VM), 016 (FFI seam), 017 (batteries=sinir),
018 (interface ertelendi), 019 (frontend<->runtime ayrimi).
- roadmap: bu hafta sembol tablosu->fibonacci; once dikey dilim; E010.
- examples: Final.sqt -> parser-stress/ (gecersiz fixture); yeni gecerli
fibonacci.sqt eklendi.
2026-06-14 19:53:12 +03:00
abdussamedulutas
5e51c55773
docs: frontend tasarim kararlari, transkript ve yol haritasi
...
Symbol table + semantic analiz + optimizasyon framework tasarim
oturumunun ciktilari:
- adr-frontend-analiz.md: ADR-006..014 (cok-asamali frontend, analiz/
optimizasyon ayrimi, optimizasyon konumu, fixpoint, tip sistemi,
scope/forward-reference, ExpressionNode/StatementNode, analiz verisi
yeri, dil kapsami) — her karar gerekcesiyle.
- transkript-frontend-tasarim.md: oturum akiscinin sadik transkripti.
- roadmap-frontend.md: dosya-dosya uygulama plani (Faz 0..4).
2026-06-14 17:56:42 +03:00
abdussamedulutas
93cbc7db3a
Gemini
2026-05-27 10:29:30 +03:00