mirror of
https://github.com/mruby/mruby
synced 2026-06-08 16:11:16 +00:00
mruby-io: ROM method tables for IO and File classes
Co-authored-by: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -9,6 +9,7 @@
|
||||
#include <mruby/string.h>
|
||||
#include <mruby/io.h>
|
||||
#include <mruby/error.h>
|
||||
#include <mruby/internal.h>
|
||||
#include <mruby/presym.h>
|
||||
#include "io_hal.h"
|
||||
|
||||
@@ -1120,6 +1121,36 @@ mrb_file_join(mrb_state *mrb, mrb_value klass)
|
||||
return result;
|
||||
}
|
||||
|
||||
/* ---------------------------*/
|
||||
#ifndef MRB_NO_PRESYM
|
||||
#define FILE_ROM_MT_SIZE 6
|
||||
static struct {
|
||||
union mt_ptr vals[FILE_ROM_MT_SIZE];
|
||||
mrb_sym keys[FILE_ROM_MT_SIZE];
|
||||
} file_rom_data = {
|
||||
.vals = {
|
||||
{ .func = mrb_file_flock },
|
||||
{ .func = mrb_file_atime },
|
||||
{ .func = mrb_file_ctime },
|
||||
{ .func = mrb_file_mtime },
|
||||
{ .func = mrb_file_size },
|
||||
{ .func = mrb_file_truncate },
|
||||
},
|
||||
.keys = {
|
||||
MT_KEY(MRB_SYM(flock), MT_FUNC|MT_PUBLIC),
|
||||
MT_KEY(MRB_SYM(_atime), MT_FUNC|MT_NOARG|MT_PUBLIC),
|
||||
MT_KEY(MRB_SYM(_ctime), MT_FUNC|MT_NOARG|MT_PUBLIC),
|
||||
MT_KEY(MRB_SYM(_mtime), MT_FUNC|MT_NOARG|MT_PUBLIC),
|
||||
MT_KEY(MRB_SYM(size), MT_FUNC|MT_NOARG|MT_PUBLIC),
|
||||
MT_KEY(MRB_SYM(truncate), MT_FUNC|MT_PUBLIC),
|
||||
}
|
||||
};
|
||||
static mt_tbl file_rom_mt = {
|
||||
FILE_ROM_MT_SIZE, FILE_ROM_MT_SIZE,
|
||||
(union mt_ptr*)&file_rom_data, NULL
|
||||
};
|
||||
#endif /* !MRB_NO_PRESYM */
|
||||
|
||||
void
|
||||
mrb_init_file(mrb_state *mrb)
|
||||
{
|
||||
@@ -1144,12 +1175,16 @@ mrb_init_file(mrb_state *mrb)
|
||||
mrb_define_class_method_id(mrb, file, MRB_SYM_Q(absolute_path), mrb_file_absolute_path_p, MRB_ARGS_REQ(1));
|
||||
mrb_define_class_method_id(mrb, file, MRB_SYM(expand_path), mrb_file_expand_path, MRB_ARGS_REQ(1)|MRB_ARGS_OPT(1));
|
||||
|
||||
#ifndef MRB_NO_PRESYM
|
||||
mrb_mt_init_rom(file, &file_rom_mt);
|
||||
#else
|
||||
mrb_define_method_id(mrb, file, MRB_SYM(flock), mrb_file_flock, MRB_ARGS_REQ(1));
|
||||
mrb_define_method_id(mrb, file, MRB_SYM(_atime), mrb_file_atime, MRB_ARGS_NONE());
|
||||
mrb_define_method_id(mrb, file, MRB_SYM(_ctime), mrb_file_ctime, MRB_ARGS_NONE());
|
||||
mrb_define_method_id(mrb, file, MRB_SYM(_mtime), mrb_file_mtime, MRB_ARGS_NONE());
|
||||
mrb_define_method_id(mrb, file, MRB_SYM(size), mrb_file_size, MRB_ARGS_NONE());
|
||||
mrb_define_method_id(mrb, file, MRB_SYM(truncate), mrb_file_truncate, MRB_ARGS_REQ(1));
|
||||
#endif
|
||||
|
||||
struct RClass *cnst = mrb_define_module_under_id(mrb, file, MRB_SYM(Constants));
|
||||
mrb_define_const_id(mrb, cnst, MRB_SYM(LOCK_SH), mrb_fixnum_value(LOCK_SH));
|
||||
|
||||
@@ -2196,6 +2196,96 @@ io_flush(mrb_state *mrb, mrb_value io)
|
||||
return io;
|
||||
}
|
||||
|
||||
/* ---------------------------*/
|
||||
#ifndef MRB_NO_PRESYM
|
||||
#define IO_ROM_MT_SIZE 36
|
||||
static struct {
|
||||
union mt_ptr vals[IO_ROM_MT_SIZE];
|
||||
mrb_sym keys[IO_ROM_MT_SIZE];
|
||||
} io_rom_data = {
|
||||
.vals = {
|
||||
{ .func = io_init },
|
||||
{ .func = io_init_copy },
|
||||
{ .func = io_isatty },
|
||||
{ .func = io_eof },
|
||||
{ .func = io_getc },
|
||||
{ .func = io_gets },
|
||||
{ .func = io_read },
|
||||
{ .func = io_readchar },
|
||||
{ .func = io_readline },
|
||||
{ .func = io_readlines },
|
||||
{ .func = io_sync },
|
||||
{ .func = io_set_sync },
|
||||
{ .func = io_sysread },
|
||||
{ .func = io_sysseek },
|
||||
{ .func = io_syswrite },
|
||||
{ .func = io_seek },
|
||||
{ .func = io_close },
|
||||
{ .func = io_close_write },
|
||||
{ .func = io_set_close_on_exec },
|
||||
{ .func = io_close_on_exec_p },
|
||||
{ .func = io_closed },
|
||||
{ .func = io_flush },
|
||||
{ .func = io_ungetc },
|
||||
{ .func = io_ungetbyte },
|
||||
{ .func = io_pos },
|
||||
{ .func = io_pid },
|
||||
{ .func = io_fileno },
|
||||
{ .func = io_write },
|
||||
{ .func = io_puts },
|
||||
{ .func = io_print },
|
||||
{ .func = io_putc },
|
||||
{ .func = io_lshift },
|
||||
{ .func = io_pread },
|
||||
{ .func = io_pwrite },
|
||||
{ .func = io_getbyte },
|
||||
{ .func = io_readbyte },
|
||||
},
|
||||
.keys = {
|
||||
MT_KEY(MRB_SYM(initialize), MT_FUNC|MT_PUBLIC),
|
||||
MT_KEY(MRB_SYM(initialize_copy), MT_FUNC|MT_PRIVATE),
|
||||
MT_KEY(MRB_SYM(isatty), MT_FUNC|MT_NOARG|MT_PUBLIC),
|
||||
MT_KEY(MRB_SYM_Q(eof), MT_FUNC|MT_NOARG|MT_PUBLIC),
|
||||
MT_KEY(MRB_SYM(getc), MT_FUNC|MT_NOARG|MT_PUBLIC),
|
||||
MT_KEY(MRB_SYM(gets), MT_FUNC|MT_PUBLIC),
|
||||
MT_KEY(MRB_SYM(read), MT_FUNC|MT_PUBLIC),
|
||||
MT_KEY(MRB_SYM(readchar), MT_FUNC|MT_NOARG|MT_PUBLIC),
|
||||
MT_KEY(MRB_SYM(readline), MT_FUNC|MT_PUBLIC),
|
||||
MT_KEY(MRB_SYM(readlines), MT_FUNC|MT_PUBLIC),
|
||||
MT_KEY(MRB_SYM(sync), MT_FUNC|MT_NOARG|MT_PUBLIC),
|
||||
MT_KEY(MRB_SYM_E(sync), MT_FUNC|MT_PUBLIC),
|
||||
MT_KEY(MRB_SYM(sysread), MT_FUNC|MT_PUBLIC),
|
||||
MT_KEY(MRB_SYM(sysseek), MT_FUNC|MT_PUBLIC),
|
||||
MT_KEY(MRB_SYM(syswrite), MT_FUNC|MT_PUBLIC),
|
||||
MT_KEY(MRB_SYM(seek), MT_FUNC|MT_PUBLIC),
|
||||
MT_KEY(MRB_SYM(close), MT_FUNC|MT_NOARG|MT_PUBLIC),
|
||||
MT_KEY(MRB_SYM(close_write), MT_FUNC|MT_NOARG|MT_PUBLIC),
|
||||
MT_KEY(MRB_SYM_E(close_on_exec), MT_FUNC|MT_PUBLIC),
|
||||
MT_KEY(MRB_SYM_Q(close_on_exec), MT_FUNC|MT_NOARG|MT_PUBLIC),
|
||||
MT_KEY(MRB_SYM_Q(closed), MT_FUNC|MT_NOARG|MT_PUBLIC),
|
||||
MT_KEY(MRB_SYM(flush), MT_FUNC|MT_NOARG|MT_PUBLIC),
|
||||
MT_KEY(MRB_SYM(ungetc), MT_FUNC|MT_PUBLIC),
|
||||
MT_KEY(MRB_SYM(ungetbyte), MT_FUNC|MT_PUBLIC),
|
||||
MT_KEY(MRB_SYM(pos), MT_FUNC|MT_NOARG|MT_PUBLIC),
|
||||
MT_KEY(MRB_SYM(pid), MT_FUNC|MT_NOARG|MT_PUBLIC),
|
||||
MT_KEY(MRB_SYM(fileno), MT_FUNC|MT_NOARG|MT_PUBLIC),
|
||||
MT_KEY(MRB_SYM(write), MT_FUNC|MT_PUBLIC),
|
||||
MT_KEY(MRB_SYM(puts), MT_FUNC|MT_PUBLIC),
|
||||
MT_KEY(MRB_SYM(print), MT_FUNC|MT_PUBLIC),
|
||||
MT_KEY(MRB_SYM(putc), MT_FUNC|MT_PUBLIC),
|
||||
MT_KEY(MRB_OPSYM(lshift), MT_FUNC|MT_PUBLIC),
|
||||
MT_KEY(MRB_SYM(pread), MT_FUNC|MT_PUBLIC),
|
||||
MT_KEY(MRB_SYM(pwrite), MT_FUNC|MT_PUBLIC),
|
||||
MT_KEY(MRB_SYM(getbyte), MT_FUNC|MT_NOARG|MT_PUBLIC),
|
||||
MT_KEY(MRB_SYM(readbyte), MT_FUNC|MT_NOARG|MT_PUBLIC),
|
||||
}
|
||||
};
|
||||
static mt_tbl io_rom_mt = {
|
||||
IO_ROM_MT_SIZE, IO_ROM_MT_SIZE,
|
||||
(union mt_ptr*)&io_rom_data, NULL
|
||||
};
|
||||
#endif /* !MRB_NO_PRESYM */
|
||||
|
||||
void
|
||||
mrb_init_io(mrb_state *mrb)
|
||||
{
|
||||
@@ -2212,6 +2302,9 @@ mrb_init_io(mrb_state *mrb)
|
||||
mrb_define_class_method_id(mrb, io, MRB_SYM(_pipe), io_s_pipe, MRB_ARGS_NONE());
|
||||
#endif
|
||||
|
||||
#ifndef MRB_NO_PRESYM
|
||||
mrb_mt_init_rom(io, &io_rom_mt);
|
||||
#else
|
||||
mrb_define_method_id(mrb, io, MRB_SYM(initialize), io_init, MRB_ARGS_ARG(1,2));
|
||||
mrb_define_private_method_id(mrb, io, MRB_SYM(initialize_copy), io_init_copy, MRB_ARGS_REQ(1));
|
||||
mrb_define_method_id(mrb, io, MRB_SYM(isatty), io_isatty, MRB_ARGS_NONE());
|
||||
@@ -2248,6 +2341,7 @@ mrb_init_io(mrb_state *mrb)
|
||||
mrb_define_method_id(mrb, io, MRB_SYM(pwrite), io_pwrite, MRB_ARGS_ANY()); /* Ruby 2.5 feature */
|
||||
mrb_define_method_id(mrb, io, MRB_SYM(getbyte), io_getbyte, MRB_ARGS_NONE());
|
||||
mrb_define_method_id(mrb, io, MRB_SYM(readbyte), io_readbyte, MRB_ARGS_NONE());
|
||||
#endif
|
||||
|
||||
mrb_define_const_id(mrb, io, MRB_SYM(SEEK_SET), mrb_fixnum_value(SEEK_SET));
|
||||
mrb_define_const_id(mrb, io, MRB_SYM(SEEK_CUR), mrb_fixnum_value(SEEK_CUR));
|
||||
|
||||
Reference in New Issue
Block a user