| /* |
| * Copyright 2021 Google LLC |
| * |
| * Use of this source code is governed by a BSD-style license that can be |
| * found in the LICENSE file. |
| */ |
| |
| #ifndef SKSL_DSL_SYMBOLS |
| #define SKSL_DSL_SYMBOLS |
| |
| #include "include/private/SkSLString.h" |
| #include "include/sksl/DSLExpression.h" |
| |
| #include <memory> |
| #include <string_view> |
| |
| namespace SkSL { |
| |
| class SymbolTable; |
| |
| namespace dsl { |
| |
| class DSLVar; |
| |
| // This header provides methods for manually managing symbol tables in DSL code. They should not be |
| // used by normal hand-written DSL code, where we rely on C++ to manage symbols, but are instead |
| // needed when DSL objects are being constructed programmatically (as in DSLParser). |
| |
| /** |
| * Pushes a new symbol table onto the symbol table stack. |
| */ |
| void PushSymbolTable(); |
| |
| /** |
| * Pops the top symbol table from the stack. As symbol tables are shared pointers, this will only |
| * destroy the symbol table if it was never attached to anything (e.g. passed into a Block |
| * constructor). |
| */ |
| void PopSymbolTable(); |
| |
| /** |
| * Returns the current symbol table. Outside of SkSL itself, this is an opaque pointer, used only |
| * for passing it to DSL methods that require it. |
| */ |
| std::shared_ptr<SymbolTable> CurrentSymbolTable(); |
| |
| /** |
| * Returns an expression referring to the named symbol. |
| */ |
| DSLPossibleExpression Symbol(std::string_view name, PositionInfo pos = PositionInfo::Capture()); |
| |
| /** |
| * Returns true if the name refers to a type (user or built-in) in the current symbol table. |
| */ |
| bool IsType(std::string_view name); |
| |
| /** |
| * Returns true if the name refers to a builtin type. |
| */ |
| bool IsBuiltinType(std::string_view name); |
| |
| /** |
| * Adds a variable to the current symbol table. |
| */ |
| void AddToSymbolTable(DSLVarBase& var, PositionInfo pos = PositionInfo::Capture()); |
| |
| } // namespace dsl |
| |
| } // namespace SkSL |
| |
| #endif |