diff options
-rw-r--r-- | zjit/src/hir.rs | 39 |
1 files changed, 36 insertions, 3 deletions
@@ -4,7 +4,7 @@ use crate::{ cruby::*, get_option, - options::DumpHIR }; use std::collections::{HashMap, HashSet}; @@ -77,6 +77,18 @@ pub struct CallInfo { name: String, } #[derive(Debug, Clone)] pub enum Insn { PutSelf, @@ -125,6 +137,17 @@ pub enum Insn { // Control flow instructions Return { val: InsnId }, } #[derive(Default, Debug)] @@ -515,6 +538,7 @@ pub fn iseq_to_hir(iseq: *const rb_iseq_t) -> Result<Function, ParseError> { let mut visited = HashSet::new(); let iseq_size = unsafe { get_iseq_encoded_size(iseq) }; while let Some((incoming_state, block, mut insn_idx)) = queue.pop_front() { if visited.contains(&block) { continue; } visited.insert(block); @@ -657,10 +681,19 @@ pub fn iseq_to_hir(iseq: *const rb_iseq_t) -> Result<Function, ParseError> { state.setn(n, top); } - YARVINSN_opt_plus => { let right = state.pop()?; let left = state.pop()?; - state.push(fun.push_insn(block, Insn::Send { self_val: left, call_info: CallInfo { name: "+".into() }, args: vec![right] })); } YARVINSN_opt_div => { let right = state.pop()?; |