frg 0.1.1

Compiled programming language with frogs!
Documentation
use std::io;

use super::*;

pub fn run_macro(ctx: &mut ExecutionContext, name: &str, args: &[Expression]) -> VariableValue {
    let args = args
        .iter()
        .map(|elem| eval(ctx, elem))
        .collect::<Vec<VariableValue>>();

    match name {
        "print!" => print_macro(&args),
        "dbg!" => dbg_macro(&args),
        "input!" => input_macro(&args),
        _ => todo!(),
    }
}

fn input_macro(args: &[VariableValue]) -> VariableValue {
    println!("{}", args[0]);
    let mut user_input = String::new();
    io::stdin()
        .read_line(&mut user_input)
        .expect("failed to read input");

    let trimmed = user_input.trim().to_string();
    VariableValue::Str(trimmed)
}

fn dbg_macro(args: &[VariableValue]) -> VariableValue {
    println!("{args:?}");

    VariableValue::Void
}

fn print_macro(args: &[VariableValue]) -> VariableValue {
    let mut output = String::new();
    let mut var_list = args.iter().peekable();
    while let Some(next_to_print) = var_list.next() {
        output.push_str(&format!("{next_to_print}"));
        if var_list.peek().is_some() {
            output.push_str(", ");
        }
    }
    println!("{output}");

    VariableValue::Void
}