swamp-code-gen 0.1.14

generates swamp-vm opcodes
Documentation
# Swamp Code Generator

Translates the type-checked, resolved Abstract Semantic Graph (ASG) from `swamp-semantic` into executable bytecode (`BinaryInstruction` from `swamp-vm-types`) for the Swamp Virtual Machine (VM).

## Overview

This crate represents the code generation phase of the Swamp compiler pipeline. It takes the high-level, semantically rich representation of the program (where types are known, names are resolved, etc.) and lowers it into a sequence of simple, low-level instructions that the Swamp VM can directly execute.

## Key Responsibilities

*   **Instruction Selection:** Chooses the appropriate VM opcodes (`swamp_vm_types::opcode::OpCode`) for each operation in the semantic tree (e.g., selecting `AddI32` for an integer addition).
*   **Memory Management (Frame):** Assigns stack frame memory addresses (`swamp_vm_types::FrameMemoryAddress`) for local variables, function arguments, and temporary intermediate values.
*   **Control Flow Generation:** Translates high-level control flow structures (like `if`, `match`, loops) into sequences of conditional and unconditional jump instructions (`Bz`, `Bnz`, `Jmp`).
*   **Function Call Handling:** Generates the necessary instructions for function calls (`Call`, `Enter`, `Ret`), including setting up arguments and handling return values according to the VM's calling convention.
*   **Constant Pool Interaction:** Places literal values (integers, strings, etc.) into a constant pool (managed externally or internally) and generates instructions (`LdConst`, `StringFromConstantSlice`) to load them into registers or memory at runtime.
*   **Lowering Complex Operations:** Breaks down complex semantic operations (e.g., struct instantiation, list manipulation) into sequences of simpler VM instructions.


## License

This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.

## Copyright

Copyright (c) Peter Bjorklund. All rights reserved. https://github.com/swamp/swamp