rua 0.2.6-mswin32 → 0.3.0-mswin32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.txt +4 -1
- data/ext/rua.c +211 -27
- data/lib/i386-mswin32/rua.so +0 -0
- metadata +3 -3
data/README.txt
CHANGED
@@ -26,8 +26,9 @@ http://rubyforge.org/frs/?group_id=4845
|
|
26
26
|
|
27
27
|
rua = Rua.new(:all)
|
28
28
|
#rua.openlibs(:base, :package, :string)
|
29
|
-
rua.error_handler = lambda do |e|
|
29
|
+
rua.error_handler = lambda do |e, ar|
|
30
30
|
p e
|
31
|
+
p ar.to_hash
|
31
32
|
end
|
32
33
|
|
33
34
|
rua.str = 'xxx'
|
@@ -85,3 +86,5 @@ http://rubyforge.org/frs/?group_id=4845
|
|
85
86
|
p co.resume('r')
|
86
87
|
p co.resume('x', 'y')
|
87
88
|
p co.resume('x', 'y')
|
89
|
+
|
90
|
+
p rua.f.info.to_hash
|
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.
|
19
|
+
#define VERSION "0.3.0"
|
20
20
|
#define REF_RBOBJ "self"
|
21
21
|
|
22
22
|
static const char *insecure_methods[] = {
|
@@ -75,7 +75,7 @@ static const char *insecure_methods[] = {
|
|
75
75
|
};
|
76
76
|
|
77
77
|
static const int insecure_method_num = sizeof(insecure_methods) / sizeof(char*);
|
78
|
-
static VALUE Rua, RuaFunc, RuaThread, RuaError;
|
78
|
+
static VALUE Rua, RuaFunc, RuaThread, RuaError, RuaDebug;
|
79
79
|
static VALUE s_all, s_base, s_package, s_string, s_table, s_math, s_io, s_debug;
|
80
80
|
|
81
81
|
void Init_rua() {
|
@@ -83,6 +83,7 @@ void Init_rua() {
|
|
83
83
|
RuaFunc = rb_define_class("RuaFunc", rb_cObject);
|
84
84
|
RuaThread = rb_define_class("RuaThread", rb_cObject);
|
85
85
|
RuaError = rb_define_class("RuaError", rb_eStandardError);
|
86
|
+
RuaDebug = rb_define_class("RuaDebug", rb_cObject);
|
86
87
|
|
87
88
|
rb_define_alloc_func(Rua, rua_alloc);
|
88
89
|
rb_define_const(Rua, "VERSION", rb_str_new2(VERSION));
|
@@ -100,13 +101,25 @@ void Init_rua() {
|
|
100
101
|
rb_define_alloc_func(RuaFunc, rua_ref_alloc);
|
101
102
|
rb_define_private_method(RuaFunc, "initialize", rua_func_initialize, 0);
|
102
103
|
rb_define_method(RuaFunc, "call", rua_func_call, -1);
|
103
|
-
|
104
|
-
//rb_define_method(RuaFunc, "[]=", rua_func_set, 2);
|
104
|
+
rb_define_method(RuaFunc, "info", rua_func_info, 0);
|
105
105
|
|
106
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
|
|
110
|
+
rb_define_alloc_func(RuaDebug, rua_debug_alloc);
|
111
|
+
rb_define_private_method(RuaDebug, "initialize", rua_debug_initialize, 0);
|
112
|
+
rb_define_method(RuaDebug, "name", rua_debug_name, 0);
|
113
|
+
rb_define_method(RuaDebug, "namewhat", rua_debug_namewhat, 0);
|
114
|
+
rb_define_method(RuaDebug, "what", rua_debug_what, 0);
|
115
|
+
rb_define_method(RuaDebug, "source", rua_debug_source, 0);
|
116
|
+
rb_define_method(RuaDebug, "currentline", rua_debug_currentline, 0);
|
117
|
+
rb_define_method(RuaDebug, "nups", rua_debug_nups, 0);
|
118
|
+
rb_define_method(RuaDebug, "linedefined", rua_debug_linedefined, 0);
|
119
|
+
rb_define_method(RuaDebug, "lastlinedefined",rua_debug_lastlinedefined, 0);
|
120
|
+
rb_define_method(RuaDebug, "short_src", rua_debug_short_src, 0);
|
121
|
+
rb_define_method(RuaDebug, "to_hash", rua_debug_to_hash, 0);
|
122
|
+
|
110
123
|
s_all = ID2SYM(rb_intern("all"));
|
111
124
|
s_base = ID2SYM(rb_intern("base"));
|
112
125
|
s_package = ID2SYM(rb_intern("package"));
|
@@ -145,7 +158,7 @@ static void rua_free(struct rua *p) {
|
|
145
158
|
free(p);
|
146
159
|
}
|
147
160
|
|
148
|
-
|
161
|
+
/**
|
149
162
|
* new Rua instance.
|
150
163
|
*/
|
151
164
|
static VALUE rua_initialize(int argc, VALUE *argv, VALUE self) {
|
@@ -164,7 +177,7 @@ static VALUE rua_initialize(int argc, VALUE *argv, VALUE self) {
|
|
164
177
|
return Qnil;
|
165
178
|
}
|
166
179
|
|
167
|
-
|
180
|
+
/**
|
168
181
|
* open libraries.
|
169
182
|
* see http://www.lua.org/manual/5.1/manual.html#5.
|
170
183
|
*/
|
@@ -217,7 +230,7 @@ static VALUE rua_openlibs(int argc, VALUE *argv, VALUE self) {
|
|
217
230
|
return Qnil;
|
218
231
|
}
|
219
232
|
|
220
|
-
|
233
|
+
/**
|
221
234
|
* evaluates string.
|
222
235
|
*/
|
223
236
|
static VALUE rua_eval(VALUE self, VALUE str) {
|
@@ -239,7 +252,7 @@ static VALUE rua_eval(VALUE self, VALUE str) {
|
|
239
252
|
return rua_tomultiretval(p->L, pretop, p->R);
|
240
253
|
}
|
241
254
|
|
242
|
-
|
255
|
+
/**
|
243
256
|
* set global variable.
|
244
257
|
*/
|
245
258
|
static VALUE rua_get(VALUE self, VALUE key) {
|
@@ -253,7 +266,7 @@ static VALUE rua_get(VALUE self, VALUE key) {
|
|
253
266
|
return retval;
|
254
267
|
}
|
255
268
|
|
256
|
-
|
269
|
+
/**
|
257
270
|
* set global variable.
|
258
271
|
*/
|
259
272
|
static VALUE rua_set(VALUE self, VALUE key, VALUE val) {
|
@@ -270,7 +283,7 @@ static VALUE rua_set(VALUE self, VALUE key, VALUE val) {
|
|
270
283
|
return Qnil;
|
271
284
|
}
|
272
285
|
|
273
|
-
|
286
|
+
/**
|
274
287
|
* get secure flag.
|
275
288
|
*/
|
276
289
|
static VALUE rua_get_secure(VALUE self) {
|
@@ -280,7 +293,7 @@ static VALUE rua_get_secure(VALUE self) {
|
|
280
293
|
return p->R->secure ? Qtrue : Qfalse;
|
281
294
|
}
|
282
295
|
|
283
|
-
|
296
|
+
/**
|
284
297
|
* set secure flag.
|
285
298
|
*/
|
286
299
|
static VALUE rua_set_secure(VALUE self, VALUE secure) {
|
@@ -300,7 +313,7 @@ static VALUE rua_set_secure(VALUE self, VALUE secure) {
|
|
300
313
|
}
|
301
314
|
|
302
315
|
|
303
|
-
|
316
|
+
/**
|
304
317
|
* get error handler.
|
305
318
|
*/
|
306
319
|
static VALUE rua_get_error_handler(VALUE self) {
|
@@ -310,7 +323,7 @@ static VALUE rua_get_error_handler(VALUE self) {
|
|
310
323
|
return p->R->error_handler;
|
311
324
|
}
|
312
325
|
|
313
|
-
|
326
|
+
/**
|
314
327
|
* set error handler.
|
315
328
|
*/
|
316
329
|
static VALUE rua_set_error_handler(VALUE self, VALUE error_handler) {
|
@@ -325,7 +338,7 @@ static VALUE rua_set_error_handler(VALUE self, VALUE error_handler) {
|
|
325
338
|
return Qnil;
|
326
339
|
}
|
327
340
|
|
328
|
-
|
341
|
+
/**
|
329
342
|
* dispatch Rua#[], Rua#[]=.
|
330
343
|
*/
|
331
344
|
static VALUE rua_method_missing(int argc, VALUE *argv, VALUE self) {
|
@@ -375,14 +388,14 @@ static void rua_ref_free(struct rua_ref *p) {
|
|
375
388
|
|
376
389
|
// ------------------------------------------------------------------
|
377
390
|
|
378
|
-
|
391
|
+
/**
|
379
392
|
* new RuaFunc instance.
|
380
393
|
*/
|
381
394
|
static VALUE rua_func_initialize(VALUE self) {
|
382
395
|
return Qnil;
|
383
396
|
}
|
384
397
|
|
385
|
-
|
398
|
+
/**
|
386
399
|
* call Lua function.
|
387
400
|
*/
|
388
401
|
static VALUE rua_func_call(int argc, VALUE *argv, VALUE self) {
|
@@ -407,28 +420,36 @@ static VALUE rua_func_call(int argc, VALUE *argv, VALUE self) {
|
|
407
420
|
return rua_tomultiretval(p->L, pretop, p->R);
|
408
421
|
}
|
409
422
|
|
410
|
-
|
411
|
-
*
|
423
|
+
/**
|
424
|
+
* get debug info.
|
412
425
|
*/
|
413
|
-
|
414
|
-
|
426
|
+
static VALUE rua_func_info(VALUE self) {
|
427
|
+
struct rua_ref *p;
|
428
|
+
VALUE ruadebug;
|
429
|
+
lua_Debug ar;
|
415
430
|
|
416
|
-
|
417
|
-
|
418
|
-
|
419
|
-
|
420
|
-
|
431
|
+
Data_Get_Struct(self, struct rua_ref, p);
|
432
|
+
lua_rawgeti(p->L, LUA_REGISTRYINDEX, p->ref);
|
433
|
+
|
434
|
+
if (lua_isfunction(p->L, -1) && lua_getinfo(p->L, ">nSlu", &ar)) {
|
435
|
+
ruadebug = rua_toruadebug(&ar);
|
436
|
+
} else {
|
437
|
+
ruadebug = Qnil;
|
438
|
+
}
|
439
|
+
|
440
|
+
return ruadebug;
|
441
|
+
}
|
421
442
|
|
422
443
|
// ------------------------------------------------------------------
|
423
444
|
|
424
|
-
|
445
|
+
/**
|
425
446
|
* new RuaThread instance.
|
426
447
|
*/
|
427
448
|
static VALUE rua_thread_initialize(VALUE self) {
|
428
449
|
return Qnil;
|
429
450
|
}
|
430
451
|
|
431
|
-
|
452
|
+
/**
|
432
453
|
* resume Lua coroutine.
|
433
454
|
*/
|
434
455
|
static VALUE rua_thread_resume(int argc, VALUE *argv, VALUE self) {
|
@@ -461,6 +482,145 @@ static VALUE rua_thread_resume(int argc, VALUE *argv, VALUE self) {
|
|
461
482
|
|
462
483
|
// ------------------------------------------------------------------
|
463
484
|
|
485
|
+
static VALUE rua_debug_alloc(VALUE klass) {
|
486
|
+
struct rua_debug *p = ALLOC(struct rua_debug);
|
487
|
+
|
488
|
+
return Data_Wrap_Struct(klass, rua_debug_mark, -1, p);
|
489
|
+
}
|
490
|
+
|
491
|
+
static void rua_debug_mark(struct rua_debug *p) {
|
492
|
+
rb_gc_mark(p->name);
|
493
|
+
rb_gc_mark(p->namewhat);
|
494
|
+
rb_gc_mark(p->what);
|
495
|
+
rb_gc_mark(p->source);
|
496
|
+
rb_gc_mark(p->currentline);
|
497
|
+
rb_gc_mark(p->nups);
|
498
|
+
rb_gc_mark(p->linedefined);
|
499
|
+
rb_gc_mark(p->lastlinedefined);
|
500
|
+
rb_gc_mark(p->short_src);
|
501
|
+
}
|
502
|
+
|
503
|
+
/**
|
504
|
+
* new RuaDebug instance.
|
505
|
+
* see http://www.lua.org/manual/5.1/manual.html#lua_Debug.
|
506
|
+
*/
|
507
|
+
static VALUE rua_debug_initialize(VALUE self) {
|
508
|
+
return Qnil;
|
509
|
+
}
|
510
|
+
|
511
|
+
/**
|
512
|
+
* get name.
|
513
|
+
*/
|
514
|
+
static VALUE rua_debug_name(VALUE self) {
|
515
|
+
struct rua_debug *p;
|
516
|
+
|
517
|
+
Data_Get_Struct(self, struct rua_debug, p);
|
518
|
+
return p->name;
|
519
|
+
}
|
520
|
+
|
521
|
+
/**
|
522
|
+
* get namewhat.
|
523
|
+
*/
|
524
|
+
static VALUE rua_debug_namewhat(VALUE self) {
|
525
|
+
struct rua_debug *p;
|
526
|
+
|
527
|
+
Data_Get_Struct(self, struct rua_debug, p);
|
528
|
+
return p->namewhat;
|
529
|
+
}
|
530
|
+
|
531
|
+
/**
|
532
|
+
* get what.
|
533
|
+
*/
|
534
|
+
static VALUE rua_debug_what(VALUE self) {
|
535
|
+
struct rua_debug *p;
|
536
|
+
|
537
|
+
Data_Get_Struct(self, struct rua_debug, p);
|
538
|
+
return p->what;
|
539
|
+
}
|
540
|
+
|
541
|
+
/**
|
542
|
+
* get source.
|
543
|
+
*/
|
544
|
+
static VALUE rua_debug_source(VALUE self) {
|
545
|
+
struct rua_debug *p;
|
546
|
+
|
547
|
+
Data_Get_Struct(self, struct rua_debug, p);
|
548
|
+
return p->source;
|
549
|
+
}
|
550
|
+
|
551
|
+
/**
|
552
|
+
* get currentline.
|
553
|
+
*/
|
554
|
+
static VALUE rua_debug_currentline(VALUE self) {
|
555
|
+
struct rua_debug *p;
|
556
|
+
|
557
|
+
Data_Get_Struct(self, struct rua_debug, p);
|
558
|
+
return p->currentline;
|
559
|
+
}
|
560
|
+
|
561
|
+
/**
|
562
|
+
* get nups.
|
563
|
+
*/
|
564
|
+
static VALUE rua_debug_nups(VALUE self) {
|
565
|
+
struct rua_debug *p;
|
566
|
+
|
567
|
+
Data_Get_Struct(self, struct rua_debug, p);
|
568
|
+
return p->nups;
|
569
|
+
}
|
570
|
+
|
571
|
+
/**
|
572
|
+
* get linedefined.
|
573
|
+
*/
|
574
|
+
static VALUE rua_debug_linedefined(VALUE self) {
|
575
|
+
struct rua_debug *p;
|
576
|
+
|
577
|
+
Data_Get_Struct(self, struct rua_debug, p);
|
578
|
+
return p->linedefined;
|
579
|
+
}
|
580
|
+
|
581
|
+
/**
|
582
|
+
* get lastlinedefined.
|
583
|
+
*/
|
584
|
+
static VALUE rua_debug_lastlinedefined(VALUE self) {
|
585
|
+
struct rua_debug *p;
|
586
|
+
|
587
|
+
Data_Get_Struct(self, struct rua_debug, p);
|
588
|
+
return p->lastlinedefined;
|
589
|
+
}
|
590
|
+
|
591
|
+
/**
|
592
|
+
* get short_src.
|
593
|
+
*/
|
594
|
+
static VALUE rua_debug_short_src(VALUE self) {
|
595
|
+
struct rua_debug *p;
|
596
|
+
|
597
|
+
Data_Get_Struct(self, struct rua_debug, p);
|
598
|
+
return p->short_src;
|
599
|
+
}
|
600
|
+
|
601
|
+
/**
|
602
|
+
* convert to hash.
|
603
|
+
*/
|
604
|
+
static VALUE rua_debug_to_hash(VALUE self) {
|
605
|
+
struct rua_debug *p;
|
606
|
+
VALUE hash;
|
607
|
+
|
608
|
+
Data_Get_Struct(self, struct rua_debug, p);
|
609
|
+
hash = rb_hash_new();
|
610
|
+
rb_hash_aset(hash, ID2SYM(rb_intern("name")) , p->name);
|
611
|
+
rb_hash_aset(hash, ID2SYM(rb_intern("namewhat")) , p->namewhat);
|
612
|
+
rb_hash_aset(hash, ID2SYM(rb_intern("what")) , p->what);
|
613
|
+
rb_hash_aset(hash, ID2SYM(rb_intern("source")) , p->source);
|
614
|
+
rb_hash_aset(hash, ID2SYM(rb_intern("currentline")) , p->currentline);
|
615
|
+
rb_hash_aset(hash, ID2SYM(rb_intern("nups")) , p->nups);
|
616
|
+
rb_hash_aset(hash, ID2SYM(rb_intern("linedefined")) , p->linedefined);
|
617
|
+
rb_hash_aset(hash, ID2SYM(rb_intern("lastlinedefined")), p->lastlinedefined);
|
618
|
+
rb_hash_aset(hash, ID2SYM(rb_intern("short_src")) , p->short_src);
|
619
|
+
return hash;
|
620
|
+
}
|
621
|
+
|
622
|
+
// ------------------------------------------------------------------
|
623
|
+
|
464
624
|
static VALUE rua_tomultiretval(lua_State *L, int pretop, struct rua_state *R) {
|
465
625
|
VALUE retval;
|
466
626
|
int nresults, i;
|
@@ -689,6 +849,7 @@ static int rua_proc_call(lua_State *L) {
|
|
689
849
|
struct rua_state *R;
|
690
850
|
VALUE proc, args, last, retval, errargs;
|
691
851
|
int i, n, status;
|
852
|
+
lua_Debug ar;
|
692
853
|
|
693
854
|
proc = (VALUE) lua_touserdata(L, lua_upvalueindex(1));
|
694
855
|
R = (struct rua_state *) lua_touserdata(L, lua_upvalueindex(2));
|
@@ -712,6 +873,11 @@ static int rua_proc_call(lua_State *L) {
|
|
712
873
|
if (rua_obj_is_executable(R->error_handler)) {
|
713
874
|
errargs = rb_ary_new();
|
714
875
|
rb_ary_push(errargs, ruby_errinfo);
|
876
|
+
|
877
|
+
if (lua_getstack(L, 0, &ar) && lua_getinfo(L, "nSlu", &ar)) {
|
878
|
+
rb_ary_push(errargs, rua_toruadebug(&ar));
|
879
|
+
}
|
880
|
+
|
715
881
|
rb_ary_push(errargs, R->error_handler);
|
716
882
|
retval = rb_protect(_rua_proc_call, errargs, &status);
|
717
883
|
|
@@ -765,6 +931,24 @@ static VALUE rua_toruaobj(VALUE klass, lua_State *L, int idx, struct rua_state *
|
|
765
931
|
return ruaobj;
|
766
932
|
}
|
767
933
|
|
934
|
+
static VALUE rua_toruadebug(lua_Debug *ar) {
|
935
|
+
struct rua_debug *p;
|
936
|
+
VALUE ruadebug;
|
937
|
+
|
938
|
+
ruadebug = rb_funcall(RuaDebug, rb_intern("new"), 0);
|
939
|
+
Data_Get_Struct(ruadebug, struct rua_debug, p);
|
940
|
+
p->name = ar->name ? rb_str_new2(ar->name) : Qnil;
|
941
|
+
p->namewhat = ar->namewhat ? rb_str_new2(ar->namewhat) : Qnil;
|
942
|
+
p->what = ar->what ? rb_str_new2(ar->what) : Qnil;
|
943
|
+
p->source = ar->source ? rb_str_new2(ar->source) : Qnil;
|
944
|
+
p->currentline = INT2NUM(ar->currentline);
|
945
|
+
p->nups = INT2NUM(ar->nups);
|
946
|
+
p->linedefined = INT2NUM(ar->linedefined);
|
947
|
+
p->lastlinedefined = INT2NUM(ar->lastlinedefined);
|
948
|
+
p->short_src = ar->short_src ? rb_str_new2(ar->short_src) : Qnil;
|
949
|
+
return ruadebug;
|
950
|
+
}
|
951
|
+
|
768
952
|
static VALUE rua_obj_is_executable(VALUE obj) {
|
769
953
|
return (rb_obj_is_kind_of(obj, rb_cProc) || rb_obj_is_kind_of(obj, rb_cMethod));
|
770
954
|
}
|
data/lib/i386-mswin32/rua.so
CHANGED
Binary file
|
metadata
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
|
-
rubygems_version: 0.9.
|
2
|
+
rubygems_version: 0.9.2
|
3
3
|
specification_version: 1
|
4
4
|
name: rua
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.
|
7
|
-
date: 2007-11-
|
6
|
+
version: 0.3.0
|
7
|
+
date: 2007-11-24 00:00:00 +09:00
|
8
8
|
summary: Rua is a library for using Lua under Ruby.
|
9
9
|
require_paths:
|
10
10
|
- lib/i386-mswin32
|