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
saqut
808efc5b4a
feat(ir,vm): #45 bitwise operatörler + #38 global değişken IR (Seçenek A)
...
#45 — BAND, BOR, SHL, SHR (binary) ve BNOT (unary ~) opcode'ları eklendi.
Bileşik atama &=, |=, <<=, >>= destekleniyor.
Sabit katlama güncellendi. ^ (XOR) CARET çakışması nedeniyle atlandı.
#38 — LOAD_GLOBAL / STORE_GLOBAL opcode'ları eklendi (Seçenek A: gerçek global slot).
IRProgram.globalCount + globalNames; Interpreter.globalSlots_.
Global init ifadeleri main'in başında üretiliyor.
Tüm fonksiyonlar global alana erişebilir.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-20 15:00:32 +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
62280cd530
chore(ir): dump formatını sade yap — NAME=... PARAMS=... SLOTS=...
2026-06-18 19:29:32 +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