fix bug 442
[org.ibex.core.git] / src / org / ibex / Ibex.java
index 5110127..3828b17 100644 (file)
@@ -169,6 +169,10 @@ public final class Ibex extends JS.Cloneable {
                         else if (url.startsWith("https://")) return new Stream.HTTP(url);
                         else if (url.startsWith("data:")) return new Stream.ByteArray(Base64.decode(url.substring(5)), null);
                         else if (url.startsWith("utf8:")) return new Stream.ByteArray(url.substring(5).getBytes(), null);
+                        else if (url.startsWith("file:")) {
+                            // FIXME
+                            Platform.fileDialog(url.substring(5), false);
+                        }
                         throw new JSExn("invalid resource specifier " + url);
                     }
                     case "thread.sleep": sleep(JS.toInt(a)); return null;
@@ -213,7 +217,6 @@ public final class Ibex extends JS.Cloneable {
     public static void sleep(final int i) throws JSExn {
         try {
             final JS.UnpauseCallback callback = JS.pause();
-            final long currentTime = System.currentTimeMillis();
             // FEATURE use a single sleeper thread
             new Thread() { public void run() {
                 try { Thread.sleep(i); } catch (InterruptedException e) { }
@@ -301,7 +304,7 @@ public final class Ibex extends JS.Cloneable {
         }
     }
 
-    // FEATURE: move this into builtin.ibex
+    // FEATURE: move this into builtin.xwar
     public Blessing bless(JS b) { return new Ibex.Blessing((JS.Cloneable)b, this, null, null); }
     public static class Blessing extends JS.Clone {
         private Ibex ibex;
@@ -336,7 +339,8 @@ public final class Ibex extends JS.Cloneable {
         public JSScope getStatic() {
             try {
                 // FIXME background?
-                if (t == null) t = Template.buildTemplate(Stream.getInputStream(parent.get(parentkey + ".ixt")), ibex);
+                if (t == null)
+                    t = Template.buildTemplate(parentkey + ".t", Stream.getInputStream(parent.get(parentkey + ".t")), ibex);
                 return t.staticScope;
             } catch (Exception e) {
                 Log.error(this, e);
@@ -345,9 +349,10 @@ public final class Ibex extends JS.Cloneable {
         }
         public Object call(Object a, Object b, Object c, Object[] rest, int nargs) throws JSExn {
             // GROSS hack
-            if (nargs == 9999) return t;
-            if (nargs != 1) throw new JSExn("FIXME can only call with one arg");
+            if (nargs != 1 && nargs != 9999) throw new JSExn("FIXME can only call with one arg");
             getStatic();
+            if (t == null) throw new JSExn("No such template " + parentkey);
+            if (nargs == 9999) return t;
             t.apply((Box)a);
             return a;
         }