31class FunctionDeclaration;
50 std::unique_ptr<std::string>
text);
81 void pushback(
Token t);
122 bool expectNewline();
124 void error(
Token token, std::string_view msg);
144 bool arraySize(
SKSL_INT* outResult);
146 void directive(
bool allowVersion);
156 const Type* returnType,
163 struct VarDeclarationsPrefix {
170 bool varDeclarationsPrefix(VarDeclarationsPrefix* prefixData);
172 std::unique_ptr<Statement> varDeclarationsOrExpressionStatement();
174 std::unique_ptr<Statement> varDeclarations();
176 const Type* structDeclaration();
180 bool allowUnsizedArrays() {
189 bool parseArrayDimensions(Position
pos,
const Type** type);
191 bool parseInitializer(Position
pos, std::unique_ptr<Expression>*
initializer);
193 void addGlobalVarDeclaration(std::unique_ptr<SkSL::VarDeclaration> decl);
195 void globalVarDeclarationEnd(Position
position,
const Modifiers& mods,
198 std::unique_ptr<Statement> localVarDeclarationEnd(Position
position,
199 const Modifiers& mods,
200 const Type* baseType,
203 bool modifiersDeclarationEnd(
const Modifiers& mods);
205 bool parameter(std::unique_ptr<SkSL::Variable>* outParam);
209 std::string_view layoutIdentifier();
213 Modifiers modifiers();
215 std::unique_ptr<Statement> statementOrNop(Position
pos, std::unique_ptr<Statement> stmt);
217 std::unique_ptr<Statement> statement(
bool bracesIntroduceNewScope =
true);
219 const Type* findType(Position
pos, Modifiers* modifiers, std::string_view
name);
221 const Type* type(Modifiers* modifiers);
223 bool interfaceBlock(
const Modifiers& mods);
225 std::unique_ptr<Statement> ifStatement();
227 std::unique_ptr<Statement> doStatement();
229 std::unique_ptr<Statement> whileStatement();
231 std::unique_ptr<Statement> forStatement();
233 bool switchCaseBody(ExpressionArray*
values,
235 std::unique_ptr<Expression>
value);
239 std::unique_ptr<Statement> switchStatement();
241 std::unique_ptr<Statement> returnStatement();
243 std::unique_ptr<Statement> breakStatement();
245 std::unique_ptr<Statement> continueStatement();
247 std::unique_ptr<Statement> discardStatement();
249 std::unique_ptr<Statement> block(
bool introduceNewScope,
250 std::unique_ptr<SymbolTable>* adoptExistingSymbolTable);
252 std::unique_ptr<Statement> expressionStatement();
254 using BinaryParseFn = std::unique_ptr<Expression> (
Parser::*)();
255 [[nodiscard]]
bool operatorRight(AutoDepth& depth,
257 BinaryParseFn rightFn,
258 std::unique_ptr<Expression>& expr);
260 std::unique_ptr<Expression> poison(Position
pos);
262 std::unique_ptr<Expression> expressionOrPoison(Position
pos, std::unique_ptr<Expression> expr);
264 std::unique_ptr<Expression> expression();
266 std::unique_ptr<Expression> assignmentExpression();
268 std::unique_ptr<Expression> ternaryExpression();
270 std::unique_ptr<Expression> logicalOrExpression();
272 std::unique_ptr<Expression> logicalXorExpression();
274 std::unique_ptr<Expression> logicalAndExpression();
276 std::unique_ptr<Expression> bitwiseOrExpression();
278 std::unique_ptr<Expression> bitwiseXorExpression();
280 std::unique_ptr<Expression> bitwiseAndExpression();
282 std::unique_ptr<Expression> equalityExpression();
284 std::unique_ptr<Expression> relationalExpression();
286 std::unique_ptr<Expression> shiftExpression();
288 std::unique_ptr<Expression> additiveExpression();
290 std::unique_ptr<Expression> multiplicativeExpression();
292 std::unique_ptr<Expression> unaryExpression();
294 std::unique_ptr<Expression> postfixExpression();
296 std::unique_ptr<Expression> swizzle(Position
pos,
297 std::unique_ptr<Expression>
base,
298 std::string_view swizzleMask,
301 std::unique_ptr<Expression> call(Position
pos,
302 std::unique_ptr<Expression>
base,
303 ExpressionArray
args);
305 std::unique_ptr<Expression> suffix(std::unique_ptr<Expression>
base);
307 std::unique_ptr<Expression> term();
313 bool boolLiteral(
bool*
dest);
315 bool identifier(std::string_view*
dest);
317 SymbolTable* symbolTable();
320 ProgramSettings fSettings;
321 ErrorReporter* fErrorReporter;
322 bool fEncounteredFatalError;
324 std::unique_ptr<std::string> fText;
325 std::vector<std::unique_ptr<SkSL::ProgramElement>> fProgramElements;
static struct Initializer initializer
Position position(Token token)
std::string_view text(Token token)
Parser(Compiler *compiler, const ProgramSettings &settings, ProgramKind kind, std::unique_ptr< std::string > text)
std::unique_ptr< Program > programInheritingFrom(const Module *module)
std::unique_ptr< Module > moduleInheritingFrom(const Module *parentModule)
G_BEGIN_DECLS G_MODULE_EXPORT FlValue * args
const uint8_t uint32_t uint32_t GError ** error
skia_private::STArray< 2, std::unique_ptr< Statement > > StatementArray
DEF_SWITCHES_START aot vmservice shared library name
static bool IsVertex(ProgramKind kind)
static bool IsFragment(ProgramKind kind)
static bool IsCompute(ProgramKind kind)