rua 0.4.6-mswin32 → 0.4.7-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/ext/rua.c +83 -10
- data/lib/i386-mswin32/rua.so +0 -0
- metadata +2 -2
data/ext/rua.c
CHANGED
@@ -8,6 +8,7 @@ __declspec(dllexport) void Init_rua(void);
|
|
8
8
|
#include <malloc.h>
|
9
9
|
#include <errno.h>
|
10
10
|
#include <stdarg.h>
|
11
|
+
#include <math.h>
|
11
12
|
|
12
13
|
#include "lua.h"
|
13
14
|
#include "lualib.h"
|
@@ -36,7 +37,7 @@ __declspec(dllexport) void Init_rua(void);
|
|
36
37
|
#define RARRAY_LEN(s) (RARRAY(s)->len)
|
37
38
|
#endif
|
38
39
|
|
39
|
-
#define VERSION "0.4.
|
40
|
+
#define VERSION "0.4.7"
|
40
41
|
#define REF_RBOBJ "self"
|
41
42
|
|
42
43
|
#define ICONV_JIS "ISO-2022-JP"
|
@@ -119,7 +120,7 @@ void Init_rua() {
|
|
119
120
|
//rb_define_const(Rua, "UTF8", rb_str_new2(ICONV_UTF8));
|
120
121
|
rb_define_private_method(Rua, "initialize", rua_initialize, -1);
|
121
122
|
rb_define_method(Rua, "openlibs", rua_openlibs, -1);
|
122
|
-
rb_define_method(Rua, "eval", rua_eval, 1);
|
123
|
+
rb_define_method(Rua, "eval", rua_eval, -1);
|
123
124
|
rb_define_method(Rua, "[]", rua_get, 1);
|
124
125
|
rb_define_method(Rua, "[]=", rua_set, 2);
|
125
126
|
rb_define_method(Rua, "secure", rua_get_secure, 0);
|
@@ -133,6 +134,8 @@ void Init_rua() {
|
|
133
134
|
rb_define_method(Rua, "error_handler", rua_get_error_handler, 0);
|
134
135
|
rb_define_method(Rua, "error_handler=", rua_set_error_handler, 1);
|
135
136
|
rb_define_method(Rua, "method_missing", rua_method_missing, -1);
|
137
|
+
rb_define_method(Rua, "accept_block", rua_get_accept_block, 0);
|
138
|
+
rb_define_method(Rua, "accept_block=", rua_set_accept_block, 1);
|
136
139
|
|
137
140
|
m_method_unbound = rb_funcall(rb_cObject, rb_intern("instance_method"), 1, ID2SYM(rb_intern("method")));
|
138
141
|
m_methods_unbound = rb_funcall(rb_cObject, rb_intern("instance_method"), 1, ID2SYM(rb_intern("methods")));
|
@@ -225,6 +228,7 @@ static VALUE rua_initialize(int argc, VALUE *argv, VALUE self) {
|
|
225
228
|
p->R->secure = 1;
|
226
229
|
p->R->abort_by_error = 1;
|
227
230
|
p->R->wrap_error = 1;
|
231
|
+
p->R->accept_block = 1;
|
228
232
|
|
229
233
|
if (argc > 0) {
|
230
234
|
rua_openlibs(argc, argv, self);
|
@@ -289,13 +293,20 @@ static VALUE rua_openlibs(int argc, VALUE *argv, VALUE self) {
|
|
289
293
|
/**
|
290
294
|
* evaluates string.
|
291
295
|
*/
|
292
|
-
static VALUE rua_eval(VALUE
|
296
|
+
static VALUE rua_eval(int argc, VALUE *argv, VALUE self) {
|
293
297
|
struct rua *p;
|
294
|
-
VALUE errinfo;
|
298
|
+
VALUE str, script_name, errinfo;
|
295
299
|
const char *errmsg = NULL;
|
296
|
-
int pretop, result = -1;
|
300
|
+
int pretop, loaded = -1, result = -1;
|
301
|
+
|
302
|
+
rb_scan_args(argc, argv, "11", &str, &script_name);
|
297
303
|
|
298
304
|
Check_Type(str, T_STRING);
|
305
|
+
|
306
|
+
if (!NIL_P(script_name)) {
|
307
|
+
Check_Type(script_name, T_STRING);
|
308
|
+
}
|
309
|
+
|
299
310
|
Data_Get_Struct(self, struct rua, p);
|
300
311
|
|
301
312
|
if (!NIL_P(p->R->external_charset)) {
|
@@ -304,7 +315,13 @@ static VALUE rua_eval(VALUE self, VALUE str) {
|
|
304
315
|
|
305
316
|
pretop = lua_gettop(p->L);
|
306
317
|
|
307
|
-
if (
|
318
|
+
if (NIL_P(script_name)) {
|
319
|
+
loaded = luaL_loadstring(p->L, RSTRING_PTR(str));
|
320
|
+
} else {
|
321
|
+
loaded = luaL_loadbuffer(p->L, RSTRING_PTR(str), RSTRING_LEN(str), RSTRING_PTR(script_name));
|
322
|
+
}
|
323
|
+
|
324
|
+
if (loaded != 0) {
|
308
325
|
int curtop = lua_gettop(p->L);
|
309
326
|
|
310
327
|
if (!lua_isnil(p->L, -1)) {
|
@@ -540,11 +557,40 @@ static VALUE rua_method_missing(int argc, VALUE *argv, VALUE self) {
|
|
540
557
|
}
|
541
558
|
}
|
542
559
|
|
560
|
+
/**
|
561
|
+
* get accept block flag.
|
562
|
+
*/
|
563
|
+
static VALUE rua_get_accept_block(VALUE self) {
|
564
|
+
struct rua *p;
|
565
|
+
|
566
|
+
Data_Get_Struct(self, struct rua, p);
|
567
|
+
return p->R->accept_block ? Qtrue : Qfalse;
|
568
|
+
}
|
569
|
+
|
570
|
+
/**
|
571
|
+
* set accept block flag.
|
572
|
+
*/
|
573
|
+
static VALUE rua_set_accept_block(VALUE self, VALUE accept_block) {
|
574
|
+
struct rua *p;
|
575
|
+
|
576
|
+
Data_Get_Struct(self, struct rua, p);
|
577
|
+
|
578
|
+
switch (TYPE(accept_block)) {
|
579
|
+
case T_TRUE: p->R->accept_block = 1; break;
|
580
|
+
case T_FALSE: p->R->accept_block = 0; break;
|
581
|
+
default:
|
582
|
+
rb_raise(rb_eTypeError, "wrong argument type %s (expected TrueClass or FalseClass)", rua_classname_ptr(accept_block));
|
583
|
+
break;
|
584
|
+
}
|
585
|
+
|
586
|
+
return Qnil;
|
587
|
+
}
|
588
|
+
|
543
589
|
// ------------------------------------------------------------------
|
544
590
|
|
545
591
|
static VALUE rua_ref_alloc(VALUE klass) {
|
546
592
|
struct rua_ref *p = ALLOC(struct rua_ref);
|
547
|
-
|
593
|
+
p->is_ruby = 0;
|
548
594
|
return Data_Wrap_Struct(klass, rua_ref_mark, rua_ref_free, p);
|
549
595
|
}
|
550
596
|
|
@@ -565,6 +611,18 @@ static void rua_ref_free(struct rua_ref *p) {
|
|
565
611
|
xfree(p);
|
566
612
|
}
|
567
613
|
|
614
|
+
static void rua_ref_set_ruby_flag(VALUE self, int is_ruby) {
|
615
|
+
struct rua_ref *p;
|
616
|
+
Data_Get_Struct(self, struct rua_ref, p);
|
617
|
+
p->is_ruby = is_ruby;
|
618
|
+
}
|
619
|
+
|
620
|
+
static int rua_ref_get_ruby_flag(VALUE self) {
|
621
|
+
struct rua_ref *p;
|
622
|
+
Data_Get_Struct(self, struct rua_ref, p);
|
623
|
+
return p->is_ruby;
|
624
|
+
}
|
625
|
+
|
568
626
|
// ------------------------------------------------------------------
|
569
627
|
|
570
628
|
/**
|
@@ -891,7 +949,7 @@ static VALUE rua_torbval(lua_State *L, int idx, struct rua_state *R) {
|
|
891
949
|
|
892
950
|
switch (lua_type(L, idx)) {
|
893
951
|
case LUA_TNUMBER:
|
894
|
-
rbval =
|
952
|
+
rbval = rua_torbnum(L, idx);
|
895
953
|
break;
|
896
954
|
|
897
955
|
case LUA_TBOOLEAN:
|
@@ -917,7 +975,11 @@ static VALUE rua_torbval(lua_State *L, int idx, struct rua_state *R) {
|
|
917
975
|
break;
|
918
976
|
|
919
977
|
case LUA_TFUNCTION:
|
920
|
-
|
978
|
+
{
|
979
|
+
int type_is_cfunction = lua_iscfunction(L, idx);
|
980
|
+
rbval = rua_toruaobj(RuaFunc, L, idx, R);
|
981
|
+
rua_ref_set_ruby_flag(rbval, type_is_cfunction);
|
982
|
+
}
|
921
983
|
break;
|
922
984
|
|
923
985
|
case LUA_TTHREAD:
|
@@ -1190,7 +1252,7 @@ static int rua_proc_call(lua_State *L) {
|
|
1190
1252
|
last = rb_ary_entry(args, -1);
|
1191
1253
|
rb_ary_push(args, proc);
|
1192
1254
|
|
1193
|
-
if (rb_obj_is_kind_of(last, RuaFunc)) {
|
1255
|
+
if (R->accept_block && rb_obj_is_kind_of(last, RuaFunc) && !rua_ref_get_ruby_flag(last)) {
|
1194
1256
|
retval = rb_protect(_rua_proc_call_with_block, args, &status);
|
1195
1257
|
} else {
|
1196
1258
|
retval = rb_protect(_rua_proc_call, args, &status);
|
@@ -1433,3 +1495,14 @@ static VALUE rua_iconv(const char *to, const char *from, VALUE in) {
|
|
1433
1495
|
|
1434
1496
|
return out;
|
1435
1497
|
}
|
1498
|
+
|
1499
|
+
static VALUE rua_torbnum(lua_State *L, int idx) {
|
1500
|
+
double luanum = lua_tonumber(L, idx);
|
1501
|
+
double truncated = floor(luanum);
|
1502
|
+
|
1503
|
+
if (luanum == truncated) {
|
1504
|
+
return INT2NUM(lua_tointeger(L, idx));
|
1505
|
+
} else {
|
1506
|
+
return rb_float_new(luanum);
|
1507
|
+
}
|
1508
|
+
}
|
data/lib/i386-mswin32/rua.so
CHANGED
Binary file
|
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.
|
4
|
+
version: 0.4.7
|
5
5
|
platform: mswin32
|
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-
|
12
|
+
date: 2008-09-30 00:00:00 +09:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|