<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Recent posts to Discussion</title><link>https://sourceforge.net/p/luaj/discussion/</link><description>Recent posts to Discussion</description><atom:link href="https://sourceforge.net/p/luaj/discussion/feed.rss" rel="self"/><language>en</language><lastBuildDate>Mon, 21 Aug 2017 14:01:50 -0000</lastBuildDate><atom:link href="https://sourceforge.net/p/luaj/discussion/feed.rss" rel="self" type="application/rss+xml"/><item><title>luajc loader with tomcat</title><link>https://sourceforge.net/p/luaj/discussion/701961/thread/f65f99af/?limit=25#99d1</link><description>&lt;div class="markdown_content"&gt;&lt;p&gt;Hello!&lt;br/&gt;
Please somebody help.&lt;br/&gt;
I am trying to use luaj in my webapp with tomcat.&lt;br/&gt;
All ok!&lt;br/&gt;
But when i try to use java compilation with luajc, I have errors when i execute loadfile command&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;            env = JsePlatform.standardGlobals();
            LuaJC.install(env);
            luaFile = env.loadfile(script);
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;org.luaj.vm2.LuaError: load test2.lua: org.luaj.vm2.LuaError: load @test2.lua: java.lang.IllegalStateException: bad class gen: java.lang.ClassCastException: test2 cannot be cast to org.luaj.vm2.LuaFunction&lt;br/&gt;
    at org.luaj.vm2.LuaValue.error(Unknown Source)&lt;br/&gt;
    at org.luaj.vm2.Globals.loadfile(Unknown Source)&lt;br/&gt;
    at com.peterservice.openapi.pccm.lua.LuaEngine.innerInit(LuaEngine.java:212)&lt;br/&gt;
    at com.peterservice.openapi.pccm.lua.LuaEngine.reload(LuaEngine.java:71)&lt;/p&gt;
&lt;p&gt;My test2.lua file is elementary&lt;/p&gt;
&lt;p&gt;print("Hello world")&lt;/p&gt;
&lt;p&gt;I can not undestand what is a problem.&lt;/p&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">manaldush</dc:creator><pubDate>Mon, 21 Aug 2017 14:01:50 -0000</pubDate><guid>https://sourceforge.net2a6690a63511b8a508ed27ee6b330d0218b49840</guid></item><item><title>Lua 5.3?</title><link>https://sourceforge.net/p/luaj/discussion/701960/thread/aed72bf2/?limit=25#95f6</link><description>&lt;div class="markdown_content"&gt;&lt;p&gt;It would seem that this project is not actively maintained - much to many people's dissapointment. It still works, but I'm afraid a 5.3 update is unlikely.&lt;/p&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">James Upjohn</dc:creator><pubDate>Wed, 26 Apr 2017 01:21:09 -0000</pubDate><guid>https://sourceforge.netd7ee421a781ea3b48adca46718915fff1f82bd6d</guid></item><item><title>Lua 5.3?</title><link>https://sourceforge.net/p/luaj/discussion/701960/thread/aed72bf2/</link><description>&lt;div class="markdown_content"&gt;&lt;p&gt;Are there plans to update this lib to version 5.3 of the language spec? This would be worthwhile since Luaj seems to be the most advanced Java implementation of Lua sofar.&lt;/p&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">De Vlaam</dc:creator><pubDate>Sun, 03 Jul 2016 16:47:29 -0000</pubDate><guid>https://sourceforge.net44428d5ae927e69e32866286ea57e31b2a660591</guid></item><item><title>How to evaluate expression from android java ?</title><link>https://sourceforge.net/p/luaj/discussion/701961/thread/75bfa959/</link><description>&lt;div class="markdown_content"&gt;&lt;p&gt;Hi,&lt;/p&gt;
&lt;p&gt;i have a simple script:&lt;/p&gt;
&lt;p&gt;"var_face = 2"&lt;/p&gt;
&lt;p&gt;I didn't find out how to get the result of this expression from my java app:&lt;br/&gt;
""var_face == 3 and 100 or -1""&lt;/p&gt;
&lt;p&gt;i have started with this:&lt;br/&gt;
Globals globals = JsePlatform.standardGlobals();&lt;br/&gt;
        LuaValue chunk = globals.load(script);&lt;br/&gt;
        chunk.call();&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;    String result = chunk.call("var_face == 3 and 100 or -1").toString();

    but i'm getting "nil"
&lt;/pre&gt;&lt;/div&gt;

&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Cyril Preiss</dc:creator><pubDate>Sun, 29 May 2016 13:57:15 -0000</pubDate><guid>https://sourceforge.net31ae06e6a6c510d2405e1788b61b387a3bbb1676</guid></item><item><title>java.lang.ClassNotFoundException</title><link>https://sourceforge.net/p/luaj/discussion/701961/thread/fbf5a3eb/</link><description>&lt;div class="markdown_content"&gt;&lt;p&gt;to help someone :&lt;/p&gt;
&lt;p&gt;we modifiy LuajavaLib class to add web-app class loader&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="c1"&gt;// load classes using app loader to allow luaj to be used as an extension&lt;/span&gt;
&lt;span class="kr"&gt;protected&lt;/span&gt; &lt;span class="nx"&gt;Class&lt;/span&gt;&lt;span class="cp"&gt;&amp;lt;?&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;classForName&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;String&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nx"&gt;throws&lt;/span&gt; &lt;span class="nx"&gt;ClassNotFoundException&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;

    &lt;span class="nx"&gt;Class&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="cp"&gt;?&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;c&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;c&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;Class&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;forName&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;ClassLoader&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getSystemClassLoader&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ClassNotFoundException&lt;/span&gt; &lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;c&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;Class&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;forName&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getClass&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nx"&gt;getClassLoader&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;c&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">gmeqiminfo</dc:creator><pubDate>Mon, 29 Feb 2016 14:07:11 -0000</pubDate><guid>https://sourceforge.net03152ffb72bc981b77a53b301c9705e06f024f8c</guid></item><item><title>No more non-speaking "Attempt to call nil" messages :)</title><link>https://sourceforge.net/p/luaj/discussion/701960/thread/2dc9ab85/</link><description>&lt;div class="markdown_content"&gt;&lt;p&gt;Thank you for this help. &lt;/p&gt;
&lt;p&gt;But in our environnement we needed to modify LuaScriptEngine BindingsMetatable class and put this ack to show which &lt;strong&gt;function&lt;/strong&gt; is not defined :&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;this.rawset(LuaValue.INDEX, new TwoArgFunction() {
    public LuaValue call(LuaValue table, LuaValue key) {

        if (key.isstring()) {
            Object o = bindings.get(key.tojstring());
            if(o == null){
                return Lua.namedNil( key );
            } else {
                return toLua(o);
            }
        }
        else
            return this.rawget(key);
    }
});
&lt;/pre&gt;&lt;/div&gt;

&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">gmeqiminfo</dc:creator><pubDate>Mon, 29 Feb 2016 13:57:59 -0000</pubDate><guid>https://sourceforge.net6f30458add0fc663ea4df2bff31cf2701329e692</guid></item><item><title>How to test Luaj?</title><link>https://sourceforge.net/p/luaj/discussion/701961/thread/aed9004e/</link><description>&lt;div class="markdown_content"&gt;&lt;p&gt;I've come across the same problem. I've found that you need to download the maven ant tasks (i.e. from here: &lt;a href="http://apache.mirror.digionline.de/maven/ant-tasks/2.1.3/binaries/" rel="nofollow"&gt;http://apache.mirror.digionline.de/maven/ant-tasks/2.1.3/binaries/&lt;/a&gt; ) and place it into the lib directory for ant. It seems it downloads some dependencies through maven. Unfortunately thats not the last of it, as it will fail later saying it doesn't know the target luaj1-lib (which it can't because it isn't declared anywhere). I've got the feeling the tests aren't really up to date and propably won't work correctly anyway.&lt;/p&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">gsnerf</dc:creator><pubDate>Fri, 25 Sep 2015 07:24:33 -0000</pubDate><guid>https://sourceforge.nete932d0ba5f50bc1e84f4f82577dfb1571a8e84ec</guid></item><item><title>How to test Luaj?</title><link>https://sourceforge.net/p/luaj/discussion/701961/thread/aed9004e/</link><description>&lt;div class="markdown_content"&gt;&lt;p&gt;I have downloaded the luaj-vm code from CVS and I'm trying to run the unit tests, but I cannot get them to execute.&lt;/p&gt;
&lt;p&gt;If I run ant with no arguments it builds the jars without issue (apart from a few deprecation warnings).&lt;/p&gt;
&lt;p&gt;However, if I run:&lt;br /&gt;
ant -buildfile build-coverage.xml&lt;br /&gt;
I get the following failure message:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;andrew@ubuntu-VirtualBox:~/cvs/luaj/luaj-vm$ ant -buildfile build-coverage.xml &lt;br /&gt;
Buildfile: /home/andrew/cvs/luaj/luaj-vm/build-coverage.xml&lt;/p&gt;
&lt;p&gt;BUILD FAILED&lt;br /&gt;
/home/andrew/cvs/luaj/luaj-vm/build-coverage.xml:15: Problem: failed to create task or type antlib:org.apache.maven.artifact.ant:dependencies&lt;br /&gt;
Cause: The name is undefined.&lt;br /&gt;
Action: Check the spelling.&lt;br /&gt;
Action: Check that any custom tasks/types have been declared.&lt;br /&gt;
Action: Check that any &amp;lt;presetdef&amp;gt;/&amp;lt;macrodef&amp;gt; declarations have taken place.&lt;br /&gt;
No types or tasks have been defined in this namespace yet&lt;/p&gt;
&lt;p&gt;This appears to be an antlib declaration. &lt;br /&gt;
Action: Check that the implementing library exists in one of:&lt;br /&gt;
        -/usr/share/ant/lib&lt;br /&gt;
        -/home/andrew/.ant/lib&lt;br /&gt;
        -a directory added on the command line with the -lib argument&lt;/p&gt;
&lt;p&gt;Total time: 0 seconds&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Line 15 refers to cobertura.  I see the note about cobertura in the readme, but I'm not sure if I need to install it manually (or how to do so).&lt;/p&gt;
&lt;p&gt;I'm new to ant, so I'm probably doing something wrong.  Any help?&lt;/p&gt;
&lt;p&gt;OS: Ubuntu 14.04 LTS (desktop, 64-bit) VM.&lt;br /&gt;
JDK: 1.8.0_45&lt;br /&gt;
Ant: 1.9.3&lt;br /&gt;
Maven: 3.0.5&lt;/p&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Andrew K.</dc:creator><pubDate>Thu, 18 Jun 2015 23:32:58 -0000</pubDate><guid>https://sourceforge.net4206ba5731ef6126e75d94b006d07e4eeccd1a81</guid></item><item><title>Any possibilities to get lua call trace?</title><link>https://sourceforge.net/p/luaj/discussion/701961/thread/92469190/</link><description>&lt;div class="markdown_content"&gt;&lt;blockquote&gt;
&lt;p&gt;*tail calls are not tracked in debug information&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;It's really hard to find the culprit whenever some function fails(for e.g. rejecting nil argument)&lt;br /&gt;
Since the optional 'level' argument of error() doesn't have any effect, are there any ways(instead of hacky manual tracing) to get the lines of faulty function calls? &lt;/p&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Lukas Jonyla</dc:creator><pubDate>Sun, 03 May 2015 21:08:58 -0000</pubDate><guid>https://sourceforge.netbcbf79573f0e904f776ad3ff1c6b1f4cbba841da</guid></item><item><title>No more non-speaking "Attempt to call nil" messages :)</title><link>https://sourceforge.net/p/luaj/discussion/701960/thread/2dc9ab85/</link><description>&lt;div class="markdown_content"&gt;&lt;p&gt;Another little idea for LuaJ that I like a lot - "named nils". Don't&lt;br /&gt;
you hate those non-speaking "attempt to call nil" messages, too? =)&lt;/p&gt;
&lt;p&gt;Add to Lua.java:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;    &lt;span class="cm"&gt;/** disable for more speed */&lt;/span&gt;
    &lt;span class="n"&gt;public&lt;/span&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="n"&gt;final&lt;/span&gt; &lt;span class="n"&gt;boolean&lt;/span&gt; &lt;span class="n"&gt;useNamedNil&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="n"&gt;public&lt;/span&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="n"&gt;LuaValue&lt;/span&gt; &lt;span class="nf"&gt;namedNil&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;LuaValue&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;useNamedNil&lt;/span&gt; &lt;span class="o"&gt;?&lt;/span&gt; &lt;span class="n"&gt;new&lt;/span&gt; &lt;span class="n"&gt;NamedNil&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;NIL&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Create this class:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;package&lt;/span&gt; &lt;span class="n"&gt;org&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;luaj&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;vm2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="n"&gt;public&lt;/span&gt; &lt;span class="n"&gt;class&lt;/span&gt; &lt;span class="n"&gt;NamedNil&lt;/span&gt; &lt;span class="n"&gt;extends&lt;/span&gt; &lt;span class="n"&gt;LuaNil&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="n"&gt;public&lt;/span&gt; &lt;span class="n"&gt;LuaValue&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="n"&gt;public&lt;/span&gt; &lt;span class="nf"&gt;NamedNil&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;LuaValue&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Change 2 functions in LuaTable:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;    &lt;span class="n"&gt;public&lt;/span&gt; &lt;span class="n"&gt;LuaValue&lt;/span&gt; &lt;span class="nf"&gt;rawget&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;LuaValue&lt;/span&gt; &lt;span class="n"&gt;key&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;isinttype&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                    &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;ikey&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;toint&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
                    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;ikey&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;ikey&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;=&lt;/span&gt;&lt;span class="n"&gt;array&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;length&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                            &lt;span class="n"&gt;LuaValue&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;m_metatable&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;null&lt;/span&gt;
                                            &lt;span class="o"&gt;?&lt;/span&gt; &lt;span class="n"&gt;array&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;ikey&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;m_metatable&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;arrayget&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;array&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ikey&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
                            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="n"&gt;null&lt;/span&gt; &lt;span class="o"&gt;?&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Lua&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;namedNil&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
                    &lt;span class="p"&gt;}&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;hashget&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;key&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="n"&gt;protected&lt;/span&gt; &lt;span class="n"&gt;LuaValue&lt;/span&gt; &lt;span class="nf"&gt;hashget&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;LuaValue&lt;/span&gt; &lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;hashEntries&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;Slot&lt;/span&gt; &lt;span class="n"&gt;slot&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;hash&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="n"&gt;hashSlot&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;];&lt;/span&gt; &lt;span class="n"&gt;slot&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="n"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;slot&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;slot&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;rest&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                            &lt;span class="n"&gt;StrongSlot&lt;/span&gt; &lt;span class="n"&gt;foundSlot&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
                            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;foundSlot&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;slot&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;find&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="n"&gt;null&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                                    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;foundSlot&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
                            &lt;span class="p"&gt;}&lt;/span&gt;
                    &lt;span class="p"&gt;}&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;Lua&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;namedNil&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Change LuaValue.checkmetatag:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;    &lt;span class="n"&gt;protected&lt;/span&gt; &lt;span class="n"&gt;LuaValue&lt;/span&gt; &lt;span class="nf"&gt;checkmetatag&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;LuaValue&lt;/span&gt; &lt;span class="n"&gt;tag&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;String&lt;/span&gt; &lt;span class="n"&gt;reason&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;LuaValue&lt;/span&gt; &lt;span class="n"&gt;h&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;metatag&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tag&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;isnil&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                    &lt;span class="n"&gt;String&lt;/span&gt; &lt;span class="n"&gt;errorText&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;reason&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="kr"&gt;typename&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
                    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;this&lt;/span&gt; &lt;span class="n"&gt;instanceof&lt;/span&gt; &lt;span class="n"&gt;NamedNil&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
                            &lt;span class="n"&gt;errorText&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="s"&gt;" ("&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;NamedNil&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;this&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tojstring&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s"&gt;")"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
                    &lt;span class="n"&gt;throw&lt;/span&gt; &lt;span class="n"&gt;new&lt;/span&gt; &lt;span class="n"&gt;LuaError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;errorText&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;And, voila, when running scripts with undefined functions (let's say&lt;br /&gt;
loadURL is undefined):&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;_&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;snippetText&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="n"&gt;find&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"(http://.*)"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;create&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="err"&gt;'&lt;/span&gt;&lt;span class="n"&gt;nt&lt;/span&gt;&lt;span class="err"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;loadURL&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;title&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="err"&gt;'&lt;/span&gt;&lt;span class="n"&gt;Contents&lt;/span&gt; &lt;span class="n"&gt;of&lt;/span&gt; &lt;span class="err"&gt;'&lt;/span&gt;&lt;span class="p"&gt;..&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;..&lt;/span&gt;&lt;span class="err"&gt;'&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;for '..snippetID}&lt;/p&gt;
&lt;p&gt;...you get very nice error messages like this:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;org&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;luaj&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;vm2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;LuaError&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="mi"&gt;546&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="n"&gt;attempt&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="n"&gt;call&lt;/span&gt; &lt;span class="n"&gt;nil&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;loadURL&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Performance hit should be small when turned on - and zero when turned&lt;br /&gt;
off and HotSpot-optimized.&lt;/p&gt;
&lt;p&gt;Cheers,&lt;br /&gt;
Stefan&lt;/p&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Stefan Reich</dc:creator><pubDate>Sun, 22 Mar 2015 16:16:20 -0000</pubDate><guid>https://sourceforge.net7ee59b3ded171a2fbbb2d42a99a9a698c3e2e5c3</guid></item></channel></rss>