Expand description
rulox
rulox
is a lightweight scripting language embedded in Rust.
It is based on the Lox language from Crafting Interpreters.
Examples
use rulox::prelude::*;
use rulox::LoxError;
fn main() -> Result<(), LoxError> {
lox! {
var a = 5;
print a + 2;
}
let b: f64 = a.get()?.try_into().unwrap();
println!("{}", b);
Ok(())
}
lox! {
for (var i = 5; i > 0; i = i - 1) print i;
}
lox! {
fun hello(name) {
print "Hello " + name + "! :)";
}
fun add_one(num) {
return num + 1;
}
}
hello.get()?.call([LoxValue::from("Alice")].into());
assert_eq!(add_one.get()?.call([LoxValue::from(3)].into())?, 4);
lox! {
var people = ["Bob", "Alice", "John"];
for (person in people) {
print "Hello " + person + "!";
}
}
lox! {
class Person {
init(name) {
this.name = name;
}
say_hello() {
print "Hello, my name is " + this.name + "!";
}
}
var jane = Person("Jane");
jane.say_hello();
}
lox! {
class Person {
init(name) {
this.name = name;
}
say_hello() {
print "Hello, my name is " + this.name + "!";
}
}
class Telepath > Person {
init(name, power) {
super(name);
this.power = power;
}
lift(weight) {
if (this.power < weight) {
print "It's too heavy!";
} else if (this.power == weight) {
print "I can't keep this up for long!";
} else {
print "This is child's play.";
}
}
}
var bob = Person("Bob");
bob.say_hello();
print "";
var alice = Telepath("Alice", 4);
alice.say_hello();
alice.lift(1.5);
alice.lift(4);
alice.lift(10);
}
lox! {
var except_ran = false;
var else_ran = false;
var finally_ran = false;
try {
print "try";
throw 1;
} except {
print "except";
except_ran = true;
} else {
print "else";
else_ran = true;
} finally {
print "finally";
finally_ran = true;
}
}
Modules
- Items that the
lox
macro expects to find in scope.
Macros
- Parses Lox code and converts it to Rust.
- Generates a rulox binding for a Rust function.
- Generates a Rust binding for a rulox function.
Structs
- Arguments to a Lox function.
- A class defined in Lox code.
- An error raised during compilation or execution.
- A function defined in Lox code.
- A variable defined in Lox code.
- A hashmap key.
Enums
- A dynamically typed value used by Lox programs.
Traits
- Objects which can be downcast to a concrete type.
- A trait for foreign objects that can be used in Lox.
Type Aliases
- A convenient alias for a
LoxObject
trait object. - A result returned from most Lox operations.
- A shared, mutable pointer to
T
.
Derive Macros
- Generates an implementation of
TryFrom<LoxValue>
.