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
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
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
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