Skip to content

Instantly share code, notes, and snippets.

@udzura
Created February 11, 2025 09:58
Show Gist options
  • Save udzura/4339f423829ee63185db895d4d4fdd26 to your computer and use it in GitHub Desktop.
Save udzura/4339f423829ee63185db895d4d4fdd26 to your computer and use it in GitHub Desktop.
mruby/c 1.2 で実装されているCレベルメソッド(定義箇所の抜粋)
mrbc_define_method(vm, mrbc_class_array, "new", c_array_new);
mrbc_define_method(vm, mrbc_class_array, "+", c_array_add);
mrbc_define_method(vm, mrbc_class_array, "[]", c_array_get);
mrbc_define_method(vm, mrbc_class_array, "at", c_array_get);
mrbc_define_method(vm, mrbc_class_array, "[]=", c_array_set);
mrbc_define_method(vm, mrbc_class_array, "<<", c_array_push);
mrbc_define_method(vm, mrbc_class_array, "clear", c_array_clear);
mrbc_define_method(vm, mrbc_class_array, "delete_at", c_array_delete_at);
mrbc_define_method(vm, mrbc_class_array, "empty?", c_array_empty);
mrbc_define_method(vm, mrbc_class_array, "size", c_array_size);
mrbc_define_method(vm, mrbc_class_array, "length", c_array_size);
mrbc_define_method(vm, mrbc_class_array, "count", c_array_size);
mrbc_define_method(vm, mrbc_class_array, "index", c_array_index);
mrbc_define_method(vm, mrbc_class_array, "first", c_array_first);
mrbc_define_method(vm, mrbc_class_array, "last", c_array_last);
mrbc_define_method(vm, mrbc_class_array, "push", c_array_push);
mrbc_define_method(vm, mrbc_class_array, "pop", c_array_pop);
mrbc_define_method(vm, mrbc_class_array, "shift", c_array_shift);
mrbc_define_method(vm, mrbc_class_array, "unshift", c_array_unshift);
mrbc_define_method(vm, mrbc_class_array, "dup", c_array_dup);
mrbc_define_method(vm, mrbc_class_array, "min", c_array_min);
mrbc_define_method(vm, mrbc_class_array, "max", c_array_max);
mrbc_define_method(vm, mrbc_class_array, "minmax", c_array_minmax);
mrbc_define_method(vm, mrbc_class_array, "inspect", c_array_inspect);
mrbc_define_method(vm, mrbc_class_array, "to_s", c_array_inspect);
mrbc_define_method(vm, mrbc_class_array, "join", c_array_join);
mrbc_define_method(vm, mrbc_class_hash, "new", c_hash_new);
mrbc_define_method(vm, mrbc_class_hash, "[]", c_hash_get);
mrbc_define_method(vm, mrbc_class_hash, "[]=", c_hash_set);
mrbc_define_method(vm, mrbc_class_hash, "clear", c_hash_clear);
mrbc_define_method(vm, mrbc_class_hash, "dup", c_hash_dup);
mrbc_define_method(vm, mrbc_class_hash, "delete", c_hash_delete);
mrbc_define_method(vm, mrbc_class_hash, "empty?", c_hash_empty);
mrbc_define_method(vm, mrbc_class_hash, "has_key?", c_hash_has_key);
mrbc_define_method(vm, mrbc_class_hash, "has_value?", c_hash_has_value);
mrbc_define_method(vm, mrbc_class_hash, "key", c_hash_key);
mrbc_define_method(vm, mrbc_class_hash, "keys", c_hash_keys);
mrbc_define_method(vm, mrbc_class_hash, "size", c_hash_size);
mrbc_define_method(vm, mrbc_class_hash, "length", c_hash_size);
mrbc_define_method(vm, mrbc_class_hash, "count", c_hash_size);
mrbc_define_method(vm, mrbc_class_hash, "merge", c_hash_merge);
mrbc_define_method(vm, mrbc_class_hash, "merge!", c_hash_merge_self);
mrbc_define_method(vm, mrbc_class_hash, "to_h", c_ineffect);
mrbc_define_method(vm, mrbc_class_hash, "values", c_hash_values);
mrbc_define_method(vm, mrbc_class_hash, "inspect", c_hash_inspect);
mrbc_define_method(vm, mrbc_class_hash, "to_s", c_hash_inspect);
mrbc_define_method(vm, mrbc_class_math, "acos", c_math_acos);
mrbc_define_method(vm, mrbc_class_math, "acosh", c_math_acosh);
mrbc_define_method(vm, mrbc_class_math, "asin", c_math_asin);
mrbc_define_method(vm, mrbc_class_math, "asinh", c_math_asinh);
mrbc_define_method(vm, mrbc_class_math, "atan", c_math_atan);
mrbc_define_method(vm, mrbc_class_math, "atan2", c_math_atan2);
mrbc_define_method(vm, mrbc_class_math, "atanh", c_math_atanh);
mrbc_define_method(vm, mrbc_class_math, "cbrt", c_math_cbrt);
mrbc_define_method(vm, mrbc_class_math, "cos", c_math_cos);
mrbc_define_method(vm, mrbc_class_math, "cosh", c_math_cosh);
mrbc_define_method(vm, mrbc_class_math, "erf", c_math_erf);
mrbc_define_method(vm, mrbc_class_math, "erfc", c_math_erfc);
mrbc_define_method(vm, mrbc_class_math, "exp", c_math_exp);
mrbc_define_method(vm, mrbc_class_math, "hypot", c_math_hypot);
mrbc_define_method(vm, mrbc_class_math, "ldexp", c_math_ldexp);
mrbc_define_method(vm, mrbc_class_math, "log", c_math_log);
mrbc_define_method(vm, mrbc_class_math, "log10", c_math_log10);
mrbc_define_method(vm, mrbc_class_math, "log2", c_math_log2);
mrbc_define_method(vm, mrbc_class_math, "sin", c_math_sin);
mrbc_define_method(vm, mrbc_class_math, "sinh", c_math_sinh);
mrbc_define_method(vm, mrbc_class_math, "sqrt", c_math_sqrt);
mrbc_define_method(vm, mrbc_class_math, "tan", c_math_tan);
mrbc_define_method(vm, mrbc_class_math, "tanh", c_math_tanh);
mrbc_define_method(vm, mrbc_class_fixnum, "[]", c_fixnum_bitref);
mrbc_define_method(vm, mrbc_class_fixnum, "-@", c_fixnum_negative);
mrbc_define_method(vm, mrbc_class_fixnum, "**", c_fixnum_power);
mrbc_define_method(vm, mrbc_class_fixnum, "%", c_fixnum_mod);
mrbc_define_method(vm, mrbc_class_fixnum, "&", c_fixnum_and);
mrbc_define_method(vm, mrbc_class_fixnum, "|", c_fixnum_or);
mrbc_define_method(vm, mrbc_class_fixnum, "^", c_fixnum_xor);
mrbc_define_method(vm, mrbc_class_fixnum, "~", c_fixnum_not);
mrbc_define_method(vm, mrbc_class_fixnum, "<<", c_fixnum_lshift);
mrbc_define_method(vm, mrbc_class_fixnum, ">>", c_fixnum_rshift);
mrbc_define_method(vm, mrbc_class_fixnum, "abs", c_fixnum_abs);
mrbc_define_method(vm, mrbc_class_fixnum, "to_i", c_ineffect);
#if MRBC_USE_FLOAT
mrbc_define_method(vm, mrbc_class_fixnum, "to_f", c_fixnum_to_f);
#endif
mrbc_define_method(vm, mrbc_class_fixnum, "chr", c_fixnum_chr);
mrbc_define_method(vm, mrbc_class_fixnum, "inspect", c_fixnum_to_s);
mrbc_define_method(vm, mrbc_class_fixnum, "to_s", c_fixnum_to_s);
mrbc_define_method(vm, mrbc_class_float, "-@", c_float_negative);
#if MRBC_USE_MATH
mrbc_define_method(vm, mrbc_class_float, "**", c_float_power);
#endif
mrbc_define_method(vm, mrbc_class_float, "abs", c_float_abs);
mrbc_define_method(vm, mrbc_class_float, "to_i", c_float_to_i);
mrbc_define_method(vm, mrbc_class_float, "to_f", c_ineffect);
mrbc_define_method(vm, mrbc_class_float, "inspect", c_float_to_s);
mrbc_define_method(vm, mrbc_class_float, "to_s", c_float_to_s);
mrbc_define_method(vm, mrbc_class_range, "===", c_range_equal3);
mrbc_define_method(vm, mrbc_class_range, "first", c_range_first);
mrbc_define_method(vm, mrbc_class_range, "last", c_range_last);
mrbc_define_method(vm, mrbc_class_range, "exclude_end?", c_range_exclude_end);
mrbc_define_method(vm, mrbc_class_range, "inspect", c_range_inspect);
mrbc_define_method(vm, mrbc_class_range, "to_s", c_range_inspect);
mrbc_define_method(vm, mrbc_class_string, "+", c_string_add);
mrbc_define_method(vm, mrbc_class_string, "*", c_string_mul);
mrbc_define_method(vm, mrbc_class_string, "size", c_string_size);
mrbc_define_method(vm, mrbc_class_string, "length", c_string_size);
mrbc_define_method(vm, mrbc_class_string, "to_i", c_string_to_i);
mrbc_define_method(vm, mrbc_class_string, "to_s", c_ineffect);
mrbc_define_method(vm, mrbc_class_string, "<<", c_string_append);
mrbc_define_method(vm, mrbc_class_string, "[]", c_string_slice);
mrbc_define_method(vm, mrbc_class_string, "[]=", c_string_insert);
mrbc_define_method(vm, mrbc_class_string, "chomp", c_string_chomp);
mrbc_define_method(vm, mrbc_class_string, "chomp!", c_string_chomp_self);
mrbc_define_method(vm, mrbc_class_string, "dup", c_string_dup);
mrbc_define_method(vm, mrbc_class_string, "index", c_string_index);
mrbc_define_method(vm, mrbc_class_string, "inspect", c_string_inspect);
mrbc_define_method(vm, mrbc_class_string, "ord", c_string_ord);
mrbc_define_method(vm, mrbc_class_string, "split", c_string_split);
mrbc_define_method(vm, mrbc_class_string, "lstrip", c_string_lstrip);
mrbc_define_method(vm, mrbc_class_string, "lstrip!", c_string_lstrip_self);
mrbc_define_method(vm, mrbc_class_string, "rstrip", c_string_rstrip);
mrbc_define_method(vm, mrbc_class_string, "rstrip!", c_string_rstrip_self);
mrbc_define_method(vm, mrbc_class_string, "strip", c_string_strip);
mrbc_define_method(vm, mrbc_class_string, "strip!", c_string_strip_self);
mrbc_define_method(vm, mrbc_class_string, "to_sym", c_string_to_sym);
mrbc_define_method(vm, mrbc_class_string, "intern", c_string_to_sym);
mrbc_define_method(vm, mrbc_class_string, "tr", c_string_tr);
mrbc_define_method(vm, mrbc_class_string, "tr!", c_string_tr_self);
mrbc_define_method(vm, mrbc_class_string, "start_with?", c_string_start_with);
mrbc_define_method(vm, mrbc_class_string, "end_with?", c_string_end_with);
mrbc_define_method(vm, mrbc_class_string, "include?", c_string_include);
#if MRBC_USE_FLOAT
mrbc_define_method(vm, mrbc_class_string, "to_f", c_string_to_f);
#endif
mrbc_define_method(vm, mrbc_class_object, "sprintf", c_object_sprintf);
mrbc_define_method(vm, mrbc_class_object, "printf", c_object_printf);
mrbc_define_method(vm, mrbc_class_object, "initialize", c_ineffect);
mrbc_define_method(vm, mrbc_class_object, "alias_method", c_object_alias_method);
mrbc_define_method(vm, mrbc_class_object, "p", c_object_p);
mrbc_define_method(vm, mrbc_class_object, "print", c_object_print);
mrbc_define_method(vm, mrbc_class_object, "puts", c_object_puts);
mrbc_define_method(vm, mrbc_class_object, "!", c_object_not);
mrbc_define_method(vm, mrbc_class_object, "!=", c_object_neq);
mrbc_define_method(vm, mrbc_class_object, "<=>", c_object_compare);
mrbc_define_method(vm, mrbc_class_object, "===", c_object_equal3);
mrbc_define_method(vm, mrbc_class_object, "class", c_object_class);
mrbc_define_method(vm, mrbc_class_object, "new", c_object_new);
mrbc_define_method(vm, mrbc_class_object, "attr_reader", c_object_attr_reader);
mrbc_define_method(vm, mrbc_class_object, "attr_accessor", c_object_attr_accessor);
mrbc_define_method(vm, mrbc_class_object, "is_a?", c_object_kind_of);
mrbc_define_method(vm, mrbc_class_object, "kind_of?", c_object_kind_of);
#if MRBC_USE_STRING
mrbc_define_method(vm, mrbc_class_object, "inspect", c_object_to_s);
mrbc_define_method(vm, mrbc_class_object, "to_s", c_object_to_s);
mrbc_define_method(vm, mrbc_class_nil, "!", c_nil_false_not);
#if MRBC_USE_STRING
mrbc_define_method(vm, mrbc_class_nil, "inspect", c_nil_inspect);
mrbc_define_method(vm, mrbc_class_nil, "to_s", c_nil_to_s);
#endif
mrbc_define_method(vm, mrbc_class_proc, "call", c_proc_call);
#if MRBC_USE_STRING
mrbc_define_method(vm, mrbc_class_proc, "inspect", c_proc_to_s);
mrbc_define_method(vm, mrbc_class_proc, "to_s", c_proc_to_s);
#endif
// TrueClassには `!` なかったが..
mrbc_define_method(vm, mrbc_class_false, "!", c_nil_false_not);
#if MRBC_USE_STRING
mrbc_define_method(vm, mrbc_class_false, "inspect", c_false_to_s);
mrbc_define_method(vm, mrbc_class_false, "to_s", c_false_to_s);
#endif
mrbc_define_method(vm, mrbc_class_symbol, "all_symbols", c_all_symbols); // class method?
#if MRBC_USE_STRING
mrbc_define_method(vm, mrbc_class_symbol, "inspect", c_inspect);
mrbc_define_method(vm, mrbc_class_symbol, "to_s", c_to_s);
mrbc_define_method(vm, mrbc_class_symbol, "id2name", c_to_s);
#endif
mrbc_define_method(vm, mrbc_class_symbol, "to_sym", c_ineffect);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment