blob: cdf25ace39f77657865b848ca192e2a346199b88 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
|
class LoadError < ScriptError; end
begin
eval "1", nil
def _require_eval_load(*args)
self.eval(*args)
end
rescue ArgumentError
def _require_eval_load(*args)
self.eval(args[0])
end
end
module Kernel
def load(path)
raise TypeError unless path.class == String
if File.exist?(path) && File.extname(path) == ".mrb"
_load_mrb_file path
elsif File.exist?(path)
# _load_rb_str File.open(path).read.to_s, path
_require_eval_load File.open(path).read.to_s, nil, path
else
raise LoadError.new "File not found -- #{path}"
end
true
end
def require(path)
raise TypeError unless path.class == String
# require method can load .rb, .mrb or without-ext filename only.
unless ["", ".rb", ".mrb"].include? File.extname(path)
raise LoadError.new "cannot load such file -- #{path}"
end
filenames = []
if File.extname(path).size == 0
filenames << "#{path}.rb"
filenames << "#{path}.mrb"
else
filenames << path
end
dir = nil
filename = nil
if ['/', '.'].include? path[0]
path0 = filenames.find do |fname|
File.file?(fname) && File.exist?(fname)
end
else
dir = ($LOAD_PATH || []).find do |dir0|
filename = filenames.find do |fname|
path0 = File.join dir0, fname
File.file?(path0) && File.exist?(path0)
end
end
path0 = dir && filename ? File.join(dir, filename) : nil
end
if path0 && File.exist?(path0) && File.file?(path0)
__require__ path0
else
raise LoadError.new "cannot load such file -- #{path}"
end
end
def __require__(realpath)
raise LoadError.new "File not found -- #{realpath}" unless File.exist? realpath
$" ||= []
$__mruby_loading_files__ ||= []
# already required
return false if ($" + $__mruby_loading_files__).include?(realpath)
$__mruby_loading_files__ << realpath
load realpath
$" << realpath
$__mruby_loading_files__.delete realpath
true
end
end
$LOAD_PATH ||= []
$LOAD_PATH << '.'
if Object.const_defined?(:ENV)
$LOAD_PATH.unshift(*ENV['MRBLIB'].split(':')) unless ENV['MRBLIB'].nil?
end
$LOAD_PATH.uniq!
$" ||= []
$__mruby_loading_files__ ||= []
|