Index: src/sksl/SkSLCompiler.cpp |
diff --git a/src/sksl/SkSLCompiler.cpp b/src/sksl/SkSLCompiler.cpp |
index 2b4adc1026307053f38fae0480708607ad7c4f46..6c6cef4577a7b1586ba6133c080f2b5a7e0cf388 100644 |
--- a/src/sksl/SkSLCompiler.cpp |
+++ b/src/sksl/SkSLCompiler.cpp |
@@ -43,7 +43,7 @@ Compiler::Compiler() |
auto symbols = std::shared_ptr<SymbolTable>(new SymbolTable(types, *this)); |
fIRGenerator = new IRGenerator(symbols, *this); |
fTypes = types; |
- #define ADD_TYPE(t) types->add(k ## t ## _Type->fName, k ## t ## _Type) |
+ #define ADD_TYPE(t) types->addWithoutOwnership(k ## t ## _Type.fName, &k ## t ## _Type) |
ADD_TYPE(Void); |
ADD_TYPE(Float); |
ADD_TYPE(Vec2); |
@@ -184,20 +184,22 @@ void Compiler::internalConvertProgram(std::string text, |
std::unique_ptr<Program> Compiler::convertProgram(Program::Kind kind, std::string text) { |
fErrorText = ""; |
fErrorCount = 0; |
- fIRGenerator->pushSymbolTable(); |
- std::vector<std::unique_ptr<ProgramElement>> result; |
+ fIRGenerator->pushSymbolTable(true); |
+ std::vector<std::unique_ptr<ProgramElement>> elements; |
switch (kind) { |
case Program::kVertex_Kind: |
- this->internalConvertProgram(SKSL_VERT_INCLUDE, &result); |
+ this->internalConvertProgram(SKSL_VERT_INCLUDE, &elements); |
break; |
case Program::kFragment_Kind: |
- this->internalConvertProgram(SKSL_FRAG_INCLUDE, &result); |
+ this->internalConvertProgram(SKSL_FRAG_INCLUDE, &elements); |
break; |
} |
- this->internalConvertProgram(text, &result); |
+ this->internalConvertProgram(text, &elements); |
+ auto result = std::unique_ptr<Program>(new Program(kind, std::move(elements), |
+ fIRGenerator->fSymbolTable));; |
fIRGenerator->popSymbolTable(); |
this->writeErrorCount(); |
- return std::unique_ptr<Program>(new Program(kind, std::move(result)));; |
+ return result; |
} |
void Compiler::error(Position position, std::string msg) { |