"static const" instead of "#define" for script API M_* constants.
This makes referenced script API M_* constants visible in the debugger.
Modify rs lldb test for the constants so that it references them.
Adapted from https://android-review.googlesource.com/#/c/210789/
Test: aosp_arm64-eng on emulator
- run slang/tests, slang/lit-tests
- run rs lldb test suite
- run RsTest (32-bit, 64-bit)
- run cts -m RenderscriptTest (32-bit)
- confirmed that omitting type: or value: from constant: causes
script_api/generate.sh to fail with an error
Change-Id: I9cc89771ad5d90432c0ea0a1885aae8d9003dafe
diff --git a/script_api/GenerateHeaderFiles.cpp b/script_api/GenerateHeaderFiles.cpp
index ce778b3..1ea5e11 100644
--- a/script_api/GenerateHeaderFiles.cpp
+++ b/script_api/GenerateHeaderFiles.cpp
@@ -120,7 +120,8 @@
const Constant* constant = spec.getConstant();
VersionInfo info = spec.getVersionInfo();
writeVersionGuardStart(file, info, constant->getFinalVersion());
- *file << "#define " << constant->getName() << " " << spec.getValue() << "\n\n";
+ *file << "static const " << spec.getType() << " " << constant->getName()
+ << " = " << spec.getValue() << ";\n\n";
writeVersionGuardEnd(file, info);
}
diff --git a/script_api/Generator.cpp b/script_api/Generator.cpp
index 456f214..f67e473 100644
--- a/script_api/Generator.cpp
+++ b/script_api/Generator.cpp
@@ -62,6 +62,7 @@
* [version: ({Starting API level} [ {Last API level that supports this.}] | UNRELEASED)
* [size: {32 or 64. Used if this is available only for 32 or 64 bit code.}]
* value: {The value of the constant.}
+ * type: {The type of the constant.}
* [hidden:] ...If present, don't document the constant. Omit the following two fields.
* [deprecated: [{Deprecation message.}] ... This is deprecated. Compiler will issue a wrning.
* summary: {A one line string describing this section.}
diff --git a/script_api/Specification.cpp b/script_api/Specification.cpp
index c103dc1..f7d139e 100644
--- a/script_api/Specification.cpp
+++ b/script_api/Specification.cpp
@@ -382,6 +382,9 @@
if (scanner->findTag("value:")) {
spec->mValue = scanner->getValue();
}
+ if (scanner->findTag("type:")) {
+ spec->mType = scanner->getValue();
+ }
constant->scanDocumentationTags(scanner, created, specFile);
scanner->findTag("end:");
diff --git a/script_api/Specification.h b/script_api/Specification.h
index bcd5737..9e1b2ee 100644
--- a/script_api/Specification.h
+++ b/script_api/Specification.h
@@ -258,7 +258,7 @@
VersionInfo getVersionInfo() const { return mVersionInfo; }
};
-/* Defines one of the many variations of a constant. There's a one to one correspondance between
+/* Defines one of the many variations of a constant. There's a one to one correspondence between
* ConstantSpecification objects and entries in the spec file.
*/
class ConstantSpecification : public Specification {
@@ -266,11 +266,13 @@
Constant* mConstant; // Not owned
std::string mValue; // E.g. "3.1415"
+ std::string mType; // E.g. "float"
public:
ConstantSpecification(Constant* constant) : mConstant(constant) {}
Constant* getConstant() const { return mConstant; }
std::string getValue() const { return mValue; }
+ std::string getType() const { return mType; }
// Parse a constant specification and add it to specFile.
static void scanConstantSpecification(Scanner* scanner, SpecFile* specFile, unsigned int maxApiLevel);
@@ -283,7 +285,7 @@
ENUM,
};
-/* Defines one of the many variations of a type. There's a one to one correspondance between
+/* Defines one of the many variations of a type. There's a one to one correspondence between
* TypeSpecification objects and entries in the spec file.
*/
class TypeSpecification : public Specification {
@@ -326,7 +328,7 @@
// Maximum number of placeholders (like #1, #2) in function specifications.
const int MAX_REPLACEABLES = 4;
-/* Defines one of the many variations of the function. There's a one to one correspondance between
+/* Defines one of the many variations of the function. There's a one to one correspondence between
* FunctionSpecification objects and entries in the spec file. Some of the strings that are parts
* of a FunctionSpecification can include placeholders, which are "#1", "#2", "#3", and "#4". We'll
* replace these by values before generating the files.
diff --git a/script_api/include/rs_math.rsh b/script_api/include/rs_math.rsh
index 3d034d0..a5a7569 100644
--- a/script_api/include/rs_math.rsh
+++ b/script_api/include/rs_math.rsh
@@ -58,14 +58,14 @@
*
* The inverse of pi, as a 32 bit float.
*/
-#define M_1_PI 0.318309886183790671537767526745028724f
+static const float M_1_PI = 0.318309886183790671537767526745028724f;
/*
* M_2_PI: 2 / pi, as a 32 bit float
*
* 2 divided by pi, as a 32 bit float.
*/
-#define M_2_PI 0.636619772367581343075535053490057448f
+static const float M_2_PI = 0.636619772367581343075535053490057448f;
/*
* M_2_PIl: 2 / pi, as a 32 bit float
@@ -74,84 +74,84 @@
*
* 2 divided by pi, as a 32 bit float.
*/
-#define M_2_PIl 0.636619772367581343075535053490057448f
+static const float M_2_PIl = 0.636619772367581343075535053490057448f;
/*
* M_2_SQRTPI: 2 / sqrt(pi), as a 32 bit float
*
* 2 divided by the square root of pi, as a 32 bit float.
*/
-#define M_2_SQRTPI 1.128379167095512573896158903121545172f
+static const float M_2_SQRTPI = 1.128379167095512573896158903121545172f;
/*
* M_E: e, as a 32 bit float
*
* The number e, the base of the natural logarithm, as a 32 bit float.
*/
-#define M_E 2.718281828459045235360287471352662498f
+static const float M_E = 2.718281828459045235360287471352662498f;
/*
* M_LN10: log_e(10), as a 32 bit float
*
* The natural logarithm of 10, as a 32 bit float.
*/
-#define M_LN10 2.302585092994045684017991454684364208f
+static const float M_LN10 = 2.302585092994045684017991454684364208f;
/*
* M_LN2: log_e(2), as a 32 bit float
*
* The natural logarithm of 2, as a 32 bit float.
*/
-#define M_LN2 0.693147180559945309417232121458176568f
+static const float M_LN2 = 0.693147180559945309417232121458176568f;
/*
* M_LOG10E: log_10(e), as a 32 bit float
*
* The logarithm base 10 of e, as a 32 bit float.
*/
-#define M_LOG10E 0.434294481903251827651128918916605082f
+static const float M_LOG10E = 0.434294481903251827651128918916605082f;
/*
* M_LOG2E: log_2(e), as a 32 bit float
*
* The logarithm base 2 of e, as a 32 bit float.
*/
-#define M_LOG2E 1.442695040888963407359924681001892137f
+static const float M_LOG2E = 1.442695040888963407359924681001892137f;
/*
* M_PI: pi, as a 32 bit float
*
* The constant pi, as a 32 bit float.
*/
-#define M_PI 3.141592653589793238462643383279502884f
+static const float M_PI = 3.141592653589793238462643383279502884f;
/*
* M_PI_2: pi / 2, as a 32 bit float
*
* Pi divided by 2, as a 32 bit float.
*/
-#define M_PI_2 1.570796326794896619231321691639751442f
+static const float M_PI_2 = 1.570796326794896619231321691639751442f;
/*
* M_PI_4: pi / 4, as a 32 bit float
*
* Pi divided by 4, as a 32 bit float.
*/
-#define M_PI_4 0.785398163397448309615660845819875721f
+static const float M_PI_4 = 0.785398163397448309615660845819875721f;
/*
* M_SQRT1_2: 1 / sqrt(2), as a 32 bit float
*
* The inverse of the square root of 2, as a 32 bit float.
*/
-#define M_SQRT1_2 0.707106781186547524400844362104849039f
+static const float M_SQRT1_2 = 0.707106781186547524400844362104849039f;
/*
* M_SQRT2: sqrt(2), as a 32 bit float
*
* The square root of 2, as a 32 bit float.
*/
-#define M_SQRT2 1.414213562373095048801688724209698079f
+static const float M_SQRT2 = 1.414213562373095048801688724209698079f;
/*
* abs: Absolute value of an integer
diff --git a/script_api/rs_math.spec b/script_api/rs_math.spec
index b4093e8..15378ad 100644
--- a/script_api/rs_math.spec
+++ b/script_api/rs_math.spec
@@ -51,6 +51,7 @@
# TODO Add f16 versions of these constants.
constant: M_1_PI
value: 0.318309886183790671537767526745028724f
+type: float
summary: 1 / pi, as a 32 bit float
description:
The inverse of pi, as a 32 bit float.
@@ -58,6 +59,7 @@
constant: M_2_PI
value: 0.636619772367581343075535053490057448f
+type: float
summary: 2 / pi, as a 32 bit float
description:
2 divided by pi, as a 32 bit float.
@@ -65,6 +67,7 @@
constant: M_2_PIl
value: 0.636619772367581343075535053490057448f
+type: float
hidden:
deprecated: 22, Use M_2_PI instead.
summary: 2 / pi, as a 32 bit float
@@ -74,6 +77,7 @@
constant: M_2_SQRTPI
value: 1.128379167095512573896158903121545172f
+type: float
summary: 2 / sqrt(pi), as a 32 bit float
description:
2 divided by the square root of pi, as a 32 bit float.
@@ -81,6 +85,7 @@
constant: M_E
value: 2.718281828459045235360287471352662498f
+type: float
summary: e, as a 32 bit float
description:
The number e, the base of the natural logarithm, as a 32 bit float.
@@ -88,6 +93,7 @@
constant: M_LN10
value: 2.302585092994045684017991454684364208f
+type: float
summary: log_e(10), as a 32 bit float
description:
The natural logarithm of 10, as a 32 bit float.
@@ -95,6 +101,7 @@
constant: M_LN2
value: 0.693147180559945309417232121458176568f
+type: float
summary: log_e(2), as a 32 bit float
description:
The natural logarithm of 2, as a 32 bit float.
@@ -102,6 +109,7 @@
constant: M_LOG10E
value: 0.434294481903251827651128918916605082f
+type: float
summary: log_10(e), as a 32 bit float
description:
The logarithm base 10 of e, as a 32 bit float.
@@ -109,6 +117,7 @@
constant: M_LOG2E
value: 1.442695040888963407359924681001892137f
+type: float
summary: log_2(e), as a 32 bit float
description:
The logarithm base 2 of e, as a 32 bit float.
@@ -116,6 +125,7 @@
constant: M_PI
value: 3.141592653589793238462643383279502884f
+type: float
summary: pi, as a 32 bit float
description:
The constant pi, as a 32 bit float.
@@ -123,6 +133,7 @@
constant: M_PI_2
value: 1.570796326794896619231321691639751442f
+type: float
summary: pi / 2, as a 32 bit float
description:
Pi divided by 2, as a 32 bit float.
@@ -130,6 +141,7 @@
constant: M_PI_4
value: 0.785398163397448309615660845819875721f
+type: float
summary: pi / 4, as a 32 bit float
description:
Pi divided by 4, as a 32 bit float.
@@ -137,6 +149,7 @@
constant: M_SQRT1_2
value: 0.707106781186547524400844362104849039f
+type: float
summary: 1 / sqrt(2), as a 32 bit float
description:
The inverse of the square root of 2, as a 32 bit float.
@@ -144,6 +157,7 @@
constant: M_SQRT2
value: 1.414213562373095048801688724209698079f
+type: float
summary: sqrt(2), as a 32 bit float
description:
The square root of 2, as a 32 bit float.