fn build_new_stack_clause(
        &mut self,
        nsc: &NodeNewStackClause,
        fcb: &mut FuncCtxBuilder,
        ops: &mut Vec<P<TreeNode>>
    ) -> (bool, Vec<OpIndex>) {
        match nsc {
            &NodeNewStackClause::PassValues {
                ref tys, ref vars, ..
            } => {
                let args_begin_index = ops.len();
                let args = self.add_opnds(fcb, ops, vars);
                assert_ir!(
                    args.len() == tys.len() &&
                        args.iter()
                            .zip(tys)
                            .all(|(arg, tid)| arg.ty() == self.get_built_type(*tid))
                );
                let arg_indices = (args_begin_index..(vars.len() + 1)).collect::<Vec<_>>();
                (false, arg_indices)
            }
            &NodeNewStackClause::ThrowExc { ref exc, .. } => {
                let exc_arg = ops.len();
                self.add_opnd(fcb, ops, *exc);
                (true, vec![exc_arg])
            }
        }
    }
// Returns true indicating an exception clause
// and returns a list of ops
Returns true indicating an exception clause
and returns a list of ops
Returns true indicating an exception clause and returns a list of ops
fn build_new_stack_clause(
        &mut self,
        nsc: &NodeNewStackClause,
        fcb: &mut FuncCtxBuilder,
        ops: &mut Vec<P<TreeNode>>
    ) -> (bool, Vec<OpIndex>) {
        match nsc {
            &NodeNewStackClause::PassValues {
                ref tys, ref vars, ..
            } => {
                let args_begin_index = ops.len();
                let args = self.add_opnds(fcb, ops, vars);
                assert_ir!(
                    args.len() == tys.len() &&
                        args.iter()
                            .zip(tys)
                            .all(|(arg, tid)| arg.ty() == self.get_built_type(*tid))
                );
                let arg_indices = (args_begin_index..(vars.len() + 1)).collect::<Vec<_>>();
                (false, arg_indices)
            }
            &NodeNewStackClause::ThrowExc { ref exc, .. } => {
                let exc_arg = ops.len();
                self.add_opnd(fcb, ops, *exc);
                (true, vec![exc_arg])
            }
        }
    }
fn build_new_stack_clause ( & mut self , nsc : & NodeNewStackClause , fcb : & mut FuncCtxBuilder , ops : & mut Vec < P < TreeNode > > ) -> ( bool , Vec < OpIndex > ) { match nsc { & NodeNewStackClause :: PassValues { ref tys , ref vars , .. } => { let args_begin_index = ops . len ( ) ; let args = self . add_opnds ( fcb , ops , vars ) ; assert_ir ! ( args len ( ) tys len ( ) args iter ( ) zip ( tys ) all ( ( arg tid ) arg ty ( ) self get_built_type ( tid ) ) ) ; let arg_indices = ( args_begin_index .. ( vars . len ( ) + 1 ) ) . collect :: < Vec < _ > > ( ) ; ( false , arg_indices ) } & NodeNewStackClause :: ThrowExc { ref exc , .. } => { let exc_arg = ops . len ( ) ; self . add_opnd ( fcb , ops , * exc ) ; ( true , vec ! [ exc_arg ] ) } } }
Returns true indicating an exception clause
and returns a list of ops
Returns true indicating an exception clause and returns a list of ops
&mut self
nsc
&NodeNewStackClause
fcb
&mut FuncCtxBuilder
ops
&mut Vec<P<TreeNode>>
&mut self
nsc
&NodeNewStackClause
fcb
&mut FuncCtxBuilder
ops
&mut Vec<P<TreeNode>>