code: def make_node(cls, id_, params, lineno):
          
          assert isinstance(params, SymbolARGLIST)
          entry = gl.SYMBOL_TABLE.access_func(id_, lineno)
          if entry is None:  # A syntax / semantic error
              return None
  
          if entry.callable is False:  # Is it NOT callable?
              if entry.type_ != Type.string:
                  errmsg.syntax_error_not_array_nor_func(lineno, id_)
                  return None
  
          gl.SYMBOL_TABLE.check_class(id_, CLASS.function, lineno)
          entry.accessed = True
  
          if entry.declared and not entry.forwarded:
              check_call_arguments(lineno, id_, params)
          else:  # All functions goes to global scope by default
              if not isinstance(entry, SymbolFUNCTION):
                  entry = SymbolVAR.to_function(entry, lineno)
              gl.SYMBOL_TABLE.move_to_global_scope(id_)
              gl.FUNCTION_CALLS.append((id_, params, lineno,))
  
          return cls(entry, params, lineno)
docs: This will return an AST node for a function/procedure call.