diff --git a/pymbolic/mapper/evaluator.py b/pymbolic/mapper/evaluator.py
index 89270e081106c7045b11c34cc2379291971a3475..aed88761a7ae88b0156bdee3f27597c72cc42972 100644
--- a/pymbolic/mapper/evaluator.py
+++ b/pymbolic/mapper/evaluator.py
@@ -76,7 +76,13 @@ class EvaluationMapper(RecursiveMapper, CSECachingMapperMixin):
         return self.rec(expr.function)(*args, **kwargs)
 
     def map_subscript(self, expr):
-        return self.rec(expr.aggregate)[self.rec(expr.index)]
+        rec_result = self.rec(expr.aggregate)
+
+        from pymbolic.primitives import Expression
+        if isinstance(rec_result, Expression):
+            return rec_result.index(self.rec(expr.index))
+        else:
+            return rec_result[self.rec(expr.index)]
 
     def map_lookup(self, expr):
         return getattr(self.rec(expr.aggregate), expr.name)