rusty-javac 0.2.3

A Java compiler written in Rust.
Documentation
use crate::classfile::MethodWriter;
use rust_asm::opcodes;

pub(super) fn emit_int(mw: &mut MethodWriter, value: i64) {
    match value {
        -1 => mw.visit_insn(opcodes::ICONST_M1),
        0 => mw.visit_insn(opcodes::ICONST_0),
        1 => mw.visit_insn(opcodes::ICONST_1),
        2 => mw.visit_insn(opcodes::ICONST_2),
        3 => mw.visit_insn(opcodes::ICONST_3),
        4 => mw.visit_insn(opcodes::ICONST_4),
        5 => mw.visit_insn(opcodes::ICONST_5),
        _ => mw.visit_ldc_insn_int(value as i32),
    }
}

pub(super) fn emit_long(mw: &mut MethodWriter, value: i64) {
    match value {
        0 => mw.visit_insn(opcodes::LCONST_0),
        1 => mw.visit_insn(opcodes::LCONST_1),
        _ => mw.visit_ldc_insn_long(value),
    }
}

pub(super) fn emit_float(mw: &mut MethodWriter, value: f32) {
    if value == 0.0 {
        mw.visit_insn(opcodes::FCONST_0);
    } else if value == 1.0 {
        mw.visit_insn(opcodes::FCONST_1);
    } else if value == 2.0 {
        mw.visit_insn(opcodes::FCONST_2);
    } else {
        mw.visit_ldc_insn_float(value);
    }
}

pub(super) fn emit_double(mw: &mut MethodWriter, value: f64) {
    if value == 0.0 {
        mw.visit_insn(opcodes::DCONST_0);
    } else if value == 1.0 {
        mw.visit_insn(opcodes::DCONST_1);
    } else {
        mw.visit_ldc_insn_double(value);
    }
}

pub(super) fn emit_bool(mw: &mut MethodWriter, value: bool) {
    mw.visit_insn(if value {
        opcodes::ICONST_1
    } else {
        opcodes::ICONST_0
    });
}