(
&mut self,
callee: Box<Expr<'gc>>,
is_constructor: bool,
arguments: Vec<Expr<'gc>>,
keyword_args: HashMap<String, Expr<'gc>>,
error_handler: Option<Er
| 1206 | } |
| 1207 | |
| 1208 | fn generate_call( |
| 1209 | &mut self, |
| 1210 | callee: Box<Expr<'gc>>, |
| 1211 | is_constructor: bool, |
| 1212 | arguments: Vec<Expr<'gc>>, |
| 1213 | keyword_args: HashMap<String, Expr<'gc>>, |
| 1214 | error_handler: Option<ErrorHandler<'gc>>, |
| 1215 | ) -> Result<(), VmError> { |
| 1216 | let arg_count = arguments.len() as u8; |
| 1217 | let kw_count = keyword_args.len() as u8; |
| 1218 | self.generate_expr(callee)?; |
| 1219 | for arg in arguments { |
| 1220 | self.generate_expr(arg)?; |
| 1221 | } |
| 1222 | self.generate_keyword_args(keyword_args)?; |
| 1223 | |
| 1224 | if is_constructor { |
| 1225 | self.emit(OpCode::Constructor { |
| 1226 | positional_count: arg_count, |
| 1227 | keyword_count: kw_count, |
| 1228 | validate: error_handler.is_some(), |
| 1229 | }); |
| 1230 | } else { |
| 1231 | // Emit call instruction - result will be on stack |
| 1232 | self.emit(OpCode::Call { |
| 1233 | positional_count: arg_count, |
| 1234 | keyword_count: kw_count, |
| 1235 | }); |
| 1236 | } |
| 1237 | |
| 1238 | if let Some(handler) = error_handler { |
| 1239 | self.generate_error_handler(handler)?; |
| 1240 | } |
| 1241 | Ok(()) |
| 1242 | } |
| 1243 | |
| 1244 | fn generate_invoke( |
| 1245 | &mut self, |
no test coverage detected