Add $es3 modifier to SkSL.
This modifier is currently allowed on built-in functions only.
The presence of this modifier will be used to indicate intrinsics which
are ES3-specific (and therefore, not allowed in user code under typical
circumstances).
Change-Id: Ice6be8d9d1b2bf0c8f07f2a89f335bb2f90f6681
Bug: skia:12202
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/439057
Commit-Queue: John Stiles <johnstiles@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
diff --git a/src/sksl/ir/SkSLFunctionDeclaration.cpp b/src/sksl/ir/SkSLFunctionDeclaration.cpp
index 1162b66..7892947 100644
--- a/src/sksl/ir/SkSLFunctionDeclaration.cpp
+++ b/src/sksl/ir/SkSLFunctionDeclaration.cpp
@@ -28,13 +28,15 @@
return kNotIntrinsic;
}
-static bool check_modifiers(const Context& context, int offset, const Modifiers& modifiers) {
- IRGenerator::CheckModifiers(
- context,
- offset,
- modifiers,
- Modifiers::kHasSideEffects_Flag | Modifiers::kInline_Flag | Modifiers::kNoInline_Flag,
- /*permittedLayoutFlags=*/0);
+static bool check_modifiers(const Context& context,
+ int offset,
+ const Modifiers& modifiers,
+ bool isBuiltin) {
+ const int permitted = Modifiers::kHasSideEffects_Flag |
+ Modifiers::kInline_Flag |
+ Modifiers::kNoInline_Flag |
+ (isBuiltin ? Modifiers::kES3_Flag : 0);
+ IRGenerator::CheckModifiers(context, offset, modifiers, permitted, /*permittedLayoutFlags=*/0);
if ((modifiers.fFlags & Modifiers::kInline_Flag) &&
(modifiers.fFlags & Modifiers::kNoInline_Flag)) {
context.errors().error(offset, "functions cannot be both 'inline' and 'noinline'");
@@ -312,7 +314,7 @@
bool isMain = (name == "main");
const FunctionDeclaration* decl = nullptr;
- if (!check_modifiers(context, offset, *modifiers) ||
+ if (!check_modifiers(context, offset, *modifiers, isBuiltin) ||
!check_return_type(context, offset, *returnType, isBuiltin) ||
!check_parameters(context, parameters, isMain, isBuiltin) ||
(isMain && !check_main_signature(context, offset, *returnType, parameters, isBuiltin)) ||