From ff67071f5b2c39b5de075a81043cfe140fcc6775 Mon Sep 17 00:00:00 2001 From: ctsk <9384305+ctsk@users.noreply.github.com> Date: Wed, 29 Mar 2023 20:03:16 +0200 Subject: [PATCH] [rlox] init --- rlox/.gitignore | 2 ++ rlox/Cargo.lock | 7 +++++++ rlox/Cargo.toml | 8 ++++++++ rlox/src/bytecode.rs | 5 +++++ rlox/src/chunk.rs | 32 ++++++++++++++++++++++++++++++++ rlox/src/main.rs | 11 +++++++++++ 6 files changed, 65 insertions(+) create mode 100644 rlox/.gitignore create mode 100644 rlox/Cargo.lock create mode 100644 rlox/Cargo.toml create mode 100644 rlox/src/bytecode.rs create mode 100644 rlox/src/chunk.rs create mode 100644 rlox/src/main.rs diff --git a/rlox/.gitignore b/rlox/.gitignore new file mode 100644 index 0000000..7ac3182 --- /dev/null +++ b/rlox/.gitignore @@ -0,0 +1,2 @@ +target/ +.projectile diff --git a/rlox/Cargo.lock b/rlox/Cargo.lock new file mode 100644 index 0000000..4b869d5 --- /dev/null +++ b/rlox/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "rlox" +version = "0.1.0" diff --git a/rlox/Cargo.toml b/rlox/Cargo.toml new file mode 100644 index 0000000..321eb45 --- /dev/null +++ b/rlox/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "rlox" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] diff --git a/rlox/src/bytecode.rs b/rlox/src/bytecode.rs new file mode 100644 index 0000000..acc18d6 --- /dev/null +++ b/rlox/src/bytecode.rs @@ -0,0 +1,5 @@ +#[repr(u8)] +#[derive(Debug)] +pub enum Op { + Return +} diff --git a/rlox/src/chunk.rs b/rlox/src/chunk.rs new file mode 100644 index 0000000..3e65e46 --- /dev/null +++ b/rlox/src/chunk.rs @@ -0,0 +1,32 @@ +use crate::Op; + +use std::fmt; + +pub struct Chunk { + code: Vec, + name: String +} + +impl Chunk { + pub fn new(name: String) -> Chunk { + Chunk { + code: Vec::new(), + name + } + } + + pub fn add(&mut self, op: Op) { + self.code.push(op) + } +} + +impl fmt::Debug for Chunk { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> Result<(), fmt::Error> { + writeln!(f, "-*-*- {} -*-*-", self.name)?; + for (idx, op) in self.code.iter().enumerate() { + write!(f, "{:04} {:?}", idx, op)?; + } + + return Ok(()); + } +} diff --git a/rlox/src/main.rs b/rlox/src/main.rs new file mode 100644 index 0000000..6c9c045 --- /dev/null +++ b/rlox/src/main.rs @@ -0,0 +1,11 @@ +mod chunk; +mod bytecode; + +use chunk::Chunk; +use bytecode::Op; + +fn main() { + let mut chunk = Chunk::new("TEST".to_string()); + chunk.add(Op::Return); + println!("{:?}", chunk); +}