rua 0.3.7-mswin32 → 0.3.9-mswin32
Sign up to get free protection for your applications and to get access to all the features.
- data/README.txt +5 -0
- data/ext/rua.c +40 -4
- data/lib/i386-mswin32/rua.so +0 -0
- metadata +3 -3
data/README.txt
CHANGED
@@ -27,6 +27,8 @@ http://storehouse.sakura.ne.jp/rua/
|
|
27
27
|
class MyClass
|
28
28
|
def val=(v); @val = v; end
|
29
29
|
def val; @val; end
|
30
|
+
def [](k); "#{k}->#{@val}"; end
|
31
|
+
def []=(k, v); @val = "#{k}:#{v}"; end
|
30
32
|
end
|
31
33
|
|
32
34
|
rua = Rua.new(:all)
|
@@ -65,6 +67,9 @@ http://storehouse.sakura.ne.jp/rua/
|
|
65
67
|
my_obj = MyClass.new()
|
66
68
|
my_obj.val = 'my_obj.val'
|
67
69
|
print(my_obj.val())
|
70
|
+
print(my_obj['foo'])
|
71
|
+
my_obj['bar'] = 'zoo'
|
72
|
+
print(my_obj.val())
|
68
73
|
|
69
74
|
f = function()
|
70
75
|
print('f() called.')
|
data/ext/rua.c
CHANGED
@@ -21,7 +21,7 @@ __declspec(dllexport) void Init_rua(void);
|
|
21
21
|
|
22
22
|
#include "rua.h"
|
23
23
|
|
24
|
-
#define VERSION "0.3.
|
24
|
+
#define VERSION "0.3.9"
|
25
25
|
#define REF_RBOBJ "self"
|
26
26
|
|
27
27
|
#define ICONV_JIS "ISO-2022-JP"
|
@@ -87,6 +87,7 @@ static const char *insecure_methods[] = {
|
|
87
87
|
static const int insecure_method_num = sizeof(insecure_methods) / sizeof(char*);
|
88
88
|
static VALUE Rua, RuaFunc, RuaThread, RuaError, RuaDebug;
|
89
89
|
static VALUE s_all, s_base, s_package, s_string, s_table, s_math, s_io, s_debug;
|
90
|
+
static VALUE m_method_unbound, m_methods_unbound;
|
90
91
|
|
91
92
|
void Init_rua() {
|
92
93
|
Rua = rb_define_class("Rua", rb_cObject);
|
@@ -118,6 +119,11 @@ void Init_rua() {
|
|
118
119
|
rb_define_method(Rua, "error_handler=", rua_set_error_handler, 1);
|
119
120
|
rb_define_method(Rua, "method_missing", rua_method_missing, -1);
|
120
121
|
|
122
|
+
m_method_unbound = rb_funcall(rb_cObject, rb_intern("instance_method"), 1, ID2SYM(rb_intern("method")));
|
123
|
+
m_methods_unbound = rb_funcall(rb_cObject, rb_intern("instance_method"), 1, ID2SYM(rb_intern("methods")));
|
124
|
+
rb_define_class_variable(Rua, "@@m_method_unbound", m_method_unbound);
|
125
|
+
rb_define_class_variable(Rua, "@@m_methods_unbound", m_methods_unbound);
|
126
|
+
|
121
127
|
rb_define_alloc_func(RuaFunc, rua_ref_alloc);
|
122
128
|
rb_define_private_method(RuaFunc, "initialize", rua_func_initialize, 0);
|
123
129
|
rb_define_method(RuaFunc, "call", rua_func_call, -1);
|
@@ -1022,13 +1028,17 @@ static void rua_newtable_from_hash(lua_State *L, VALUE hash, struct rua_state *R
|
|
1022
1028
|
|
1023
1029
|
static void rua_newtable_from_obj(lua_State *L, VALUE obj, struct rua_state *R) {
|
1024
1030
|
VALUE methods, name, method;
|
1031
|
+
VALUE m_method_bound, m_methods_bound;
|
1025
1032
|
int i, tblidx, prxidx;
|
1026
1033
|
|
1027
1034
|
lua_newtable(L);
|
1028
1035
|
prxidx = lua_gettop(L);
|
1029
1036
|
lua_newtable(L);
|
1030
1037
|
tblidx = lua_gettop(L);
|
1031
|
-
|
1038
|
+
|
1039
|
+
m_method_bound = rb_funcall(m_method_unbound, rb_intern("bind"), 1, obj);
|
1040
|
+
m_methods_bound = rb_funcall(m_methods_unbound, rb_intern("bind"), 1, obj);
|
1041
|
+
methods = rb_check_convert_type(m_methods_bound, T_ARRAY, "Array", "call");
|
1032
1042
|
|
1033
1043
|
lua_pushstring(L, REF_RBOBJ);
|
1034
1044
|
lua_pushlightuserdata(L, (void *) obj);
|
@@ -1038,7 +1048,7 @@ static void rua_newtable_from_obj(lua_State *L, VALUE obj, struct rua_state *R)
|
|
1038
1048
|
|
1039
1049
|
for (i = 0; i < RARRAY(methods)->len; i++) {
|
1040
1050
|
name = rb_ary_entry(methods, i);
|
1041
|
-
method = rb_funcall(
|
1051
|
+
method = rb_funcall(m_method_bound, rb_intern("call"), 1, name);
|
1042
1052
|
rb_hash_aset(R->refs, method, Qtrue);
|
1043
1053
|
|
1044
1054
|
if (R->secure && rua_name_is_insecure_method(StringValuePtr(name))) {
|
@@ -1059,7 +1069,23 @@ static int rua_getobject_event(lua_State *L) {
|
|
1059
1069
|
int tblidx;
|
1060
1070
|
|
1061
1071
|
tblidx = lua_upvalueindex(1);
|
1072
|
+
lua_pushvalue(L, -1);
|
1062
1073
|
lua_rawget(L, tblidx);
|
1074
|
+
|
1075
|
+
if (lua_isnil(L, -1)) {
|
1076
|
+
lua_pop(L, 1);
|
1077
|
+
lua_pushstring(L, "[]");
|
1078
|
+
lua_rawget(L, tblidx);
|
1079
|
+
|
1080
|
+
if (lua_isfunction(L, -1)) {
|
1081
|
+
lua_pushvalue(L, -2);
|
1082
|
+
lua_call(L, 1, 1);
|
1083
|
+
} else {
|
1084
|
+
lua_pop(L, 1);
|
1085
|
+
lua_pushnil(L);
|
1086
|
+
}
|
1087
|
+
}
|
1088
|
+
|
1063
1089
|
return 1;
|
1064
1090
|
}
|
1065
1091
|
|
@@ -1086,7 +1112,17 @@ static int rua_setobject_event(lua_State *L) {
|
|
1086
1112
|
lua_call(L, 1, 0);
|
1087
1113
|
} else {
|
1088
1114
|
lua_pop(L, 1);
|
1089
|
-
|
1115
|
+
lua_pushstring(L, "[]=");
|
1116
|
+
lua_rawget(L, tblidx);
|
1117
|
+
|
1118
|
+
if (lua_isfunction(L, -1)) {
|
1119
|
+
lua_pushvalue(L, -3);
|
1120
|
+
lua_pushvalue(L, -3);
|
1121
|
+
lua_call(L, 2, 0);
|
1122
|
+
} else {
|
1123
|
+
lua_pop(L, 1);
|
1124
|
+
lua_rawset(L, tblidx);
|
1125
|
+
}
|
1090
1126
|
}
|
1091
1127
|
|
1092
1128
|
return 0;
|
data/lib/i386-mswin32/rua.so
CHANGED
Binary file
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rua
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.9
|
5
5
|
platform: mswin32
|
6
6
|
authors:
|
7
7
|
- winebarrel
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2007-12-
|
12
|
+
date: 2007-12-28 00:00:00 +09:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|
@@ -49,7 +49,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
49
49
|
requirements: []
|
50
50
|
|
51
51
|
rubyforge_project:
|
52
|
-
rubygems_version: 0.
|
52
|
+
rubygems_version: 1.0.1
|
53
53
|
signing_key:
|
54
54
|
specification_version: 2
|
55
55
|
summary: Rua is a library for using Lua under Ruby.
|