# Opcodes Modülü **Konum:** `src/opcodes.rs` Bytecode komut setini (instruction set) tanımlar. Her opcode bir `u8` değerine karşılık gelir. --- ## OpCodeByte Enum ### Register Operasyonları | Opcode | Değer | Açıklama | |--------|-------|----------| | `LoadConst` | `0x10` | Sabit değeri register'a yükle | | `Move` | `0x11` | Register'dan register'a kopyala | ### Bellek Operasyonları | Opcode | Değer | Açıklama | |--------|-------|----------| | `LoadLocal` | `0x20` | Yerel değişkeni register'a yükle (ayrılmış) | | `StoreLocal` | `0x21` | Register'ı yerel değişkene kaydet (ayrılmış) | | `LoadGlobal` | `0x22` | Global değişkeni register'a yükle | | `StoreGlobal` | `0x23` | Register'ı global değişkene kaydet | > **Not:** `LoadLocal`/`StoreLocal` opcode'ları tanımlıdır ancak şu an compiler tarafından emit edilmez. Tüm değişkenler global scope'tadır. ### Aritmetik | Opcode | Değer | Açıklama | |--------|-------|----------| | `Add` | `0x30` | Toplama | | `Sub` | `0x31` | Çıkarma | | `Mul` | `0x32` | Çarpma | | `Div` | `0x33` | Bölme | | `Neg` | `0x34` | Negatif (tekli) | | `Mod` | `0x35` | Mod alma | | `Pow` | `0x36` | Üs alma | ### Karşılaştırma | Opcode | Değer | Açıklama | |--------|-------|----------| | `Lt` | `0x40` | Küçüktür | | `Lte` | `0x41` | Küçük eşit | | `Gt` | `0x42` | Büyüktür | | `Gte` | `0x43` | Büyük eşit | | `Eq` | `0x44` | Eşit | | `Neq` | `0x45` | Eşit değil | ### Boolean Mantık | Opcode | Değer | Açıklama | |--------|-------|----------| | `And` | `0x50` | Mantıksal VE | | `Or` | `0x51` | Mantıksal VEYA | | `Not` | `0x52` | Mantıksal DEĞİL | ### Kontrol Akışı | Opcode | Değer | Açıklama | |--------|-------|----------| | `Jump` | `0x60` | Koşulsuz atlama | | `JumpIfFalse` | `0x61` | Register false ise atla | ### Üyelik Testi | Opcode | Değer | Açıklama | |--------|-------|----------| | `Contains` | `0x53` | Değer listede/string'de var mı kontrolü (`in` operatörü) | ### Özel Operasyonlar | Opcode | Değer | Açıklama | |--------|-------|----------| | `Concat` | `0x80` | String birleştirme | | `MethodCall` | `0x90` | Metod çağrısı | | `GetProperty` | `0x91` | Nesne özelliği oku (dest, obj_reg, property_name_string) | | `SetProperty` | `0x92` | Nesne özelliği yaz (obj_reg, property_name_string, val_reg) | | `Log` | `0xA0` | Değer yazdır (built-in) | | `CallExternal` | `0xA1` | Harici (host) fonksiyon çağrısı | | `SetResult` | `0xB0` | İfade sonucunu kaydet (return value için) | | `End` | `0xFF` | Program sonu | --- ## Built-in Fonksiyon ID'leri `default_fn` modülü, built-in fonksiyonlar için sabit ID'ler tanımlar. `CallExternal` opcode'u bu ID'leri kullanarak built-in fonksiyonları çağırır. | Sabit | ID | Fonksiyon | |-------|----|-----------| | `ABS` | `1` | Mutlak değer | | `MIN` | `2` | Minimum değer | | `MAX` | `3` | Maksimum değer | | `FLOOR` | `4` | Aşağı yuvarlama | | `CEIL` | `5` | Yukarı yuvarlama | | `ROUND` | `6` | Yuvarlama | | `SQRT` | `7` | Karekök | | `LEN` | `8` | Uzunluk | | `TO_STRING` | `9` | String'e dönüştür | | `TO_NUMBER` | `10` | Sayıya dönüştür | --- ## Hızlı Lookup Tablosu `LOOKUP[256]` statik dizisi, O(1) karmaşıklıkta byte-to-opcode dönüşümü sağlar. `from_byte(u8)` metodu bu tabloyu kullanır. **Metodlar:** - `to_byte() -> u8` — Opcode'u byte'a dönüştür - `from_byte(u8) -> Option` — Byte'ı opcode'a dönüştür (lookup tablosu ile) - `name() -> &str` — İnsan okunabilir opcode adı