rua 0.1.0 → 0.1.1
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 +38 -0
- data/ext/rua.c +51 -49
- data/ext/rua.h +4 -0
- metadata +4 -3
data/README.txt
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
= rua
|
2
|
+
|
3
|
+
Copyright (c) 2007 SUGAWARA Genki <sgwr_dts@yahoo.co.jp>
|
4
|
+
|
5
|
+
== Description
|
6
|
+
|
7
|
+
Rua is a library for using Lua under Ruby.
|
8
|
+
|
9
|
+
== Example
|
10
|
+
|
11
|
+
require 'rua'
|
12
|
+
|
13
|
+
rua = Rua.new
|
14
|
+
rua.openlibs(:all)
|
15
|
+
#rua.openlibs(:base, :package, :string)
|
16
|
+
#rua.secure = false
|
17
|
+
|
18
|
+
rua[:str] = 'xxx'
|
19
|
+
rua[:num] = 100
|
20
|
+
rua[:proc] = lambda do
|
21
|
+
puts 'Proc called.'
|
22
|
+
end
|
23
|
+
|
24
|
+
puts rua.eval(<<EOS)
|
25
|
+
print('hello Rua!')
|
26
|
+
print(str)
|
27
|
+
print(num)
|
28
|
+
proc()
|
29
|
+
|
30
|
+
f = function()
|
31
|
+
print('f() called.')
|
32
|
+
end
|
33
|
+
|
34
|
+
return true
|
35
|
+
EOS
|
36
|
+
|
37
|
+
f = rua[:f]
|
38
|
+
f.call
|
data/ext/rua.c
CHANGED
@@ -46,15 +46,16 @@ static const char *insecure_methods[] = {
|
|
46
46
|
};
|
47
47
|
|
48
48
|
static const int insecure_method_num = sizeof(insecure_methods) / sizeof(char*);
|
49
|
+
static VALUE Rua, RuaFunc, RuaError;
|
50
|
+
static VALUE s_all, s_base, s_package, s_string, s_table, s_math, s_io, s_debug;
|
49
51
|
|
50
52
|
void Init_rua() {
|
51
|
-
VALUE Rua, RuaFunc, RuaError;
|
52
|
-
|
53
53
|
Rua = rb_define_class("Rua", rb_cObject);
|
54
54
|
RuaFunc = rb_define_class("RuaFunc", rb_cObject);
|
55
55
|
RuaError = rb_define_class("RuaError", rb_eStandardError);
|
56
56
|
|
57
57
|
rb_define_alloc_func(Rua, rua_alloc);
|
58
|
+
rb_define_const(Rua, "VERSION", rb_str_new2("0.1.1"));
|
58
59
|
rb_define_private_method(Rua, "initialize", rua_initialize, -1);
|
59
60
|
rb_define_method(Rua, "openlibs", rua_openlibs, -1);
|
60
61
|
rb_define_method(Rua, "eval", rua_eval, 1);
|
@@ -66,6 +67,15 @@ void Init_rua() {
|
|
66
67
|
rb_define_alloc_func(RuaFunc, rua_func_alloc);
|
67
68
|
rb_define_private_method(RuaFunc, "initialize", rua_func_initialize, 0);
|
68
69
|
rb_define_method(RuaFunc, "call", rua_func_call, -1);
|
70
|
+
|
71
|
+
s_all = ID2SYM(rb_intern("all"));
|
72
|
+
s_base = ID2SYM(rb_intern("base"));
|
73
|
+
s_package = ID2SYM(rb_intern("package"));
|
74
|
+
s_string = ID2SYM(rb_intern("string"));
|
75
|
+
s_table = ID2SYM(rb_intern("table"));
|
76
|
+
s_math = ID2SYM(rb_intern("math"));
|
77
|
+
s_io = ID2SYM(rb_intern("io"));
|
78
|
+
s_debug = ID2SYM(rb_intern("debug"));
|
69
79
|
}
|
70
80
|
|
71
81
|
// ------------------------------------------------------------------
|
@@ -86,7 +96,7 @@ static void rua_free(struct rua *p) {
|
|
86
96
|
|
87
97
|
static VALUE rua_initialize(int argc, VALUE *argv, VALUE self) {
|
88
98
|
struct rua *p;
|
89
|
-
VALUE error_handler
|
99
|
+
VALUE error_handler;
|
90
100
|
|
91
101
|
Data_Get_Struct(self, struct rua, p);
|
92
102
|
p->L = NULL;
|
@@ -94,9 +104,7 @@ static VALUE rua_initialize(int argc, VALUE *argv, VALUE self) {
|
|
94
104
|
if (rb_scan_args(argc, argv, "01", &error_handler) < 1) {
|
95
105
|
error_handler = Qnil;
|
96
106
|
} else if (!rua_obj_is_executable(error_handler)) {
|
97
|
-
|
98
|
-
klassname = rb_class_name(klass);
|
99
|
-
rb_raise(rb_eTypeError, "wrong argument type %s (expected Proc or Method)", StringValuePtr(klassname));
|
107
|
+
rb_raise(rb_eTypeError, "wrong argument type %s (expected Proc or Method)", rua_classname_ptr(error_handler));
|
100
108
|
}
|
101
109
|
|
102
110
|
p->L = lua_open();
|
@@ -107,7 +115,7 @@ static VALUE rua_initialize(int argc, VALUE *argv, VALUE self) {
|
|
107
115
|
|
108
116
|
static VALUE rua_openlibs(int argc, VALUE *argv, VALUE self) {
|
109
117
|
struct rua *p;
|
110
|
-
VALUE arg
|
118
|
+
VALUE arg;
|
111
119
|
int i;
|
112
120
|
|
113
121
|
if (argc < 1) {
|
@@ -120,15 +128,6 @@ static VALUE rua_openlibs(int argc, VALUE *argv, VALUE self) {
|
|
120
128
|
|
121
129
|
Data_Get_Struct(self, struct rua, p);
|
122
130
|
|
123
|
-
s_all = ID2SYM(rb_intern("all"));
|
124
|
-
s_base = ID2SYM(rb_intern("base"));
|
125
|
-
s_package = ID2SYM(rb_intern("package"));
|
126
|
-
s_string = ID2SYM(rb_intern("string"));
|
127
|
-
s_table = ID2SYM(rb_intern("table"));
|
128
|
-
s_math = ID2SYM(rb_intern("math"));
|
129
|
-
s_io = ID2SYM(rb_intern("io"));
|
130
|
-
s_debug = ID2SYM(rb_intern("debug"));
|
131
|
-
|
132
131
|
for (i = 0; i < argc; i++) {
|
133
132
|
arg = argv[i];
|
134
133
|
|
@@ -156,8 +155,7 @@ static VALUE rua_openlibs(int argc, VALUE *argv, VALUE self) {
|
|
156
155
|
lua_pushcfunction(p->L, luaopen_debug);
|
157
156
|
lua_call(p->L, 0, 0);
|
158
157
|
} else {
|
159
|
-
|
160
|
-
rb_raise(rb_eArgError, "unknown library '%s' (available: base, package, table, math, io, debug, all)", StringValuePtr(arg));
|
158
|
+
rb_raise(rb_eArgError, "unknown library '%s' (available: base, package, table, math, io, debug, all)", rua_to_sptr(arg));
|
161
159
|
}
|
162
160
|
}
|
163
161
|
|
@@ -166,7 +164,7 @@ static VALUE rua_openlibs(int argc, VALUE *argv, VALUE self) {
|
|
166
164
|
|
167
165
|
static VALUE rua_eval(VALUE self, VALUE str) {
|
168
166
|
struct rua *p;
|
169
|
-
VALUE retval
|
167
|
+
VALUE retval;
|
170
168
|
const char *errmsg;
|
171
169
|
|
172
170
|
Data_Get_Struct(self, struct rua, p);
|
@@ -190,8 +188,7 @@ static VALUE rua_get(VALUE self, VALUE key) {
|
|
190
188
|
VALUE retval;
|
191
189
|
|
192
190
|
Data_Get_Struct(self, struct rua, p);
|
193
|
-
|
194
|
-
lua_getglobal(p->L, StringValuePtr(key));
|
191
|
+
lua_getglobal(p->L, rua_to_sptr(key));
|
195
192
|
retval = rua_torbval(p->L, -1, p->error_handler, p->secure);
|
196
193
|
lua_pop(p->L, 1);
|
197
194
|
return retval;
|
@@ -199,21 +196,15 @@ static VALUE rua_get(VALUE self, VALUE key) {
|
|
199
196
|
|
200
197
|
static VALUE rua_set(VALUE self, VALUE key, VALUE val) {
|
201
198
|
struct rua *p;
|
202
|
-
VALUE RuaError, inspect, klass, klassname;
|
203
199
|
|
204
200
|
Data_Get_Struct(self, struct rua, p);
|
205
201
|
|
206
|
-
if (p->secure &&
|
207
|
-
RuaError
|
208
|
-
inspect = rb_check_convert_type(val, T_STRING, "String", "inspect");
|
209
|
-
klass = rb_obj_class(val);
|
210
|
-
klassname = rb_class_name(klass);
|
211
|
-
rb_raise(RuaError, "set insecure value %s (%s)", StringValuePtr(inspect), StringValuePtr(klassname));
|
202
|
+
if (p->secure && (rb_equal(rb_cModule, val) || rb_equal(rb_cClass, val))) {
|
203
|
+
rb_raise(RuaError, "set insecure value %s", rua_to_sptr(val));
|
212
204
|
}
|
213
205
|
|
214
|
-
key = rb_check_convert_type(key, T_STRING, "String", "to_s");
|
215
206
|
rua_pushrbval(p->L, val, p->error_handler, p->secure);
|
216
|
-
lua_setglobal(p->L,
|
207
|
+
lua_setglobal(p->L, rua_to_sptr(key));
|
217
208
|
return Qnil;
|
218
209
|
}
|
219
210
|
|
@@ -226,7 +217,6 @@ static VALUE rua_get_secure(VALUE self) {
|
|
226
217
|
|
227
218
|
static VALUE rua_set_secure(VALUE self, VALUE secure) {
|
228
219
|
struct rua *p;
|
229
|
-
VALUE klass, klassname;
|
230
220
|
|
231
221
|
Data_Get_Struct(self, struct rua, p);
|
232
222
|
|
@@ -234,9 +224,7 @@ static VALUE rua_set_secure(VALUE self, VALUE secure) {
|
|
234
224
|
case T_TRUE: p->secure = 1; break;
|
235
225
|
case T_FALSE: p->secure = 0; break;
|
236
226
|
default:
|
237
|
-
|
238
|
-
klassname = rb_class_name(klass);
|
239
|
-
rb_raise(rb_eTypeError, "wrong argument type %s (expected TrueClass or FalseClass)", StringValuePtr(klassname));
|
227
|
+
rb_raise(rb_eTypeError, "wrong argument type %s (expected TrueClass or FalseClass)", rua_classname_ptr(secure));
|
240
228
|
break;
|
241
229
|
}
|
242
230
|
|
@@ -257,7 +245,7 @@ static VALUE rua_func_initialize(VALUE self) {
|
|
257
245
|
|
258
246
|
static VALUE rua_func_call(int argc, VALUE *argv, VALUE self) {
|
259
247
|
struct rua_func *p;
|
260
|
-
VALUE retval
|
248
|
+
VALUE retval;
|
261
249
|
int i;
|
262
250
|
const char *errmsg;
|
263
251
|
|
@@ -269,7 +257,6 @@ static VALUE rua_func_call(int argc, VALUE *argv, VALUE self) {
|
|
269
257
|
}
|
270
258
|
|
271
259
|
if (lua_pcall(p->L, argc, 1, 0) != 0) {
|
272
|
-
RuaError = rb_const_get(rb_cObject, rb_intern("RuaError"));
|
273
260
|
errmsg = lua_tostring(p->L, -1);
|
274
261
|
lua_pop(p->L, 1);
|
275
262
|
rb_raise(RuaError, "%s", errmsg);
|
@@ -336,7 +323,6 @@ static VALUE rua_tohash(lua_State *L, int idx, VALUE error_handler, int secure)
|
|
336
323
|
|
337
324
|
static void rua_pushrbval(lua_State *L, VALUE rbval, VALUE error_handler, int secure) {
|
338
325
|
struct rua_func *p;
|
339
|
-
VALUE RuaFunc, inspect, klass, klassname;
|
340
326
|
|
341
327
|
switch (TYPE(rbval)) {
|
342
328
|
case T_NIL:
|
@@ -370,13 +356,9 @@ static void rua_pushrbval(lua_State *L, VALUE rbval, VALUE error_handler, int se
|
|
370
356
|
break;
|
371
357
|
|
372
358
|
default:
|
373
|
-
|
374
|
-
|
375
|
-
|
376
|
-
inspect = rb_check_convert_type(rbval, T_STRING, "String", "inspect");
|
377
|
-
klass = rb_obj_class(rbval);
|
378
|
-
klassname = rb_class_name(klass);
|
379
|
-
rb_fatal("convert insecure value %s (%s)", StringValuePtr(inspect), StringValuePtr(klassname));
|
359
|
+
if (secure && (rb_equal(rb_cModule, rbval) || rb_equal(rb_cClass, rbval))) {
|
360
|
+
fprintf(stderr, "warning: convert insecure value %s", rua_to_sptr(rbval));
|
361
|
+
lua_pushnil(L);
|
380
362
|
} else if (rb_obj_is_kind_of(rbval, RuaFunc)) {
|
381
363
|
Data_Get_Struct(rbval, struct rua_func, p);
|
382
364
|
lua_rawgeti(L, LUA_REGISTRYINDEX, p->ref);
|
@@ -448,7 +430,7 @@ static void rua_newtable_from_obj(lua_State *L, VALUE obj, VALUE error_handler,
|
|
448
430
|
}
|
449
431
|
|
450
432
|
static int rua_proc_call(lua_State *L) {
|
451
|
-
VALUE proc, args, retval, error_handler, errargs
|
433
|
+
VALUE proc, args, retval, error_handler, errargs;
|
452
434
|
int i, n, status, secure;
|
453
435
|
|
454
436
|
proc = (VALUE) lua_touserdata(L, lua_upvalueindex(1));
|
@@ -472,8 +454,7 @@ static int rua_proc_call(lua_State *L) {
|
|
472
454
|
retval = rb_protect(_rua_proc_call, errargs, &status);
|
473
455
|
|
474
456
|
if (status != 0) {
|
475
|
-
|
476
|
-
fprintf(stderr, "warning: %s\n", StringValuePtr(errmsg));
|
457
|
+
fprintf(stderr, "warning: %s\n", rua_to_sptr(ruby_errinfo));
|
477
458
|
}
|
478
459
|
} else {
|
479
460
|
retval = Qnil;
|
@@ -492,9 +473,8 @@ static VALUE _rua_proc_call(VALUE args) {
|
|
492
473
|
|
493
474
|
static VALUE rua_toruafunc(lua_State *L, int idx, VALUE error_handler, int secure) {
|
494
475
|
struct rua_func *p;
|
495
|
-
VALUE
|
476
|
+
VALUE f;
|
496
477
|
|
497
|
-
RuaFunc = rb_const_get(rb_cObject, rb_intern("RuaFunc"));
|
498
478
|
f = rb_funcall(RuaFunc, rb_intern("new"), 0);
|
499
479
|
Data_Get_Struct(f, struct rua_func, p);
|
500
480
|
p->L = L;
|
@@ -521,3 +501,25 @@ static int rua_name_is_insecure_method(const char *name) {
|
|
521
501
|
|
522
502
|
return 0;
|
523
503
|
}
|
504
|
+
|
505
|
+
static VALUE rua_to_s(VALUE v) {
|
506
|
+
return rb_check_convert_type(v, T_STRING, "String", "to_s");
|
507
|
+
}
|
508
|
+
|
509
|
+
static const char *rua_to_sptr(VALUE v) {
|
510
|
+
VALUE str = rua_to_s(v);
|
511
|
+
|
512
|
+
return StringValuePtr(str);
|
513
|
+
}
|
514
|
+
|
515
|
+
static VALUE rua_classname(VALUE v) {
|
516
|
+
VALUE klass = rb_obj_class(v);
|
517
|
+
|
518
|
+
return rb_class_name(klass);
|
519
|
+
}
|
520
|
+
|
521
|
+
static const char *rua_classname_ptr(VALUE v) {
|
522
|
+
VALUE klassname = rua_classname(v);
|
523
|
+
|
524
|
+
return StringValuePtr(klassname);
|
525
|
+
}
|
data/ext/rua.h
CHANGED
@@ -40,5 +40,9 @@ static VALUE _rua_proc_call(VALUE args);
|
|
40
40
|
static VALUE rua_toruafunc(lua_State *L, int idx, VALUE error_handler, int secure);
|
41
41
|
static VALUE rua_obj_is_executable(VALUE obj);
|
42
42
|
static int rua_name_is_insecure_method(const char *name);
|
43
|
+
static VALUE rua_to_s(VALUE v);
|
44
|
+
static const char *rua_to_sptr(VALUE v);
|
45
|
+
static VALUE rua_classname(VALUE v);
|
46
|
+
static const char *rua_classname_ptr(VALUE v);
|
43
47
|
|
44
48
|
#endif
|
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.1.
|
7
|
-
date: 2007-11-
|
6
|
+
version: 0.1.1
|
7
|
+
date: 2007-11-14 00:00:00 +09:00
|
8
8
|
summary: rua is a library for using Lua under Ruby.
|
9
9
|
require_paths:
|
10
10
|
- lib
|
@@ -29,6 +29,7 @@ post_install_message:
|
|
29
29
|
authors:
|
30
30
|
- winebarrel
|
31
31
|
files:
|
32
|
+
- README.txt
|
32
33
|
- ext/rua.c
|
33
34
|
- ext/rua.h
|
34
35
|
- ext/extconf.rb
|