MCPcopy Index your code
hub / github.com/RustPython/RustPython / enter_function

Method enter_function

crates/codegen/src/compile.rs:2787–2827  ·  view source on GitHub ↗
(&mut self, name: &str, parameters: &ast::Parameters)

Source from the content-addressed store, hash-verified

2785 }
2786
2787 fn enter_function(&mut self, name: &str, parameters: &ast::Parameters) -> CompileResult<()> {
2788 // TODO: partition_in_place
2789 let mut kw_without_defaults = vec![];
2790 let mut kw_with_defaults = vec![];
2791 for kwonlyarg in &parameters.kwonlyargs {
2792 if let Some(default) = &kwonlyarg.default {
2793 kw_with_defaults.push((&kwonlyarg.parameter, default));
2794 } else {
2795 kw_without_defaults.push(&kwonlyarg.parameter);
2796 }
2797 }
2798
2799 self.push_output(
2800 bytecode::CodeFlags::NEWLOCALS | bytecode::CodeFlags::OPTIMIZED,
2801 parameters.posonlyargs.len().to_u32(),
2802 (parameters.posonlyargs.len() + parameters.args.len()).to_u32(),
2803 parameters.kwonlyargs.len().to_u32(),
2804 name.to_owned(),
2805 )?;
2806
2807 let args_iter = core::iter::empty()
2808 .chain(&parameters.posonlyargs)
2809 .chain(&parameters.args)
2810 .map(|arg| &arg.parameter)
2811 .chain(kw_without_defaults)
2812 .chain(kw_with_defaults.into_iter().map(|(arg, _)| arg));
2813 for name in args_iter {
2814 self.varname(name.name.as_str())?;
2815 }
2816
2817 if let Some(name) = parameters.vararg.as_deref() {
2818 self.current_code_info().flags |= bytecode::CodeFlags::VARARGS;
2819 self.varname(name.name.as_str())?;
2820 }
2821 if let Some(name) = parameters.kwarg.as_deref() {
2822 self.current_code_info().flags |= bytecode::CodeFlags::VARKEYWORDS;
2823 self.varname(name.name.as_str())?;
2824 }
2825
2826 Ok(())
2827 }
2828
2829 /// Push decorators onto the stack in source order.
2830 /// For @dec1 @dec2 def foo(): stack becomes [dec1, dec2]

Callers 2

compile_function_bodyMethod · 0.80
compile_expressionMethod · 0.80

Calls 11

push_outputMethod · 0.80
chainMethod · 0.80
varnameMethod · 0.80
current_code_infoMethod · 0.80
pushMethod · 0.45
to_u32Method · 0.45
lenMethod · 0.45
to_ownedMethod · 0.45
mapMethod · 0.45
into_iterMethod · 0.45
as_strMethod · 0.45

Tested by

no test coverage detected