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

Method proc_call_impl

src/codegen/stmt.rs:475–577  ·  view source on GitHub ↗
(
        &mut self,
        proc: &Proc,
        s: S,
        d: D,
        this_id: NodeID,
        name: &SmolStr,
        span: &Span,
        args: &[Expr],
        compact: bool,
    )

Source from the content-addressed store, hash-verified

473 }
474
475 fn proc_call_impl(
476 &mut self,
477 proc: &Proc,
478 s: S,
479 d: D,
480 this_id: NodeID,
481 name: &SmolStr,
482 span: &Span,
483 args: &[Expr],
484 compact: bool,
485 ) -> io::Result<()> {
486 if proc.args.len() != args.len() {
487 d.report(
488 DiagnosticKind::ProcArgsCountMismatch {
489 proc: name.clone(),
490 given: args.len(),
491 },
492 span,
493 )
494 }
495 let mut qualified_args: Vec<(SmolStr, NodeID)> = Vec::new();
496 let mut qualified_arg_values: Vec<&Expr> = Vec::new();
497 self.begin_inputs()?;
498 for (arg, arg_value) in proc.args.iter().zip(args) {
499 match &arg.type_ {
500 Type::Value => {
501 let arg_id = self.id.new_id();
502 self.input(s, d, &arg.name, arg_value, arg_id)?;
503 qualified_args.push((arg.name.clone(), arg_id));
504 qualified_arg_values.push(arg_value);
505 }
506 Type::Struct {
507 name: type_name,
508 span: type_span,
509 } => {
510 let Some(struct_) = s.get_struct(type_name) else {
511 continue;
512 };
513 let struct_literal_fields = match arg_value {
514 Expr::StructLiteral {
515 name: struct_literal_name,
516 span: struct_literal_span,
517 fields: struct_literal_fields,
518 } => {
519 if struct_literal_name != &struct_.name {
520 d.report(
521 DiagnosticKind::TypeMismatch {
522 expected: arg.type_.clone(),
523 given: Type::Struct {
524 name: struct_literal_name.clone(),
525 span: struct_literal_span.clone(),
526 },
527 },
528 type_span,
529 );
530 continue;
531 }
532 if struct_literal_fields.len() != struct_.fields.len() {

Callers 1

proc_callMethod · 0.80

Calls 9

newFunction · 0.85
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