Mercurial Hosting > luan
changeset 626:53a50c70c5e2
add Luan.assert_function() and Http.run_later()
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Sun, 17 Jan 2016 06:19:46 -0700 |
parents | a3c1e11fb6aa |
children | a98812908fbc |
files | core/src/luan/modules/BasicLuan.java core/src/luan/modules/Luan.luan http/src/luan/modules/http/Http.luan http/src/luan/modules/http/HttpServicer.java website/src/manual.html.luan |
diffstat | 5 files changed, 49 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/core/src/luan/modules/BasicLuan.java Tue Jan 12 23:52:56 2016 -0700 +++ b/core/src/luan/modules/BasicLuan.java Sun Jan 17 06:19:46 2016 -0700 @@ -157,6 +157,11 @@ return v; } + public static LuanFunction assert_function(LuanState luan,LuanFunction v) throws LuanException { + Utils.checkNotNull(luan,v); + return v; + } + public static LuanFunction range(LuanState luan,final double from,final double to,Double stepV) throws LuanException { final double step = stepV==null ? 1.0 : stepV; if( step == 0.0 )
--- a/core/src/luan/modules/Luan.luan Tue Jan 12 23:52:56 2016 -0700 +++ b/core/src/luan/modules/Luan.luan Sun Jan 17 06:19:46 2016 -0700 @@ -5,6 +5,9 @@ M.assert_binary = BasicLuan.assert_binary M.assert_boolean = BasicLuan.assert_boolean +M.assert_function = BasicLuan.assert_function +M.assert_integer = BasicLuan.assert_integer +M.assert_long = BasicLuan.assert_long M.assert_number = BasicLuan.assert_number M.assert_string = BasicLuan.assert_string M.assert_table = BasicLuan.assert_table
--- a/http/src/luan/modules/http/Http.luan Tue Jan 12 23:52:56 2016 -0700 +++ b/http/src/luan/modules/http/Http.luan Sun Jan 17 06:19:46 2016 -0700 @@ -164,4 +164,6 @@ end end +M.run_later = HttpServicer.run_later + return M
--- a/http/src/luan/modules/http/HttpServicer.java Tue Jan 12 23:52:56 2016 -0700 +++ b/http/src/luan/modules/http/HttpServicer.java Sun Jan 17 06:19:46 2016 -0700 @@ -11,6 +11,8 @@ import java.util.Arrays; import java.util.Iterator; import java.util.Enumeration; +import java.util.concurrent.Executor; +import java.util.concurrent.Executors; import javax.servlet.ServletOutputStream; import javax.servlet.ServletException; import javax.servlet.http.Cookie; @@ -157,6 +159,7 @@ module.rawPut("response",responseTbl); fn.call(luan); + handle_run_later(luan); return true; } @@ -256,4 +259,34 @@ } } + + + private static String RUN_LATER_KEY = "Http.run_later"; + private static final Executor exec = Executors.newSingleThreadExecutor(); + + public static void run_later(final LuanState luan,final LuanFunction fn,final Object... args) { + List list = (List)luan.registry().get(RUN_LATER_KEY); + if( list == null ) { + list = new ArrayList(); + luan.registry().put(RUN_LATER_KEY,list); + } + list.add( + new Runnable(){public void run() { + try { + fn.call(luan,args); + } catch(LuanException e) { + e.printStackTrace(); + } + }} + ); + } + + private static void handle_run_later(LuanState luan) { + List list = (List)luan.registry().get(RUN_LATER_KEY); + if( list==null ) + return; + for( Object obj : list ) { + exec.execute((Runnable)obj); + } + } }
--- a/website/src/manual.html.luan Tue Jan 12 23:52:56 2016 -0700 +++ b/website/src/manual.html.luan Sun Jan 17 06:19:46 2016 -0700 @@ -1867,6 +1867,12 @@ Like <a href="#Luan.assert_binary"><code>assert_binary</code></a> but for type <code>boolean</code>. +<h4 heading><a name="Luan.assert_function"><code>Luan.assert_function (v)</code></a></h4> + +<p> +Like <a href="#Luan.assert_binary"><code>assert_binary</code></a> but for type <code>function</code>. + + <h4 heading><a name="Luan.assert_integer"><code>Luan.assert_integer (v)</code></a></h4> <p>