rua 0.4.7 → 0.4.8

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. data/README.txt +2 -0
  2. data/ext/rua.c +39 -6
  3. metadata +3 -3
data/README.txt CHANGED
@@ -23,6 +23,7 @@ http://rubyforge.org/frs/?group_id=4845
23
23
  require 'rua'
24
24
 
25
25
  class MyClass
26
+ CONST_FOO = 100
26
27
  def val=(v); @val = v; end
27
28
  def val; @val; end
28
29
  def [](k); "#{k}->#{@val}"; end
@@ -68,6 +69,7 @@ http://rubyforge.org/frs/?group_id=4845
68
69
  print(my_obj['foo'])
69
70
  my_obj['bar'] = 'zoo'
70
71
  print(my_obj.val())
72
+ print(MyClass.CONST_FOO)
71
73
 
72
74
  f = function()
73
75
  print('f() called.')
data/ext/rua.c CHANGED
@@ -17,7 +17,13 @@ __declspec(dllexport) void Init_rua(void);
17
17
  #include "iconv.h"
18
18
 
19
19
  #include "ruby.h"
20
+
21
+ #ifndef RUBY_VM
20
22
  #include "rubysig.h"
23
+ #else
24
+ #define TRAP_BEG
25
+ #define TRAP_END
26
+ #endif
21
27
 
22
28
  #include "rua.h"
23
29
 
@@ -37,7 +43,11 @@ __declspec(dllexport) void Init_rua(void);
37
43
  #define RARRAY_LEN(s) (RARRAY(s)->len)
38
44
  #endif
39
45
 
40
- #define VERSION "0.4.7"
46
+ #ifndef RUBY_VM
47
+ #define rb_errinfo() ruby_errinfo
48
+ #endif
49
+
50
+ #define VERSION "0.4.8"
41
51
  #define REF_RBOBJ "self"
42
52
 
43
53
  #define ICONV_JIS "ISO-2022-JP"
@@ -104,6 +114,7 @@ static const int insecure_method_num = sizeof(insecure_methods) / sizeof(char*);
104
114
  static VALUE Rua, RuaFunc, RuaThread, RuaError, RuaDebug;
105
115
  static VALUE s_all, s_base, s_package, s_string, s_table, s_math, s_io, s_debug;
106
116
  static VALUE m_method_unbound, m_methods_unbound;
117
+ static VALUE m_constants_unbound, m_const_get_unbound;
107
118
 
108
119
  void Init_rua() {
109
120
  Rua = rb_define_class("Rua", rb_cObject);
@@ -142,6 +153,11 @@ void Init_rua() {
142
153
  rb_define_class_variable(Rua, "@@m_method_unbound", m_method_unbound);
143
154
  rb_define_class_variable(Rua, "@@m_methods_unbound", m_methods_unbound);
144
155
 
156
+ m_constants_unbound = rb_funcall(rb_cModule, rb_intern("instance_method"), 1, ID2SYM(rb_intern("constants")));
157
+ m_const_get_unbound = rb_funcall(rb_cModule, rb_intern("instance_method"), 1, ID2SYM(rb_intern("const_get")));
158
+ rb_define_class_variable(Rua, "@@m_constants_unbound", m_constants_unbound);
159
+ rb_define_class_variable(Rua, "@@m_const_get_unbound", m_const_get_unbound);
160
+
145
161
  rb_define_alloc_func(RuaFunc, rua_ref_alloc);
146
162
  rb_define_private_method(RuaFunc, "initialize", rua_func_initialize, 0);
147
163
  rb_define_method(RuaFunc, "call", rua_func_call, -1);
@@ -1157,7 +1173,7 @@ static void rua_newtable_from_obj(lua_State *L, VALUE obj, struct rua_state *R)
1157
1173
  method = rb_funcall(m_method_bound, rb_intern("call"), 1, name);
1158
1174
  rb_hash_aset(R->refs, method, Qtrue);
1159
1175
 
1160
- if (R->secure && rua_name_is_insecure_method(RSTRING_PTR(name))) {
1176
+ if (R->secure && rua_name_is_insecure_method(StringValuePtr(name))) {
1161
1177
  continue;
1162
1178
  }
1163
1179
 
@@ -1166,6 +1182,23 @@ static void rua_newtable_from_obj(lua_State *L, VALUE obj, struct rua_state *R)
1166
1182
  lua_rawset(L, tblidx);
1167
1183
  }
1168
1184
 
1185
+ if (rb_obj_is_kind_of(obj, rb_cModule)) {
1186
+ VALUE cnsts, cname, cnst;
1187
+ VALUE m_const_get_bound, m_constants_bound;
1188
+ m_const_get_bound = rb_funcall(m_const_get_unbound, rb_intern("bind"), 1, obj);
1189
+ m_constants_bound = rb_funcall(m_constants_unbound, rb_intern("bind"), 1, obj);
1190
+ cnsts = rb_check_convert_type(m_constants_bound, T_ARRAY, "Array", "call");
1191
+
1192
+ for (i = 0; i < RARRAY_LEN(cnsts); i++) {
1193
+ cname = rb_ary_entry(cnsts, i);
1194
+ cnst = rb_funcall(m_const_get_bound, rb_intern("call"), 1, cname);
1195
+ rb_hash_aset(R->refs, cnst, Qtrue);
1196
+ rua_pushrbval(L, cname, R);
1197
+ rua_pushrbval(L, cnst, R);
1198
+ lua_rawset(L, tblidx);
1199
+ }
1200
+ }
1201
+
1169
1202
  lua_pushvalue(L, -1);
1170
1203
  rua_setmeta(L, prxidx, "__index", rua_getobject_event, 1);
1171
1204
  rua_setmeta(L, prxidx, "__newindex", rua_setobject_event, 1);
@@ -1261,12 +1294,12 @@ static int rua_proc_call(lua_State *L) {
1261
1294
  if (status != 0) {
1262
1295
  if (R->wrap_error) {
1263
1296
  if (lua_getstack(L, 1, &ar) && lua_getinfo(L, "nSlu", &ar)) {
1264
- error = rua_toruaerror(ruby_errinfo, rua_toruadebug(&ar));
1297
+ error = rua_toruaerror(rb_errinfo(), rua_toruadebug(&ar));
1265
1298
  } else {
1266
- error = rua_toruaerror(ruby_errinfo, Qnil);
1299
+ error = rua_toruaerror(rb_errinfo(), Qnil);
1267
1300
  }
1268
1301
  } else {
1269
- error = ruby_errinfo;
1302
+ error = rb_errinfo();
1270
1303
  }
1271
1304
 
1272
1305
  if (rua_obj_is_executable(R->error_handler)) {
@@ -1276,7 +1309,7 @@ static int rua_proc_call(lua_State *L) {
1276
1309
  retval = rb_protect(_rua_proc_call, errargs, &status);
1277
1310
 
1278
1311
  if (status != 0) {
1279
- rb_warn("%s\n", rua_to_sptr(ruby_errinfo));
1312
+ rb_warn("%s\n", rua_to_sptr(rb_errinfo()));
1280
1313
  }
1281
1314
  } else {
1282
1315
  retval = Qnil;
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.4.7
4
+ version: 0.4.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - winebarrel
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-09-30 00:00:00 +09:00
12
+ date: 2009-06-26 00:00:00 +09:00
13
13
  default_executable:
14
14
  dependencies: []
15
15
 
@@ -50,7 +50,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
50
50
  requirements: []
51
51
 
52
52
  rubyforge_project: rua
53
- rubygems_version: 1.2.0
53
+ rubygems_version: 1.3.1
54
54
  signing_key:
55
55
  specification_version: 2
56
56
  summary: Rua is a library for using Lua under Ruby.