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.
@@ -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(/^[\w\$]/)
24
+ if prev.match(/[\w\$]\z/) and js.match(/\A[\w\$]/)
25
25
  sep = ' '
26
- elsif prev.match(/;\z/) and js == "}"
27
- prev.sub!(/;\z/, "")
28
- elsif prev.match(/;\z/) and js == ";" and !options[:for_args]
29
- prev.sub!(/;\z/, "")
30
- elsif prev.match(/[\-]\z/) and js.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(/[\+]\z/) and js.match(/^\+/)
36
+ elsif prev.match(/[\+]\Z/) and js.match(/^\+/)
33
37
  sep = ' '
34
38
  end
35
39
  end
36
40
  #for debug
37
- if @logger and @logger.debug?
38
- if js.match(/;\z/) and !options[:for_args]
39
- nl = "\n"
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
- nsl = []
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
- nsl.push(g[0])
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
- nsl.push(StExp.new(t))
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
- @statement_list = nsl
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