-
Notifications
You must be signed in to change notification settings - Fork 1
/
todo.rb
158 lines (127 loc) · 2.38 KB
/
todo.rb
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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
# This is code to be added to NekoSexpProcessor
=begin
def process_str(exp)
return exp.shift.dump
end
def process_lasgn(exp)
s = "var #{exp.shift}"
s += " = #{process exp.shift}" unless exp.empty?
s
end
def process_gasgn(exp)
s = "#{exp.shift.to_s.gsub('$', '')}"
s += " = #{process exp.shift}" unless exp.empty?
s
end
def process_gvar(exp)
return exp.shift.to_s.gsub('$', '')
end
def process_array(exp)
"$array(#{process_arglist(exp)})"
end
def process_const(exp)
exp.shift.to_s
end
def process_module(exp)
util_module_or_class(exp)
end
def process_class(exp)
util_module_or_class(exp, true)
end
private
def util_module_or_class(exp, is_class = false)
result = []
name = exp.shift
name = process name if Sexp === name
result << name
result << "="
result << "$new"
if is_class then
superk = process(exp.shift)
if superk then
result << "(#{superk});"
else
result << "(null);"
end
else
result << "(null);"
end
result << "\n"
@klasses.push name
body = []
begin
code = process(exp.shift).chomp
body << code unless code.nil? or code.empty?
end until exp.empty?
unless body.empty? then
body = indent(body.join("\n\n") + "\n")
else
body = ""
end
result << body
@klasses.pop
result.join
end
def process_ivar(exp)
return "this.#{exp.shift.to_s.gsub("@", '')}"
end
def process_iasgn(exp)
lhs = exp.shift.to_s.gsub("@", '')
if exp.empty? then # part of an masgn
lhs.to_s
else
"this.#{lhs} = #{process exp.shift}"
end
end
def process_self(exp)
"this"
end
=end
primitives =<<-SCRIPT
class Object
def new(*args)
self.initialize(args)
end
end
class Foo
def hello
puts "hello"
end
end
Foo.new.hello
SCRIPT
inherit =<<-SCRIPT
class Foo
def hello
puts "hello!"
end
end
class Bar < Foo
def goodbye
puts "bye!"
end
end
Bar.new.hello()
SCRIPT
classes =<<-SCRIPT
class Time
def new
@now = date_now()
return self
end
def to_i
return @now
end
end
start_time = Time.new
puts start_time.to_i
SCRIPT
globals =<<-SCRIPT
class Foo
def hello(name)
$x = 100
puts "Hello World!"
puts $x
end
end
SCRIPT