Commit 0fbd8647 authored by Miro Knejp's avatar Miro Knejp

Proper handling of templates in Obj-C translators

parent bc42dcc1
......@@ -24,12 +24,10 @@ class ObjcppMarshal(spec: Spec) extends Marshal(spec) {
override def fqFieldType(tm: MExpr): String = throw new AssertionError("not applicable")
override def toCpp(tm: MExpr, expr: String): String = {
val helper = helperName(tm) + helperTemplates(tm)
s"$helper::toCpp($expr)"
s"${helperClass(tm)}::toCpp($expr)"
}
override def fromCpp(tm: MExpr, expr: String): String = {
val helper = helperName(tm) + helperTemplates(tm)
s"$helper::fromCpp($expr)"
s"${helperClass(tm)}::fromCpp($expr)"
}
def references(m: Meta): Seq[SymbolReference] = m match {
......@@ -49,6 +47,7 @@ class ObjcppMarshal(spec: Spec) extends Marshal(spec) {
}
def helperClass(name: String) = idCpp.ty(name)
private def helperClass(tm: MExpr): String = helperName(tm) + helperTemplates(tm)
def privateHeaderName(ident: String): String = idObjc.ty(ident) + "+Private." + spec.objcHeaderExt
......@@ -78,21 +77,20 @@ class ObjcppMarshal(spec: Spec) extends Marshal(spec) {
})
}
private def helperTemplates(tm: MExpr): String = tm.base match {
private def helperTemplates(tm: MExpr): String = {
def f() = if(tm.args.isEmpty) "" else tm.args.map(helperClass).mkString("<", ", ", ">")
tm.base match {
case MOptional =>
assert(tm.args.size == 1)
val argHelperClass = helperName(tm.args.head) + helperTemplates(tm.args.head)
val argHelperClass = helperClass(tm.args.head)
s"<${spec.cppOptionalTemplate}, $argHelperClass>"
case MList | MSet =>
assert(tm.args.size == 1)
val argHelperClass = helperName(tm.args.head) + helperTemplates(tm.args.head)
s"<$argHelperClass>"
f
case MMap =>
assert(tm.args.size == 2)
val keyHelperClass = helperName(tm.args.head) + helperTemplates(tm.args.head)
val valueHelperClass = helperName(tm.args.tail.head) + helperTemplates(tm.args.tail.head)
s"<$keyHelperClass, $valueHelperClass>"
case _ =>
""
f
case _ => f
}
}
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment