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
ab47e42954
feat(run): --optimized bayrağı — optimize edilmiş IR üzerinden VM çalıştırma
...
- run.hpp: args.optimized ise OptimizationManager klonu üretip IR generator'a verir
- ir.hpp + run.hpp: optDiag.printAll sadece gerçek mesaj varsa çağrılıyor (boş özet gürültüsü giderildi)
- tests/golden/opt/run_opt.sqt: constant folding + DCE tetikleyen golden fixture
- run_opt.expected: ham run doğruluk testi (test #9 )
- run_opt.run_opt.expected: optimize run doğruluk testi (test #10 )
→ "optimizasyon oldu" değil "optimize IR doğru sonuç verdi" regresyon kalkanı
- CMakeLists.txt: *.run_opt.expected → saqut run --optimized otomatik keşif
11/11 ctest geçti
2026-06-18 23:04:57 +03:00
abdussamedulutas
913b42026c
test(opt): #104/#105 beyaz-kutu IR testleri — folding ve DCE doğru katmanda
...
- ir.hpp: --optimized bayrağı ile OptimizationManager entegrasyonu
- ir_generator.cpp: hasDirectValue/directIntValue okunuyor (katlanmış literal IR'da 0 veriyordu)
- run_golden.cmake: OPTIMIZED=1 parametresi ile --optimized desteği
- CMakeLists.txt: *.ir_opt.expected → saqut ir --optimized otomatik keşif
- opt/folding.ir_opt.expected: 2+3*4 → LOAD_CONST 14 (katlama kanıtı)
- opt/dce.ir_opt.expected: LOAD_CONST 99 + CALLHOST print silindi (DCE kanıtı)
- Yanıltıcı run-output testleri (folding.expected, dce.expected) kaldırıldı
2026-06-18 22:47:31 +03:00
abdussamedulutas
85d955ec62
test: golden-test koşucusu + Value audit + saqut ir pipeline fix
...
closes #113 , #114 , #75
- cmake/run_golden.cmake: BINARY/SOURCE/EXPECTED ile çalışan karşılaştırma betiği
- CMakeLists.txt: enable_testing(), golden test otomatik keşif (CONFIGURE_DEPENDS),
unit_tests (tests/run.sh) ctest entegrasyonu
- tests/golden/: fibonacci, string, arithmetic — 4/4 yeşil (negatif doğrulama da geçti)
- value.hpp: stale yorum temizlendi, toString() eklendi, switch exhaustive hale getirildi
- ir.hpp: TypeChecker + StructuralValidator eklendi — run pipeline ile artık eşit
2026-06-18 22:31:26 +03:00
abdussamedulutas
36ad5d0db5
feat(opt): Faz 4 — Optimizasyon (sabit katlama + ölü kod eleme + --optimized)
...
- src/core/config.hpp: CompilerConfig (pass toggle'lar + maxFixpointRounds)
- src/opt/optimization_pass.hpp: soyut OptimizationPass tabanı
- src/opt/ast_clone.hpp: deepClone — tüm node tiplerini kapsayan derin klonlama
- src/opt/constant_folding.hpp: BinaryExpr(Literal,OP,Literal) → Literal;
W002 sıfıra bölme uyarısı; + - * / % == != < > <= >= desteklenir
- src/opt/dead_code_elim.hpp: return/break/continue sonrası erişilemez
deyimler Block'tan silinir
- src/opt/optimization_manager.hpp: AST klonlar, fixpoint döngüsüyle pass'leri
çalıştırır (ADR-007/009)
- literal.hpp/.cpp: hasDirectValue/directIntValue — sentetik (token-sız) literal
- args.hpp: --optimized bayrağı
- cli/commands/ast.hpp: --optimized verilince klon üstünde optimize edilmiş AST
gösterilir; orijinal dokunulmaz
- examples/opt_folding.sqt, examples/opt_dce.sqt: örnek fixture'lar
2026-06-18 21:11:05 +03:00
abdussamedulutas
0b3f14e4d7
feat(vm): string veri tipi + run pipeline'ına TypeChecker eklendi
...
- Value: ValueKind::String + stringValue alanı eklendi
- instruction: LOAD_STRING opcode'u eklendi
- ir_generator: STRING literal → LOAD_STRING; desteklenmeyen tipler
(FLOAT, null) IR üretim aşamasında hata fırlatır
- interpreter: runtime tip kontrolleri kaldırıldı (TypeChecker zaten
derleme zamanında tipleri doğruluyor); sıfıra bölme kontrolü kaldı
(gerçek çalışma zamanı koşulu); print() string/int ayırt eder
- run.hpp: TypeChecker + StructuralValidator pipeline'a eklendi
Test:
build/saqut run file:examples/merhaba.sqt → Merhaba / saQut calisiyor
build/saqut run file:examples/fibonacci.sqt → 55 / 55
2026-06-18 19:46:48 +03:00
abdussamedulutas
214ecadf21
feat(cli): saqut ir komutu — IR talimat dump'u
...
- IRFunction::dump() yenilendi: ASCII kutu, sn slot notasyonu,
ikili op'larda sembol (+/-/*/<= vb.), hizalı sütunlar
- src/cli/commands/ir.hpp: tokenize→parse→collect→ir→dump pipeline
- main.cpp + args.hpp: "ir" komutu kayıtlı
2026-06-18 19:21:12 +03:00
abdussamedulutas
e488f29c23
feat(ir-vm): fibonacci.sqt çalışıyor — IR üretici + bytecode VM
...
IR instruction seti (14 opcode): LOAD_CONST, LOAD_SLOT, ADD/SUB/MUL/DIV/MOD,
LESS/LEQ/GT/GEQ/EQ/NEQ, JMP, JIF_FALSE, CALL, RETURN, CALLHOST
IRGenerator (AST → IR):
- Slot tabanlı register: parametreler slot 0..n, lokaller/geçiciler sonrası
- freshSlot() monoton sayaç — slot asla geri verilmez
- Backpatch: ileri-jump için emitJumpIfFalse(-1) → patchJump(idx)
- Geri-jump: loopStart = currentInstrIndex() → emitJumpUnconditional(loopStart)
- Builtin tespiti: resolvedSymbol->isBuiltin → CALLHOST
Interpreter (bytecode VM):
- Her iterasyonda callStack.back() taze alınır (referans güvenliği)
- CALL: yeni frame + argüman kopyası + continue
- RETURN: değer caller slotuna, frame pop + continue
- ip CALL/RETURN'den önce ilerler — caller doğru noktadan devam eder
- DIV: sıfıra bölme → runtime_error
Doğrulama:
build/saqut run file:examples/fibonacci.sqt → 55 / 55 ✓
tests/run.sh → TUM TESTLER GECTI ✓
2026-06-18 19:17:30 +03:00
abdussamedulutas
999edaeaa9
feat(faz3): semantik analiz — tip denetimi + yapısal doğrulama ( #72 )
...
- src/semantic/type_checker: her ExpressionNode'a resolvedType atar
* literal bağlama-göre tiplenir (float x = 1 → uyarısız)
* değişken→değişken genişletme → W004
* daraltma / farklı tip → E003
* fonksiyon çağrısı argüman sayısı/tipi → E008
* return tipi uyumsuzluğu → E003 (checkAssign üzerinden)
- src/semantic/structural_validator: kontrol akışı kuralları
* break/continue döngü dışı → E004
* return fonksiyon dışı → E005
- W004 diagnostic kataloğa eklendi
- saqut check komutu: tokenize→parse→collect→typecheck→validate
- examples/semantic/: widening, narrowing, bad_return, break_outside, bad_args
- MISSION-FAZ3.md eklendi
Doğrulama:
fibonacci.sqt → 0 hata 0 uyarı ✓
widening.sqt → W004 ✓
narrowing.sqt → E003 ✓
break_outside.sqt → E004 ✓
bad_args.sqt → E008 ✓
tests/run.sh → TUM TESTLER GECTI ✓
2026-06-18 17:20:06 +03:00
abdussamedulutas
9227b92549
feat(symbols): --compact bayrağı + referenceCount alanı
...
- 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
2026-06-18 16:44:03 +03:00
abdussamedulutas
1923524056
refactor: nlohmann/json entegrasyonu — string birleştirme yerine nesne API
...
- src/vendor/nlohmann/json.hpp eklendi (single-header, MIT)
- SourceLocation → toJsonObj() + toJson() (nlohmann)
- Type → toJsonObj() + toJson() (nlohmann, özyinelemeli)
- Diagnostic → toJsonObj() + toJson() (nlohmann)
- DiagnosticEngine→ toJsonObj() + toJson() (nlohmann)
- symbols.hpp → tamamen nlohmann ile yeniden yazıldı
Tüm toJson() imzaları std::string döndürmeye devam eder;
AST JsonObject builder'ı dokunulmadı (ayrı katman).
2026-06-18 16:21:58 +03:00
abdussamedulutas
a37f6b0ff1
feat(symbols): JSON çıktı + syntax hata toleransı
...
- symbols komutu artık JSON üretiyor: file, symbols[], diagnostics
Her sembol: name, kind, type, typeDetail, definition (file+satır+sütun),
references[], isBuiltin — LSP tüketimine hazır format
- parser: parseProgram() ilerleme olmayana token atla (guard ekle)
Bozuk top-level syntax (ör: `}`, eksik parametre listesi) artık
ayrıştırmayı durdurmak yerine sonraki geçerli bildirimi bulmaya devam eder
2026-06-18 16:11:34 +03:00
abdussamedulutas
c8ee926912
feat(faz2): sembol tablosu — isim çözümleme + scope + referans toplama ( #71 )
...
- parser: parseFunctionDecl() parametreleri artık AST'ye alıyor
(FunctionDeclNode::params alanı eklendi; declarations.hpp/cpp güncellendi)
- parser: parseDeclaration() kullanıcı-tanımlı tip (struct alanı) desteği
- ast_json: addArray() m_hasArrayItem sıfırlama hatası düzeltildi
(birden fazla dizi alanı içeren düğümlerde bozuk JSON üretimi giderildi)
- src/symbol/: Symbol, Scope, SymbolTable, SymbolCollector eklendi
* İki geçiş: pass1 global hoist, pass2 gövde + declare-before-use
* E001 tanımsız isim, E002 çift tanım, E010 döngüsel struct
* print builtin tohumlama (TODO: #89 katalog)
- cli/symbols: yeni SymbolTable/Collector kullanıyor; tip + refs çıktısı
- examples/symbols/: dup.sqt, undef.sqt, cyclic.sqt test fixture'ları
Doğrulama:
build/saqut symbols file:examples/fibonacci.sqt → 0 hata, 10 sembol
examples/symbols/dup.sqt → E002
examples/symbols/undef.sqt → E001
examples/symbols/cyclic.sqt → E010
tests/run.sh → TUM TESTLER GECTI
AST JSON → geçerli
2026-06-18 15:43:26 +03:00
abdussamedulutas
7c5a86c39b
fix: kaynak dosya yolu propagasyonu ve AST JSON girinti hataları
...
- Tokenizer::scan artik filePath parametresi alip Lexer'a iletiyor;
SourceLocation.file artik bos degil (Asama 0 tamamlandi).
- JsonObject::add icin const char* overload eklendi (kind: true bug'i).
- JsonObject acilis suslu parantezi girintisiz yaziliyor, addArray ilk
eleman oncesi bos satir birakmiyor; LiteralNode/IdentifierNode toJson
ayni sekilde duzeltildi.
- analysisToJson girinti seviyeleri "analysis" objesine gore duzeltildi.
2026-06-14 15:57:54 +03:00
abdussamedulutas
d9db17c732
cli: modular command system, AST JSON serialization, file split prep
2026-05-26 17:05:20 +03:00