mirror of
https://github.com/mruby/mruby
synced 2026-06-08 16:11:16 +00:00
support Dir.chdir with block
This commit is contained in:
@@ -40,6 +40,21 @@ class Dir
|
||||
end
|
||||
end
|
||||
|
||||
def self.chdir(path, &block)
|
||||
my = self # workaround for https://github.com/mruby/mruby/issues/1579
|
||||
if block
|
||||
wd = self.getwd
|
||||
begin
|
||||
self._chdir(path)
|
||||
block.call
|
||||
ensure
|
||||
my._chdir(wd)
|
||||
end
|
||||
else
|
||||
self._chdir(path)
|
||||
end
|
||||
end
|
||||
|
||||
class << self
|
||||
alias exists? exist?
|
||||
alias pwd getwd
|
||||
|
||||
@@ -237,7 +237,7 @@ mrb_mruby_dir_gem_init(mrb_state *mrb)
|
||||
mrb_define_class_method(mrb, d, "exist?", mrb_dir_existp, MRB_ARGS_REQ(1));
|
||||
mrb_define_class_method(mrb, d, "getwd", mrb_dir_getwd, MRB_ARGS_NONE());
|
||||
mrb_define_class_method(mrb, d, "mkdir", mrb_dir_mkdir, MRB_ARGS_REQ(1)|MRB_ARGS_OPT(1));
|
||||
mrb_define_class_method(mrb, d, "chdir", mrb_dir_chdir, MRB_ARGS_REQ(1));
|
||||
mrb_define_class_method(mrb, d, "_chdir", mrb_dir_chdir, MRB_ARGS_REQ(1));
|
||||
|
||||
mrb_define_method(mrb, d, "close", mrb_dir_close, MRB_ARGS_NONE());
|
||||
mrb_define_method(mrb, d, "initialize", mrb_dir_init, MRB_ARGS_REQ(1));
|
||||
|
||||
Reference in New Issue
Block a user