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.
@@ -34,8 +34,10 @@ module Minjs
34
34
  end
35
35
  end
36
36
  #for debug
37
- if false and js.match(/;\z/) and !options[:for_args]
38
- nl = "\n"
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.each do |s|
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
- tt = ''
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
- sl = @source_elements
79
- i = 0
80
- while i < sl.length
81
- st = sl[i]
82
- i0 = i
83
- prev = nil
84
- t = nil
85
- while st and st.to_exp?
86
- if prev and prev.to_exp?
87
- t = ECMA262::ExpComma.new(t, st.to_exp({}))
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
- prev = st
94
- i += 1
95
- st = sl[i]
219
+ sl.push([st])
220
+ g = []
96
221
  end
97
- if i0 != i and i - i0 >= 2
98
- sl[i0...i] = StExp.new(t)
99
- i = (i - i0 + 1)
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 += 1
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