rua 0.2.4 → 0.2.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. data/ext/rua.c +21 -20
  2. data/ext/rua.h +4 -4
  3. metadata +2 -2
data/ext/rua.c CHANGED
@@ -16,7 +16,7 @@ __declspec(dllexport) void Init_rua(void);
16
16
 
17
17
  #include "rua.h"
18
18
 
19
- #define VERSION "0.2.4"
19
+ #define VERSION "0.2.5"
20
20
  #define REF_RBOBJ "self"
21
21
 
22
22
  static const char *insecure_methods[] = {
@@ -97,13 +97,13 @@ void Init_rua() {
97
97
  rb_define_method(Rua, "error_handler=", rua_set_error_handler, 1);
98
98
  rb_define_method(Rua, "method_missing", rua_method_missing, -1);
99
99
 
100
- rb_define_alloc_func(RuaFunc, rua_func_alloc);
100
+ rb_define_alloc_func(RuaFunc, rua_ref_alloc);
101
101
  rb_define_private_method(RuaFunc, "initialize", rua_func_initialize, 0);
102
102
  rb_define_method(RuaFunc, "call", rua_func_call, -1);
103
103
  //rb_define_method(RuaFunc, "[]", rua_func_get, 1);
104
104
  //rb_define_method(RuaFunc, "[]=", rua_func_set, 2);
105
105
 
106
- rb_define_alloc_func(RuaThread, rua_thread_alloc);
106
+ rb_define_alloc_func(RuaThread, rua_ref_alloc);
107
107
  rb_define_private_method(RuaThread, "initialize", rua_thread_initialize, 0);
108
108
  rb_define_method(RuaThread, "resume", rua_thread_resume, -1);
109
109
 
@@ -352,17 +352,29 @@ static VALUE rua_method_missing(int argc, VALUE *argv, VALUE self) {
352
352
 
353
353
  // ------------------------------------------------------------------
354
354
 
355
- static VALUE rua_func_alloc(VALUE klass) {
355
+ static VALUE rua_ref_alloc(VALUE klass) {
356
356
  struct rua_ref *p = ALLOC(struct rua_ref);
357
357
 
358
- return Data_Wrap_Struct(klass, rua_func_mark, -1, p);
358
+ return Data_Wrap_Struct(klass, rua_ref_mark, rua_ref_free, p);
359
359
  }
360
360
 
361
- static void rua_func_mark(struct rua_ref *p) {
361
+ static void rua_ref_mark(struct rua_ref *p) {
362
362
  rb_gc_mark(p->R->rua);
363
363
  rb_gc_mark(p->R->error_handler);
364
364
  }
365
365
 
366
+ static void rua_ref_free(struct rua_ref *p) {
367
+ luaL_unref(p->L, LUA_REGISTRYINDEX, p->ref);
368
+
369
+ if (p->R) {
370
+ free(p->R);
371
+ }
372
+
373
+ free(p);
374
+ }
375
+
376
+ // ------------------------------------------------------------------
377
+
366
378
  /*
367
379
  * new RuaFunc instance.
368
380
  */
@@ -409,17 +421,6 @@ static VALUE rua_func_call(int argc, VALUE *argv, VALUE self) {
409
421
 
410
422
  // ------------------------------------------------------------------
411
423
 
412
- static VALUE rua_thread_alloc(VALUE klass) {
413
- struct rua_ref *p = ALLOC(struct rua_ref);
414
-
415
- return Data_Wrap_Struct(klass, rua_thread_mark, -1, p);
416
- }
417
-
418
- static void rua_thread_mark(struct rua_ref *p) {
419
- rb_gc_mark(p->R->rua);
420
- rb_gc_mark(p->R->error_handler);
421
- }
422
-
423
424
  /*
424
425
  * new RuaThread instance.
425
426
  */
@@ -606,7 +607,7 @@ static void rua_pushrbval(lua_State *L, VALUE rbval, struct rua_state *R) {
606
607
 
607
608
  default:
608
609
  if (R->secure && (rb_equal(rb_cModule, rbval) || rb_equal(rb_cClass, rbval))) {
609
- fprintf(stderr, "warning: convert insecure value %s", rua_to_sptr(rbval));
610
+ rb_warn("warning: convert insecure value %s", rua_to_sptr(rbval));
610
611
  lua_pushnil(L);
611
612
  } else if (rb_obj_is_kind_of(rbval, RuaFunc)) {
612
613
  Data_Get_Struct(rbval, struct rua_ref, p);
@@ -698,7 +699,7 @@ static int rua_proc_call(lua_State *L) {
698
699
  rb_ary_push(args, rua_torbval(L, i + 1, R));
699
700
  }
700
701
 
701
- last = (i > 0) ? rb_ary_entry(args, -1) : Qnil;
702
+ last = rb_ary_entry(args, -1);
702
703
  rb_ary_push(args, proc);
703
704
 
704
705
  if (rb_obj_is_kind_of(last, RuaFunc)) {
@@ -715,7 +716,7 @@ static int rua_proc_call(lua_State *L) {
715
716
  retval = rb_protect(_rua_proc_call, errargs, &status);
716
717
 
717
718
  if (status != 0) {
718
- fprintf(stderr, "warning: %s\n", rua_to_sptr(ruby_errinfo));
719
+ rb_warn("%s\n", rua_to_sptr(ruby_errinfo));
719
720
  }
720
721
  } else {
721
722
  retval = Qnil;
data/ext/rua.h CHANGED
@@ -33,15 +33,15 @@ static VALUE rua_get_error_handler(VALUE self);
33
33
  static VALUE rua_set_error_handler(VALUE self, VALUE error_handler);
34
34
  static VALUE rua_method_missing(int argc, VALUE *argv, VALUE self);
35
35
 
36
- static VALUE rua_func_alloc(VALUE klass);
37
- static void rua_func_mark(struct rua_ref *p);
36
+ static VALUE rua_ref_alloc(VALUE klass);
37
+ static void rua_ref_mark(struct rua_ref *p);
38
+ static void rua_ref_free(struct rua_ref *p);
39
+
38
40
  static VALUE rua_func_initialize(VALUE self);
39
41
  static VALUE rua_func_call(int argc, VALUE *argv, VALUE self);
40
42
  //static VALUE rua_func_get(VALUE self, VALUE key);
41
43
  //static VALUE rua_func_set(VALUE self, VALUE key, VALUE val);
42
44
 
43
- static VALUE rua_thread_alloc(VALUE klass);
44
- static void rua_thread_mark(struct rua_ref *p);
45
45
  static VALUE rua_thread_initialize(VALUE self);
46
46
  static VALUE rua_thread_resume(int argc, VALUE *argv, VALUE self);
47
47
 
metadata CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.2
3
3
  specification_version: 1
4
4
  name: rua
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.2.4
7
- date: 2007-11-22 00:00:00 +09:00
6
+ version: 0.2.5
7
+ date: 2007-11-23 00:00:00 +09:00
8
8
  summary: Rua is a library for using Lua under Ruby.
9
9
  require_paths:
10
10
  - lib