summaryrefslogtreecommitdiff
path: root/matrix-stdlib/src/io.rs
diff options
context:
space:
mode:
Diffstat (limited to 'matrix-stdlib/src/io.rs')
-rw-r--r--matrix-stdlib/src/io.rs36
1 files changed, 36 insertions, 0 deletions
diff --git a/matrix-stdlib/src/io.rs b/matrix-stdlib/src/io.rs
new file mode 100644
index 0000000..288e99e
--- /dev/null
+++ b/matrix-stdlib/src/io.rs
@@ -0,0 +1,36 @@
+use matrix::{value::Value, self, vm::Vm, Result};
+use matrix_macros::native_func;
+
+#[native_func(1, true)]
+fn print(_vm: &mut Vm, args: Vec<Value>) -> Result<Value> {
+ let [values] = args.try_into().unwrap();
+ if let Value::List(list) = values {
+ for (i, value) in list.iter().enumerate() {
+ print!("{}", value.boring_print());
+ if i != 0 {
+ print!(" ");
+ }
+ }
+ }
+ Ok(Value::Nil)
+}
+
+#[native_func(1, true)]
+fn println(_vm: &mut Vm, args: Vec<Value>) -> Result<Value> {
+ let [values] = args.try_into().unwrap();
+ if let Value::List(list) = values {
+ for (i, value) in list.iter().enumerate() {
+ print!("{}", value.boring_print());
+ if i != 0 {
+ print!(" ");
+ }
+ }
+ }
+ print!("\n");
+ Ok(Value::Nil)
+}
+
+pub fn load(vm: &mut Vm) {
+ vm.load_native_fn(print());
+ vm.load_native_fn(println());
+}