rua 0.1.0 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|