Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(103)

Side by Side Diff: src/sksl/SkSLContext.h

Issue 2405383003: added basic dataflow analysis to skslc (Closed)
Patch Set: I have no idea what I was thinking Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/sksl/SkSLCompiler.cpp ('k') | src/sksl/SkSLGLSLCodeGenerator.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2016 Google Inc. 2 * Copyright 2016 Google Inc.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license that can be 4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file. 5 * found in the LICENSE file.
6 */ 6 */
7 7
8 #ifndef SKSL_CONTEXT 8 #ifndef SKSL_CONTEXT
9 #define SKSL_CONTEXT 9 #define SKSL_CONTEXT
10 10
11 #include "ir/SkSLType.h" 11 #include "ir/SkSLType.h"
12 #include "ir/SkSLExpression.h"
12 13
13 namespace SkSL { 14 namespace SkSL {
14 15
15 /** 16 /**
16 * Contains compiler-wide objects, which currently means the core types. 17 * Contains compiler-wide objects, which currently means the core types.
17 */ 18 */
18 class Context { 19 class Context {
19 public: 20 public:
20 Context() 21 Context()
21 : fVoid_Type(new Type("void")) 22 : fVoid_Type(new Type("void"))
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
107 fVec4_Type.get() })) 108 fVec4_Type.get() }))
108 , fGVec_Type(new Type("$gvec")) 109 , fGVec_Type(new Type("$gvec"))
109 , fGVec2_Type(new Type("$gvec2")) 110 , fGVec2_Type(new Type("$gvec2"))
110 , fGVec3_Type(new Type("$gvec3")) 111 , fGVec3_Type(new Type("$gvec3"))
111 , fGVec4_Type(new Type("$gvec4", static_type(*fVec4_Type))) 112 , fGVec4_Type(new Type("$gvec4", static_type(*fVec4_Type)))
112 , fDVec_Type(new Type("$dvec")) 113 , fDVec_Type(new Type("$dvec"))
113 , fIVec_Type(new Type("$ivec")) 114 , fIVec_Type(new Type("$ivec"))
114 , fUVec_Type(new Type("$uvec")) 115 , fUVec_Type(new Type("$uvec"))
115 , fBVec_Type(new Type("$bvec", { fBVec2_Type.get(), fBVec2_Type.get(), fBVec 3_Type.get(), 116 , fBVec_Type(new Type("$bvec", { fBVec2_Type.get(), fBVec2_Type.get(), fBVec 3_Type.get(),
116 fBVec4_Type.get() })) 117 fBVec4_Type.get() }))
117 , fInvalid_Type(new Type("<INVALID>")) {} 118 , fInvalid_Type(new Type("<INVALID>"))
119 , fDefined_Expression(new Defined(*fInvalid_Type)) {}
118 120
119 static std::vector<const Type*> static_type(const Type& t) { 121 static std::vector<const Type*> static_type(const Type& t) {
120 return { &t, &t, &t, &t }; 122 return { &t, &t, &t, &t };
121 } 123 }
122 124
123 const std::unique_ptr<Type> fVoid_Type; 125 const std::unique_ptr<Type> fVoid_Type;
124 126
125 const std::unique_ptr<Type> fDouble_Type; 127 const std::unique_ptr<Type> fDouble_Type;
126 const std::unique_ptr<Type> fDVec2_Type; 128 const std::unique_ptr<Type> fDVec2_Type;
127 const std::unique_ptr<Type> fDVec3_Type; 129 const std::unique_ptr<Type> fDVec3_Type;
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
215 const std::unique_ptr<Type> fGVec2_Type; 217 const std::unique_ptr<Type> fGVec2_Type;
216 const std::unique_ptr<Type> fGVec3_Type; 218 const std::unique_ptr<Type> fGVec3_Type;
217 const std::unique_ptr<Type> fGVec4_Type; 219 const std::unique_ptr<Type> fGVec4_Type;
218 const std::unique_ptr<Type> fDVec_Type; 220 const std::unique_ptr<Type> fDVec_Type;
219 const std::unique_ptr<Type> fIVec_Type; 221 const std::unique_ptr<Type> fIVec_Type;
220 const std::unique_ptr<Type> fUVec_Type; 222 const std::unique_ptr<Type> fUVec_Type;
221 223
222 const std::unique_ptr<Type> fBVec_Type; 224 const std::unique_ptr<Type> fBVec_Type;
223 225
224 const std::unique_ptr<Type> fInvalid_Type; 226 const std::unique_ptr<Type> fInvalid_Type;
227
228 // dummy expression used to mark that a variable has a value during dataflow analysis (when it
229 // could have several different values, or the analyzer is otherwise unable to assign it a
230 // specific expression)
231 const std::unique_ptr<Expression> fDefined_Expression;
232
233 private:
234 class Defined : public Expression {
235 public:
236 Defined(const Type& type)
237 : INHERITED(Position(), kDefined_Kind, type) {}
238
239 virtual std::string description() const override {
240 return "<defined>";
241 }
242
243 typedef Expression INHERITED;
244 };
225 }; 245 };
226 246
227 } // namespace 247 } // namespace
228 248
229 #endif 249 #endif
OLDNEW
« no previous file with comments | « src/sksl/SkSLCompiler.cpp ('k') | src/sksl/SkSLGLSLCodeGenerator.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698