TemplateElement parent = node;
while (parent != null && !(parent instanceof Macro)) {
parent = parent.getParent();
}
if (parent == null) {
template.addParsingProblem(new ParsingProblem("The return directive can only be used inside a function or macro.", node));
} else {
Macro macro = (Macro) parent;
if (!macro.isFunction() && node.returnExp != null) {
template.addParsingProblem(new ParsingProblem("Can only return a value from a function, not a macro", node));
}
else if (macro.isFunction() && node.returnExp == null) {
template.addParsingProblem(new ParsingProblem("A function must return a value.", node));
}
}
}