minjs 0.1.3 → 0.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/minjs/compressor.rb +130 -121
- data/lib/minjs/ctype.rb +2 -0
- data/lib/minjs/ecma262/base.rb +172 -34
- data/lib/minjs/ecma262/exp.rb +644 -388
- data/lib/minjs/ecma262/lit.rb +39 -3
- data/lib/minjs/ecma262/st.rb +388 -157
- data/lib/minjs/exceptions.rb +1 -1
- data/lib/minjs/expression.rb +88 -76
- data/lib/minjs/func.rb +1 -2
- data/lib/minjs/lex.rb +7 -7
- data/lib/minjs/minjs_compressor.rb +8 -4
- data/lib/minjs/program.rb +1 -1
- data/lib/minjs/statement.rb +32 -15
- data/lib/minjs/version.rb +1 -1
- metadata +2 -2
data/lib/minjs/ecma262/base.rb
CHANGED
@@ -34,8 +34,10 @@ module Minjs
|
|
34
34
|
end
|
35
35
|
end
|
36
36
|
#for debug
|
37
|
-
if
|
38
|
-
|
37
|
+
if @logger and @logger.debug?
|
38
|
+
if js.match(/;\z/) and !options[:for_args]
|
39
|
+
nl = "\n"
|
40
|
+
end
|
39
41
|
end
|
40
42
|
js = "#{sep}#{js}#{nl}";
|
41
43
|
j.push(js)
|
@@ -47,6 +49,138 @@ module Minjs
|
|
47
49
|
def replace(from, to)
|
48
50
|
puts "warning: #{self.class}: replace not implement"
|
49
51
|
end
|
52
|
+
|
53
|
+
def deep_dup
|
54
|
+
puts "warning: #{self.class}: deep_dup not implement"
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
class StatementList < Base
|
59
|
+
attr_reader :statement_list
|
60
|
+
|
61
|
+
def initialize(statement_list)
|
62
|
+
@statement_list = statement_list
|
63
|
+
end
|
64
|
+
|
65
|
+
def grouping
|
66
|
+
remove_empty_statement
|
67
|
+
nsl = []
|
68
|
+
sl = []
|
69
|
+
g = []
|
70
|
+
@statement_list.each do |st|
|
71
|
+
if st.to_exp?
|
72
|
+
g.push(st)
|
73
|
+
else
|
74
|
+
if g.length > 0
|
75
|
+
sl.push(g)
|
76
|
+
end
|
77
|
+
sl.push([st])
|
78
|
+
g = []
|
79
|
+
end
|
80
|
+
end
|
81
|
+
if g.length > 0
|
82
|
+
sl.push(g)
|
83
|
+
end
|
84
|
+
|
85
|
+
sl.each do |g|
|
86
|
+
if g.length == 1
|
87
|
+
nsl.push(g[0])
|
88
|
+
else
|
89
|
+
i = 1
|
90
|
+
t = ExpParen.new(g[0].to_exp)
|
91
|
+
while i < g.length
|
92
|
+
t = ExpComma.new(t, ExpParen.new(g[i].to_exp))
|
93
|
+
i += 1
|
94
|
+
end
|
95
|
+
nsl.push(StExp.new(t))
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
@statement_list = nsl
|
100
|
+
end
|
101
|
+
|
102
|
+
def deep_dup
|
103
|
+
self.class.new(@statement_list.collect{|s| s.deep_dup})
|
104
|
+
end
|
105
|
+
|
106
|
+
def replace(from, to)
|
107
|
+
idx = @statement_list.index(from)
|
108
|
+
if idx
|
109
|
+
@statement_list[idx] = to
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
def remove(st)
|
114
|
+
@statement_list.delete(st)
|
115
|
+
end
|
116
|
+
|
117
|
+
def remove_empty_statement
|
118
|
+
@statement_list.reject!{|x|
|
119
|
+
x.class == StEmpty
|
120
|
+
}
|
121
|
+
end
|
122
|
+
|
123
|
+
def traverse(parent, &block)
|
124
|
+
@statement_list.each do|st|
|
125
|
+
st.traverse(self, &block)
|
126
|
+
end
|
127
|
+
yield self, parent
|
128
|
+
end
|
129
|
+
|
130
|
+
def to_js(options = {})
|
131
|
+
concat options, @statement_list
|
132
|
+
end
|
133
|
+
|
134
|
+
def length
|
135
|
+
@statement_list.length
|
136
|
+
end
|
137
|
+
|
138
|
+
def to_exp?
|
139
|
+
@statement_list.each do |s|
|
140
|
+
return false if s.to_exp? == false
|
141
|
+
end
|
142
|
+
return true
|
143
|
+
end
|
144
|
+
|
145
|
+
def to_exp(options = {})
|
146
|
+
return nil if to_exp? == false
|
147
|
+
t = @statement_list[0].to_exp(options)
|
148
|
+
return t.to_exp(options) if @statement_list.length <= 1
|
149
|
+
i = 1
|
150
|
+
while(i < @statement_list.length)
|
151
|
+
t = ExpComma.new(t, @statement_list[i])
|
152
|
+
i += 1
|
153
|
+
end
|
154
|
+
t
|
155
|
+
end
|
156
|
+
|
157
|
+
def each(&block)
|
158
|
+
@statement_list.each(&block)
|
159
|
+
end
|
160
|
+
|
161
|
+
def [](i)
|
162
|
+
@statement_list[i]
|
163
|
+
end
|
164
|
+
|
165
|
+
def index(st)
|
166
|
+
@statement_list.index(st)
|
167
|
+
end
|
168
|
+
end
|
169
|
+
|
170
|
+
class SourceElements < StatementList
|
171
|
+
#
|
172
|
+
# source_elements: [statement, statement, ...]
|
173
|
+
#
|
174
|
+
def initialize(source_elements)
|
175
|
+
@statement_list = source_elements
|
176
|
+
end
|
177
|
+
|
178
|
+
def source_elements
|
179
|
+
@statement_list
|
180
|
+
end
|
181
|
+
def source_elements=(source_elements)
|
182
|
+
@statement_list = source_elements
|
183
|
+
end
|
50
184
|
end
|
51
185
|
|
52
186
|
class Prog < Base
|
@@ -58,49 +192,53 @@ module Minjs
|
|
58
192
|
@context = context
|
59
193
|
end
|
60
194
|
|
195
|
+
def deep_dup
|
196
|
+
self.class.new(context, source_elements.deep_dup)
|
197
|
+
end
|
61
198
|
def traverse(parent, &block)
|
62
|
-
@source_elements.
|
63
|
-
s.traverse(self, &block)
|
64
|
-
end
|
199
|
+
@source_elements.traverse(self, &block)
|
65
200
|
yield self, parent
|
66
201
|
end
|
67
202
|
|
68
203
|
def to_js(options = {})
|
69
|
-
|
70
|
-
vars = @context.var_env.record.binding.find_all {|k, v|
|
71
|
-
v and v[:_parameter_list].nil? and !v[:value].kind_of?(StFunc)
|
72
|
-
}.collect{|x|x[0]}
|
73
|
-
|
74
|
-
tt = concat(options, tt, @source_elements)
|
204
|
+
concat options, @source_elements
|
75
205
|
end
|
76
|
-
|
206
|
+
=begin
|
77
207
|
def grouping
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
if
|
87
|
-
|
88
|
-
elsif prev.nil?
|
89
|
-
t = st.to_exp({})
|
90
|
-
else
|
91
|
-
break
|
208
|
+
remove_empty_statement
|
209
|
+
nsl = []
|
210
|
+
sl = []
|
211
|
+
g = []
|
212
|
+
@source_elements.each do |st|
|
213
|
+
if st.to_exp?
|
214
|
+
g.push(st)
|
215
|
+
else
|
216
|
+
if g.length > 0
|
217
|
+
sl.push(g)
|
92
218
|
end
|
93
|
-
|
94
|
-
|
95
|
-
st = sl[i]
|
219
|
+
sl.push([st])
|
220
|
+
g = []
|
96
221
|
end
|
97
|
-
|
98
|
-
|
99
|
-
|
222
|
+
end
|
223
|
+
if g.length > 0
|
224
|
+
sl.push(g)
|
225
|
+
end
|
226
|
+
|
227
|
+
sl.each do |g|
|
228
|
+
if g.length == 1
|
229
|
+
nsl.push(g[0])
|
100
230
|
else
|
101
|
-
i
|
231
|
+
i = 1
|
232
|
+
t = g[0].to_exp
|
233
|
+
while i < g.length
|
234
|
+
t = ExpComma.new(t, g[i].to_exp)
|
235
|
+
i += 1
|
236
|
+
end
|
237
|
+
nsl.push(StExp.new(t))
|
102
238
|
end
|
103
239
|
end
|
240
|
+
|
241
|
+
@source_elements = nsl
|
104
242
|
end
|
105
243
|
|
106
244
|
def replace(from, to)
|
@@ -131,7 +269,7 @@ module Minjs
|
|
131
269
|
def index(st)
|
132
270
|
@source_elements.index(st)
|
133
271
|
end
|
134
|
-
|
272
|
+
=end
|
135
273
|
end
|
136
274
|
end
|
137
275
|
end
|