blob: 6030997ccf0c4465189ea0f89172dd36ea27bd5f [file] [log] [blame]
/*
* Copyright 2023 Google LLC
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#include "src/sksl/ir/SkSLStructDefinition.h"
#include "include/private/base/SkSpan_impl.h"
#include "src/sksl/SkSLContext.h"
#include "src/sksl/ir/SkSLModifiers.h"
#include "src/sksl/ir/SkSLSymbolTable.h"
#include "src/sksl/ir/SkSLType.h"
#include <utility>
using namespace skia_private;
namespace SkSL {
std::unique_ptr<StructDefinition> StructDefinition::Convert(const Context& context,
Position pos,
std::string_view name,
TArray<Field> fields) {
std::unique_ptr<Type> ownedType = Type::MakeStructType(context, pos, name,
std::move(fields),
/*interfaceBlock=*/false);
const SkSL::Type* type = context.fSymbolTable->add(std::move(ownedType));
return StructDefinition::Make(pos, *type);
}
std::unique_ptr<StructDefinition> StructDefinition::Make(Position pos, const Type& type) {
return std::make_unique<SkSL::StructDefinition>(pos, type);
}
std::string StructDefinition::description() const {
std::string s = "struct ";
s += this->type().name();
s += " { ";
for (const auto& f : this->type().fields()) {
s += f.fModifiers.description();
s += f.fType->description();
s += " ";
s += f.fName;
s += "; ";
}
s += "};";
return s;
}
} // namespace SkSL