saqut-compiler/src
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
..
cli refactor(opt): klon sadece ast komutunda — run/ir yerinde optimize eder 2026-06-18 23:15:27 +03:00
core feat(string+error+null): ADR-024/025/021 uygulama — string concat, try/catch/throw, nullable akış-analizi 2026-06-20 21:34:25 +03:00
diagnostic feat(faz3): semantik analiz — tip denetimi + yapısal doğrulama (#72) 2026-06-18 17:20:06 +03:00
ir feat(string+error+null): ADR-024/025/021 uygulama — string concat, try/catch/throw, nullable akış-analizi 2026-06-20 21:34:25 +03:00
lexer perf: include() parametresini std::string → std::string_view yap 2026-06-18 18:03:54 +03:00
opt feat(ir,vm): #45 bitwise operatörler + #38 global değişken IR (Seçenek A) 2026-06-20 15:00:32 +03:00
parser feat(string+error+null): ADR-024/025/021 uygulama — string concat, try/catch/throw, nullable akış-analizi 2026-06-20 21:34:25 +03:00
semantic feat(string+error+null): ADR-024/025/021 uygulama — string concat, try/catch/throw, nullable akış-analizi 2026-06-20 21:34:25 +03:00
symbol feat(string+error+null): ADR-024/025/021 uygulama — string concat, try/catch/throw, nullable akış-analizi 2026-06-20 21:34:25 +03:00
tokenizer perf(tokenizer): switch dispatch + unordered_map keyword lookup 2026-06-18 18:35:10 +03:00
vendor/nlohmann refactor: nlohmann/json entegrasyonu — string birleştirme yerine nesne API 2026-06-18 16:21:58 +03:00
vm feat(string+error+null): ADR-024/025/021 uygulama — string concat, try/catch/throw, nullable akış-analizi 2026-06-20 21:34:25 +03:00
json.hpp fix: kaynak dosya yolu propagasyonu ve AST JSON girinti hataları 2026-06-14 15:57:54 +03:00
main.cpp feat(cli): saqut ir komutu — IR talimat dump'u 2026-06-18 19:21:12 +03:00
tools.hpp cli: modular command system, AST JSON serialization, file split prep 2026-05-26 17:05:20 +03:00