Remove all dynamic type checking overhead for struct field accesses. These checks are unnecessary by construction; see the codepaths that construct SkylarkInfo instances.
RELNOTES: None
PiperOrigin-RevId: 188373688
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/DotExpression.java b/src/main/java/com/google/devtools/build/lib/syntax/DotExpression.java
index 06659ae..5b1045f 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/DotExpression.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/DotExpression.java
@@ -85,7 +85,13 @@
*/
public static Object eval(Object objValue, String name,
Location loc, Environment env) throws EvalException {
- if (objValue instanceof ClassObject) {
+ if (objValue instanceof SkylarkClassObject) {
+ try {
+ return ((SkylarkClassObject) objValue).getValue(name);
+ } catch (IllegalArgumentException ex) {
+ throw new EvalException(loc, ex);
+ }
+ } else if (objValue instanceof ClassObject) {
Object result = null;
try {
result = ((ClassObject) objValue).getValue(name);