MCPcopy Create free account
hub / github.com/aspizu/goboscript / func_call

Method func_call

src/codegen/expr.rs:313–418  ·  view source on GitHub ↗
(
        &mut self,
        s: S,
        d: D,
        this_id: NodeID,
        name: &SmolStr,
        span: &Span,
        args: &[Expr],
    )

Source from the content-addressed store, hash-verified

311 }
312
313 pub fn func_call(
314 &mut self,
315 s: S,
316 d: D,
317 this_id: NodeID,
318 name: &SmolStr,
319 span: &Span,
320 args: &[Expr],
321 ) -> io::Result<()> {
322 let Some(func) = s.sprite.funcs.get(name) else {
323 d.report(DiagnosticKind::UnrecognizedFunction(name.clone()), span);
324 return Ok(());
325 };
326 if func.args.len() != args.len() {
327 d.report(
328 DiagnosticKind::FuncArgsCountMismatch {
329 func: name.clone(),
330 given: args.len(),
331 },
332 span,
333 )
334 }
335 let mut qualified_args: Vec<(SmolStr, NodeID)> = vec![];
336 let mut qualified_arg_values: Vec<Expr> = vec![];
337 self.begin_inputs()?;
338 for (arg, arg_value) in func.args.iter().zip(args) {
339 match &arg.type_ {
340 Type::Value => {
341 let arg_id = self.id.new_id();
342 self.input(s, d, &arg.name, arg_value, arg_id)?;
343 qualified_args.push((arg.name.clone(), arg_id));
344 qualified_arg_values.push(arg_value.clone());
345 }
346 Type::Struct {
347 name: type_name,
348 span: type_span,
349 } => {
350 let Some(struct_) = s.get_struct(type_name) else {
351 continue;
352 };
353 let arg_value = arg_value;
354 let struct_literal_fields = match arg_value {
355 Expr::StructLiteral {
356 name: struct_literal_name,
357 span: struct_literal_span,
358 fields: struct_literal_fields,
359 } => {
360 if struct_literal_name != &struct_.name {
361 d.report(
362 DiagnosticKind::TypeMismatch {
363 expected: arg.type_.clone(),
364 given: Type::Struct {
365 name: struct_literal_name.clone(),
366 span: struct_literal_span.clone(),
367 },
368 },
369 type_span,
370 );

Callers 1

stmtMethod · 0.80

Calls 8

qualify_struct_var_nameFunction · 0.85
reportMethod · 0.80
begin_inputsMethod · 0.80
new_idMethod · 0.80
end_objMethod · 0.80
exprMethod · 0.80
inputMethod · 0.45
get_structMethod · 0.45

Tested by

no test coverage detected