// Copyright 2019 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//      https://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

#include "rt/function.h"

#include "rt/module.h"

namespace iree {
namespace rt {

absl::string_view Function::name() const {
  auto result_or = module_->GetFunctionName(linkage_, ordinal_);
  return result_or.ok() ? result_or.ValueOrDie() : absl::string_view();
}

const FunctionSignature Function::signature() const {
  auto result_or = module_->GetFunctionSignature(linkage_, ordinal_);
  return result_or.ok() ? result_or.ValueOrDie() : FunctionSignature();
}

}  // namespace rt
}  // namespace iree
