mirror of
https://github.com/mruby/mruby
synced 2026-06-08 16:11:16 +00:00
add new predicates mrb_string_p(),mrb_array_p(),mrb_hash_p()
This commit is contained in:
@@ -153,13 +153,16 @@ mrb_float_value(mrb_float f)
|
||||
#define mrb_float_p(o) (mrb_type(o) == MRB_TT_FLOAT)
|
||||
#define mrb_undef_p(o) (mrb_type(o) == MRB_TT_UNDEF)
|
||||
#define mrb_nil_p(o) (mrb_type(o) == MRB_TT_FALSE && !(o).value.i)
|
||||
#define mrb_symbol_p(o) (mrb_type(o) == MRB_TT_SYMBOL)
|
||||
#define mrb_array_p(o) (mrb_type(o) == MRB_TT_ARRAY)
|
||||
#define mrb_string_p(o) (mrb_type(o) == MRB_TT_STRING)
|
||||
#define mrb_hash_p(o) (mrb_type(o) == MRB_TT_HASH)
|
||||
#define mrb_test(o) (mrb_type(o) != MRB_TT_FALSE)
|
||||
|
||||
#include "mruby/object.h"
|
||||
|
||||
#define IMMEDIATE_P(x) (mrb_type(x) <= MRB_TT_MAIN)
|
||||
#define SPECIAL_CONST_P(x) IMMEDIATE_P(x)
|
||||
#define mrb_symbol_p(o) (mrb_type(o) == MRB_TT_SYMBOL)
|
||||
#define RTEST(o) mrb_test(o)
|
||||
|
||||
#define FL_ABLE(x) (!SPECIAL_CONST_P(x))
|
||||
|
||||
+6
-6
@@ -294,7 +294,7 @@ mrb_ary_cmp(mrb_state *mrb, mrb_value ary1)
|
||||
int i, len;
|
||||
|
||||
mrb_get_args(mrb, "o", &ary2);
|
||||
if (mrb_type(ary2) != MRB_TT_ARRAY) return mrb_nil_value();
|
||||
if (!mrb_array_p(ary2)) return mrb_nil_value();
|
||||
a1 = RARRAY(ary1); a2 = RARRAY(ary2);
|
||||
if (a1->len == a2->len && a1->ptr == a2->ptr) return mrb_fixnum_value(0);
|
||||
else {
|
||||
@@ -616,7 +616,7 @@ mrb_ary_splice(mrb_state *mrb, mrb_value ary, mrb_int head, mrb_int len, mrb_val
|
||||
tail = head + len;
|
||||
|
||||
/* size check */
|
||||
if (mrb_type(rpl) == MRB_TT_ARRAY) {
|
||||
if (mrb_array_p(rpl)) {
|
||||
argc = RARRAY_LEN(rpl);
|
||||
argv = RARRAY_PTR(rpl);
|
||||
}
|
||||
@@ -848,7 +848,7 @@ mrb_ary_rindex_m(mrb_state *mrb, mrb_value self)
|
||||
mrb_value
|
||||
mrb_ary_splat(mrb_state *mrb, mrb_value v)
|
||||
{
|
||||
if (mrb_type(v) == MRB_TT_ARRAY) {
|
||||
if (mrb_array_p(v)) {
|
||||
return v;
|
||||
}
|
||||
else {
|
||||
@@ -928,7 +928,7 @@ inspect_ary(mrb_state *mrb, mrb_value ary, mrb_value list)
|
||||
if (i > 0) {
|
||||
mrb_str_buf_cat(mrb, arystr, sep, sizeof(sep));
|
||||
}
|
||||
if (mrb_type(RARRAY_PTR(ary)[i]) == MRB_TT_ARRAY) {
|
||||
if (mrb_array_p(RARRAY_PTR(ary)[i])) {
|
||||
s = inspect_ary(mrb, RARRAY_PTR(ary)[i], list);
|
||||
} else {
|
||||
s = mrb_inspect(mrb, RARRAY_PTR(ary)[i]);
|
||||
@@ -1068,7 +1068,7 @@ mrb_ary_equal(mrb_state *mrb, mrb_value ary1)
|
||||
mrb_get_args(mrb, "o", &ary2);
|
||||
if (mrb_obj_equal(mrb, ary1, ary2)) return mrb_true_value();
|
||||
if (SPECIAL_CONST_P(ary2)) return mrb_false_value();
|
||||
if (mrb_type(ary2) != MRB_TT_ARRAY) {
|
||||
if (!mrb_array_p(ary2)) {
|
||||
if (!mrb_respond_to(mrb, ary2, mrb_intern(mrb, "to_ary"))) {
|
||||
return mrb_false_value();
|
||||
}
|
||||
@@ -1107,7 +1107,7 @@ mrb_ary_eql(mrb_state *mrb, mrb_value ary1)
|
||||
|
||||
mrb_get_args(mrb, "o", &ary2);
|
||||
if (mrb_obj_equal(mrb, ary1, ary2)) return mrb_true_value();
|
||||
if (mrb_type(ary2) != MRB_TT_ARRAY) return mrb_false_value();
|
||||
if (!mrb_array_p(ary2)) return mrb_false_value();
|
||||
if (RARRAY_LEN(ary1) != RARRAY_LEN(ary2)) return mrb_false_value();
|
||||
else {
|
||||
int i;
|
||||
|
||||
+2
-2
@@ -1322,10 +1322,10 @@ mod_define_method(mrb_state *mrb, mrb_value self)
|
||||
static mrb_sym
|
||||
mrb_sym_value(mrb_state *mrb, mrb_value val)
|
||||
{
|
||||
if(mrb_type(val) == MRB_TT_STRING) {
|
||||
if (mrb_string_p(val)) {
|
||||
return mrb_intern_str(mrb, val);
|
||||
}
|
||||
else if(mrb_type(val) != MRB_TT_SYMBOL) {
|
||||
else if(!mrb_symbol_p(val)) {
|
||||
mrb_value obj = mrb_funcall(mrb, val, "inspect", 0);
|
||||
mrb_raisef(mrb, E_TYPE_ERROR, "%s is not a symbol",
|
||||
mrb_string_value_ptr(mrb, obj));
|
||||
|
||||
+2
-2
@@ -37,7 +37,7 @@ static void mrb_hash_modify(mrb_state *mrb, mrb_value hash);
|
||||
static inline mrb_value
|
||||
mrb_hash_ht_key(mrb_state *mrb, mrb_value key)
|
||||
{
|
||||
if (mrb_type(key) == MRB_TT_STRING)
|
||||
if (mrb_string_p(key))
|
||||
return mrb_str_dup(mrb, key);
|
||||
else
|
||||
return key;
|
||||
@@ -1106,7 +1106,7 @@ hash_equal(mrb_state *mrb, mrb_value hash1, mrb_value hash2, int eql)
|
||||
khash_t(ht) *h1, *h2;
|
||||
|
||||
if (mrb_obj_equal(mrb, hash1, hash2)) return mrb_true_value();
|
||||
if (mrb_type(hash2) != MRB_TT_HASH) {
|
||||
if (!mrb_hash_p(hash2)) {
|
||||
if (!mrb_respond_to(mrb, hash2, mrb_intern(mrb, "to_hash"))) {
|
||||
return mrb_false_value();
|
||||
}
|
||||
|
||||
+1
-1
@@ -16,7 +16,7 @@ printstr(mrb_state *mrb, mrb_value obj)
|
||||
char *s;
|
||||
int len;
|
||||
|
||||
if (mrb_type(obj) == MRB_TT_STRING) {
|
||||
if (mrb_string_p(obj)) {
|
||||
str = mrb_str_ptr(obj);
|
||||
s = str->ptr;
|
||||
len = str->len;
|
||||
|
||||
+8
-8
@@ -333,7 +333,7 @@ mrb_str_concat(mrb_state *mrb, mrb_value self, mrb_value other)
|
||||
int len;
|
||||
|
||||
str_modify(mrb, s1);
|
||||
if (mrb_type(other) != MRB_TT_STRING) {
|
||||
if (!mrb_string_p(other)) {
|
||||
other = mrb_str_to_str(mrb, other);
|
||||
}
|
||||
s2 = mrb_str_ptr(other);
|
||||
@@ -519,7 +519,7 @@ mrb_str_cmp_m(mrb_state *mrb, mrb_value str1)
|
||||
mrb_int result;
|
||||
|
||||
mrb_get_args(mrb, "o", &str2);
|
||||
if (mrb_type(str2) != MRB_TT_STRING) {
|
||||
if (!mrb_string_p(str2)) {
|
||||
if (!mrb_respond_to(mrb, str2, mrb_intern(mrb, "to_s"))) {
|
||||
return mrb_nil_value();
|
||||
}
|
||||
@@ -557,7 +557,7 @@ int
|
||||
mrb_str_equal(mrb_state *mrb, mrb_value str1, mrb_value str2)
|
||||
{
|
||||
if (mrb_obj_equal(mrb, str1, str2)) return TRUE;
|
||||
if (mrb_type(str2) != MRB_TT_STRING) {
|
||||
if (!mrb_string_p(str2)) {
|
||||
if (mrb_nil_p(str2)) return FALSE;
|
||||
if (!mrb_respond_to(mrb, str2, mrb_intern(mrb, "to_str"))) {
|
||||
return FALSE;
|
||||
@@ -595,7 +595,7 @@ mrb_str_to_str(mrb_state *mrb, mrb_value str)
|
||||
{
|
||||
mrb_value s;
|
||||
|
||||
if (mrb_type(str) != MRB_TT_STRING) {
|
||||
if (!mrb_string_p(str)) {
|
||||
s = mrb_check_convert_type(mrb, str, MRB_TT_STRING, "String", "to_str");
|
||||
if (mrb_nil_p(s)) {
|
||||
s = mrb_convert_type(mrb, str, MRB_TT_STRING, "String", "to_s");
|
||||
@@ -609,7 +609,7 @@ mrb_value
|
||||
mrb_string_value(mrb_state *mrb, mrb_value *ptr)
|
||||
{
|
||||
mrb_value s = *ptr;
|
||||
if (mrb_type(s) != MRB_TT_STRING) {
|
||||
if (!mrb_string_p(s)) {
|
||||
s = mrb_str_to_str(mrb, s);
|
||||
*ptr = s;
|
||||
}
|
||||
@@ -1653,11 +1653,11 @@ mrb_obj_as_string(mrb_state *mrb, mrb_value obj)
|
||||
{
|
||||
mrb_value str;
|
||||
|
||||
if (mrb_type(obj) == MRB_TT_STRING) {
|
||||
if (mrb_string_p(obj)) {
|
||||
return obj;
|
||||
}
|
||||
str = mrb_funcall(mrb, obj, "to_s", 0);
|
||||
if (mrb_type(str) != MRB_TT_STRING)
|
||||
if (!mrb_string_p(str))
|
||||
return mrb_any_to_s(mrb, obj);
|
||||
return str;
|
||||
}
|
||||
@@ -2141,7 +2141,7 @@ mrb_str_split_m(mrb_state *mrb, mrb_value str)
|
||||
split_type = awk;
|
||||
}
|
||||
else {
|
||||
if (mrb_type(spat) == MRB_TT_STRING) {
|
||||
if (mrb_string_p(spat)) {
|
||||
split_type = string;
|
||||
#ifdef ENABLE_REGEXP
|
||||
if (RSTRING_LEN(spat) == 0) {
|
||||
|
||||
+5
-5
@@ -58,7 +58,7 @@ mrb_struct_s_members(mrb_state *mrb, mrb_value klass)
|
||||
if (mrb_nil_p(members)) {
|
||||
mrb_raise(mrb, E_TYPE_ERROR, "uninitialized struct");
|
||||
}
|
||||
if (mrb_type(members) != MRB_TT_ARRAY) {
|
||||
if (!mrb_array_p(members)) {
|
||||
mrb_raise(mrb, E_TYPE_ERROR, "corrupted struct");
|
||||
}
|
||||
return members;
|
||||
@@ -381,7 +381,7 @@ mrb_struct_s_def(mrb_state *mrb, mrb_value klass)
|
||||
else {
|
||||
if (argc > 0) name = argv[0];
|
||||
if (argc > 1) rest = argv[1];
|
||||
if (mrb_type(rest) == MRB_TT_ARRAY) {
|
||||
if (mrb_array_p(rest)) {
|
||||
if (!mrb_nil_p(name) && mrb_symbol_p(name)) {
|
||||
/* 1stArgument:symbol -> name=nil rest=argv[0]-[n] */
|
||||
mrb_ary_unshift(mrb, rest, name);
|
||||
@@ -417,7 +417,7 @@ num_members(mrb_state *mrb, struct RClass *klass)
|
||||
{
|
||||
mrb_value members;
|
||||
members = struct_ivar_get(mrb, mrb_obj_value(klass), mrb_intern(mrb, "__members__"));
|
||||
if (mrb_type(members) != MRB_TT_ARRAY) {
|
||||
if (!mrb_array_p(members)) {
|
||||
mrb_raise(mrb, E_TYPE_ERROR, "broken members");
|
||||
}
|
||||
return RARRAY_LEN(members);
|
||||
@@ -588,7 +588,7 @@ mrb_struct_aref_n(mrb_state *mrb, mrb_value s, mrb_value idx)
|
||||
{
|
||||
long i;
|
||||
|
||||
if (mrb_type(idx) == MRB_TT_STRING || mrb_type(idx) == MRB_TT_SYMBOL) {
|
||||
if (mrb_string_p(idx) || mrb_symbol_p(idx)) {
|
||||
return mrb_struct_aref_id(mrb, s, mrb_to_id(mrb, idx));
|
||||
}
|
||||
|
||||
@@ -668,7 +668,7 @@ mrb_struct_aset(mrb_state *mrb, mrb_value s)
|
||||
|
||||
mrb_get_args(mrb, "oo", &idx, &val);
|
||||
|
||||
if (mrb_type(idx) == MRB_TT_STRING || mrb_type(idx) == MRB_TT_SYMBOL) {
|
||||
if (mrb_string_p(idx) || mrb_symbol_p(idx)) {
|
||||
return mrb_struct_aset_id(mrb, s, mrb_to_id(mrb, idx), val);
|
||||
}
|
||||
|
||||
|
||||
@@ -992,7 +992,7 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self)
|
||||
struct RArray *rest;
|
||||
int len = 0;
|
||||
|
||||
if (mrb_type(stack[m1]) == MRB_TT_ARRAY) {
|
||||
if (mrb_array_p(stack[m1])) {
|
||||
struct RArray *ary = mrb_ary_ptr(stack[m1]);
|
||||
|
||||
pp = ary->ptr;
|
||||
@@ -1047,7 +1047,7 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self)
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (len > 1 && argc == 1 && mrb_type(argv[0]) == MRB_TT_ARRAY) {
|
||||
else if (len > 1 && argc == 1 && mrb_array_p(argv[0])) {
|
||||
argc = mrb_ary_ptr(argv[0])->len;
|
||||
argv = mrb_ary_ptr(argv[0])->ptr;
|
||||
}
|
||||
@@ -1592,7 +1592,7 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self)
|
||||
int c = GETARG_C(i);
|
||||
mrb_value v = regs[GETARG_B(i)];
|
||||
|
||||
if (mrb_type(v) != MRB_TT_ARRAY) {
|
||||
if (!mrb_array_p(v)) {
|
||||
if (c == 0) {
|
||||
regs[GETARG_A(i)] = v;
|
||||
}
|
||||
@@ -1619,7 +1619,7 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self)
|
||||
int pre = GETARG_B(i);
|
||||
int post = GETARG_C(i);
|
||||
|
||||
if (mrb_type(v) != MRB_TT_ARRAY) {
|
||||
if (!mrb_array_p(v)) {
|
||||
regs[a++] = mrb_ary_new_capa(mrb, 0);
|
||||
while (post--) {
|
||||
SET_NIL_VALUE(regs[a]);
|
||||
|
||||
Reference in New Issue
Block a user