1/* 2 * Copyright 2017 Google Inc. 3 * 4 * Use of this source code is governed by a BSD-style license that can be 5 * found in the LICENSE file. 6 */ 7 8#ifndef SKSL_ENUM 9#define SKSL_ENUM 10 11#include "SkSLProgramElement.h" 12namespace SkSL { 13 14struct Enum : public ProgramElement { 15 Enum(int offset, StringFragment typeName, std::shared_ptr<SymbolTable> symbols) 16 : INHERITED(offset, kEnum_Kind) 17 , fTypeName(typeName) 18 , fSymbols(std::move(symbols)) {} 19 20 String description() const override { 21 String result = "enum class " + fTypeName + " {\n"; 22 String separator; 23 for (auto iter = fSymbols->begin(); iter != fSymbols->end(); ++iter) { 24 result += separator + " " + iter->first + " = " + 25 ((Variable&) *iter->second).fInitialValue->description(); 26 separator = ",\n"; 27 } 28 result += "\n};"; 29 return result; 30 } 31 32 bool fBuiltin = false; 33 const StringFragment fTypeName; 34 const std::shared_ptr<SymbolTable> fSymbols; 35 36 typedef ProgramElement INHERITED; 37}; 38 39} // namespace 40 41#endif 42