}
private Component evalDefinitions(final Definition[] defs,
final int begin, final int end, Dict frame, Runtime runtime) {
if(begin==end)
return Components.value(null);
Component cc = null;
final int last = end - 1;
for(int i=begin;i<end;i++){
final Definition def = defs[i];
final Object retval = evalStmt(def.stmt, runtime, frame);
final boolean isComponent = retval instanceof Component;
if(isComponent){
cc = seq(cc,(Component)retval);
if(i==last) return cc;
}
else if(i==last){
return seq(cc, NutsUtils.asComponent(retval));
}
/*
if(isComponent){
final Component cur = (Component)retval;
cc = cc==null?cur:cc.seq(cur);
}
else{
//relax this restriction because sometimes we may have a tag
//that may or may not result in a component.
if(i==last){
cc = NutsUtils.asComponent(retval);
}
}*/
frame = nextFrame(def, frame, retval);
final String vi = def.var;
if(vi != null){
if(isComponent){
final Stmt binder = bindStatements(defs, i+1, end);
return cc.bind(evalBinder(vi,
binder, runtime, frame));
}
else{
frame = frame.put(vi, retval);
}