ソースを参照

Tables now use an empty delegate and the methods they had now are globals "table_/rawget/rawset/get/set/rawin/next/len/clear/setdelegate/get/delegate/..."

mingodad 9 年 前
コミット
6941aeae44

+ 3 - 2
SquiLu/samples/ackermann.nut

@@ -12,8 +12,9 @@ function Ack(M, N) {
 
 local n;
 
-if(vargv.len()!=0) {
-   n = vargv[0].tointeger();
+if(vargv.len() > 1) {
+   n = vargv[1];
+   n = vargv[1].tointeger();
   if(n < 1) n = 1;
 } else {   
   n = 1;

+ 1 - 1
SquiLu/samples/class-cursor-kind.nut

@@ -4,7 +4,7 @@ class CursorKind
     A CursorKind describes the kind of entity that a cursor points to.
     */
 
-    # The required BaseEnumeration declarations.
+    // The required BaseEnumeration declarations.
     _kinds = [];
     _name_map = null;
     

+ 5 - 5
SquiLu/samples/delegation.nut

@@ -15,7 +15,7 @@ function PEntity::PrintPos()
 	::print("x="+pos.x+" y="+pos.y+" z="+pos.z+"\n");	
 }
 
-function PEntity::new(name,pos)
+function PEntity::create(name,pos)
 {
 	local newentity=clone ::PEntity;
 	if(name)
@@ -34,15 +34,15 @@ PPlayer <- {
 	type="player"
 }
 
-function PPlayer::new(name,pos)
+function PPlayer::create(name,pos)
 {
     local p = clone ::PPlayer;
-	local newplayer = ::PEntity.new(name,pos);
-	newplayer.setdelegate(p);
+	local newplayer = ::PEntity.create(name,pos);
+	table_setdelegate(newplayer, p);
 	return newplayer;
 }
 
-local player=PPlayer.new("godzilla",{x=10,y=20,z=30});
+local player=PPlayer.create("godzilla",{x=10,y=20,z=30});
 
 ::print("PLAYER NAME"+player.name+"\n");
 ::print("ENTITY TYPE"+typeof player+"\n");

+ 4 - 4
SquiLu/samples/dump-har.nut

@@ -50,11 +50,11 @@ function getPath(url)
 		//print(i,ary[i]);
 		local folder = ary.slice(1, i+1).join("/");
 		local cmd = format("mkdir %s", dest_folder + folder);
-		if(!folders_made.rawget(folder, false))
+		if(!table_rawget(folders_made, folder, false))
 		{
 			print(cmd);
 			os.system(cmd);
-			folders_made.rawset(folder, true);
+			table_rawset(folders_made, folder, true);
 		}
 	}
 	local path = ary.slice(1).join("/");
@@ -88,11 +88,11 @@ function dumpContent(vhar)
 			path = path.slice(0, idx);
 		}
 		
-		local content = ventry.response.content.rawget("text", false);
+		local content = table_rawget(ventry.response.content, "text", false);
 		
 		if(content)
 		{
-			if(ventry.response.content.rawget("encoding", "") == "base64")
+			if(table_rawget(ventry.response.content, "encoding", "") == "base64")
 			{
 				content = base64.decode(content);
 			}

+ 1 - 1
SquiLu/samples/gen-class-hashtable.nut

@@ -4,7 +4,7 @@ class HashTable
     A CursorKind describes the kind of entity that a cursor points to.
     */
 
-    # The required BaseEnumeration declarations.
+    // The required BaseEnumeration declarations.
     _ht = null;
     
     constructor(int_size = 0)

+ 1 - 1
SquiLu/samples/generate-cpp-class-wrapper.nut

@@ -149,7 +149,7 @@ static SQRESULT klass_constructor(HSQUIRRELVM v, KLASS *klass, int free_on_gc)
 			}
 			//local return_type = 
 			local attr = klass.getattributes(info.name);
-			if(attr && attr.rawin("cfunc")) print("//", attr.rawget("cfunc"));
+			if(attr && table_rawin(attr, "cfunc")) print("//", table_rawget(attr, "cfunc"));
 			print("\n\treturn 0;\n}\n");
 		}
 	}

+ 1 - 1
SquiLu/samples/generators.nut

@@ -31,7 +31,7 @@ function fiboz(n)
 	{
 		local res=prev+curr;
 		prev=curr;
-		yield curr=res;
+		yield (curr=res);
 	}
 	return prev+curr;
 }

+ 1 - 1
SquiLu/samples/lexer.nut

@@ -207,7 +207,7 @@ class Lexer {
         else
         {
             // Look it up in the table of operators
-            var op = this.optable.get(c.tochar(), false);
+            var op = table_rawget(this.optable, c.tochar(), false);
             if (op)
             {
                 return {name: op, value: c, pos: this.pos++, line: this.line};

+ 2 - 2
SquiLu/samples/metamethods.nut

@@ -54,7 +54,7 @@ local base_vec={
 		::print("val = "+val+"\n")
 		if(key==100)
 		{
-			return test_field=val;
+			return (test_field=val);
 		}
 	}
 	test_field="nothing"
@@ -62,7 +62,7 @@ local base_vec={
 
 function vector(_x,_y,_z)
 {
-	return {x=_x,y=_y,z=_z }.setdelegate(base_vec); 
+	return table_setdelegate({x=_x,y=_y,z=_z }, base_vec); 
 }
 ////////////////////////////////////////////////////////////
 

+ 2 - 2
SquiLu/samples/methcall.nut

@@ -63,6 +63,6 @@ function main() {
 	print(ntoggle.value() ? "true\n" : "false\n");
 	
 }
-local start=clock();
+local start= os.clock();
 main();
-print("TIME="+(clock()-start)+"\n");
+print("TIME="+(os.clock()-start)+"\n");

+ 1 - 1
SquiLu/samples/test-bug-function-this.nut

@@ -21,7 +21,7 @@ print("assignment done",  k_member);
 function showbug(){
 	local k_member = 0;
 	local function bug(v){
-print("bug len", len());
+print("bug len", table_len(getroottable()));
 print("bug", v)
 		k_member = v;
 print("assignment done",  k_member);

+ 1 - 1
SquiLu/samples/test-duffs-device.nut

@@ -1,6 +1,6 @@
 local tbl = {len2 = function() {return "dad";}, }
 
-print(tbl.size(), tbl.len(), tbl.len2());
+print(table_size(tbl), table_len(tbl), tbl.len2());
 
 local s = "dad";
 

+ 2 - 2
SquiLu/samples/test-gumbo.nut

@@ -10,7 +10,7 @@ local input = [==[
 local document = gumbo.parse(input);
 foreach(k,v in document) print(k,v);
 //local root = assert(document.root)
-print(document.root.len());
+print(table_len(document.root));
 local root = document.root
 local head = root.children[0];
 local body = root.children[1];
@@ -42,4 +42,4 @@ foreach(k,v in head.children) print(k,v);
 foreach(k,v in head) print(k,v);
 body = root.children[1];
 foreach(k,v in body) print(k,v);
-foreach(k,v in body.children) print(k,v, v ? v.rawget("tag", "?") : "??");
+foreach(k,v in body.children) print(k,v, v ? table_rawget(v, "tag", "?") : "??");

+ 1 - 1
SquiLu/samples/test-local-constants.nut

@@ -29,8 +29,8 @@ function localF2(){
 
 
 //print(fryday);
-localF();
 print(E.b);
+localF();
 
 /*
 //local 

+ 163 - 9
SquiLu/squilu.cbp

@@ -419,7 +419,6 @@
 					<Add directory="../flu" />
 				</Compiler>
 				<Linker>
-					<Add option="-s" />
 					<Add library="pthread" />
 					<Add library="rt" />
 					<Add library="dl" />
@@ -448,15 +447,14 @@
 			</Target>
 			<Target title="Debug 64bits">
 				<Option output="bin/squilu-dbg" prefix_auto="1" extension_auto="1" />
-				<Option object_output="obj/Debug/" />
+				<Option object_output="obj/Debug-no-gui/" />
 				<Option type="1" />
 				<Option compiler="gcc" />
 				<Option parameters="test-socket-unix-server.nut" />
 				<Compiler>
-					<Add option="-O2" />
 					<Add option="-Wall" />
 					<Add option="-g" />
-					<Add option="-DNDEBUG=1" />
+					<Add option="-DNDEBUG2=1" />
 					<Add option="-DWITH_FULL_DAD_EXTRAS=1" />
 					<Add option="-D_SQ64=1" />
 					<Add option="-DCONFIG_64=1" />
@@ -552,7 +550,6 @@
 					<Add directory="../flu" />
 				</Compiler>
 				<Linker>
-					<Add option="-s" />
 					<Add library="pthread" />
 					<Add library="rt" />
 					<Add library="dl" />
@@ -597,7 +594,6 @@
 					<Add directory="../../zeromq-3.2.2/include" />
 				</Compiler>
 				<Linker>
-					<Add option="-s" />
 					<Add library="pthread" />
 					<Add library="rt" />
 					<Add library="dl" />
@@ -620,7 +616,7 @@
 					<Add option="-Wall" />
 					<Add option="-g" />
 					<Add option="-DWITH_FLTK=1" />
-					<Add option="-DNDEBUG=1" />
+					<Add option="-DNDEBUG2=1" />
 					<Add option="-DWITH_FULL_DAD_EXTRAS=1" />
 					<Add option="-DPROFILE_SQVM22=1" />
 					<Add option="-D_SQ64=1" />
@@ -721,12 +717,97 @@
 					<Add directory="../libharu/src" />
 				</Linker>
 			</Target>
+			<Target title="Debug 64bits static Library">
+				<Option output="bin/squilu-dbg" prefix_auto="1" extension_auto="1" />
+				<Option working_dir="" />
+				<Option object_output="obj/Debug/" />
+				<Option type="2" />
+				<Option compiler="gcc" />
+				<Compiler>
+					<Add option="-Wall" />
+					<Add option="-DNDEBUG2=1" />
+					<Add option="-DWITH_FULL_DAD_EXTRAS=1" />
+					<Add option="-D_SQ64=1" />
+					<Add option="-DCONFIG_64=1" />
+					<Add option="-DHAS_UNIX_DOMAIN_SOCKETS=1" />
+					<Add option="-DUSE_SIGNAL_HANDLER=1" />
+					<Add option="-DWITH_MYSQL=1" />
+					<Add option="-DWITH_POSTGRESQL=1" />
+					<Add directory="../../zeromq-3.2.2/include" />
+				</Compiler>
+				<Linker>
+					<Add library="pthread" />
+					<Add library="rt" />
+					<Add library="dl" />
+					<Add library="axtls" />
+					<Add library="mpdecimal" />
+					<Add library="discount" />
+					<Add library="fltk_z" />
+					<Add directory="../../zeromq-3.2.2" />
+					<Add directory="../fltk/lib" />
+				</Linker>
+			</Target>
+			<Target title="Temp Code FLTK 64bits">
+				<Option output="bin/squilu-tmp" prefix_auto="1" extension_auto="1" />
+				<Option working_dir="../db-api/tools" />
+				<Option object_output="obj/Debug-tmp/" />
+				<Option type="1" />
+				<Option compiler="gcc" />
+				<Option parameters="check-function-calls.nut" />
+				<Compiler>
+					<Add option="-Wall" />
+					<Add option="-g" />
+					<Add option="-DWITH_FLTK=1" />
+					<Add option="-DNDEBUG=1" />
+					<Add option="-DWITH_FULL_DAD_EXTRAS=1" />
+					<Add option="-DPROFILE_SQVM22=1" />
+					<Add option="-D_SQ64=1" />
+					<Add option="-DCONFIG_64=1" />
+					<Add option="-DHAS_UNIX_DOMAIN_SOCKETS=1" />
+					<Add option="-DUSE_SIGNAL_HANDLER=1" />
+					<Add option="-DWITH_MYSQL=1" />
+					<Add option="-DWITH_POSTGRESQL=1" />
+					<Add option="-DWITH_DNS_SD2=1" />
+					<Add option="-DSQLITE_DEBUG=1" />
+					<Add option="-DSQLITE_ENABLE_EXPLAIN_COMMENTS=1" />
+					<Add directory="../../zeromq-3.2.2/include" />
+					<Add directory="../fltk" />
+					<Add directory="../libharu/include" />
+					<Add directory="../flu" />
+				</Compiler>
+				<Linker>
+					<Add library="pthread" />
+					<Add library="rt" />
+					<Add library="dl" />
+					<Add library="fltkutils" />
+					<Add library="fltk_images" />
+					<Add library="fltk_png" />
+					<Add library="fltk_jpeg" />
+					<Add library="fltk_z" />
+					<Add library="fltk" />
+					<Add library="Xext" />
+					<Add library="Xft" />
+					<Add library="Xinerama" />
+					<Add library="mpdecimal" />
+					<Add library="hpdfs" />
+					<Add library="discount" />
+					<Add library="X11" />
+					<Add library="fontconfig" />
+					<Add library="axtls" />
+					<Add library="Xcursor" />
+					<Add library="Xfixes" />
+					<Add directory="../../zeromq-3.2.2" />
+					<Add directory="../fltk/lib" />
+					<Add directory="../flu" />
+					<Add directory="../libharu/src" />
+				</Linker>
+			</Target>
 		</Build>
 		<Compiler>
+			<Add option="-std=c++11" />
 			<Add option="-Wall" />
 			<Add option="-fno-strict-aliasing" />
-			<Add option="-fno-rtti" />
-			<Add option="-fno-exceptions" />
+			<Add option="-DSC_USE_MKSTEMP=1" />
 			<Add option="-DONLY_ASCII=1" />
 			<Add option="-DPROFILE_SQVM0=1" />
 			<Add option="-DSQ_JIT_LLVM44=1" />
@@ -769,6 +850,7 @@
 			<Add option="-DWITH_FFI=1" />
 			<Add option="-DWITH_POSTGRESQL=1" />
 			<Add option="-DWITH_LIBCLANG=1" />
+			<Add option="-DWITH_MPDECIMAL=1" />
 			<Add directory="include" />
 			<Add directory="sqstdlib" />
 			<Add directory="../myaxtls" />
@@ -809,6 +891,11 @@
 			<Option target="Release alone wince" />
 			<Option target="Release wince" />
 		</Unit>
+		<Unit filename="../SquiLu-ext/civetweb.c">
+			<Option compilerVar="CC" />
+			<Option target="Temp Code FLTK 64bits" />
+		</Unit>
+		<Unit filename="../SquiLu-ext/civetweb.h" />
 		<Unit filename="../SquiLu-ext/code_mix_prep.c">
 			<Option compilerVar="CC" />
 		</Unit>
@@ -831,6 +918,8 @@
 			<Option target="Release 64bits static Library" />
 			<Option target="Debug FLTK 64bits" />
 			<Option target="Debug FLTK 64bits asan" />
+			<Option target="Debug 64bits static Library" />
+			<Option target="Temp Code FLTK 64bits" />
 		</Unit>
 		<Unit filename="../SquiLu-ext/dynamic_library.h">
 			<Option target="Debug" />
@@ -850,6 +939,8 @@
 			<Option target="Release 64bits static Library" />
 			<Option target="Debug FLTK 64bits" />
 			<Option target="Debug FLTK 64bits asan" />
+			<Option target="Debug 64bits static Library" />
+			<Option target="Temp Code FLTK 64bits" />
 		</Unit>
 		<Unit filename="../SquiLu-ext/fpdf.cpp">
 			<Option target="Debug" />
@@ -907,6 +998,8 @@
 			<Option target="Release 64bits static Library" />
 			<Option target="Debug FLTK 64bits" />
 			<Option target="Debug FLTK 64bits asan" />
+			<Option target="Debug 64bits static Library" />
+			<Option target="Temp Code FLTK 64bits" />
 		</Unit>
 		<Unit filename="../SquiLu-ext/lua_socket.h">
 			<Option target="Debug" />
@@ -926,6 +1019,8 @@
 			<Option target="Release 64bits static Library" />
 			<Option target="Debug FLTK 64bits" />
 			<Option target="Debug FLTK 64bits asan" />
+			<Option target="Debug 64bits static Library" />
+			<Option target="Temp Code FLTK 64bits" />
 		</Unit>
 		<Unit filename="../SquiLu-ext/mongoose.c">
 			<Option compilerVar="CC" />
@@ -946,6 +1041,8 @@
 			<Option target="Release 64bits static Library" />
 			<Option target="Debug FLTK 64bits" />
 			<Option target="Debug FLTK 64bits asan" />
+			<Option target="Debug 64bits static Library" />
+			<Option target="Temp Code FLTK 64bits" />
 		</Unit>
 		<Unit filename="../SquiLu-ext/mongoose.h">
 			<Option target="Debug" />
@@ -965,6 +1062,8 @@
 			<Option target="Release 64bits static Library" />
 			<Option target="Debug FLTK 64bits" />
 			<Option target="Debug FLTK 64bits asan" />
+			<Option target="Debug 64bits static Library" />
+			<Option target="Temp Code FLTK 64bits" />
 		</Unit>
 		<Unit filename="../SquiLu-ext/pdf-font.cpp">
 			<Option target="Debug" />
@@ -984,6 +1083,8 @@
 			<Option target="Release 64bits static Library" />
 			<Option target="Debug FLTK 64bits" />
 			<Option target="Debug FLTK 64bits asan" />
+			<Option target="Debug 64bits static Library" />
+			<Option target="Temp Code FLTK 64bits" />
 		</Unit>
 		<Unit filename="../SquiLu-ext/pdf-font.h">
 			<Option target="Debug" />
@@ -1003,6 +1104,8 @@
 			<Option target="Release 64bits static Library" />
 			<Option target="Debug FLTK 64bits" />
 			<Option target="Debug FLTK 64bits asan" />
+			<Option target="Debug 64bits static Library" />
+			<Option target="Temp Code FLTK 64bits" />
 		</Unit>
 		<Unit filename="../SquiLu-ext/sq_axtls.c">
 			<Option compilerVar="CC" />
@@ -1023,6 +1126,8 @@
 			<Option target="Release 64bits static Library" />
 			<Option target="Debug FLTK 64bits" />
 			<Option target="Debug FLTK 64bits asan" />
+			<Option target="Debug 64bits static Library" />
+			<Option target="Temp Code FLTK 64bits" />
 		</Unit>
 		<Unit filename="../SquiLu-ext/sq_base64.cpp">
 			<Option target="Debug" />
@@ -1042,6 +1147,11 @@
 			<Option target="Release 64bits static Library" />
 			<Option target="Debug FLTK 64bits" />
 			<Option target="Debug FLTK 64bits asan" />
+			<Option target="Debug 64bits static Library" />
+			<Option target="Temp Code FLTK 64bits" />
+		</Unit>
+		<Unit filename="../SquiLu-ext/sq_civetweb.cpp">
+			<Option target="Temp Code FLTK 64bits" />
 		</Unit>
 		<Unit filename="../SquiLu-ext/sq_decimal.cpp">
 			<Option target="Debug" />
@@ -1060,6 +1170,8 @@
 			<Option target="Release 64bits static Library" />
 			<Option target="Debug FLTK 64bits" />
 			<Option target="Debug FLTK 64bits asan" />
+			<Option target="Debug 64bits static Library" />
+			<Option target="Temp Code FLTK 64bits" />
 		</Unit>
 		<Unit filename="../SquiLu-ext/sq_dns_sd.cpp" />
 		<Unit filename="../SquiLu-ext/sq_fastcgi.cpp">
@@ -1084,6 +1196,8 @@
 			<Option target="Release 64bits static Library" />
 			<Option target="Debug FLTK 64bits" />
 			<Option target="Debug FLTK 64bits asan" />
+			<Option target="Debug 64bits static Library" />
+			<Option target="Temp Code FLTK 64bits" />
 		</Unit>
 		<Unit filename="../SquiLu-ext/sq_fpdf.cpp">
 			<Option target="Debug" />
@@ -1123,6 +1237,8 @@
 			<Option target="Release 64bits static Library" />
 			<Option target="Debug FLTK 64bits" />
 			<Option target="Debug FLTK 64bits asan" />
+			<Option target="Debug 64bits static Library" />
+			<Option target="Temp Code FLTK 64bits" />
 		</Unit>
 		<Unit filename="../SquiLu-ext/sq_gumbo.cpp" />
 		<Unit filename="../SquiLu-ext/sq_libclang.cpp" />
@@ -1143,6 +1259,8 @@
 			<Option target="Release 64bits static Library" />
 			<Option target="Debug FLTK 64bits" />
 			<Option target="Debug FLTK 64bits asan" />
+			<Option target="Debug 64bits static Library" />
+			<Option target="Temp Code FLTK 64bits" />
 		</Unit>
 		<Unit filename="../SquiLu-ext/sq_mix.cpp">
 			<Option target="Debug" />
@@ -1162,6 +1280,8 @@
 			<Option target="Release 64bits static Library" />
 			<Option target="Debug FLTK 64bits" />
 			<Option target="Debug FLTK 64bits asan" />
+			<Option target="Debug 64bits static Library" />
+			<Option target="Temp Code FLTK 64bits" />
 		</Unit>
 		<Unit filename="../SquiLu-ext/sq_mongoose.cpp">
 			<Option target="Debug" />
@@ -1181,6 +1301,8 @@
 			<Option target="Release 64bits static Library" />
 			<Option target="Debug FLTK 64bits" />
 			<Option target="Debug FLTK 64bits asan" />
+			<Option target="Debug 64bits static Library" />
+			<Option target="Temp Code FLTK 64bits" />
 		</Unit>
 		<Unit filename="../SquiLu-ext/sq_mysql.cpp" />
 		<Unit filename="../SquiLu-ext/sq_openssl.cpp">
@@ -1203,6 +1325,8 @@
 			<Option target="Release 64bits static Library" />
 			<Option target="Debug FLTK 64bits" />
 			<Option target="Debug FLTK 64bits asan" />
+			<Option target="Debug 64bits static Library" />
+			<Option target="Temp Code FLTK 64bits" />
 		</Unit>
 		<Unit filename="../SquiLu-ext/sq_postgresql.cpp">
 			<Option target="Debug" />
@@ -1221,6 +1345,8 @@
 			<Option target="Release 64bits static Library" />
 			<Option target="Debug FLTK 64bits" />
 			<Option target="Debug FLTK 64bits asan" />
+			<Option target="Debug 64bits static Library" />
+			<Option target="Temp Code FLTK 64bits" />
 		</Unit>
 		<Unit filename="../SquiLu-ext/sq_rs232.c">
 			<Option compilerVar="CC" />
@@ -1241,6 +1367,8 @@
 			<Option target="Release 64bits static Library" />
 			<Option target="Debug FLTK 64bits" />
 			<Option target="Debug FLTK 64bits asan" />
+			<Option target="Debug 64bits static Library" />
+			<Option target="Temp Code FLTK 64bits" />
 		</Unit>
 		<Unit filename="../SquiLu-ext/sq_slave_vm.cpp">
 			<Option target="Debug" />
@@ -1260,6 +1388,8 @@
 			<Option target="Release 64bits static Library" />
 			<Option target="Debug FLTK 64bits" />
 			<Option target="Debug FLTK 64bits asan" />
+			<Option target="Debug 64bits static Library" />
+			<Option target="Temp Code FLTK 64bits" />
 		</Unit>
 		<Unit filename="../SquiLu-ext/sq_socket.cpp">
 			<Option target="Debug" />
@@ -1279,6 +1409,8 @@
 			<Option target="Release 64bits static Library" />
 			<Option target="Debug FLTK 64bits" />
 			<Option target="Debug FLTK 64bits asan" />
+			<Option target="Debug 64bits static Library" />
+			<Option target="Temp Code FLTK 64bits" />
 		</Unit>
 		<Unit filename="../SquiLu-ext/sq_sqlite3.cpp">
 			<Option target="Debug" />
@@ -1298,6 +1430,8 @@
 			<Option target="Release 64bits static Library" />
 			<Option target="Debug FLTK 64bits" />
 			<Option target="Debug FLTK 64bits asan" />
+			<Option target="Debug 64bits static Library" />
+			<Option target="Temp Code FLTK 64bits" />
 		</Unit>
 		<Unit filename="../SquiLu-ext/sq_sqlite3.h" />
 		<Unit filename="../SquiLu-ext/sq_sys.cpp">
@@ -1321,6 +1455,8 @@
 			<Option target="Release 64bits static Library" />
 			<Option target="Debug FLTK 64bits" />
 			<Option target="Debug FLTK 64bits asan" />
+			<Option target="Debug 64bits static Library" />
+			<Option target="Temp Code FLTK 64bits" />
 		</Unit>
 		<Unit filename="../SquiLu-ext/sq_unql.cpp" />
 		<Unit filename="../SquiLu-ext/sq_zlib.cpp">
@@ -1341,6 +1477,8 @@
 			<Option target="Release 64bits static Library" />
 			<Option target="Debug FLTK 64bits" />
 			<Option target="Debug FLTK 64bits asan" />
+			<Option target="Debug 64bits static Library" />
+			<Option target="Temp Code FLTK 64bits" />
 		</Unit>
 		<Unit filename="../SquiLu-ext/sqlite3.c">
 			<Option compilerVar="CC" />
@@ -1361,6 +1499,8 @@
 			<Option target="Release 64bits static Library" />
 			<Option target="Debug FLTK 64bits" />
 			<Option target="Debug FLTK 64bits asan" />
+			<Option target="Debug 64bits static Library" />
+			<Option target="Temp Code FLTK 64bits" />
 		</Unit>
 		<Unit filename="../SquiLu-ext/sqlite3.h">
 			<Option target="Debug" />
@@ -1380,6 +1520,8 @@
 			<Option target="Release 64bits static Library" />
 			<Option target="Debug FLTK 64bits" />
 			<Option target="Debug FLTK 64bits asan" />
+			<Option target="Debug 64bits static Library" />
+			<Option target="Temp Code FLTK 64bits" />
 		</Unit>
 		<Unit filename="../SquiLu-ext/sqmodule.h">
 			<Option target="Debug" />
@@ -1399,6 +1541,8 @@
 			<Option target="Release 64bits static Library" />
 			<Option target="Debug FLTK 64bits" />
 			<Option target="Debug FLTK 64bits asan" />
+			<Option target="Debug 64bits static Library" />
+			<Option target="Temp Code FLTK 64bits" />
 		</Unit>
 		<Unit filename="../SquiLu-ext/sqratimport.cpp">
 			<Option target="Debug" />
@@ -1418,6 +1562,8 @@
 			<Option target="Release 64bits static Library" />
 			<Option target="Debug FLTK 64bits" />
 			<Option target="Debug FLTK 64bits asan" />
+			<Option target="Debug 64bits static Library" />
+			<Option target="Temp Code FLTK 64bits" />
 		</Unit>
 		<Unit filename="../SquiLu-ext/sqratimport.h">
 			<Option target="Debug" />
@@ -1437,6 +1583,8 @@
 			<Option target="Release 64bits static Library" />
 			<Option target="Debug FLTK 64bits" />
 			<Option target="Debug FLTK 64bits asan" />
+			<Option target="Debug 64bits static Library" />
+			<Option target="Temp Code FLTK 64bits" />
 		</Unit>
 		<Unit filename="../SquiLu-ext/tinyxml2.cpp">
 			<Option target="Debug" />
@@ -1456,6 +1604,8 @@
 			<Option target="Release 64bits static Library" />
 			<Option target="Debug FLTK 64bits" />
 			<Option target="Debug FLTK 64bits asan" />
+			<Option target="Debug 64bits static Library" />
+			<Option target="Temp Code FLTK 64bits" />
 		</Unit>
 		<Unit filename="../SquiLu-ext/tinyxml2.h">
 			<Option target="Debug" />
@@ -1475,6 +1625,8 @@
 			<Option target="Release 64bits static Library" />
 			<Option target="Debug FLTK 64bits" />
 			<Option target="Debug FLTK 64bits asan" />
+			<Option target="Debug 64bits static Library" />
+			<Option target="Temp Code FLTK 64bits" />
 		</Unit>
 		<Unit filename="dadbiz.rc">
 			<Option compilerVar="WINDRES" />
@@ -1488,6 +1640,7 @@
 		<Unit filename="include/sqstdmath.h" />
 		<Unit filename="include/sqstdstring.h" />
 		<Unit filename="include/sqstdsystem.h" />
+		<Unit filename="include/squilu.hpp" />
 		<Unit filename="include/squirrel.h" />
 		<Unit filename="sq/sq.c">
 			<Option compilerVar="CC" />
@@ -1508,6 +1661,7 @@
 			<Option target="Release FLTK 64bits Computed Gotos" />
 			<Option target="Debug FLTK 64bits" />
 			<Option target="Debug FLTK 64bits asan" />
+			<Option target="Temp Code FLTK 64bits" />
 		</Unit>
 		<Unit filename="sqstdlib/sqstdaux.cpp" />
 		<Unit filename="sqstdlib/sqstdblob.cpp" />

+ 96 - 2
SquiLu/squirrel/sqbaselib.cpp

@@ -362,6 +362,17 @@ static SQRESULT base_type(HSQUIRRELVM v)
 	return 1;
 }
 
+static SQRESULT base_try_tostring(HSQUIRRELVM v)
+{
+    SQRESULT rc = SQ_SUCCEEDED(sq_tostring(v,2))?1:SQ_ERROR;
+    if( (rc == SQ_ERROR) && (sq_gettop(v) > 2) )
+    {
+        sq_push(v, 3); //copy default to top
+        return 1;
+    }
+	return rc;
+}
+
 static SQRESULT base_callee(HSQUIRRELVM v)
 {
 	if(v->_callsstacksize > 1)
@@ -406,11 +417,30 @@ static SQRESULT bf_table_rawexists(HSQUIRRELVM v)
 	return 1;
 }
 
+static SQRESULT bf_table_set(HSQUIRRELVM v)
+{
+	return sq_set(v,-3);
+}
+
 static SQRESULT bf_table_rawset(HSQUIRRELVM v)
 {
 	return sq_rawset(v,-3);
 }
 
+static SQRESULT bf_table_get(HSQUIRRELVM v)
+{
+    switch(sq_gettop(v)){
+        case 3: return SQ_SUCCEEDED(sq_get(v,-2))?1:SQ_ERROR;break;
+        case 4: {
+            sq_push(v, 3); //copy key to top
+            sq_get(v,-4); //if it fail pop the key and default value is on top
+            return 1;
+        }
+        break;
+    }
+    return sq_throwerror(v, _SC("invalid number of parameters"));
+}
+
 static SQRESULT bf_table_rawget(HSQUIRRELVM v)
 {
     switch(sq_gettop(v)){
@@ -436,6 +466,54 @@ static SQRESULT bf_table_len(HSQUIRRELVM v)
 	return 1;
 }
 
+static SQRESULT bf_table_weakref(HSQUIRRELVM v)
+{
+	sq_weakref(v,2);
+	return 1;
+}
+
+static SQRESULT bf_table_tostring(HSQUIRRELVM v)
+{
+	if(SQ_FAILED(sq_tostring(v,2)))
+		return SQ_ERROR;
+	return 1;
+}
+
+static SQRESULT bf_table_setdelegate(HSQUIRRELVM v)
+{
+	if(SQ_FAILED(sq_setdelegate(v,-2)))
+		return SQ_ERROR;
+	sq_push(v,-1); // -1 because sq_setdelegate pops 1
+	return 1;
+}
+
+static SQRESULT bf_table_getdelegate(HSQUIRRELVM v)
+{
+	return SQ_SUCCEEDED(sq_getdelegate(v,2))?1:SQ_ERROR;
+}
+
+static SQRESULT bf_table_getdelegate_squirrel(HSQUIRRELVM v)
+{
+    SQSharedState *ss = _ss(v);
+    v->Push(ss->_table_default_delegate_squirrel);
+	return 1;
+}
+
+static SQRESULT bf_table_create(HSQUIRRELVM v)
+{
+    if(sq_gettop(v) > 1)
+    {
+        SQInteger capacity;
+        sq_getinteger(v, 2, &capacity);
+        sq_newtableex(v, capacity);
+    }
+    else
+    {
+        sq_newtable(v);
+    }
+	return 1;
+}
+
 static SQRegFunction base_funcs[]={
 	//generic
 	{_SC("setatexithandler"),base_setatexithandler,2, _SC(".c")},
@@ -472,12 +550,23 @@ static SQRegFunction base_funcs[]={
 	{_SC("check_delayed_release_hooks"),base_check_delayed_release_hooks,-1, _SC(".b")},
 	{_SC("call_delayed_release_hooks"),base_call_delayed_release_hooks,1, NULL},
 #endif
+	{_SC("try_tostring"),base_try_tostring,-2, _SC("..s")},
+	{_SC("table_create"),bf_table_create,-1, _SC(".i")},
+	{_SC("table_new"),bf_table_create,-1, _SC(".i")},
+	{_SC("table_len"),bf_table_len,2, _SC(".t")},
+	{_SC("table_size"),bf_table_len,2, _SC(".t")},
+	{_SC("table_get"),bf_table_get,-3, _SC(".t.")},
 	{_SC("table_rawget"),bf_table_rawget,-3, _SC(".t.")},
+	{_SC("table_set"),bf_table_set,4, _SC(".t..")},
 	{_SC("table_rawset"),bf_table_rawset,4, _SC(".t..")},
 	{_SC("table_rawdelete"),bf_table_rawdelete,3, _SC(".t.")},
 	{_SC("table_rawin"),bf_table_rawexists,3, _SC(".t.")},
-	{_SC("table_len"),bf_table_len,2, _SC(".t")},
+	{_SC("table_weakref"),bf_table_weakref,2, _SC(".t")},
+	{_SC("table_tostring"),bf_table_tostring,2, _SC(".t")},
 	{_SC("table_clear"),bf_table_clear,2, _SC(".t")},
+	{_SC("table_setdelegate"),bf_table_setdelegate,3, _SC(".t t|o")},
+	{_SC("table_getdelegate"),bf_table_getdelegate,2, _SC(".t")},
+	{_SC("table_getdelegate_squirrel"),bf_table_getdelegate_squirrel,1, _SC(".")},
 	{0,0}
 };
 
@@ -670,7 +759,7 @@ static SQRESULT table_getdelegate(HSQUIRRELVM v)
 	return SQ_SUCCEEDED(sq_getdelegate(v,-1))?1:SQ_ERROR;
 }
 
-SQRegFunction SQSharedState::_table_default_delegate_funcz[]={
+SQRegFunction SQSharedState::_table_default_delegate_squirrel_funcz[]={
 	{_SC("len"),default_delegate_len,1, _SC("t")},
 	{_SC("size"),default_delegate_len,1, _SC("t")},
 	{_SC("get"),container_get,-2, _SC("t")},
@@ -686,6 +775,10 @@ SQRegFunction SQSharedState::_table_default_delegate_funcz[]={
 	{0,0}
 };
 
+SQRegFunction SQSharedState::_table_default_delegate_funcz[]={
+	{0,0}
+};
+
 //ARRAY DEFAULT DELEGATE///////////////////////////////////////
 
 static SQRESULT array_append(HSQUIRRELVM v)
@@ -2358,3 +2451,4 @@ SQRegFunction SQSharedState::_weakref_default_delegate_funcz[] = {
 	{0,0}
 };
 
+

+ 154 - 152
SquiLu/squirrel/sqstate.h

@@ -1,157 +1,159 @@
-/*	see copyright notice in squirrel.h */
-#ifndef _SQSTATE_H_
-#define _SQSTATE_H_
-
-#include "squtils.h"
-#include "sqobject.h"
-struct SQString;
-struct SQTable;
-//max number of character for a printed number
-#define NUMBER_MAX_CHAR 50
-
-struct SQStringTable
-{
-	SQStringTable(SQSharedState*ss);
-	~SQStringTable();
-	SQString *Add(const SQChar *,SQInteger len);
-	SQString *Add(SQString *strBuf);
-	SQString *NewStrBuf(SQInteger len);
-	void Remove(SQString *);
-private:
-    SQString *Contains(const SQChar *news, SQInteger &len, SQHash &newhash, SQHash &h);
-	SQString *Add(SQString *strBuf, SQHash newhash, SQHash h);
-	void Resize(SQInteger size);
-	void AllocNodes(SQInteger size);
-	SQString **_strings;
-	SQUnsignedInteger _numofslots;
-	SQUnsignedInteger _slotused;
-	SQSharedState *_sharedstate;
-};
-
-struct RefTable {
-	struct RefNode {
-		SQObjectPtr obj;
-		SQUnsignedInteger refs;
-		struct RefNode *next;
-	};
-	RefTable();
-	~RefTable();
-	void AddRef(SQObject &obj);
-	SQBool Release(SQObject &obj);
-	SQUnsignedInteger GetRefCount(SQObject &obj);
-#ifndef NO_GARBAGE_COLLECTOR
-	void Mark(SQCollectable **chain);
-#endif
-	void Finalize();
-private:
-	RefNode *Get(SQObject &obj,SQHash &mainpos,RefNode **prev,bool add);
-	RefNode *Add(SQHash mainpos,SQObject &obj);
-	void Resize(SQUnsignedInteger size);
-	void AllocNodes(SQUnsignedInteger size);
-	SQUnsignedInteger _numofslots;
-	SQUnsignedInteger _slotused;
-	RefNode *_nodes;
-	RefNode *_freelist;
-	RefNode **_buckets;
-};
-
-#define ADD_STRING(ss,str,len) ss->_stringtable->Add(str,len)
-#define REMOVE_STRING(ss,bstr) ss->_stringtable->Remove(bstr)
-
-struct SQObjectPtr;
-
+/*	see copyright notice in squirrel.h */
+#ifndef _SQSTATE_H_
+#define _SQSTATE_H_
+
+#include "squtils.h"
+#include "sqobject.h"
+struct SQString;
+struct SQTable;
+//max number of character for a printed number
+#define NUMBER_MAX_CHAR 50
+
+struct SQStringTable
+{
+	SQStringTable(SQSharedState*ss);
+	~SQStringTable();
+	SQString *Add(const SQChar *,SQInteger len);
+	SQString *Add(SQString *strBuf);
+	SQString *NewStrBuf(SQInteger len);
+	void Remove(SQString *);
+private:
+    SQString *Contains(const SQChar *news, SQInteger &len, SQHash &newhash, SQHash &h);
+	SQString *Add(SQString *strBuf, SQHash newhash, SQHash h);
+	void Resize(SQInteger size);
+	void AllocNodes(SQInteger size);
+	SQString **_strings;
+	SQUnsignedInteger _numofslots;
+	SQUnsignedInteger _slotused;
+	SQSharedState *_sharedstate;
+};
+
+struct RefTable {
+	struct RefNode {
+		SQObjectPtr obj;
+		SQUnsignedInteger refs;
+		struct RefNode *next;
+	};
+	RefTable();
+	~RefTable();
+	void AddRef(SQObject &obj);
+	SQBool Release(SQObject &obj);
+	SQUnsignedInteger GetRefCount(SQObject &obj);
+#ifndef NO_GARBAGE_COLLECTOR
+	void Mark(SQCollectable **chain);
+#endif
+	void Finalize();
+private:
+	RefNode *Get(SQObject &obj,SQHash &mainpos,RefNode **prev,bool add);
+	RefNode *Add(SQHash mainpos,SQObject &obj);
+	void Resize(SQUnsignedInteger size);
+	void AllocNodes(SQUnsignedInteger size);
+	SQUnsignedInteger _numofslots;
+	SQUnsignedInteger _slotused;
+	RefNode *_nodes;
+	RefNode *_freelist;
+	RefNode **_buckets;
+};
+
+#define ADD_STRING(ss,str,len) ss->_stringtable->Add(str,len)
+#define REMOVE_STRING(ss,bstr) ss->_stringtable->Remove(bstr)
+
+struct SQObjectPtr;
+
 struct SQDelayedReleseHook {
     SQRELEASEHOOK hook;
     SQUserPointer ptr;
     SQInteger size;
-};
-
-struct SQSharedState
-{
-	SQSharedState();
-	~SQSharedState();
-	void Init();
-public:
-	SQChar* GetScratchPad(SQInteger size);
-	SQInteger GetMetaMethodIdxByName(const SQObjectPtr &name);
-#ifndef NO_GARBAGE_COLLECTOR
-	SQInteger CollectGarbage(SQVM *vm);
-	void RunMark(SQVM *vm,SQCollectable **tchain);
-	SQInteger ResurrectUnreachable(SQVM *vm);
-	static void MarkObject(SQObjectPtr &o,SQCollectable **chain);
-#endif
-	SQObjectPtrVec *_metamethods;
-	SQObjectPtr _metamethodsmap;
-	SQObjectPtrVec *_systemstrings;
-	SQObjectPtrVec *_types;
-	SQStringTable *_stringtable;
-	RefTable _refs_table;
-	SQObjectPtr _registry;
-	SQObjectPtr _consts;
-	SQObjectPtr _constructoridx;
-	SQObjectPtr _destructoridx;
-#ifndef NO_GARBAGE_COLLECTOR
-	SQCollectable *_gc_chain;
-#endif
-    void AddDelayedReleaseHook(SQRELEASEHOOK hook, SQUserPointer ptr, SQInteger size);
-    void CallDelayedReleaseHooks(SQVM *vm, int count=0);
-	SQObjectPtr _root_vm;
-	SQObjectPtr _table_default_delegate;
-	static SQRegFunction _table_default_delegate_funcz[];
-	SQObjectPtr _array_default_delegate;
-	static SQRegFunction _array_default_delegate_funcz[];
-	SQObjectPtr _string_default_delegate;
-	static SQRegFunction _string_default_delegate_funcz[];
-	SQObjectPtr _number_default_delegate;
-	static SQRegFunction _number_default_delegate_funcz[];
-	SQObjectPtr _generator_default_delegate;
-	static SQRegFunction _generator_default_delegate_funcz[];
-	SQObjectPtr _closure_default_delegate;
-	static SQRegFunction _closure_default_delegate_funcz[];
-	SQObjectPtr _thread_default_delegate;
-	static SQRegFunction _thread_default_delegate_funcz[];
-	SQObjectPtr _class_default_delegate;
-	static SQRegFunction _class_default_delegate_funcz[];
-	SQObjectPtr _instance_default_delegate;
-	static SQRegFunction _instance_default_delegate_funcz[];
-	SQObjectPtr _weakref_default_delegate;
-	static SQRegFunction _weakref_default_delegate_funcz[];
-
-	SQCOMPILERERROR _compilererrorhandler;
-	SQPRINTFUNCTION _printfunc;
-	SQPRINTFUNCTION _errorfunc;
-	bool _debuginfo;
-	bool _notifyallexceptions;
-private:
-    bool _already_in_CallDelayedReleaseHooks;
+};
+
+struct SQSharedState
+{
+	SQSharedState();
+	~SQSharedState();
+	void Init();
+public:
+	SQChar* GetScratchPad(SQInteger size);
+	SQInteger GetMetaMethodIdxByName(const SQObjectPtr &name);
+#ifndef NO_GARBAGE_COLLECTOR
+	SQInteger CollectGarbage(SQVM *vm);
+	void RunMark(SQVM *vm,SQCollectable **tchain);
+	SQInteger ResurrectUnreachable(SQVM *vm);
+	static void MarkObject(SQObjectPtr &o,SQCollectable **chain);
+#endif
+	SQObjectPtrVec *_metamethods;
+	SQObjectPtr _metamethodsmap;
+	SQObjectPtrVec *_systemstrings;
+	SQObjectPtrVec *_types;
+	SQStringTable *_stringtable;
+	RefTable _refs_table;
+	SQObjectPtr _registry;
+	SQObjectPtr _consts;
+	SQObjectPtr _constructoridx;
+	SQObjectPtr _destructoridx;
+#ifndef NO_GARBAGE_COLLECTOR
+	SQCollectable *_gc_chain;
+#endif
+    void AddDelayedReleaseHook(SQRELEASEHOOK hook, SQUserPointer ptr, SQInteger size);
+    void CallDelayedReleaseHooks(SQVM *vm, int count=0);
+	SQObjectPtr _root_vm;
+	SQObjectPtr _table_default_delegate_squirrel;
+	static SQRegFunction _table_default_delegate_squirrel_funcz[];
+	SQObjectPtr _table_default_delegate;
+	static SQRegFunction _table_default_delegate_funcz[];
+	SQObjectPtr _array_default_delegate;
+	static SQRegFunction _array_default_delegate_funcz[];
+	SQObjectPtr _string_default_delegate;
+	static SQRegFunction _string_default_delegate_funcz[];
+	SQObjectPtr _number_default_delegate;
+	static SQRegFunction _number_default_delegate_funcz[];
+	SQObjectPtr _generator_default_delegate;
+	static SQRegFunction _generator_default_delegate_funcz[];
+	SQObjectPtr _closure_default_delegate;
+	static SQRegFunction _closure_default_delegate_funcz[];
+	SQObjectPtr _thread_default_delegate;
+	static SQRegFunction _thread_default_delegate_funcz[];
+	SQObjectPtr _class_default_delegate;
+	static SQRegFunction _class_default_delegate_funcz[];
+	SQObjectPtr _instance_default_delegate;
+	static SQRegFunction _instance_default_delegate_funcz[];
+	SQObjectPtr _weakref_default_delegate;
+	static SQRegFunction _weakref_default_delegate_funcz[];
+
+	SQCOMPILERERROR _compilererrorhandler;
+	SQPRINTFUNCTION _printfunc;
+	SQPRINTFUNCTION _errorfunc;
+	bool _debuginfo;
+	bool _notifyallexceptions;
+private:
+    bool _already_in_CallDelayedReleaseHooks;
     sqvector<SQDelayedReleseHook> _delayed_release_hook;
-	SQChar *_scratchpad;
-	SQInteger _scratchpadsize;
-};
-
-#define _sp(s) (_sharedstate->GetScratchPad(s))
-#define _spval (_sharedstate->GetScratchPad(-1))
-
-#define _table_ddel		_table(_sharedstate->_table_default_delegate)
-#define _array_ddel		_table(_sharedstate->_array_default_delegate)
-#define _string_ddel	_table(_sharedstate->_string_default_delegate)
-#define _number_ddel	_table(_sharedstate->_number_default_delegate)
-#define _generator_ddel	_table(_sharedstate->_generator_default_delegate)
-#define _closure_ddel	_table(_sharedstate->_closure_default_delegate)
-#define _thread_ddel	_table(_sharedstate->_thread_default_delegate)
-#define _class_ddel		_table(_sharedstate->_class_default_delegate)
-#define _instance_ddel	_table(_sharedstate->_instance_default_delegate)
-#define _weakref_ddel	_table(_sharedstate->_weakref_default_delegate)
-
-#ifdef SQUNICODE //rsl REAL STRING LEN
-#define rsl(l) ((l)<<1)
-#else
-#define rsl(l) (l)
-#endif
-
-//extern SQObjectPtr _null_;
-
-bool CompileTypemask(SQIntVec &res,const SQChar *typemask);
-
-
-#endif //_SQSTATE_H_
+	SQChar *_scratchpad;
+	SQInteger _scratchpadsize;
+};
+
+#define _sp(s) (_sharedstate->GetScratchPad(s))
+#define _spval (_sharedstate->GetScratchPad(-1))
+
+#define _table_ddel		_table(_sharedstate->_table_default_delegate)
+#define _array_ddel		_table(_sharedstate->_array_default_delegate)
+#define _string_ddel	_table(_sharedstate->_string_default_delegate)
+#define _number_ddel	_table(_sharedstate->_number_default_delegate)
+#define _generator_ddel	_table(_sharedstate->_generator_default_delegate)
+#define _closure_ddel	_table(_sharedstate->_closure_default_delegate)
+#define _thread_ddel	_table(_sharedstate->_thread_default_delegate)
+#define _class_ddel		_table(_sharedstate->_class_default_delegate)
+#define _instance_ddel	_table(_sharedstate->_instance_default_delegate)
+#define _weakref_ddel	_table(_sharedstate->_weakref_default_delegate)
+
+#ifdef SQUNICODE //rsl REAL STRING LEN
+#define rsl(l) ((l)<<1)
+#else
+#define rsl(l) (l)
+#endif
+
+//extern SQObjectPtr _null_;
+
+bool CompileTypemask(SQIntVec &res,const SQChar *typemask);
+
+
+#endif //_SQSTATE_H_