Commit 6b17a860 authored by Miro Knejp's avatar Miro Knejp Committed by Jacob Potter

Use marshalling objects to generate code for function parameter types

parent 982d0a17
......@@ -42,7 +42,7 @@ CJNIEXPORT jobject JNICALL Java_com_dropbox_textsort_SortItems_createWithListene
std::shared_ptr<::textsort::SortItems> cr = ::textsort::SortItems::create_with_listener(c_listener);
return NativeSortItems::toJava(jniEnv, cr);
} JNI_TRANSLATE_EXCEPTIONS_RETURN(jniEnv, 0 /* value doesn't matter */ )
} JNI_TRANSLATE_EXCEPTIONS_RETURN(jniEnv, 0 /* value doesn't matter */)
}
} // namespace djinni_generated
......@@ -12,6 +12,6 @@
- (void)sort:(TXSSortOrder)order items:(TXSItemList *)items;
+ (TXSSortItems*)createWithListener:(id<TXSTextboxListener>)listener;
+ (TXSSortItems *)createWithListener:(id<TXSTextboxListener>)listener;
@end
......@@ -51,7 +51,7 @@ static_assert(__has_feature(objc_arc), "Djinni requires ARC to be enabled for th
} DJINNI_TRANSLATE_EXCEPTIONS()
}
+ (TXSSortItems*)createWithListener:(id<TXSTextboxListener>)listener {
+ (TXSSortItems *)createWithListener:(id<TXSTextboxListener>)listener {
try {
std::shared_ptr<::textsort::TextboxListener> cppListener = ::djinni_generated::TextboxListenerObjcProxy::textbox_listener_with_objc(listener);
std::shared_ptr<::textsort::SortItems> cppRet = ::textsort::SortItems::create_with_listener(std::move(cppListener));
......
......@@ -318,7 +318,7 @@ class CppGenerator(spec: Spec) extends Generator(spec) {
w.wl
writeDoc(w, m.doc)
val ret = m.ret.fold("void")(marshal.typename(_))
val params = m.params.map(toCppParamType)
val params = m.params.map(p => marshal.paramType(p.ty) + " " + idCpp.local(p.ident))
if (m.static) {
w.wl(s"static $ret ${idCpp.method(m.ident)}${params.mkString("(", ", ", ")")};")
} else {
......
......@@ -20,6 +20,9 @@ class CppMarshal(spec: Spec) extends Marshal(spec) {
case r: Record => withNs(spec.cppNamespace, idCpp.ty(name))
}
override def paramType(tm: MExpr): String = toCppParamType(tm)
override def fqParamType(tm: MExpr): String = toCppParamType(tm, spec.cppNamespace)
private def toCppType(ty: TypeRef, namespace: Option[String] = None): String = toCppType(ty.resolved, namespace)
private def toCppType(tm: MExpr, namespace: Option[String]): String = {
def base(m: Meta): String = m match {
......@@ -47,15 +50,13 @@ class CppMarshal(spec: Spec) extends Marshal(spec) {
}
// this can be used in c++ generation to know whether a const& should be applied to the parameter or not
private def toCppParamType(f: Field): String = toCppParamType(f, None, "")
private def toCppParamType(f: Field, namespace: Option[String] = None, prefix: String = ""): String = {
val cppType = toCppType(f.ty, namespace)
val localName = prefix + idCpp.local(f.ident);
val refType = "const " + cppType + " & " + localName
val valueType = cppType + " " + localName
private def toCppParamType(tm: MExpr, namespace: Option[String] = None): String = {
val cppType = toCppType(tm, namespace)
val refType = "const " + cppType + " &"
val valueType = cppType
def toType(expr: MExpr): String = expr.base match {
case MPrimitive(_,_,_,_,_,_,_,_) => valueType
case p: MPrimitive => valueType
case d: MDef => d.defType match {
case DEnum => valueType
case _ => refType
......@@ -63,6 +64,6 @@ class CppMarshal(spec: Spec) extends Marshal(spec) {
case MOptional => toType(expr.args.head)
case _ => refType
}
toType(f.ty.resolved)
toType(tm)
}
}
......@@ -205,12 +205,12 @@ class JNIGenerator(spec: Spec) extends Generator(spec) {
}
if (i.ext.java) {
w.wl
w.w(s"class JavaProxy final : djinni::JavaProxyCacheEntry, public ${withNs(spec.cppNamespace, idCpp.ty(ident))}").bracedSemi {
w.w(s"class JavaProxy final : djinni::JavaProxyCacheEntry, public $cppSelf").bracedSemi {
w.wlOutdent(s"public:")
w.wl(s"JavaProxy(jobject obj);")
for (m <- i.methods) {
val ret = m.ret.fold("void")(cppMarshal.fqTypename)
val params = m.params.map(p => toCppParamType(p, spec.cppNamespace))
val params = m.params.map(p => cppMarshal.fqParamType(p.ty) + " " + idCpp.local(p.ident))
w.wl(s"virtual $ret ${idCpp.method(m.ident)}${params.mkString("(", ", ", ")")} override;")
}
w.wl
......@@ -239,7 +239,7 @@ class JNIGenerator(spec: Spec) extends Generator(spec) {
for (m <- i.methods) {
w.wl
val ret = m.ret.fold("void")(cppMarshal.fqTypename)
val params = m.params.map(p => toCppParamType(p, spec.cppNamespace, "c_"))
val params = m.params.map(p => cppMarshal.fqParamType(p.ty) + " c_" + idCpp.local(p.ident))
writeJniTypeParams(w, typeParams)
w.w(s"$ret $jniSelf::JavaProxy::JavaProxy::${idCpp.method(m.ident)}${params.mkString("(", ", ", ")")}").bracedSemi {
w.wl(s"JNIEnv * const jniEnv = djinni::jniGetThreadEnv();")
......@@ -277,15 +277,14 @@ class JNIGenerator(spec: Spec) extends Generator(spec) {
.replaceAllLiterally(".", "_")
val prefix = "Java_" + classIdentMunged
def nativeHook(name: String, static: Boolean, params: Iterable[Field], ret: Option[TypeRef], f: => Unit) = {
val paramList = params.map(p => toJniType(p.ty) + " j_" + idJava.local(p.ident)).mkString(", ")
val paramList = params.map(p => jniMarshal.paramType(p.ty) + " j_" + idJava.local(p.ident)).mkString(", ")
val jniRetType = ret.fold("void")(toJniType)
w.wl
val methodNameMunged = name.replaceAllLiterally("_", "_1")
val zero = ret.fold("")(s => "0 /* value doesn't matter */")
if (static) {
w.wl(s"CJNIEXPORT $jniRetType JNICALL ${prefix}_$methodNameMunged(JNIEnv* jniEnv, jobject /*this*/${preComma(paramList)})").braced {
w.w("try").bracedEnd(s" JNI_TRANSLATE_EXCEPTIONS_RETURN(jniEnv, ${
ret.fold("")(s => "0 /* value doesn't matter */ ")
})") {
w.w("try").bracedEnd(s" JNI_TRANSLATE_EXCEPTIONS_RETURN(jniEnv, $zero)") {
w.wl(s"DJINNI_FUNCTION_PROLOGUE0(jniEnv);")
f
}
......@@ -293,8 +292,7 @@ class JNIGenerator(spec: Spec) extends Generator(spec) {
}
else {
w.wl(s"CJNIEXPORT $jniRetType JNICALL ${prefix}_00024CppProxy_$methodNameMunged(JNIEnv* jniEnv, jobject /*this*/, jlong nativeRef${preComma(paramList)})").braced {
val zero = "0 /* value doesn't matter*/"
w.w("try").bracedEnd(s" JNI_TRANSLATE_EXCEPTIONS_RETURN(jniEnv, ${ret.fold("")(s => zero)})") {
w.w("try").bracedEnd(s" JNI_TRANSLATE_EXCEPTIONS_RETURN(jniEnv, $zero)") {
w.wl(s"DJINNI_FUNCTION_PROLOGUE1(jniEnv, nativeRef);")
f
}
......
......@@ -13,6 +13,9 @@ class JNIMarshal(spec: Spec) extends Marshal(spec) {
override def fqTypename(tm: MExpr): String = typename(tm)
def fqTypename(name: String, ty: TypeDef): String = typename(name, ty)
override def paramType(tm: MExpr): String = toJniType(tm, false)
override def fqParamType(tm: MExpr): String = paramType(tm)
// Name for the autogenerated class containing field/method IDs and toJava()/fromJava() methods
def helperClass(name: String) = spec.jniClassIdentStyle(name)
def fqHelperClass(name: String) = withNs(Some(spec.jniNamespace), helperClass(name))
......
......@@ -152,14 +152,14 @@ class JavaGenerator(spec: Spec) extends Generator(spec) {
skipFirst { w.wl }
writeDoc(w, m.doc)
val ret = m.ret.fold("void")(marshal.typename(_))
val params = m.params.map(p => marshal.typename(p.ty) + " " + idJava.local(p.ident))
val params = m.params.map(p => marshal.paramType(p.ty) + " " + idJava.local(p.ident))
w.wl("public abstract " + ret + " " + idJava.method(m.ident) + params.mkString("(", ", ", ")") + throwException + ";")
}
for (m <- i.methods if m.static) {
skipFirst { w.wl }
writeDoc(w, m.doc)
val ret = m.ret.fold("void")(marshal.typename(_))
val params = m.params.map(p => marshal.typename(p.ty) + " " + idJava.local(p.ident))
val params = m.params.map(p => marshal.paramType(p.ty) + " " + idJava.local(p.ident))
w.wl("public static native "+ ret + " " + idJava.method(m.ident) + params.mkString("(", ", ", ")") + ";")
}
if (i.ext.cpp) {
......@@ -186,7 +186,7 @@ class JavaGenerator(spec: Spec) extends Generator(spec) {
for (m <- i.methods if !m.static) { // Static methods not in CppProxy
val ret = m.ret.fold("void")(marshal.typename(_))
val returnStmt = m.ret.fold("")(_ => "return ")
val params = m.params.map(p => marshal.typename(p.ty)+" "+idJava.local(p.ident)).mkString(", ")
val params = m.params.map(p => marshal.paramType(p.ty) + " " + idJava.local(p.ident)).mkString(", ")
val args = m.params.map(p => idJava.local(p.ident)).mkString(", ")
val meth = idJava.method(m.ident)
w.wl
......
......@@ -12,7 +12,10 @@ class JavaMarshal(spec: Spec) extends Marshal(spec) {
override def fqTypename(tm: MExpr): String = toJavaType(tm, spec.javaPackage)
def fqTypename(name: String, ty: TypeDef): String = withPackage(spec.javaPackage, idJava.ty(name))
def toJavaType(tm: MExpr, packageName: Option[String]): String = {
override def paramType(tm: MExpr): String = typename(tm)
override def fqParamType(tm: MExpr): String = fqTypename(tm)
private def toJavaType(tm: MExpr, packageName: Option[String]): String = {
def f(tm: MExpr, needRef: Boolean): String = {
tm.base match {
case MOptional =>
......@@ -44,6 +47,6 @@ class JavaMarshal(spec: Spec) extends Marshal(spec) {
f(tm, false)
}
def withPackage(packageName: Option[String], t: String) = packageName.fold(t)(_+"."+t)
private def withPackage(packageName: Option[String], t: String) = packageName.fold(t)(_ + "." + t)
}
......@@ -16,6 +16,11 @@ abstract class Marshal(spec: Spec) {
// Same as typename() but always fully namespace or package qualified
def fqTypename(tm: MExpr): String
def fqTypename(ty: TypeRef): String = fqTypename(ty.resolved)
// Type signature for a function parameter
def paramType(tm: MExpr): String
def paramType(ty: TypeRef): String = paramType(ty.resolved)
def fqParamType(tm: MExpr): String
def fqParamType(ty: TypeRef): String = fqParamType(ty.resolved)
implicit def identToString(ident: Ident): String = ident.name
protected val idCpp = spec.cppIdentStyle
......
......@@ -154,12 +154,12 @@ class ObjcGenerator(spec: Spec) extends Generator(spec) {
def writeObjcFuncDecl(method: Interface.Method, w: IndentWriter) {
val label = if (method.static) "+" else "-"
val ret = method.ret.fold("void")(toObjcFullType(_))
val ret = method.ret.fold("void")(marshal.paramType)
w.w(s"$label ($ret)${idObjc.method(method.ident)}")
val skipFirst = SkipFirst()
for (p <- method.params) {
skipFirst { w.w(s" ${idObjc.local(p.ident)}") }
w.w(s":(${toObjcFullType(p.ty)})${idObjc.local(p.ident)}")
w.w(s":(${marshal.paramType(p.ty)})${idObjc.local(p.ident)}")
}
}
......@@ -234,9 +234,9 @@ class ObjcGenerator(spec: Spec) extends Generator(spec) {
if (!r.fields.isEmpty) {
val head = r.fields.head
val skipFirst = SkipFirst()
w.w(s"- (id)${idObjc.method("init_with_" + head.ident.name)}:(${toObjcFullType(head.ty)})${idObjc.local(head.ident)}")
w.w(s"- (id)${idObjc.method("init_with_" + head.ident.name)}:(${marshal.paramType(head.ty)})${idObjc.local(head.ident)}")
for (f <- r.fields) skipFirst {
w.w(s" ${idObjc.field(f.ident)}:(${toObjcFullType(f.ty)})${idObjc.field(f.ident)}")
w.w(s" ${idObjc.field(f.ident)}:(${marshal.paramType(f.ty)})${idObjc.field(f.ident)}")
}
w.wl(";")
}
......@@ -310,14 +310,6 @@ class ObjcGenerator(spec: Spec) extends Generator(spec) {
f(tm, needRef)
}
def toObjcFullType(ty: TypeRef): String = toObjcFullType(ty.resolved, false)
def toObjcFullType(ty: TypeRef, needRef: Boolean): String = toObjcFullType(ty.resolved, needRef)
def toObjcFullType(tm: MExpr): String = toObjcFullType(tm, false)
def toObjcFullType(tm: MExpr, needRef: Boolean = false): String = {
val (name, asterisk) = toObjcType(tm, needRef)
name + (if (asterisk) " *" else "")
}
def toObjcTypeDef(ty: TypeRef): String = toObjcTypeDef(ty.resolved, false)
def toObjcTypeDef(ty: TypeRef, needRef: Boolean): String = toObjcTypeDef(ty.resolved, needRef)
def toObjcTypeDef(tm: MExpr): String = toObjcTypeDef(tm, false)
......
......@@ -16,6 +16,9 @@ class ObjcMarshal(spec: Spec) extends Marshal(spec) {
override def fqTypename(tm: MExpr): String = typename(tm)
def fqTypename(name: String, ty: TypeDef): String = typename(name, ty)
override def paramType(tm: MExpr): String = toObjcParamType(tm)
override def fqParamType(tm: MExpr): String = paramType(tm)
// Return value: (Type_Name, Is_Class_Or_Not)
def toObjcType(ty: TypeRef): (String, Boolean) = toObjcType(ty.resolved, false)
def toObjcType(ty: TypeRef, needRef: Boolean): (String, Boolean) = toObjcType(ty.resolved, needRef)
......@@ -46,7 +49,7 @@ class ObjcMarshal(spec: Spec) extends Marshal(spec) {
case DRecord => (idObjc.ty(d.name), true)
case DInterface =>
val ext = d.body.asInstanceOf[Interface].ext
(idObjc.ty(d.name), false)
(idObjc.ty(d.name), true)
}
case p: MParam => throw new AssertionError("Parameter should not happen at Obj-C top level")
}
......@@ -56,4 +59,23 @@ class ObjcMarshal(spec: Spec) extends Marshal(spec) {
f(tm, needRef)
}
def toObjcParamType(tm: MExpr): String = {
val (name, needRef) = toObjcType(tm)
val param = name + (if(needRef) " *" else "")
tm.base match {
case d: MDef => d.body match {
case i: Interface => if(i.ext.objc) s"id<$name>" else param
case _ => param
}
case MOptional => tm.args.head.base match {
case d: MDef => d.body match {
case i: Interface => if(i.ext.objc) s"id<$name>" else param
case _ => param
}
case _ => param
}
case _ => param
}
}
}
......@@ -193,12 +193,12 @@ class ObjcppGenerator(spec: Spec) extends Generator(spec) {
def writeObjcFuncDecl(method: Interface.Method, w: IndentWriter) {
val label = if (method.static) "+" else "-"
val ret = method.ret.fold("void")(toObjcFullType(_))
val ret = method.ret.fold("void")(objcMarshal.paramType)
w.w(s"$label ($ret)${idObjc.method(method.ident)}")
val skipFirst = SkipFirst()
for (p <- method.params) {
skipFirst { w.w(s" ${idObjc.local(p.ident)}") }
w.w(s":(${toObjcFullType(p.ty)})${idObjc.local(p.ident)}")
w.w(s":(${objcMarshal.paramType(p.ty)})${idObjc.local(p.ident)}")
}
}
......@@ -294,7 +294,7 @@ class ObjcppGenerator(spec: Spec) extends Generator(spec) {
w.wl(s"static std::shared_ptr<$cppSelf> ${idCpp.method(ident.name + "_with_objc")} (id<$self> objcRef);")
for (m <- i.methods) {
val ret = m.ret.fold("void")(cppMarshal.fqTypename)
val params = m.params.map(p => toCppParamType(p, spec.cppNamespace))
val params = m.params.map(p => cppMarshal.fqParamType(p.ty) + " " + idCpp.local(p.ident))
w.wl(s"virtual $ret ${idCpp.method(m.ident)} ${params.mkString("(", ", ", ")")} override;")
}
}
......@@ -318,7 +318,7 @@ class ObjcppGenerator(spec: Spec) extends Generator(spec) {
for (m <- i.methods) {
w.wl
val ret = m.ret.fold("void")(cppMarshal.fqTypename)
val params = m.params.map(p => toCppParamType(p, spec.cppNamespace))
val params = m.params.map(p => cppMarshal.fqParamType(p.ty) + " " + idCpp.local(p.ident))
w.wl(s"$ret $objcExtSelf::${idCpp.method(m.ident)} ${params.mkString("(", ", ", ")")}").braced {
w.w("@autoreleasepool").braced {
m.params.foreach(p =>
......@@ -410,9 +410,9 @@ class ObjcppGenerator(spec: Spec) extends Generator(spec) {
if (!r.fields.isEmpty) {
val head = r.fields.head
val skipFirst = SkipFirst()
w.w(s"- (id)${idObjc.method("init_with_" + head.ident.name)}:(${toObjcFullType(head.ty)})${idObjc.field(head.ident)}")
w.w(s"- (id)${idObjc.method("init_with_" + head.ident.name)}:(${objcMarshal.paramType(head.ty)})${idObjc.field(head.ident)}")
for (f <- r.fields) skipFirst {
w.w(s" ${idObjc.field(f.ident.name)}:(${toObjcFullType(f.ty)})${idObjc.local(f.ident)}")
w.w(s" ${idObjc.field(f.ident.name)}:(${objcMarshal.paramType(f.ty)})${idObjc.local(f.ident)}")
}
w.wl
w.braced {
......@@ -728,7 +728,7 @@ class ObjcppGenerator(spec: Spec) extends Generator(spec) {
case DRecord => w.wl(s"$objcType$objcIdent = [[${self} alloc] initWithCpp${IdentStyle.camelUpper(typeName)}:$cppIdent];")
case DInterface =>
val ext = d.body.asInstanceOf[Interface].ext
val objcProxy = withNs(Some(spec.objcppNamespace), idCpp.ty(d.name + "_objc_proxy"))
val objcProxy = objcppMarshal.fqHelperClass(d.name + "_objc_proxy")
(ext.cpp, ext.objc) match {
case (true, true) => throw new AssertionError("Function implemented on both sides")
case (false, false) => throw new AssertionError("Function not implemented")
......@@ -829,7 +829,7 @@ class ObjcppGenerator(spec: Spec) extends Generator(spec) {
case (true, true) => throw new AssertionError("Function implemented on both sides")
case (false, false) => throw new AssertionError("Function not implemented")
case (true, false) => w.wl(s"$cppType $cppIdent = $objcIdent.cppRef;")
case (false, true) => w.wl(s"$cppType $cppIdent = ${withNs(Some(spec.objcppNamespace), idCpp.ty(d.name + "_objc_proxy"))}" +
case (false, true) => w.wl(s"$cppType $cppIdent = ${objcppMarshal.fqHelperClass(d.name + "_objc_proxy")}" +
s"::${idCpp.method(d.name + "_with_objc")}($objcIdent);")
}
}
......@@ -881,14 +881,6 @@ class ObjcppGenerator(spec: Spec) extends Generator(spec) {
f(tm, needRef)
}
def toObjcFullType(ty: TypeRef): String = toObjcFullType(ty.resolved, false)
def toObjcFullType(ty: TypeRef, needRef: Boolean): String = toObjcFullType(ty.resolved, needRef)
def toObjcFullType(tm: MExpr): String = toObjcFullType(tm, false)
def toObjcFullType(tm: MExpr, needRef: Boolean = false): String = {
val (name, asterisk) = toObjcType(tm, needRef)
name + (if (asterisk) " *" else "")
}
def toObjcTypeDef(ty: TypeRef): String = toObjcTypeDef(ty.resolved, false)
def toObjcTypeDef(ty: TypeRef, needRef: Boolean): String = toObjcTypeDef(ty.resolved, needRef)
def toObjcTypeDef(tm: MExpr): String = toObjcTypeDef(tm, false)
......
......@@ -6,11 +6,14 @@ import djinni.meta._
class ObjcppMarshal(spec: Spec) extends Marshal(spec) {
override def typename(tm: MExpr): String = throw new AssertionError("Objcpp has no public types")
def typename(name: String, ty: TypeDef): String = throw new AssertionError("Objcpp has no public types")
override def typename(tm: MExpr): String = throw new AssertionError("not applicable")
def typename(name: String, ty: TypeDef): String = throw new AssertionError("not applicable")
override def fqTypename(tm: MExpr): String = throw new AssertionError("Objcpp has no public types")
def fqTypename(name: String, ty: TypeDef): String = throw new AssertionError("Objcpp has no public types")
override def fqTypename(tm: MExpr): String = throw new AssertionError("not applicable")
def fqTypename(name: String, ty: TypeDef): String = throw new AssertionError("not applicable")
def paramType(tm: MExpr): String = throw new AssertionError("not applicable")
def fqParamType(tm: MExpr): String = throw new AssertionError("not applicable")
// Name for the autogenerated proxy class wrapping +o interfaces
def helperClass(name: String) = idCpp.ty(name)
......
......@@ -281,57 +281,8 @@ abstract class Generator(spec: Spec)
// --------------------------------------------------------------------------
// Render type expression
private def toCppType(ty: TypeRef, namespace: Option[String] = None): String = toCppType(ty.resolved, namespace)
private def toCppType(tm: MExpr, namespace: Option[String]): String = {
def base(m: Meta): String = m match {
case p: MPrimitive => p.cName
case MString => "std::string"
case MDate => "std::chrono::system_clock::time_point"
case MBinary => "std::vector<uint8_t>"
case MOptional => spec.cppOptionalTemplate
case MList => "std::vector"
case MSet => "std::unordered_set"
case MMap => "std::unordered_map"
case d: MDef =>
d.defType match {
case DEnum => withNs(namespace, idCpp.enumType(d.name))
case DRecord => withNs(namespace, idCpp.ty(d.name))
case DInterface => s"std::shared_ptr<${withNs(namespace, idCpp.ty(d.name))}>"
}
case p: MParam => idCpp.typeParam(p.name)
}
def expr(tm: MExpr): String = {
val args = if (tm.args.isEmpty) "" else tm.args.map(expr).mkString("<", ", ", ">")
base(tm.base) + args
}
expr(tm)
}
// this can be used in c++ generation to know whether a const& should be applied to the parameter or not
def toCppParamType(f: Field): String = toCppParamType(f, None, "")
def toCppParamType(f: Field, namespace: Option[String] = None, prefix: String = ""): String = {
val cppType = toCppType(f.ty, namespace)
val localName = prefix + idCpp.local(f.ident);
val refType = "const " + cppType + " & " + localName
val valueType = cppType + " " + localName
def toType(expr: MExpr): String = expr.base match {
case MPrimitive(_,_,_,_,_,_,_,_) => valueType
case MDate => valueType
case d: MDef => d.defType match {
case DEnum => valueType
case _ => refType
}
case MOptional => toType(expr.args.head)
case _ => refType
}
toType(f.ty.resolved)
}
def withNs(namespace: Option[String], t: String) = namespace.fold(t)("::"+_+"::"+t)
def withPackage(packageName: Option[String], t: String) = packageName.fold(t)(_+"."+t)
// --------------------------------------------------------------------------
def writeDoc(w: IndentWriter, doc: Doc) {
......
......@@ -28,7 +28,7 @@ CJNIEXPORT jint JNICALL Java_com_dropbox_djinni_test_CppException_00024CppProxy_
int32_t cr = ref->throw_an_exception();
return ::djinni::HI32::Unboxed::toJava(jniEnv, cr);
} JNI_TRANSLATE_EXCEPTIONS_RETURN(jniEnv, 0 /* value doesn't matter*/)
} JNI_TRANSLATE_EXCEPTIONS_RETURN(jniEnv, 0 /* value doesn't matter */)
}
CJNIEXPORT jobject JNICALL Java_com_dropbox_djinni_test_CppException_get(JNIEnv* jniEnv, jobject /*this*/)
......@@ -39,7 +39,7 @@ CJNIEXPORT jobject JNICALL Java_com_dropbox_djinni_test_CppException_get(JNIEnv*
std::shared_ptr<CppException> cr = CppException::get();
return NativeCppException::toJava(jniEnv, cr);
} JNI_TRANSLATE_EXCEPTIONS_RETURN(jniEnv, 0 /* value doesn't matter */ )
} JNI_TRANSLATE_EXCEPTIONS_RETURN(jniEnv, 0 /* value doesn't matter */)
}
} // namespace djinni_generated
......@@ -39,7 +39,7 @@ CJNIEXPORT jobject JNICALL Java_com_dropbox_djinni_test_TestHelpers_getSetRecord
SetRecord cr = TestHelpers::get_set_record();
return NativeSetRecord::toJava(jniEnv, cr);
} JNI_TRANSLATE_EXCEPTIONS_RETURN(jniEnv, 0 /* value doesn't matter */ )
} JNI_TRANSLATE_EXCEPTIONS_RETURN(jniEnv, 0 /* value doesn't matter */)
}
CJNIEXPORT jboolean JNICALL Java_com_dropbox_djinni_test_TestHelpers_checkSetRecord(JNIEnv* jniEnv, jobject /*this*/, jobject j_rec)
......@@ -51,7 +51,7 @@ CJNIEXPORT jboolean JNICALL Java_com_dropbox_djinni_test_TestHelpers_checkSetRec
bool cr = TestHelpers::check_set_record(c_rec);
return ::djinni::HBool::Unboxed::toJava(jniEnv, cr);
} JNI_TRANSLATE_EXCEPTIONS_RETURN(jniEnv, 0 /* value doesn't matter */ )
} JNI_TRANSLATE_EXCEPTIONS_RETURN(jniEnv, 0 /* value doesn't matter */)
}
CJNIEXPORT jobject JNICALL Java_com_dropbox_djinni_test_TestHelpers_getPrimitiveList(JNIEnv* jniEnv, jobject /*this*/)
......@@ -62,7 +62,7 @@ CJNIEXPORT jobject JNICALL Java_com_dropbox_djinni_test_TestHelpers_getPrimitive
PrimitiveList cr = TestHelpers::get_primitive_list();
return NativePrimitiveList::toJava(jniEnv, cr);
} JNI_TRANSLATE_EXCEPTIONS_RETURN(jniEnv, 0 /* value doesn't matter */ )
} JNI_TRANSLATE_EXCEPTIONS_RETURN(jniEnv, 0 /* value doesn't matter */)
}
CJNIEXPORT jboolean JNICALL Java_com_dropbox_djinni_test_TestHelpers_checkPrimitiveList(JNIEnv* jniEnv, jobject /*this*/, jobject j_pl)
......@@ -74,7 +74,7 @@ CJNIEXPORT jboolean JNICALL Java_com_dropbox_djinni_test_TestHelpers_checkPrimit
bool cr = TestHelpers::check_primitive_list(c_pl);
return ::djinni::HBool::Unboxed::toJava(jniEnv, cr);
} JNI_TRANSLATE_EXCEPTIONS_RETURN(jniEnv, 0 /* value doesn't matter */ )
} JNI_TRANSLATE_EXCEPTIONS_RETURN(jniEnv, 0 /* value doesn't matter */)
}
CJNIEXPORT jobject JNICALL Java_com_dropbox_djinni_test_TestHelpers_getNestedCollection(JNIEnv* jniEnv, jobject /*this*/)
......@@ -85,7 +85,7 @@ CJNIEXPORT jobject JNICALL Java_com_dropbox_djinni_test_TestHelpers_getNestedCol
NestedCollection cr = TestHelpers::get_nested_collection();
return NativeNestedCollection::toJava(jniEnv, cr);
} JNI_TRANSLATE_EXCEPTIONS_RETURN(jniEnv, 0 /* value doesn't matter */ )
} JNI_TRANSLATE_EXCEPTIONS_RETURN(jniEnv, 0 /* value doesn't matter */)
}
CJNIEXPORT jboolean JNICALL Java_com_dropbox_djinni_test_TestHelpers_checkNestedCollection(JNIEnv* jniEnv, jobject /*this*/, jobject j_nc)
......@@ -97,7 +97,7 @@ CJNIEXPORT jboolean JNICALL Java_com_dropbox_djinni_test_TestHelpers_checkNested
bool cr = TestHelpers::check_nested_collection(c_nc);
return ::djinni::HBool::Unboxed::toJava(jniEnv, cr);
} JNI_TRANSLATE_EXCEPTIONS_RETURN(jniEnv, 0 /* value doesn't matter */ )
} JNI_TRANSLATE_EXCEPTIONS_RETURN(jniEnv, 0 /* value doesn't matter */)
}
CJNIEXPORT jobject JNICALL Java_com_dropbox_djinni_test_TestHelpers_getMap(JNIEnv* jniEnv, jobject /*this*/)
......@@ -108,7 +108,7 @@ CJNIEXPORT jobject JNICALL Java_com_dropbox_djinni_test_TestHelpers_getMap(JNIEn
std::unordered_map<std::string, int64_t> cr = TestHelpers::get_map();
return ::djinni::HMap<::djinni::HString, ::djinni::HI64>::toJava(jniEnv, cr);
} JNI_TRANSLATE_EXCEPTIONS_RETURN(jniEnv, 0 /* value doesn't matter */ )
} JNI_TRANSLATE_EXCEPTIONS_RETURN(jniEnv, 0 /* value doesn't matter */)
}
CJNIEXPORT jboolean JNICALL Java_com_dropbox_djinni_test_TestHelpers_checkMap(JNIEnv* jniEnv, jobject /*this*/, jobject j_m)
......@@ -120,7 +120,7 @@ CJNIEXPORT jboolean JNICALL Java_com_dropbox_djinni_test_TestHelpers_checkMap(JN
bool cr = TestHelpers::check_map(c_m);
return ::djinni::HBool::Unboxed::toJava(jniEnv, cr);
} JNI_TRANSLATE_EXCEPTIONS_RETURN(jniEnv, 0 /* value doesn't matter */ )
} JNI_TRANSLATE_EXCEPTIONS_RETURN(jniEnv, 0 /* value doesn't matter */)
}
CJNIEXPORT jobject JNICALL Java_com_dropbox_djinni_test_TestHelpers_getEmptyMap(JNIEnv* jniEnv, jobject /*this*/)
......@@ -131,7 +131,7 @@ CJNIEXPORT jobject JNICALL Java_com_dropbox_djinni_test_TestHelpers_getEmptyMap(
std::unordered_map<std::string, int64_t> cr = TestHelpers::get_empty_map();
return ::djinni::HMap<::djinni::HString, ::djinni::HI64>::toJava(jniEnv, cr);
} JNI_TRANSLATE_EXCEPTIONS_RETURN(jniEnv, 0 /* value doesn't matter */ )
} JNI_TRANSLATE_EXCEPTIONS_RETURN(jniEnv, 0 /* value doesn't matter */)
}
CJNIEXPORT jboolean JNICALL Java_com_dropbox_djinni_test_TestHelpers_checkEmptyMap(JNIEnv* jniEnv, jobject /*this*/, jobject j_m)
......@@ -143,7 +143,7 @@ CJNIEXPORT jboolean JNICALL Java_com_dropbox_djinni_test_TestHelpers_checkEmptyM
bool cr = TestHelpers::check_empty_map(c_m);
return ::djinni::HBool::Unboxed::toJava(jniEnv, cr);
} JNI_TRANSLATE_EXCEPTIONS_RETURN(jniEnv, 0 /* value doesn't matter */ )
} JNI_TRANSLATE_EXCEPTIONS_RETURN(jniEnv, 0 /* value doesn't matter */)
}
CJNIEXPORT jobject JNICALL Java_com_dropbox_djinni_test_TestHelpers_getMapListRecord(JNIEnv* jniEnv, jobject /*this*/)
......@@ -154,7 +154,7 @@ CJNIEXPORT jobject JNICALL Java_com_dropbox_djinni_test_TestHelpers_getMapListRe
MapListRecord cr = TestHelpers::get_map_list_record();
return NativeMapListRecord::toJava(jniEnv, cr);
} JNI_TRANSLATE_EXCEPTIONS_RETURN(jniEnv, 0 /* value doesn't matter */ )
} JNI_TRANSLATE_EXCEPTIONS_RETURN(jniEnv, 0 /* value doesn't matter */)
}
CJNIEXPORT jboolean JNICALL Java_com_dropbox_djinni_test_TestHelpers_checkMapListRecord(JNIEnv* jniEnv, jobject /*this*/, jobject j_m)
......@@ -166,7 +166,7 @@ CJNIEXPORT jboolean JNICALL Java_com_dropbox_djinni_test_TestHelpers_checkMapLis
bool cr = TestHelpers::check_map_list_record(c_m);
return ::djinni::HBool::Unboxed::toJava(jniEnv, cr);
} JNI_TRANSLATE_EXCEPTIONS_RETURN(jniEnv, 0 /* value doesn't matter */ )
} JNI_TRANSLATE_EXCEPTIONS_RETURN(jniEnv, 0 /* value doesn't matter */)
}
CJNIEXPORT void JNICALL Java_com_dropbox_djinni_test_TestHelpers_checkClientInterfaceAscii(JNIEnv* jniEnv, jobject /*this*/, jobject j_i)
......@@ -208,7 +208,7 @@ CJNIEXPORT jobject JNICALL Java_com_dropbox_djinni_test_TestHelpers_tokenId(JNIE
std::shared_ptr<Token> cr = TestHelpers::token_id(c_t);
return NativeToken::toJava(jniEnv, cr);
} JNI_TRANSLATE_EXCEPTIONS_RETURN(jniEnv, 0 /* value doesn't matter */ )
} JNI_TRANSLATE_EXCEPTIONS_RETURN(jniEnv, 0 /* value doesn't matter */)
}
CJNIEXPORT jobject JNICALL Java_com_dropbox_djinni_test_TestHelpers_createCppToken(JNIEnv* jniEnv, jobject /*this*/)
......@@ -219,7 +219,7 @@ CJNIEXPORT jobject JNICALL Java_com_dropbox_djinni_test_TestHelpers_createCppTok
std::shared_ptr<Token> cr = TestHelpers::create_cpp_token();
return NativeToken::toJava(jniEnv, cr);
} JNI_TRANSLATE_EXCEPTIONS_RETURN(jniEnv, 0 /* value doesn't matter */ )
} JNI_TRANSLATE_EXCEPTIONS_RETURN(jniEnv, 0 /* value doesn't matter */)
}
CJNIEXPORT void JNICALL Java_com_dropbox_djinni_test_TestHelpers_checkCppToken(JNIEnv* jniEnv, jobject /*this*/, jobject j_t)
......@@ -241,7 +241,7 @@ CJNIEXPORT jlong JNICALL Java_com_dropbox_djinni_test_TestHelpers_cppTokenId(JNI
int64_t cr = TestHelpers::cpp_token_id(c_t);
return ::djinni::HI64::Unboxed::toJava(jniEnv, cr);
} JNI_TRANSLATE_EXCEPTIONS_RETURN(jniEnv, 0 /* value doesn't matter */ )
} JNI_TRANSLATE_EXCEPTIONS_RETURN(jniEnv, 0 /* value doesn't matter */)
}
CJNIEXPORT jobject JNICALL Java_com_dropbox_djinni_test_TestHelpers_returnNone(JNIEnv* jniEnv, jobject /*this*/)
......@@ -252,7 +252,7 @@ CJNIEXPORT jobject JNICALL Java_com_dropbox_djinni_test_TestHelpers_returnNone(J
std::experimental::optional<int32_t> cr = TestHelpers::return_none();
return ::djinni::HOptional<std::experimental::optional, ::djinni::HI32>::toJava(jniEnv, cr);
} JNI_TRANSLATE_EXCEPTIONS_RETURN(jniEnv, 0 /* value doesn't matter */ )
} JNI_TRANSLATE_EXCEPTIONS_RETURN(jniEnv, 0 /* value doesn't matter */)
}
CJNIEXPORT jobject JNICALL Java_com_dropbox_djinni_test_TestHelpers_assortedIntegersId(JNIEnv* jniEnv, jobject /*this*/, jobject j_i)
......@@ -264,7 +264,7 @@ CJNIEXPORT jobject JNICALL Java_com_dropbox_djinni_test_TestHelpers_assortedInte
AssortedIntegers cr = TestHelpers::assorted_integers_id(c_i);
return NativeAssortedIntegers::toJava(jniEnv, cr);
} JNI_TRANSLATE_EXCEPTIONS_RETURN(jniEnv, 0 /* value doesn't matter */ )
} JNI_TRANSLATE_EXCEPTIONS_RETURN(jniEnv, 0 /* value doesn't matter */)
}
} // namespace djinni_generated
......@@ -9,6 +9,6 @@
- (int32_t)throwAnException;
+ (DBCppException*)get;
+ (DBCppException *)get;
@end
......@@ -47,7 +47,7 @@ static_assert(__has_feature(objc_arc), "Djinni requires ARC to be enabled for th
} DJINNI_TRANSLATE_EXCEPTIONS()
}
+ (DBCppException*)get {
+ (DBCppException *)get {
try {
std::shared_ptr<CppException> cppRet = CppException::get();
DBCppException* objcRet = [DBCppException cppExceptionWithCpp:cppRet];
......
......@@ -44,13 +44,13 @@
+ (void)checkEnumMap:(NSDictionary *)m;
+ (DBToken*)tokenId:(DBToken*)t;
+ (DBToken *)tokenId:(DBToken *)t;
+ (DBToken*)createCppToken;
+ (DBToken *)createCppToken;
+ (void)checkCppToken:(DBToken*)t;
+ (void)checkCppToken:(DBToken *)t;
+ (int64_t)cppTokenId:(DBToken*)t;
+ (int64_t)cppTokenId:(DBToken *)t;
+ (NSNumber *)returnNone;
......
......@@ -209,7 +209,7 @@ static_assert(__has_feature(objc_arc), "Djinni requires ARC to be enabled for th
} DJINNI_TRANSLATE_EXCEPTIONS()
}
+ (DBToken*)tokenId:(DBToken*)t {
+ (DBToken *)tokenId:(DBToken *)t {
try {
std::shared_ptr<Token> cppT = t.cppRef;
std::shared_ptr<Token> cppRet = TestHelpers::token_id(std::move(cppT));
......@@ -218,7 +218,7 @@ static_assert(__has_feature(objc_arc), "Djinni requires ARC to be enabled for th
} DJINNI_TRANSLATE_EXCEPTIONS()
}
+ (DBToken*)createCppToken {
+ (DBToken *)createCppToken {
try {
std::shared_ptr<Token> cppRet = TestHelpers::create_cpp_token();
DBToken* objcRet = [DBToken tokenWithCpp:cppRet];
......@@ -226,14 +226,14 @@ static_assert(__has_feature(objc_arc), "Djinni requires ARC to be enabled for th
} DJINNI_TRANSLATE_EXCEPTIONS()
}
+ (void)checkCppToken:(DBToken*)t {
+ (void)checkCppToken:(DBToken *)t {
try {
std::shared_ptr<Token> cppT = t.cppRef;
TestHelpers::check_cpp_token(std::move(cppT));
} DJINNI_TRANSLATE_EXCEPTIONS()
}
+ (int64_t)cppTokenId:(DBToken*)t {
+ (int64_t)cppTokenId:(DBToken *)t {
try {
std::shared_ptr<Token> cppT = t.cppRef;
int64_t cppRet = TestHelpers::cpp_token_id(std::move(cppT));
......
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