public final void execute(ExpressionContext context, TagNode tag, Writer out) throws TemplateEvaluationException, IOException {
Object t = context.get(getCurrentObjectName());
Super ts = (Super) context.get(getParentObjectName());
Iter iter = (Iter) context.get(getIterObjectName());
Super s = null;
if (t != null) {
s = new Super(t, ts, iter);
context.put(getParentObjectName(), s);
}
doExecute(context, tag, out);
if (t != null) {
context.put(getCurrentObjectName(), s.get());
context.put(getParentObjectName(), s.getSuper());
context.put(getIterObjectName(), s.getIter());
} else {
context.put(getCurrentObjectName(), t);
context.put(getParentObjectName(), ts);
context.put(getIterObjectName(), iter);
}
}