minjs 0.1.7 → 0.1.10
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 +371 -226
- data/lib/minjs/ecma262/base.rb +61 -15
- data/lib/minjs/ecma262/exp.rb +202 -75
- data/lib/minjs/ecma262/lit.rb +81 -5
- data/lib/minjs/ecma262/punc.rb +4 -0
- data/lib/minjs/ecma262/st.rb +254 -149
- data/lib/minjs/version.rb +1 -1
- metadata +2 -2
data/lib/minjs/ecma262/base.rb
CHANGED
@@ -21,22 +21,28 @@ module Minjs
|
|
21
21
|
js = x.to_s
|
22
22
|
end
|
23
23
|
if prev
|
24
|
-
if prev.match(/[\w\$]\z/) and js.match(
|
24
|
+
if prev.match(/[\w\$]\z/) and js.match(/\A[\w\$]/)
|
25
25
|
sep = ' '
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
prev.sub!(
|
30
|
-
elsif prev.match(/
|
26
|
+
end
|
27
|
+
#;; means empty statement that must not be deleted
|
28
|
+
if prev.match(/;;\Z/)
|
29
|
+
prev.sub!(/;;\Z/, ";")
|
30
|
+
elsif prev.match(/;\Z/) and js == "}"
|
31
|
+
prev.sub!(/;\Z/, "")
|
32
|
+
elsif prev.match(/;\Z/) and js == ";" and !options[:for_args]
|
33
|
+
prev.sub!(/;\Z/, "")
|
34
|
+
elsif prev.match(/[\-]\Z/) and js.match(/^\-/)
|
31
35
|
sep = ' '
|
32
|
-
elsif prev.match(/[\+]\
|
36
|
+
elsif prev.match(/[\+]\Z/) and js.match(/^\+/)
|
33
37
|
sep = ' '
|
34
38
|
end
|
35
39
|
end
|
36
40
|
#for debug
|
37
|
-
|
38
|
-
if
|
39
|
-
|
41
|
+
unless options[:no_debug]
|
42
|
+
if @logger and @logger.debug?
|
43
|
+
if js.match(/;\z/) and !options[:for_args]
|
44
|
+
nl = "\n"
|
45
|
+
end
|
40
46
|
end
|
41
47
|
end
|
42
48
|
js = "#{sep}#{js}#{nl}";
|
@@ -53,18 +59,23 @@ module Minjs
|
|
53
59
|
def deep_dup
|
54
60
|
puts "warning: #{self.class}: deep_dup not implement"
|
55
61
|
end
|
62
|
+
|
63
|
+
def ==(obj)
|
64
|
+
puts "warning: #{self.class}: == not implement"
|
65
|
+
raise "warning: #{self.class}: == not implement"
|
66
|
+
end
|
56
67
|
end
|
57
68
|
|
58
69
|
class StatementList < Base
|
59
70
|
attr_reader :statement_list
|
60
71
|
|
61
72
|
def initialize(statement_list)
|
62
|
-
@statement_list = statement_list
|
73
|
+
@statement_list = statement_list #array
|
63
74
|
end
|
64
75
|
|
65
76
|
def grouping
|
66
77
|
remove_empty_statement
|
67
|
-
|
78
|
+
new_sl = []
|
68
79
|
sl = []
|
69
80
|
g = []
|
70
81
|
@statement_list.each do |st|
|
@@ -84,7 +95,7 @@ module Minjs
|
|
84
95
|
|
85
96
|
sl.each do |g|
|
86
97
|
if g.length == 1
|
87
|
-
|
98
|
+
new_sl.push(g[0])
|
88
99
|
else
|
89
100
|
i = 1
|
90
101
|
t = ExpParen.new(g[0].to_exp)
|
@@ -92,11 +103,29 @@ module Minjs
|
|
92
103
|
t = ExpComma.new(t, ExpParen.new(g[i].to_exp))
|
93
104
|
i += 1
|
94
105
|
end
|
95
|
-
|
106
|
+
new_sl.push(StExp.new(t))
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
if idx = new_sl.index{|x| x.class == StReturn}
|
111
|
+
while idx < new_sl.length - 1
|
112
|
+
new_sl.pop
|
96
113
|
end
|
97
114
|
end
|
98
115
|
|
99
|
-
|
116
|
+
if self.kind_of? SourceElements
|
117
|
+
if new_sl[-1].kind_of? StReturn and new_sl[-1].exp.nil?
|
118
|
+
new_sl.pop
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
if new_sl[-1].kind_of? StReturn and new_sl[-2].kind_of? StExp
|
123
|
+
if new_sl[-1].exp
|
124
|
+
new_sl[-2] = StReturn.new(ExpComma.new(new_sl[-2].exp, new_sl[-1].exp))
|
125
|
+
new_sl.pop
|
126
|
+
end
|
127
|
+
end
|
128
|
+
@statement_list = new_sl
|
100
129
|
end
|
101
130
|
|
102
131
|
def deep_dup
|
@@ -127,6 +156,10 @@ module Minjs
|
|
127
156
|
yield self, parent
|
128
157
|
end
|
129
158
|
|
159
|
+
def ==(obj)
|
160
|
+
@statement_list == obj.statement_list
|
161
|
+
end
|
162
|
+
|
130
163
|
def to_js(options = {})
|
131
164
|
concat options, @statement_list
|
132
165
|
end
|
@@ -162,6 +195,10 @@ module Minjs
|
|
162
195
|
@statement_list[i]
|
163
196
|
end
|
164
197
|
|
198
|
+
def []=(i, s)
|
199
|
+
@statement_list[i] = s
|
200
|
+
end
|
201
|
+
|
165
202
|
def index(st)
|
166
203
|
@statement_list.index(st)
|
167
204
|
end
|
@@ -178,9 +215,14 @@ module Minjs
|
|
178
215
|
def source_elements
|
179
216
|
@statement_list
|
180
217
|
end
|
218
|
+
|
181
219
|
def source_elements=(source_elements)
|
182
220
|
@statement_list = source_elements
|
183
221
|
end
|
222
|
+
|
223
|
+
def ==(obj)
|
224
|
+
statement_list == obj.statement_list
|
225
|
+
end
|
184
226
|
end
|
185
227
|
|
186
228
|
class Prog < Base
|
@@ -200,6 +242,10 @@ module Minjs
|
|
200
242
|
yield self, parent
|
201
243
|
end
|
202
244
|
|
245
|
+
def ==(obj)
|
246
|
+
self.class == obj.class and self.source_elements == obj.source_elements
|
247
|
+
end
|
248
|
+
|
203
249
|
def to_js(options = {})
|
204
250
|
concat options, @source_elements
|
205
251
|
end
|