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

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

Issue 1984363002: initial checkin of SkSL compiler (Closed) Base URL: https://skia.googlesource.com/skia@master
Patch Set: more cleanups Created 4 years, 6 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
OLDNEW
(Empty)
1 /*
2 * Copyright 2016 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_IRGENERATOR
9 #define SKSL_IRGENERATOR
10
11 #include "SkSLErrorReporter.h"
12 #include "ast/SkSLASTBinaryExpression.h"
13 #include "ast/SkSLASTBlock.h"
14 #include "ast/SkSLASTBreakStatement.h"
15 #include "ast/SkSLASTCallSuffix.h"
16 #include "ast/SkSLASTContinueStatement.h"
17 #include "ast/SkSLASTDiscardStatement.h"
18 #include "ast/SkSLASTDoStatement.h"
19 #include "ast/SkSLASTExpression.h"
20 #include "ast/SkSLASTExpressionStatement.h"
21 #include "ast/SkSLASTExtension.h"
22 #include "ast/SkSLASTForStatement.h"
23 #include "ast/SkSLASTFunction.h"
24 #include "ast/SkSLASTIdentifier.h"
25 #include "ast/SkSLASTIfStatement.h"
26 #include "ast/SkSLASTInterfaceBlock.h"
27 #include "ast/SkSLASTModifiers.h"
28 #include "ast/SkSLASTPrefixExpression.h"
29 #include "ast/SkSLASTReturnStatement.h"
30 #include "ast/SkSLASTStatement.h"
31 #include "ast/SkSLASTSuffixExpression.h"
32 #include "ast/SkSLASTTernaryExpression.h"
33 #include "ast/SkSLASTVarDeclaration.h"
34 #include "ast/SkSLASTVarDeclarationStatement.h"
35 #include "ast/SkSLASTWhileStatement.h"
36 #include "ir/SkSLBlock.h"
37 #include "ir/SkSLExpression.h"
38 #include "ir/SkSLExtension.h"
39 #include "ir/SkSLFunctionDefinition.h"
40 #include "ir/SkSLInterfaceBlock.h"
41 #include "ir/SkSLModifiers.h"
42 #include "ir/SkSLSymbolTable.h"
43 #include "ir/SkSLStatement.h"
44 #include "ir/SkSLType.h"
45 #include "ir/SkSLTypeReference.h"
46 #include "ir/SkSLVarDeclaration.h"
47
48 namespace SkSL {
49
50 /**
51 * Performs semantic analysis on an abstract syntax tree (AST) and produces the corresponding
52 * (unoptimized) intermediate representation (IR).
53 */
54 class IRGenerator {
55 public:
56 IRGenerator(std::shared_ptr<SymbolTable> root, ErrorReporter& errorReporter) ;
dogben 2016/06/23 15:25:12 nit: if the caller will hang on to SymbolTable for
57
58 std::unique_ptr<VarDeclaration> convertVarDeclaration(ASTVarDeclaration& dec l,
dogben 2016/06/23 15:25:12 nit: document how each method will modify the AST
59 Variable::Storage stor age);
60 std::unique_ptr<FunctionDefinition> convertFunction(ASTFunction& f);
61 std::unique_ptr<Statement> convertStatement(ASTStatement& statement);
62 std::unique_ptr<Expression> convertExpression(ASTExpression& expression);
63
64 private:
65 void pushSymbolTable();
66 void popSymbolTable();
67
68 std::shared_ptr<Type> convertType(ASTType& type);
69 std::unique_ptr<Expression> call(Position position,
70 std::shared_ptr<FunctionDeclaration> functi on,
71 std::vector<std::unique_ptr<Expression>> pa rameters);
dogben 2016/06/23 15:25:12 nit: s/parameters/arguments/, several places in th
72 bool determineCallCost(std::shared_ptr<FunctionDeclaration> function,
73 std::vector<std::unique_ptr<Expression>>& parameters,
74 int* outCost);
75 std::unique_ptr<Expression> call(Position position, std::unique_ptr<Expressi on> function,
76 std::vector<std::unique_ptr<Expression>> pa rameters);
77 std::unique_ptr<Expression> coerce(std::unique_ptr<Expression> expr,
78 std::shared_ptr<Type> type);
79 std::unique_ptr<Block> convertBlock(ASTBlock& block);
80 std::unique_ptr<Statement> convertBreak(ASTBreakStatement& b);
81 std::unique_ptr<Expression> convertConstructor(Position position,
82 std::shared_ptr<Type> type,
83 std::vector<std::unique_ptr<E xpression>> params);
84 std::unique_ptr<Statement> convertContinue(ASTContinueStatement& c);
85 std::unique_ptr<Statement> convertDiscard(ASTDiscardStatement& d);
86 std::unique_ptr<Statement> convertDo(ASTDoStatement& d);
87 std::unique_ptr<Expression> convertBinaryExpression(ASTBinaryExpression& exp ression);
88 std::unique_ptr<Extension> convertExtension(ASTExtension& e);
89 std::unique_ptr<Statement> convertExpressionStatement(ASTExpressionStatement & s);
90 std::unique_ptr<Statement> convertFor(ASTForStatement& f);
91 std::unique_ptr<Expression> convertIdentifier(ASTIdentifier& identifier);
92 std::unique_ptr<Statement> convertIf(ASTIfStatement& s);
93 std::unique_ptr<Expression> convertIndex(std::unique_ptr<Expression> base,
94 ASTExpression& index);
95 std::unique_ptr<InterfaceBlock> convertInterfaceBlock(ASTInterfaceBlock& s);
96 Modifiers convertModifiers(const ASTModifiers& m);
97 std::unique_ptr<Expression> convertPrefixExpression(ASTPrefixExpression& exp ression);
98 std::unique_ptr<Statement> convertReturn(ASTReturnStatement& r);
99 std::unique_ptr<Expression> convertSuffixExpression(ASTSuffixExpression& exp ression);
100 std::unique_ptr<Expression> convertField(std::unique_ptr<Expression> base, s td::string field);
101 std::unique_ptr<Expression> convertSwizzle(std::unique_ptr<Expression> base,
102 std::string fields);
103 std::unique_ptr<Expression> convertTernaryExpression(ASTTernaryExpression& e xpression);
104 std::unique_ptr<Statement> convertVarDeclarationStatement(ASTVarDeclarationS tatement& s);
105 std::unique_ptr<Statement> convertWhile(ASTWhileStatement& w);
106
107 void markReadFrom(std::shared_ptr<Variable> var);
108 void markWrittenTo(Expression& expr);
109
110 std::shared_ptr<FunctionDeclaration> fCurrentFunction;
111 std::shared_ptr<SymbolTable> fSymbolTable;
112 ErrorReporter& fErrors;
113
114 friend class AutoSymbolTable;
115 friend class Compiler;
116 };
117
118 }
119
120 #endif
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698