Skip to content
Snippets Groups Projects
Commit 11912ad9 authored by Nicolas Voirol's avatar Nicolas Voirol
Browse files

More extension points for Symbol transformers

parent c95c63d0
No related branches found
No related tags found
No related merge requests found
...@@ -230,31 +230,34 @@ trait SymbolTransformer { ...@@ -230,31 +230,34 @@ trait SymbolTransformer {
else tparams.map(tdef => t.TypeParameterDef(t.TypeParameter(tdef.id))) else tparams.map(tdef => t.TypeParameterDef(t.TypeParameter(tdef.id)))
} }
def transform(syms: s.Symbols): t.Symbols = t.NoSymbols.withFunctions { protected def transformFunction(fd: s.FunDef): t.FunDef = new t.FunDef(
syms.functions.values.toSeq.map(fd => new t.FunDef( fd.id,
fd.id, transformTypeParams(fd.tparams),
transformTypeParams(fd.tparams), fd.params.map(vd => transformer.transform(vd)),
fd.params.map(vd => transformer.transform(vd)), transformer.transform(fd.returnType),
transformer.transform(fd.returnType), transformer.transform(fd.fullBody),
transformer.transform(fd.fullBody), fd.flags.map(f => transformer.transform(f))
fd.flags.map(f => transformer.transform(f)))) )
}.withADTs {
syms.adts.values.toSeq.map { protected def transformADT(adt: s.ADTDefinition): t.ADTDefinition = adt match {
case sort: s.ADTSort if (s eq t) => sort.asInstanceOf[t.ADTSort] case sort: s.ADTSort if (s eq t) => sort.asInstanceOf[t.ADTSort]
case sort: s.ADTSort => new t.ADTSort( case sort: s.ADTSort => new t.ADTSort(
sort.id, sort.id,
transformTypeParams(sort.tparams), transformTypeParams(sort.tparams),
sort.cons, sort.cons,
sort.flags.map(f => transformer.transform(f))) sort.flags.map(f => transformer.transform(f)))
case cons: s.ADTConstructor => new t.ADTConstructor( case cons: s.ADTConstructor => new t.ADTConstructor(
cons.id, cons.id,
transformTypeParams(cons.tparams), transformTypeParams(cons.tparams),
cons.sort, cons.sort,
cons.fields.map(vd => transformer.transform(vd)), cons.fields.map(vd => transformer.transform(vd)),
cons.flags.map(f => transformer.transform(f))) cons.flags.map(f => transformer.transform(f)))
}
} }
def transform(syms: s.Symbols): t.Symbols = t.NoSymbols
.withFunctions(syms.functions.values.toSeq.map(transformFunction))
.withADTs(syms.adts.values.toSeq.map(transformADT))
def compose(that: SymbolTransformer { def compose(that: SymbolTransformer {
val transformer: TreeTransformer { val t: SymbolTransformer.this.s.type } val transformer: TreeTransformer { val t: SymbolTransformer.this.s.type }
}): SymbolTransformer { }): SymbolTransformer {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment