blob: 4788dbb418ba451e5be0a34ae2ca0186d9baabca [file] [log] [blame]
* Copyright 2016 Google Inc.
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
#include "src/sksl/SkSLContext.h"
#include "src/sksl/ir/SkSLExpression.h"
#include "src/sksl/ir/SkSLFunctionDeclaration.h"
namespace SkSL {
* An identifier referring to a function name. This is an intermediate value: FunctionReferences are
* always eventually replaced by FunctionCalls in valid programs.
class FunctionReference final : public Expression {
inline static constexpr Kind kIRNodeKind = Kind::kFunctionReference;
FunctionReference(const Context& context, Position pos,
const FunctionDeclaration* overloadChain)
: INHERITED(pos, kIRNodeKind, context.fTypes.fInvalid.get())
, fOverloadChain(overloadChain) {}
const FunctionDeclaration* overloadChain() const {
return fOverloadChain;
std::unique_ptr<Expression> clone(Position pos) const override {
return std::unique_ptr<Expression>(new FunctionReference(pos, this->overloadChain(),
std::string description(OperatorPrecedence) const override {
return "<function>";
FunctionReference(Position pos, const FunctionDeclaration* overloadChain, const Type* type)
: INHERITED(pos, kIRNodeKind, type)
, fOverloadChain(overloadChain) {}
const FunctionDeclaration* fOverloadChain;
using INHERITED = Expression;
} // namespace SkSL