@@ -133,90 +133,6 @@ trait TreeDSL {
133
133
def ==> (body : Tree ): CaseDef = CaseDef (pat, guard, body)
134
134
}
135
135
136
- /** VODD, if it's not obvious, means ValOrDefDef. This is the
137
- * common code between a tree based on a pre-existing symbol and
138
- * one being built from scratch.
139
- */
140
- trait VODDStart {
141
- def name : Name
142
- def defaultMods : Modifiers
143
- def defaultTpt : Tree
144
- def defaultPos : Position
145
-
146
- type ResultTreeType <: ValOrDefDef
147
- def mkTree (rhs : Tree ): ResultTreeType
148
- def === (rhs : Tree ): ResultTreeType
149
-
150
- private var _tpt : Tree = null
151
- private var _pos : Position = null
152
-
153
- def withType (tp : Type ): this .type = {
154
- _tpt = TypeTree (tp)
155
- this
156
- }
157
- def withPos (pos : Position ): this .type = {
158
- _pos = pos
159
- this
160
- }
161
-
162
- final def mods = defaultMods
163
- final def tpt = if (_tpt == null ) defaultTpt else _tpt
164
- final def pos = if (_pos == null ) defaultPos else _pos
165
- }
166
- trait SymVODDStart extends VODDStart {
167
- def sym : Symbol
168
- def symType : Type
169
-
170
- def name = sym.name
171
- def defaultMods = Modifiers (sym.flags)
172
- def defaultTpt = TypeTree (symType) setPos sym.pos.focus
173
- def defaultPos = sym.pos
174
-
175
- final def === (rhs : Tree ): ResultTreeType =
176
- atPos(pos)(mkTree(rhs) setSymbol sym)
177
- }
178
- trait ValCreator {
179
- self : VODDStart =>
180
-
181
- type ResultTreeType = ValDef
182
- def mkTree (rhs : Tree ): ValDef = ValDef (mods, name.toTermName, tpt, rhs)
183
- }
184
- trait DefCreator {
185
- self : VODDStart =>
186
-
187
- def tparams : List [TypeDef ]
188
- def vparamss : List [List [ValDef ]]
189
-
190
- type ResultTreeType = DefDef
191
- def mkTree (rhs : Tree ): DefDef = DefDef (mods, name.toTermName, tparams, vparamss, tpt, rhs)
192
- }
193
-
194
- class DefSymStart (val sym : Symbol ) extends SymVODDStart with DefCreator {
195
- def symType = sym.tpe_* .finalResultType
196
- def tparams = sym.typeParams map TypeDef
197
- def vparamss = mapParamss(sym)(ValDef )
198
- }
199
- class ValSymStart (val sym : Symbol ) extends SymVODDStart with ValCreator {
200
- def symType = sym.tpe
201
- }
202
-
203
- trait TreeVODDStart extends VODDStart {
204
- def defaultMods = NoMods
205
- def defaultTpt = TypeTree ()
206
- def defaultPos = NoPosition
207
-
208
- final def === (rhs : Tree ): ResultTreeType =
209
- if (pos == NoPosition ) mkTree(rhs)
210
- else atPos(pos)(mkTree(rhs))
211
- }
212
-
213
- class ValTreeStart (val name : Name ) extends TreeVODDStart with ValCreator {
214
- }
215
- class DefTreeStart (val name : Name ) extends TreeVODDStart with DefCreator {
216
- def tparams : List [TypeDef ] = Nil
217
- def vparamss : List [List [ValDef ]] = ListOfNil
218
- }
219
-
220
136
class IfStart (cond : Tree , thenp : Tree ) {
221
137
def THEN (x : Tree ) = new IfStart (cond, x)
222
138
def ELSE (elsep : Tree ) = If (cond, thenp, elsep)
@@ -230,46 +146,23 @@ trait TreeDSL {
230
146
def CASE (pat : Tree ): CaseStart = new CaseStart (pat, EmptyTree )
231
147
def DEFAULT : CaseStart = new CaseStart (WILD .empty, EmptyTree )
232
148
233
- class SymbolMethods (target : Symbol ) {
234
- def IS_NULL () = REF (target) OBJ_EQ NULL
235
- def GET () = fn(REF (target), nme.get)
236
- def ARGS = target.paramss.head
237
- }
238
-
239
- /** Top level accessible. */
240
- def MATCHERROR (arg : Tree ) = Throw (MatchErrorClass .tpe, arg)
241
- def THROW (sym : Symbol , msg : Tree ): Throw = Throw (sym.tpe, msg.TOSTRING ())
242
-
243
149
def NEW (tpt : Tree , args : Tree * ): Tree = New (tpt, List (args.toList))
244
- def DEF (sym : Symbol ): DefSymStart = new DefSymStart (sym)
245
- def VAL (sym : Symbol ): ValSymStart = new ValSymStart (sym)
246
150
247
- def AND (guards : Tree * ) =
248
- if (guards.isEmpty) EmptyTree
249
- else guards reduceLeft gen.mkAnd
151
+ def NOT (tree : Tree ) = Select (tree, Boolean_not )
152
+ def AND (guards : Tree * ) = if (guards.isEmpty) EmptyTree else guards reduceLeft gen.mkAnd
250
153
251
154
def IF (tree : Tree ) = new IfStart (tree, EmptyTree )
252
155
def TRY (tree : Tree ) = new TryStart (tree, Nil , EmptyTree )
253
156
def BLOCK (xs : Tree * ) = Block (xs.init.toList, xs.last)
254
- def NOT (tree : Tree ) = Select (tree, Boolean_not )
255
- def SOME (xs : Tree * ) = Apply (SomeClass .companionSymbol, makeTupleTerm(xs.toList, flattenUnary = true ))
157
+ def SOME (xs : Tree * ) = Apply (SomeClass .companionSymbol, treeBuilder.makeTupleTerm(xs.toList, flattenUnary = true ))
256
158
257
159
/** Typed trees from symbols. */
258
- def THIS (sym : Symbol ) = gen.mkAttributedThis(sym)
259
- def ID (sym : Symbol ) = gen.mkAttributedIdent(sym)
260
- def REF (sym : Symbol ) = gen.mkAttributedRef(sym)
261
- def REF (pre : Type , sym : Symbol ) = gen.mkAttributedRef(pre, sym)
262
-
263
- def makeTupleTerm (trees : List [Tree ], flattenUnary : Boolean ): Tree = trees match {
264
- case Nil => UNIT
265
- case List (tree) if flattenUnary => tree
266
- case _ => Apply (TupleClass (trees.length).companionModule, trees : _* )
267
- }
160
+ def REF (sym : Symbol ) = gen.mkAttributedRef(sym)
161
+ def REF (pre : Type , sym : Symbol ) = gen.mkAttributedRef(pre, sym)
268
162
269
163
/** Implicits - some of these should probably disappear **/
270
164
implicit def mkTreeMethods (target : Tree ): TreeMethods = new TreeMethods (target)
271
165
implicit def mkTreeMethodsFromSymbol (target : Symbol ): TreeMethods = new TreeMethods (Ident (target))
272
- implicit def mkSymbolMethodsFromSymbol (target : Symbol ): SymbolMethods = new SymbolMethods (target)
273
166
274
167
/** (foo DOT bar) might be simply a Select, but more likely it is to be immediately
275
168
* followed by an Apply. We don't want to add an actual apply method to arbitrary
0 commit comments