|
# Wren CLI Project
|
|
|
|
## Project Overview
|
|
|
|
The Wren CLI is a command-line interface and REPL (Read-Eval-Print Loop) for the Wren programming language. It embeds the Wren Virtual Machine (VM) and provides standard IO capabilities (file system, networking, etc.) using `libuv`.
|
|
|
|
**Key Components:**
|
|
* **`src/cli`**: Contains the main entry point (`main.c`) and CLI-specific logic.
|
|
* **`src/module`**: Implementations of built-in modules (like `io`, `os`, `scheduler`, `timer`, `net`).
|
|
* **`deps/wren`**: The core Wren VM source code.
|
|
* **`deps/libuv`**: The asynchronous I/O library used for system interactions.
|
|
|
|
## New Features
|
|
|
|
* **Networking**: A full-featured `net` module supporting TCP `Socket` and `Server`.
|
|
* **Stderr**: `io` module now includes `Stderr` class.
|
|
|
|
## Building
|
|
|
|
The project uses `make` for Linux/macOS and Visual Studio for Windows.
|
|
|
|
**Linux:**
|
|
```bash
|
|
cd projects/make
|
|
make
|
|
```
|
|
|
|
**macOS:**
|
|
```bash
|
|
cd projects/make.mac
|
|
make
|
|
```
|
|
|
|
**Windows:**
|
|
Open `projects/vs2017/wren-cli.sln` or `projects/vs2019/wren-cli.sln` in Visual Studio.
|
|
|
|
**Output:**
|
|
The compiled binary is placed in the `bin/` directory.
|
|
* Release: `bin/wren_cli`
|
|
* Debug: `bin/wren_cli_d`
|
|
|
|
## Running
|
|
|
|
**REPL:**
|
|
Run the binary without arguments to start the interactive shell:
|
|
```bash
|
|
./bin/wren_cli
|
|
```
|
|
|
|
**Run a Script:**
|
|
Pass the path to a Wren script:
|
|
```bash
|
|
./bin/wren_cli path/to/script.wren
|
|
```
|
|
|
|
## Testing
|
|
|
|
The project uses a Python script to run the test suite.
|
|
|
|
**Run All Tests:**
|
|
```bash
|
|
python util/test.py
|
|
```
|
|
|
|
**Run Specific Suite:**
|
|
You can pass a path substring to run a subset of tests:
|
|
```bash
|
|
python util/test.py io
|
|
python util/test.py language
|
|
```
|
|
|
|
**Test Structure:**
|
|
Tests are located in the `test/` directory. They are written in Wren and use expectation comments (e.g., `// expect: ...`) which the test runner parses to verify output.
|
|
|
|
## Development Conventions
|
|
|
|
* **Module Implementation**: Built-in modules are often split between C and Wren. The Wren side (`.wren` files in `src/module`) uses `foreign` declarations which are bound to C functions (`.c` files in `src/module`).
|
|
* **Code Style**: Follows the style of the existing C and Wren files.
|
|
* **Build System**: The `Makefile`s are generated by `premake`. If you need to change the build configuration, modify `projects/premake/premake5.lua` and regenerate the projects (though you can editing Makefiles directly for small local changes). |