MCPcopy Index your code
hub / github.com/aiscriptdev/aiscript / generate_invoke

Method generate_invoke

aiscript-vm/src/compiler/codegen.rs:1244–1273  ·  view source on GitHub ↗
(
        &mut self,
        object: Box<Expr<'gc>>,
        method: Token<'gc>,
        arguments: Vec<Expr<'gc>>,
        keyword_args: HashMap<String, Expr<'gc>>,
        error_handler: Option<Erro

Source from the content-addressed store, hash-verified

1242 }
1243
1244 fn generate_invoke(
1245 &mut self,
1246 object: Box<Expr<'gc>>,
1247 method: Token<'gc>,
1248 arguments: Vec<Expr<'gc>>,
1249 keyword_args: HashMap<String, Expr<'gc>>,
1250 error_handler: Option<ErrorHandler<'gc>>,
1251 ) -> Result<(), VmError> {
1252 let arg_count = arguments.len() as u8;
1253 let kw_count = keyword_args.len() as u8;
1254
1255 self.generate_expr(object)?;
1256 for arg in arguments {
1257 self.generate_expr(arg)?;
1258 }
1259 self.generate_keyword_args(keyword_args)?;
1260
1261 let method_const = self.identifier_constant(method.lexeme);
1262
1263 self.emit(OpCode::Invoke {
1264 method_constant: method_const as u8,
1265 positional_count: arg_count,
1266 keyword_count: kw_count,
1267 });
1268
1269 if let Some(handler) = error_handler {
1270 self.generate_error_handler(handler)?;
1271 }
1272 Ok(())
1273 }
1274
1275 fn generate_error_handler(&mut self, handler: ErrorHandler<'gc>) -> Result<(), VmError> {
1276 let error_jump = self.emit_jump(OpCode::JumpIfError(0));

Callers 1

generate_exprMethod · 0.80

Calls 6

lenMethod · 0.80
generate_exprMethod · 0.80
generate_keyword_argsMethod · 0.80
identifier_constantMethod · 0.80
emitMethod · 0.80

Tested by

no test coverage detected