magc 0.8.0

The Mag Language Compiler
Documentation
use std::string::String;

use strontium::machine::instruction::Instruction;

use crate::compiler::Compiler;
use crate::types::{CompilerResult, Expression, ExpressionKind};

use super::Compilelet;

/// A compilelet for method calls.
pub struct ValuePatternCompilelet;

impl Compilelet for ValuePatternCompilelet {
    fn compile(
        &self,
        compiler: &mut Compiler,
        expression: Expression,
        target_register: Option<String>,
    ) -> CompilerResult<Vec<Instruction>> {
        let mut instructions = vec![];

        if let ExpressionKind::Pattern(pattern) = expression.kind {
            let expression = pattern.expect_value().unwrap();
            instructions.append(&mut compiler.compile_expression(expression, target_register)?);
        }

        Ok(instructions)
    }
}