diff options
Diffstat (limited to 'src/sksl/ir')
-rw-r--r-- | src/sksl/ir/SkSLFunctionDeclaration.h | 2 | ||||
-rw-r--r-- | src/sksl/ir/SkSLSymbolTable.cpp | 18 | ||||
-rw-r--r-- | src/sksl/ir/SkSLSymbolTable.h | 2 |
3 files changed, 22 insertions, 0 deletions
diff --git a/src/sksl/ir/SkSLFunctionDeclaration.h b/src/sksl/ir/SkSLFunctionDeclaration.h index 16a184a6d7..ffde0c66c1 100644 --- a/src/sksl/ir/SkSLFunctionDeclaration.h +++ b/src/sksl/ir/SkSLFunctionDeclaration.h @@ -24,6 +24,7 @@ struct FunctionDeclaration : public Symbol { std::vector<const Variable*> parameters, const Type& returnType) : INHERITED(position, kFunctionDeclaration_Kind, std::move(name)) , fDefined(false) + , fBuiltin(false) , fParameters(std::move(parameters)) , fReturnType(returnType) {} @@ -55,6 +56,7 @@ struct FunctionDeclaration : public Symbol { } mutable bool fDefined; + bool fBuiltin; const std::vector<const Variable*> fParameters; const Type& fReturnType; diff --git a/src/sksl/ir/SkSLSymbolTable.cpp b/src/sksl/ir/SkSLSymbolTable.cpp index 9d8c0063c5..6d8e9a7ea6 100644 --- a/src/sksl/ir/SkSLSymbolTable.cpp +++ b/src/sksl/ir/SkSLSymbolTable.cpp @@ -97,4 +97,22 @@ void SymbolTable::addWithoutOwnership(const std::string& name, const Symbol* sym } } + +void SymbolTable::markAllFunctionsBuiltin() { + for (const auto& pair : fSymbols) { + switch (pair.second->fKind) { + case Symbol::kFunctionDeclaration_Kind: + ((FunctionDeclaration&) *pair.second).fBuiltin = true; + break; + case Symbol::kUnresolvedFunction_Kind: + for (auto& f : ((UnresolvedFunction&) *pair.second).fFunctions) { + ((FunctionDeclaration*) f)->fBuiltin = true; + } + break; + default: + break; + } + } +} + } // namespace diff --git a/src/sksl/ir/SkSLSymbolTable.h b/src/sksl/ir/SkSLSymbolTable.h index d732023ff0..be2b49c48d 100644 --- a/src/sksl/ir/SkSLSymbolTable.h +++ b/src/sksl/ir/SkSLSymbolTable.h @@ -39,6 +39,8 @@ public: Symbol* takeOwnership(Symbol* s); + void markAllFunctionsBuiltin(); + const std::shared_ptr<SymbolTable> fParent; private: |