rua 0.3.5-mswin32 → 0.3.7-mswin32
Sign up to get free protection for your applications and to get access to all the features.
- data/README.txt +6 -1
- data/ext/rua.c +79 -12
- data/lib/i386-mswin32/rua.so +0 -0
- metadata +41 -34
data/README.txt
CHANGED
@@ -24,7 +24,10 @@ http://storehouse.sakura.ne.jp/rua/
|
|
24
24
|
|
25
25
|
require 'rua'
|
26
26
|
|
27
|
-
class MyClass
|
27
|
+
class MyClass
|
28
|
+
def val=(v); @val = v; end
|
29
|
+
def val; @val; end
|
30
|
+
end
|
28
31
|
|
29
32
|
rua = Rua.new(:all)
|
30
33
|
#rua.external_charset = Rua::SJIS
|
@@ -60,6 +63,8 @@ http://storehouse.sakura.ne.jp/rua/
|
|
60
63
|
err()
|
61
64
|
print(Time.new().to_s())
|
62
65
|
my_obj = MyClass.new()
|
66
|
+
my_obj.val = 'my_obj.val'
|
67
|
+
print(my_obj.val())
|
63
68
|
|
64
69
|
f = function()
|
65
70
|
print('f() called.')
|
data/ext/rua.c
CHANGED
@@ -9,6 +9,7 @@ __declspec(dllexport) void Init_rua(void);
|
|
9
9
|
#include <string.h>
|
10
10
|
#include <malloc.h>
|
11
11
|
#include <errno.h>
|
12
|
+
#include <stdarg.h>
|
12
13
|
|
13
14
|
#include "ruby.h"
|
14
15
|
|
@@ -20,7 +21,7 @@ __declspec(dllexport) void Init_rua(void);
|
|
20
21
|
|
21
22
|
#include "rua.h"
|
22
23
|
|
23
|
-
#define VERSION "0.3.
|
24
|
+
#define VERSION "0.3.7"
|
24
25
|
#define REF_RBOBJ "self"
|
25
26
|
|
26
27
|
#define ICONV_JIS "ISO-2022-JP"
|
@@ -978,7 +979,7 @@ static void rua_pushrbval(lua_State *L, VALUE rbval, struct rua_state *R) {
|
|
978
979
|
lua_pushlightuserdata(L, (void *) rbval);
|
979
980
|
lua_pushlightuserdata(L, R);
|
980
981
|
lua_pushcclosure(L, rua_proc_call, 2);
|
981
|
-
|
982
|
+
rua_setmeta2(L, -1, "__gc", rua_finalize_rbobj, 2, rbval, R);
|
982
983
|
} else {
|
983
984
|
rua_newtable_from_obj(L, rbval, R);
|
984
985
|
}
|
@@ -1021,15 +1022,17 @@ static void rua_newtable_from_hash(lua_State *L, VALUE hash, struct rua_state *R
|
|
1021
1022
|
|
1022
1023
|
static void rua_newtable_from_obj(lua_State *L, VALUE obj, struct rua_state *R) {
|
1023
1024
|
VALUE methods, name, method;
|
1024
|
-
int i, tblidx;
|
1025
|
+
int i, tblidx, prxidx;
|
1025
1026
|
|
1027
|
+
lua_newtable(L);
|
1028
|
+
prxidx = lua_gettop(L);
|
1026
1029
|
lua_newtable(L);
|
1027
1030
|
tblidx = lua_gettop(L);
|
1028
1031
|
methods = rb_check_convert_type(obj, T_ARRAY, "Array", "methods");
|
1029
1032
|
|
1030
1033
|
lua_pushstring(L, REF_RBOBJ);
|
1031
1034
|
lua_pushlightuserdata(L, (void *) obj);
|
1032
|
-
|
1035
|
+
rua_setmeta2(L, -1, "__gc", rua_finalize_rbobj, 2, obj, R);
|
1033
1036
|
lua_rawset(L, tblidx);
|
1034
1037
|
rb_hash_aset(R->refs, obj, Qtrue);
|
1035
1038
|
|
@@ -1046,6 +1049,47 @@ static void rua_newtable_from_obj(lua_State *L, VALUE obj, struct rua_state *R)
|
|
1046
1049
|
rua_pushrbval(L, method, R);
|
1047
1050
|
lua_rawset(L, tblidx);
|
1048
1051
|
}
|
1052
|
+
|
1053
|
+
lua_pushvalue(L, -1);
|
1054
|
+
rua_setmeta(L, prxidx, "__index", rua_getobject_event, 1);
|
1055
|
+
rua_setmeta(L, prxidx, "__newindex", rua_setobject_event, 1);
|
1056
|
+
}
|
1057
|
+
|
1058
|
+
static int rua_getobject_event(lua_State *L) {
|
1059
|
+
int tblidx;
|
1060
|
+
|
1061
|
+
tblidx = lua_upvalueindex(1);
|
1062
|
+
lua_rawget(L, tblidx);
|
1063
|
+
return 1;
|
1064
|
+
}
|
1065
|
+
|
1066
|
+
static int rua_setobject_event(lua_State *L) {
|
1067
|
+
const char *key;
|
1068
|
+
size_t keylen;
|
1069
|
+
char *setter;
|
1070
|
+
int tblidx;
|
1071
|
+
|
1072
|
+
tblidx = lua_upvalueindex(1);
|
1073
|
+
|
1074
|
+
key = lua_tostring(L, -2);
|
1075
|
+
keylen = strlen(key);
|
1076
|
+
setter = alloca(keylen + 2);
|
1077
|
+
memcpy(setter, key, keylen);
|
1078
|
+
setter[keylen] = '=';
|
1079
|
+
setter[keylen + 1] = '\0';
|
1080
|
+
|
1081
|
+
lua_pushstring(L, setter);
|
1082
|
+
lua_rawget(L, tblidx);
|
1083
|
+
|
1084
|
+
if (lua_isfunction(L, -1)) {
|
1085
|
+
lua_pushvalue(L, -2);
|
1086
|
+
lua_call(L, 1, 0);
|
1087
|
+
} else {
|
1088
|
+
lua_pop(L, 1);
|
1089
|
+
lua_rawset(L, tblidx);
|
1090
|
+
}
|
1091
|
+
|
1092
|
+
return 0;
|
1049
1093
|
}
|
1050
1094
|
|
1051
1095
|
static int rua_proc_call(lua_State *L) {
|
@@ -1213,10 +1257,10 @@ static const char *rua_classname_ptr(VALUE v) {
|
|
1213
1257
|
return StringValuePtr(klassname);
|
1214
1258
|
}
|
1215
1259
|
|
1216
|
-
static void
|
1217
|
-
int
|
1260
|
+
static void rua_setmeta(lua_State *L, int idx, const char *key, lua_CFunction f, int n) {
|
1261
|
+
int basetop, objidx, tblidx, i;
|
1218
1262
|
|
1219
|
-
|
1263
|
+
basetop = lua_gettop(L) - n;
|
1220
1264
|
lua_pushvalue(L, idx);
|
1221
1265
|
objidx = lua_gettop(L);
|
1222
1266
|
|
@@ -1227,14 +1271,37 @@ static void rua_set_finalizer(lua_State *L, int idx, VALUE rbobj, struct rua_sta
|
|
1227
1271
|
}
|
1228
1272
|
|
1229
1273
|
tblidx = lua_gettop(L);
|
1230
|
-
lua_pushstring(L,
|
1274
|
+
lua_pushstring(L, key);
|
1231
1275
|
|
1232
|
-
|
1233
|
-
|
1234
|
-
|
1276
|
+
for (i = 1; i <= n; i++) {
|
1277
|
+
lua_pushvalue(L, basetop + i);
|
1278
|
+
}
|
1279
|
+
|
1280
|
+
if (n > 0) {
|
1281
|
+
lua_pushcclosure(L, f, n);
|
1282
|
+
} else {
|
1283
|
+
lua_pushcfunction(L, f);
|
1284
|
+
}
|
1235
1285
|
|
1236
1286
|
lua_rawset(L, tblidx);
|
1237
|
-
lua_pop(L, lua_gettop(L) -
|
1287
|
+
lua_pop(L, lua_gettop(L) - basetop);
|
1288
|
+
}
|
1289
|
+
|
1290
|
+
static void rua_setmeta2(lua_State *L, int idx, const char *key, lua_CFunction f, int n, ...) {
|
1291
|
+
va_list argp;
|
1292
|
+
int i;
|
1293
|
+
|
1294
|
+
va_start(argp, n);
|
1295
|
+
|
1296
|
+
for (i = 0; i < n; i++) {
|
1297
|
+
lua_pushlightuserdata(L, va_arg(argp, void*));
|
1298
|
+
}
|
1299
|
+
|
1300
|
+
if (idx < 0) {
|
1301
|
+
idx -= n;
|
1302
|
+
}
|
1303
|
+
|
1304
|
+
rua_setmeta(L, idx, key, f, n);
|
1238
1305
|
}
|
1239
1306
|
|
1240
1307
|
static int rua_finalize_rbobj(lua_State *L) {
|
data/lib/i386-mswin32/rua.so
CHANGED
Binary file
|
metadata
CHANGED
@@ -1,50 +1,57 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
|
-
rubygems_version: 0.9.2
|
3
|
-
specification_version: 1
|
4
2
|
name: rua
|
5
3
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.3.
|
7
|
-
date: 2007-12-10 00:00:00 +09:00
|
8
|
-
summary: Rua is a library for using Lua under Ruby.
|
9
|
-
require_paths:
|
10
|
-
- lib/i386-mswin32
|
11
|
-
email: sgwr_dts@yahoo.co.jp
|
12
|
-
homepage: http://rua.rubyforge.org
|
13
|
-
rubyforge_project:
|
14
|
-
description:
|
15
|
-
autorequire:
|
16
|
-
default_executable:
|
17
|
-
bindir: bin
|
18
|
-
has_rdoc: true
|
19
|
-
required_ruby_version: !ruby/object:Gem::Version::Requirement
|
20
|
-
requirements:
|
21
|
-
- - ">"
|
22
|
-
- !ruby/object:Gem::Version
|
23
|
-
version: 0.0.0
|
24
|
-
version:
|
4
|
+
version: 0.3.7
|
25
5
|
platform: mswin32
|
26
|
-
signing_key:
|
27
|
-
cert_chain:
|
28
|
-
post_install_message:
|
29
6
|
authors:
|
30
7
|
- winebarrel
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2007-12-26 00:00:00 +09:00
|
13
|
+
default_executable:
|
14
|
+
dependencies: []
|
15
|
+
|
16
|
+
description:
|
17
|
+
email: sgwr_dts@yahoo.co.jp
|
18
|
+
executables: []
|
19
|
+
|
20
|
+
extensions: []
|
21
|
+
|
22
|
+
extra_rdoc_files:
|
23
|
+
- README.txt
|
24
|
+
- ext/rua.c
|
31
25
|
files:
|
32
26
|
- README.txt
|
33
27
|
- lib/i386-mswin32/rua.so
|
34
28
|
- ext/rua.c
|
35
|
-
|
36
|
-
|
29
|
+
has_rdoc: true
|
30
|
+
homepage: http://rua.rubyforge.org
|
31
|
+
post_install_message:
|
37
32
|
rdoc_options:
|
38
33
|
- --title
|
39
34
|
- Rua - library for using Lua under Ruby.
|
40
|
-
|
41
|
-
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
35
|
+
require_paths:
|
36
|
+
- lib/i386-mswin32
|
37
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
39
|
+
- - ">="
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
version: "0"
|
42
|
+
version:
|
43
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: "0"
|
48
|
+
version:
|
47
49
|
requirements: []
|
48
50
|
|
49
|
-
|
51
|
+
rubyforge_project:
|
52
|
+
rubygems_version: 0.9.5
|
53
|
+
signing_key:
|
54
|
+
specification_version: 2
|
55
|
+
summary: Rua is a library for using Lua under Ruby.
|
56
|
+
test_files: []
|
50
57
|
|