//#switch(uri.substring(19))
case "io": System.out.println("ibex.xt.io not yet implemented"); // TODO
//#end
- //throw new RuntimeException("Unknown XT library: "+uri);
+ //throw new JSElement.Exn("Unknown XT library: "+uri);
} else if (uri.startsWith("local:")) {
Template t = parse(s.getLocalPath() + uri.substring(6), s);
if (c.size() > 0) {
// move all children from e to placeholder
XML.Element placeholder = findPlaceholder(t);
- if (placeholder == null) throw new RuntimeException(
+ if (placeholder == null) throw new JSElement.Exn(
"<"+e.getQName()+"> attempted to include children into a " +
"template which does not contain an <xt:children /> tag.");
try {
Object varIf = get("if"); if (varIf != null) undeclare("if");
if (varIf != null && !"true".equals(varIf)) return;
- } catch (JSExn e) { throw new RuntimeException(e); }
+ } catch (JSExn e) { throw new JSElement.Exn(e); }
wrapped.out(w);
}
super(e);
List c = getChildren();
for (int i=0; i < c.size(); i++)
- if (c.get(i) instanceof XML.Element) throw new RuntimeException(
+ if (c.get(i) instanceof XML.Element) throw new JSElement.Exn(
"<"+getPrefix()+":js> tags may not have child elements");
}
Object varPut = get("put"); if (varPut != null) undeclare("put");
varIn = exec("return (" + varIn + ");");
- if (varIn == null || (varIn instanceof JSArray)) throw new RuntimeException(
+ if (varIn == null || (varIn instanceof JSArray)) throw new JSElement.Exn(
"<"+getPrefix()+":foreach> requires attribute 'in' to specify " +
"the name of a valid js array in the current scope, not in='"+varIn+"'.");
if (varPut == null) varPut = "x";
else if (!(varPut instanceof String) || get(varPut) != null)
- throw new RuntimeException(
+ throw new JSElement.Exn(
"<"+getPrefix()+":foreach> 'put' attribute requires the name of "+
"an undeclared variable, not put='"+varPut+"'.");
- if (get(varPut) != null) throw new RuntimeException(
+ if (get(varPut) != null) throw new JSElement.Exn(
"<"+getPrefix()+":foreach> has no 'put' attribute defined and the "+
"default variable 'x' already exists in the current scope.");
put(varPut, it.next());
for (int i=0; i < c.size(); i++) ((Tree.Leaf)c.get(i)).out(w);
}
- } catch (JSExn e) { throw new RuntimeException(e); }
+ } catch (JSExn e) { throw new JSElement.Exn(e); }
}
}
}
}
- public static final class Java extends JSElement {
- // TODO what exactly?
- public Java(XML.Element w) { super(w); }
- }
-
public abstract static class Scope extends JSScope {
public Scope(JSScope j) { super(j); }
public abstract void transaction(JS t);
}
+ public static class Signal extends RuntimeException {}
+ public static class ReturnSignal extends Signal { }
+ public static class RedirectSignal extends Signal {
+ protected String target;
+ public RedirectSignal(String target) { super(); this.target = target; }
+ public String getTarget() { return target; }
+ }
}