From dd61dddf07789b5f85bd86274e50a986e61ba520 Mon Sep 17 00:00:00 2001 From: "pedemont%us.ibm.com" Date: Wed, 15 Sep 2004 22:59:42 +0000 Subject: [PATCH] Properly mplement T_VOID. Not part of default build. git-svn-id: svn://10.0.0.236/trunk@162422 18797224-902f-48f8-a5cc-f745e15eee43 --- .../extensions/java/xpcom/nsJavaXPTCStub.cpp | 48 +++++++++++++++---- 1 file changed, 38 insertions(+), 10 deletions(-) diff --git a/mozilla/extensions/java/xpcom/nsJavaXPTCStub.cpp b/mozilla/extensions/java/xpcom/nsJavaXPTCStub.cpp index d39a3915824..04538b175f0 100644 --- a/mozilla/extensions/java/xpcom/nsJavaXPTCStub.cpp +++ b/mozilla/extensions/java/xpcom/nsJavaXPTCStub.cpp @@ -362,6 +362,10 @@ nsJavaXPTCStub::CallMethod(PRUint16 aMethodIndex, retval.l = mJavaEnv->CallObjectMethodA(mJavaObject, mid, java_params); break; + case nsXPTType::T_VOID: + retval.i = mJavaEnv->CallIntMethodA(mJavaObject, mid, java_params); + break; + default: NS_WARNING("Unhandled retval type"); break; @@ -662,11 +666,20 @@ nsJavaXPTCStub::SetupJavaParams(const nsXPTParamInfo &aParamInfo, } break; - // XXX How should this be handled? + // Pass the 'void*' address as an integer case nsXPTType::T_VOID: - NS_WARNING("Unhandled T_VOID"); - return NS_ERROR_NOT_IMPLEMENTED; - break; + { + if (!aParamInfo.IsOut()) { + aJValue.i = (jint) aVariant.val.p; + aMethodSig.Append("I"); + } else { + jintArray array = mJavaEnv->NewIntArray(1); + mJavaEnv->SetIntArrayRegion(array, 0, 1, (jint*) &(aVariant.val.p)); + aJValue.l = array; + aMethodSig.Append("[I"); + } + } + break; case nsXPTType::T_ARRAY: NS_WARNING("array types are not yet supported"); @@ -743,10 +756,9 @@ nsJavaXPTCStub::GetRetvalSig(const nsXPTParamInfo* aParamInfo, aRetvalSig.Append("Lorg/mozilla/xpcom/nsISupports;"); break; - // XXX How should this be handled? + // XXX Probably won't work for 64 bit addr case nsXPTType::T_VOID: - NS_WARNING("Unhandled T_VOID"); - return NS_ERROR_NOT_IMPLEMENTED; + aRetvalSig.Append("I"); break; case nsXPTType::T_ARRAY: @@ -1178,9 +1190,25 @@ nsJavaXPTCStub::FinalizeJavaParams(const nsXPTParamInfo &aParamInfo, break; case nsXPTType::T_VOID: - NS_WARNING("Unhandled T_VOID"); - return NS_ERROR_NOT_IMPLEMENTED; - break; + { + if (aParamInfo.IsOut()) { + if (aParamInfo.IsRetval()) { + *((PRUint32 *) aVariant.val.p) = aJValue.i; + } else { + if (aJValue.l) { + jboolean isCopy = PR_FALSE; + jint* array = mJavaEnv->GetIntArrayElements((jintArray) aJValue.l, + &isCopy); + *((PRUint32 *) aVariant.val.p) = array[0]; + if (isCopy) { + mJavaEnv->ReleaseIntArrayElements((jintArray) aJValue.l, array, + JNI_ABORT); + } + } + } + } + } + break; default: NS_WARNING("unexpected parameter type");