TemplateModel _getAsTemplateModel(Environment env) throws TemplateException {
TemplateModel targetModel = target.getAsTemplateModel(env);
assertNonNull(targetModel, target, env);
if (nameExpression instanceof Range) {
return dealWithRangeKey(targetModel, (Range) nameExpression, env);
}
TemplateModel keyModel = nameExpression.getAsTemplateModel(env);
if(keyModel == null) {
if(env.isClassicCompatible()) {
keyModel = TemplateScalarModel.EMPTY_STRING;
}
else {
assertNonNull(keyModel, nameExpression, env);
}
}
if (keyModel instanceof TemplateNumberModel) {
int index = EvaluationUtil.getNumber(keyModel, nameExpression, env).intValue();
return dealWithNumericalKey(targetModel, index, env);
}
if (keyModel instanceof TemplateScalarModel) {
String key = EvaluationUtil.getString((TemplateScalarModel)keyModel, nameExpression, env);
return dealWithStringKey(targetModel, key, env);
}
throw invalidTypeException(keyModel, nameExpression, env, "number, range, or string");
}
|