Fix for bug 125465. r=jag, sr=jband, a=asa. Add AString, ACString, and AUTF8String support to XPCOM's variant data type. Also, add forward declarations of AString and ACString to nsrootidl.idl.
This commit is contained in:
@@ -352,6 +352,8 @@ XPCVariant::VariantDataToJS(XPCCallContext& ccx,
|
|||||||
nsXPTCVariant xpctvar;
|
nsXPTCVariant xpctvar;
|
||||||
nsID iid;
|
nsID iid;
|
||||||
nsAutoString astring;
|
nsAutoString astring;
|
||||||
|
nsCAutoString cString;
|
||||||
|
nsUTF8String utf8String;
|
||||||
PRUint32 size;
|
PRUint32 size;
|
||||||
xpctvar.flags = 0;
|
xpctvar.flags = 0;
|
||||||
JSBool success;
|
JSBool success;
|
||||||
@@ -399,11 +401,29 @@ XPCVariant::VariantDataToJS(XPCCallContext& ccx,
|
|||||||
xpctvar.val.p = &iid;
|
xpctvar.val.p = &iid;
|
||||||
break;
|
break;
|
||||||
case nsIDataType::VTYPE_ASTRING:
|
case nsIDataType::VTYPE_ASTRING:
|
||||||
|
if(NS_FAILED(variant->GetAsAString(astring)))
|
||||||
|
return JS_FALSE;
|
||||||
|
xpctvar.type = (uint8)(TD_ASTRING | XPT_TDP_POINTER);
|
||||||
|
xpctvar.val.p = &astring;
|
||||||
|
break;
|
||||||
|
case nsIDataType::VTYPE_DOMSTRING:
|
||||||
if(NS_FAILED(variant->GetAsAString(astring)))
|
if(NS_FAILED(variant->GetAsAString(astring)))
|
||||||
return JS_FALSE;
|
return JS_FALSE;
|
||||||
xpctvar.type = (uint8)(TD_DOMSTRING | XPT_TDP_POINTER);
|
xpctvar.type = (uint8)(TD_DOMSTRING | XPT_TDP_POINTER);
|
||||||
xpctvar.val.p = &astring;
|
xpctvar.val.p = &astring;
|
||||||
break;
|
break;
|
||||||
|
case nsIDataType::VTYPE_CSTRING:
|
||||||
|
if(NS_FAILED(variant->GetAsACString(cString)))
|
||||||
|
return JS_FALSE;
|
||||||
|
xpctvar.type = (uint8)(TD_CSTRING | XPT_TDP_POINTER);
|
||||||
|
xpctvar.val.p = &cString;
|
||||||
|
break;
|
||||||
|
case nsIDataType::VTYPE_UTF8STRING:
|
||||||
|
if(NS_FAILED(variant->GetAsAUTF8String(utf8String)))
|
||||||
|
return JS_FALSE;
|
||||||
|
xpctvar.type = (uint8)(TD_UTF8STRING | XPT_TDP_POINTER);
|
||||||
|
xpctvar.val.p = &utf8String;
|
||||||
|
break;
|
||||||
case nsIDataType::VTYPE_CHAR_STR:
|
case nsIDataType::VTYPE_CHAR_STR:
|
||||||
if(NS_FAILED(variant->GetAsString((char**)&xpctvar.val.p)))
|
if(NS_FAILED(variant->GetAsString((char**)&xpctvar.val.p)))
|
||||||
return JS_FALSE;
|
return JS_FALSE;
|
||||||
@@ -501,6 +521,9 @@ XPCVariant::VariantDataToJS(XPCCallContext& ccx,
|
|||||||
// The rest are illegal.
|
// The rest are illegal.
|
||||||
case nsIDataType::VTYPE_VOID:
|
case nsIDataType::VTYPE_VOID:
|
||||||
case nsIDataType::VTYPE_ASTRING:
|
case nsIDataType::VTYPE_ASTRING:
|
||||||
|
case nsIDataType::VTYPE_DOMSTRING:
|
||||||
|
case nsIDataType::VTYPE_CSTRING:
|
||||||
|
case nsIDataType::VTYPE_UTF8STRING:
|
||||||
case nsIDataType::VTYPE_WSTRING_SIZE_IS:
|
case nsIDataType::VTYPE_WSTRING_SIZE_IS:
|
||||||
case nsIDataType::VTYPE_STRING_SIZE_IS:
|
case nsIDataType::VTYPE_STRING_SIZE_IS:
|
||||||
case nsIDataType::VTYPE_ARRAY:
|
case nsIDataType::VTYPE_ARRAY:
|
||||||
@@ -659,6 +682,26 @@ NS_IMETHODIMP XPCVariant::GetAsAString(nsAWritableString & _retval)
|
|||||||
return nsVariant::ConvertToAString(mData, _retval);
|
return nsVariant::ConvertToAString(mData, _retval);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* DOMString getAsDOMString (); */
|
||||||
|
NS_IMETHODIMP XPCVariant::GetAsDOMString(nsAWritableString & _retval)
|
||||||
|
{
|
||||||
|
// A DOMString maps to an AString internally, so we can re-use
|
||||||
|
// ConvertToAString here.
|
||||||
|
return nsVariant::ConvertToAString(mData, _retval);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ACString getAsACString (); */
|
||||||
|
NS_IMETHODIMP XPCVariant::GetAsACString(nsACString & _retval)
|
||||||
|
{
|
||||||
|
return nsVariant::ConvertToACString(mData, _retval);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* AUTF8String getAsAUTF8String (); */
|
||||||
|
NS_IMETHODIMP XPCVariant::GetAsAUTF8String(nsAUTF8String & _retval)
|
||||||
|
{
|
||||||
|
return nsVariant::ConvertToAUTF8String(mData, _retval);
|
||||||
|
}
|
||||||
|
|
||||||
/* string getAsString (); */
|
/* string getAsString (); */
|
||||||
NS_IMETHODIMP XPCVariant::GetAsString(char **_retval)
|
NS_IMETHODIMP XPCVariant::GetAsString(char **_retval)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -152,6 +152,7 @@ static nsresult ConvertAndCopyVariant(nsIVariant *inVar, PRUint16 type, nsIVaria
|
|||||||
MEMBER_COPY(ID)
|
MEMBER_COPY(ID)
|
||||||
break;
|
break;
|
||||||
case nsIDataType::VTYPE_ASTRING:
|
case nsIDataType::VTYPE_ASTRING:
|
||||||
|
case nsIDataType::VTYPE_DOMSTRING:
|
||||||
{
|
{
|
||||||
nsAutoString str;
|
nsAutoString str;
|
||||||
rv = inVar->GetAsAString(str);
|
rv = inVar->GetAsAString(str);
|
||||||
@@ -160,6 +161,24 @@ static nsresult ConvertAndCopyVariant(nsIVariant *inVar, PRUint16 type, nsIVaria
|
|||||||
NS_ENSURE_SUCCESS(rv,rv);
|
NS_ENSURE_SUCCESS(rv,rv);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case nsIDataType::VTYPE_UTF8STRING:
|
||||||
|
{
|
||||||
|
nsUTF8String str;
|
||||||
|
rv = inVar->GetAsAUTF8String(str);
|
||||||
|
if(NS_FAILED(rv)) return rv;
|
||||||
|
rv = outVar->SetAsAUTF8String(str);
|
||||||
|
NS_ENSURE_SUCCESS(rv,rv);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case nsIDataType::VTYPE_CSTRING:
|
||||||
|
{
|
||||||
|
nsCAutoString str;
|
||||||
|
rv = inVar->GetAsACString(str);
|
||||||
|
if(NS_FAILED(rv)) return rv;
|
||||||
|
rv = outVar->SetAsACString(str);
|
||||||
|
NS_ENSURE_SUCCESS(rv,rv);
|
||||||
|
break;
|
||||||
|
}
|
||||||
case nsIDataType::VTYPE_CHAR_STR:
|
case nsIDataType::VTYPE_CHAR_STR:
|
||||||
{
|
{
|
||||||
char* str;
|
char* str;
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ const DataTypeArray = [
|
|||||||
Components.interfaces.nsIDataType.VTYPE_WCHAR ,
|
Components.interfaces.nsIDataType.VTYPE_WCHAR ,
|
||||||
Components.interfaces.nsIDataType.VTYPE_VOID ,
|
Components.interfaces.nsIDataType.VTYPE_VOID ,
|
||||||
Components.interfaces.nsIDataType.VTYPE_ID ,
|
Components.interfaces.nsIDataType.VTYPE_ID ,
|
||||||
Components.interfaces.nsIDataType.VTYPE_ASTRING ,
|
Components.interfaces.nsIDataType.VTYPE_DOMSTRING ,
|
||||||
Components.interfaces.nsIDataType.VTYPE_CHAR_STR ,
|
Components.interfaces.nsIDataType.VTYPE_CHAR_STR ,
|
||||||
Components.interfaces.nsIDataType.VTYPE_WCHAR_STR ,
|
Components.interfaces.nsIDataType.VTYPE_WCHAR_STR ,
|
||||||
Components.interfaces.nsIDataType.VTYPE_INTERFACE ,
|
Components.interfaces.nsIDataType.VTYPE_INTERFACE ,
|
||||||
@@ -28,6 +28,9 @@ const DataTypeArray = [
|
|||||||
Components.interfaces.nsIDataType.VTYPE_ARRAY ,
|
Components.interfaces.nsIDataType.VTYPE_ARRAY ,
|
||||||
Components.interfaces.nsIDataType.VTYPE_STRING_SIZE_IS ,
|
Components.interfaces.nsIDataType.VTYPE_STRING_SIZE_IS ,
|
||||||
Components.interfaces.nsIDataType.VTYPE_WSTRING_SIZE_IS ,
|
Components.interfaces.nsIDataType.VTYPE_WSTRING_SIZE_IS ,
|
||||||
|
Components.interfaces.nsIDataType.VTYPE_UTF8STRING ,
|
||||||
|
Components.interfaces.nsIDataType.VTYPE_CSTRING ,
|
||||||
|
Components.interfaces.nsIDataType.VTYPE_ASTRING ,
|
||||||
Components.interfaces.nsIDataType.VTYPE_EMPTY
|
Components.interfaces.nsIDataType.VTYPE_EMPTY
|
||||||
];
|
];
|
||||||
|
|
||||||
@@ -47,7 +50,7 @@ const ShortNames = [
|
|||||||
{name: "WC", number: Components.interfaces.nsIDataType.VTYPE_WCHAR },
|
{name: "WC", number: Components.interfaces.nsIDataType.VTYPE_WCHAR },
|
||||||
{name: "VD", number: Components.interfaces.nsIDataType.VTYPE_VOID },
|
{name: "VD", number: Components.interfaces.nsIDataType.VTYPE_VOID },
|
||||||
{name: "ID", number: Components.interfaces.nsIDataType.VTYPE_ID },
|
{name: "ID", number: Components.interfaces.nsIDataType.VTYPE_ID },
|
||||||
{name: "AS", number: Components.interfaces.nsIDataType.VTYPE_ASTRING },
|
{name: "DS", number: Components.interfaces.nsIDataType.VTYPE_DOMSTRING },
|
||||||
{name: "ST", number: Components.interfaces.nsIDataType.VTYPE_CHAR_STR },
|
{name: "ST", number: Components.interfaces.nsIDataType.VTYPE_CHAR_STR },
|
||||||
{name: "WS", number: Components.interfaces.nsIDataType.VTYPE_WCHAR_STR },
|
{name: "WS", number: Components.interfaces.nsIDataType.VTYPE_WCHAR_STR },
|
||||||
{name: "NS", number: Components.interfaces.nsIDataType.VTYPE_INTERFACE },
|
{name: "NS", number: Components.interfaces.nsIDataType.VTYPE_INTERFACE },
|
||||||
@@ -55,6 +58,9 @@ const ShortNames = [
|
|||||||
{name: "AR", number: Components.interfaces.nsIDataType.VTYPE_ARRAY },
|
{name: "AR", number: Components.interfaces.nsIDataType.VTYPE_ARRAY },
|
||||||
{name: "Ss", number: Components.interfaces.nsIDataType.VTYPE_STRING_SIZE_IS },
|
{name: "Ss", number: Components.interfaces.nsIDataType.VTYPE_STRING_SIZE_IS },
|
||||||
{name: "Ws", number: Components.interfaces.nsIDataType.VTYPE_WSTRING_SIZE_IS},
|
{name: "Ws", number: Components.interfaces.nsIDataType.VTYPE_WSTRING_SIZE_IS},
|
||||||
|
{name: "US", number: Components.interfaces.nsIDataType.VTYPE_UTF8STRING },
|
||||||
|
{name: "CS", number: Components.interfaces.nsIDataType.VTYPE_CSTRING },
|
||||||
|
{name: "AS", number: Components.interfaces.nsIDataType.VTYPE_ASTRING },
|
||||||
{name: "EM", number: Components.interfaces.nsIDataType.VTYPE_EMPTY }
|
{name: "EM", number: Components.interfaces.nsIDataType.VTYPE_EMPTY }
|
||||||
];
|
];
|
||||||
|
|
||||||
@@ -191,74 +197,80 @@ function TestDoubleConvert(value, comment, eq_fun, table) {
|
|||||||
//
|
//
|
||||||
|
|
||||||
const SingleConvertResultsTableFor_String_Foo = [
|
const SingleConvertResultsTableFor_String_Foo = [
|
||||||
/*I1,I2,I4,I8,U1,U2,U4,U8,FL,DB,BO,CH,WC,VD,ID,AS,ST,WS,NS,IF,AR,Ss,Ws,EM */
|
/*I1,I2,I4,I8,U1,U2,U4,U8,FL,DB,BO,CH,WC,VD,ID,DS,ST,WS,NS,IF,AR,Ss,Ws,US,CS,AS,EM */
|
||||||
_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,eq,eq,eq,_e,_e,_e,eq,eq,_e
|
_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,eq,eq,eq,_e,_e,_e,eq,eq,eq,eq,eq,_e
|
||||||
];
|
];
|
||||||
|
|
||||||
const SingleConvertResultsTableFor_String_5 = [
|
const SingleConvertResultsTableFor_String_5 = [
|
||||||
/*I1,I2,I4,I8,U1,U2,U4,U8,FL,DB,BO,CH,WC,VD,ID,AS,ST,WS,NS,IF,AR,Ss,Ws,EM */
|
/*I1,I2,I4,I8,U1,U2,U4,U8,FL,DB,BO,CH,WC,VD,ID,DS,ST,WS,NS,IF,AR,Ss,Ws,US,CS,AS,EM */
|
||||||
eq,eq,eq,eq,eq,eq,eq,eq,eq,eq,_T,NE,NE,_e,_e,eq,eq,eq,_e,_e,_e,eq,eq,_e
|
eq,eq,eq,eq,eq,eq,eq,eq,eq,eq,_T,NE,NE,_e,_e,eq,eq,eq,_e,_e,_e,eq,eq,eq,eq,eq,_e
|
||||||
];
|
];
|
||||||
|
|
||||||
const SingleConvertResultsTableFor_Number_20 = [
|
const SingleConvertResultsTableFor_Number_20 = [
|
||||||
/*I1,I2,I4,I8,U1,U2,U4,U8,FL,DB,BO,CH,WC,VD,ID,AS,ST,WS,NS,IF,AR,Ss,Ws,EM */
|
/*I1,I2,I4,I8,U1,U2,U4,U8,FL,DB,BO,CH,WC,VD,ID,DS,ST,WS,NS,IF,AR,Ss,Ws,US,CS,AS,EM */
|
||||||
eq,eq,eq,eq,eq,eq,eq,eq,eq,eq,_T,NE,NE,_e,_e,eq,eq,eq,_e,_e,_e,eq,eq,_e
|
eq,eq,eq,eq,eq,eq,eq,eq,eq,eq,_T,NE,NE,_e,_e,eq,eq,eq,_e,_e,_e,eq,eq,eq,eq,eq,_e
|
||||||
];
|
];
|
||||||
|
|
||||||
const DoubleConvertResultsTableFor_String_Foo = [
|
const DoubleConvertResultsTableFor_String_Foo = [
|
||||||
/* I1,I2,I4,I8,U1,U2,U4,U8,FL,DB,BO,CH,WC,VD,ID,AS,ST,WS,NS,IF,AR,Ss,Ws,EM */
|
/* I1,I2,I4,I8,U1,U2,U4,U8,FL,DB,BO,CH,WC,VD,ID,DS,ST,WS,NS,IF,AR,Ss,Ws,US,CS,AS,EM */
|
||||||
/*I1*/[_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e],/*I1*/
|
/*I1*/[_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e],/*I1*/
|
||||||
/*I2*/[_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e],/*I2*/
|
/*I2*/[_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e],/*I2*/
|
||||||
/*I4*/[_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e],/*I4*/
|
/*I4*/[_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e],/*I4*/
|
||||||
/*I8*/[_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e],/*I8*/
|
/*I8*/[_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e],/*I8*/
|
||||||
/*U1*/[_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e],/*U1*/
|
/*U1*/[_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e],/*U1*/
|
||||||
/*U2*/[_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e],/*U2*/
|
/*U2*/[_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e],/*U2*/
|
||||||
/*U4*/[_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e],/*U4*/
|
/*U4*/[_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e],/*U4*/
|
||||||
/*U8*/[_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e],/*U8*/
|
/*U8*/[_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e],/*U8*/
|
||||||
/*FL*/[_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e],/*FL*/
|
/*FL*/[_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e],/*FL*/
|
||||||
/*DB*/[_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e],/*DB*/
|
/*DB*/[_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e],/*DB*/
|
||||||
/*BO*/[_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e],/*BO*/
|
/*BO*/[_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e],/*BO*/
|
||||||
/*CH*/[_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e],/*CH*/
|
/*CH*/[_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e],/*CH*/
|
||||||
/*WC*/[_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e],/*WC*/
|
/*WC*/[_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e],/*WC*/
|
||||||
/*VD*/[_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e],/*VD*/
|
/*VD*/[_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e],/*VD*/
|
||||||
/*ID*/[_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e],/*ID*/
|
/*ID*/[_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e],/*ID*/
|
||||||
/*AS*/[_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,eq,eq,eq,_e,_e,_e,eq,eq,_e],/*AS*/
|
/*DS*/[_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,eq,eq,eq,_e,_e,_e,eq,eq,eq,eq,eq,_e],/*DS*/
|
||||||
/*ST*/[_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,eq,eq,eq,_e,_e,_e,eq,eq,_e],/*ST*/
|
/*ST*/[_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,eq,eq,eq,_e,_e,_e,eq,eq,eq,eq,eq,_e],/*ST*/
|
||||||
/*WS*/[_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,eq,eq,eq,_e,_e,_e,eq,eq,_e],/*WS*/
|
/*WS*/[_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,eq,eq,eq,_e,_e,_e,eq,eq,eq,eq,eq,_e],/*WS*/
|
||||||
/*NS*/[_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e],/*NS*/
|
/*NS*/[_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e],/*NS*/
|
||||||
/*IF*/[_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e],/*IF*/
|
/*IF*/[_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e],/*IF*/
|
||||||
/*AR*/[_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e],/*AR*/
|
/*AR*/[_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e],/*AR*/
|
||||||
/*Ss*/[_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,eq,eq,eq,_e,_e,_e,eq,eq,_e],/*Ss*/
|
/*Ss*/[_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,eq,eq,eq,_e,_e,_e,eq,eq,eq,eq,eq,_e],/*Ss*/
|
||||||
/*Ws*/[_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,eq,eq,eq,_e,_e,_e,eq,eq,_e],/*Ws*/
|
/*Ws*/[_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,eq,eq,eq,_e,_e,_e,eq,eq,eq,eq,eq,_e],/*Ws*/
|
||||||
/*EM*/[_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e] /*EM*/
|
/*US*/[_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,eq,eq,eq,_e,_e,_e,eq,eq,eq,eq,eq,_e],/*US*/
|
||||||
|
/*CS*/[_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,eq,eq,eq,_e,_e,_e,eq,eq,eq,eq,eq,_e],/*CS*/
|
||||||
|
/*AS*/[_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,eq,eq,eq,_e,_e,_e,eq,eq,eq,eq,eq,_e],/*AS*/
|
||||||
|
/*EM*/[_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e] /*EM*/
|
||||||
];
|
];
|
||||||
|
|
||||||
const DoubleConvertResultsTableFor_String_Five = [
|
const DoubleConvertResultsTableFor_String_Five = [
|
||||||
/* I1,I2,I4,I8,U1,U2,U4,U8,FL,DB,BO,CH,WC,VD,ID,AS,ST,WS,NS,IF,AR,Ss,Ws,EM */
|
/* I1,I2,I4,I8,U1,U2,U4,U8,FL,DB,BO,CH,WC,VD,ID,DS,ST,WS,NS,IF,AR,Ss,Ws,US,CS,AS,EM */
|
||||||
/*I1*/[eq,eq,eq,eq,eq,eq,eq,eq,eq,eq,_T,eq,eq,_e,_e,eq,eq,eq,_e,_e,_e,eq,eq,_e],/*I1*/
|
/*I1*/[eq,eq,eq,eq,eq,eq,eq,eq,eq,eq,_T,eq,eq,_e,_e,eq,eq,eq,_e,_e,_e,eq,eq,eq,eq,eq,_e],/*I1*/
|
||||||
/*I2*/[eq,eq,eq,eq,eq,eq,eq,eq,eq,eq,_T,eq,eq,_e,_e,eq,eq,eq,_e,_e,_e,eq,eq,_e],/*I2*/
|
/*I2*/[eq,eq,eq,eq,eq,eq,eq,eq,eq,eq,_T,eq,eq,_e,_e,eq,eq,eq,_e,_e,_e,eq,eq,eq,eq,eq,_e],/*I2*/
|
||||||
/*I4*/[eq,eq,eq,eq,eq,eq,eq,eq,eq,eq,_T,eq,eq,_e,_e,eq,eq,eq,_e,_e,_e,eq,eq,_e],/*I4*/
|
/*I4*/[eq,eq,eq,eq,eq,eq,eq,eq,eq,eq,_T,eq,eq,_e,_e,eq,eq,eq,_e,_e,_e,eq,eq,eq,eq,eq,_e],/*I4*/
|
||||||
/*I8*/[eq,eq,eq,eq,eq,eq,eq,eq,eq,eq,_T,eq,eq,_e,_e,eq,eq,eq,_e,_e,_e,eq,eq,_e],/*I8*/
|
/*I8*/[eq,eq,eq,eq,eq,eq,eq,eq,eq,eq,_T,eq,eq,_e,_e,eq,eq,eq,_e,_e,_e,eq,eq,eq,eq,eq,_e],/*I8*/
|
||||||
/*U1*/[eq,eq,eq,eq,eq,eq,eq,eq,eq,eq,_T,eq,eq,_e,_e,eq,eq,eq,_e,_e,_e,eq,eq,_e],/*U1*/
|
/*U1*/[eq,eq,eq,eq,eq,eq,eq,eq,eq,eq,_T,eq,eq,_e,_e,eq,eq,eq,_e,_e,_e,eq,eq,eq,eq,eq,_e],/*U1*/
|
||||||
/*U2*/[eq,eq,eq,eq,eq,eq,eq,eq,eq,eq,_T,eq,eq,_e,_e,eq,eq,eq,_e,_e,_e,eq,eq,_e],/*U2*/
|
/*U2*/[eq,eq,eq,eq,eq,eq,eq,eq,eq,eq,_T,eq,eq,_e,_e,eq,eq,eq,_e,_e,_e,eq,eq,eq,eq,eq,_e],/*U2*/
|
||||||
/*U4*/[eq,eq,eq,eq,eq,eq,eq,eq,eq,eq,_T,eq,eq,_e,_e,eq,eq,eq,_e,_e,_e,eq,eq,_e],/*U4*/
|
/*U4*/[eq,eq,eq,eq,eq,eq,eq,eq,eq,eq,_T,eq,eq,_e,_e,eq,eq,eq,_e,_e,_e,eq,eq,eq,eq,eq,_e],/*U4*/
|
||||||
/*U8*/[eq,eq,eq,eq,eq,eq,eq,eq,eq,eq,_T,eq,eq,_e,_e,eq,eq,eq,_e,_e,_e,eq,eq,_e],/*U8*/
|
/*U8*/[eq,eq,eq,eq,eq,eq,eq,eq,eq,eq,_T,eq,eq,_e,_e,eq,eq,eq,_e,_e,_e,eq,eq,eq,eq,eq,_e],/*U8*/
|
||||||
/*FL*/[eq,eq,eq,eq,eq,eq,eq,eq,eq,eq,_T,eq,eq,_e,_e,eq,eq,eq,_e,_e,_e,eq,eq,_e],/*FL*/
|
/*FL*/[eq,eq,eq,eq,eq,eq,eq,eq,eq,eq,_T,eq,eq,_e,_e,eq,eq,eq,_e,_e,_e,eq,eq,eq,eq,eq,_e],/*FL*/
|
||||||
/*DB*/[eq,eq,eq,eq,eq,eq,eq,eq,eq,eq,_T,eq,eq,_e,_e,eq,eq,eq,_e,_e,_e,eq,eq,_e],/*DB*/
|
/*DB*/[eq,eq,eq,eq,eq,eq,eq,eq,eq,eq,_T,eq,eq,_e,_e,eq,eq,eq,_e,_e,_e,eq,eq,eq,eq,eq,_e],/*DB*/
|
||||||
/*BO*/[_T,_T,_T,_T,_T,_T,_T,_T,_T,_T,_T,NE,NE,_e,_e,_T,_T,_T,_e,_e,_e,_T,_T,_e],/*BO*/
|
/*BO*/[_T,_T,_T,_T,_T,_T,_T,_T,_T,_T,_T,NE,NE,_e,_e,_T,_T,_T,_e,_e,_e,_T,_T,_T,_T,_T,_e],/*BO*/
|
||||||
/*CH*/[NE,NE,NE,NE,NE,NE,NE,NE,NE,NE,NE,NE,NE,_e,_e,NE,NE,NE,_e,_e,_e,NE,NE,_e],/*CH*/
|
/*CH*/[NE,NE,NE,NE,NE,NE,NE,NE,NE,NE,NE,NE,NE,_e,_e,NE,NE,NE,_e,_e,_e,NE,NE,NE,NE,NE,_e],/*CH*/
|
||||||
/*WC*/[NE,NE,NE,NE,NE,NE,NE,NE,NE,NE,NE,NE,NE,_e,_e,NE,NE,NE,_e,_e,_e,NE,NE,_e],/*WC*/
|
/*WC*/[NE,NE,NE,NE,NE,NE,NE,NE,NE,NE,NE,NE,NE,_e,_e,NE,NE,NE,_e,_e,_e,NE,NE,NE,NE,NE,_e],/*WC*/
|
||||||
/*VD*/[_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e],/*VD*/
|
/*VD*/[_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e],/*VD*/
|
||||||
/*ID*/[_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e],/*ID*/
|
/*ID*/[_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e],/*ID*/
|
||||||
/*AS*/[eq,eq,eq,eq,eq,eq,eq,eq,eq,eq,NE,NE,NE,_e,_e,eq,eq,eq,_e,_e,_e,eq,eq,_e],/*AS*/
|
/*DS*/[eq,eq,eq,eq,eq,eq,eq,eq,eq,eq,NE,NE,NE,_e,_e,eq,eq,eq,_e,_e,_e,eq,eq,eq,eq,eq,_e],/*DS*/
|
||||||
/*ST*/[eq,eq,eq,eq,eq,eq,eq,eq,eq,eq,NE,NE,NE,_e,_e,eq,eq,eq,_e,_e,_e,eq,eq,_e],/*ST*/
|
/*ST*/[eq,eq,eq,eq,eq,eq,eq,eq,eq,eq,NE,NE,NE,_e,_e,eq,eq,eq,_e,_e,_e,eq,eq,eq,eq,eq,_e],/*ST*/
|
||||||
/*WS*/[eq,eq,eq,eq,eq,eq,eq,eq,eq,eq,NE,NE,NE,_e,_e,eq,eq,eq,_e,_e,_e,eq,eq,_e],/*WS*/
|
/*WS*/[eq,eq,eq,eq,eq,eq,eq,eq,eq,eq,NE,NE,NE,_e,_e,eq,eq,eq,_e,_e,_e,eq,eq,eq,eq,eq,_e],/*WS*/
|
||||||
/*NS*/[_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e],/*NS*/
|
/*NS*/[_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e],/*NS*/
|
||||||
/*IF*/[_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e],/*IF*/
|
/*IF*/[_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e],/*IF*/
|
||||||
/*AR*/[_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e],/*AR*/
|
/*AR*/[_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e],/*AR*/
|
||||||
/*Ss*/[eq,eq,eq,eq,eq,eq,eq,eq,eq,eq,NE,NE,NE,_e,_e,eq,eq,eq,_e,_e,_e,eq,eq,_e],/*Ss*/
|
/*Ss*/[eq,eq,eq,eq,eq,eq,eq,eq,eq,eq,NE,NE,NE,_e,_e,eq,eq,eq,_e,_e,_e,eq,eq,eq,eq,eq,_e],/*Ss*/
|
||||||
/*Ws*/[eq,eq,eq,eq,eq,eq,eq,eq,eq,eq,NE,NE,NE,_e,_e,eq,eq,eq,_e,_e,_e,eq,eq,_e],/*Ws*/
|
/*Ws*/[eq,eq,eq,eq,eq,eq,eq,eq,eq,eq,NE,NE,NE,_e,_e,eq,eq,eq,_e,_e,_e,eq,eq,eq,eq,eq,_e],/*Ws*/
|
||||||
/*EM*/[_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e] /*EM*/
|
/*US*/[eq,eq,eq,eq,eq,eq,eq,eq,eq,eq,NE,NE,NE,_e,_e,eq,eq,eq,_e,_e,_e,eq,eq,eq,eq,eq,_e],/*US*/
|
||||||
|
/*CS*/[eq,eq,eq,eq,eq,eq,eq,eq,eq,eq,NE,NE,NE,_e,_e,eq,eq,eq,_e,_e,_e,eq,eq,eq,eq,eq,_e],/*CS*/
|
||||||
|
/*AS*/[eq,eq,eq,eq,eq,eq,eq,eq,eq,eq,NE,NE,NE,_e,_e,eq,eq,eq,_e,_e,_e,eq,eq,eq,eq,eq,_e],/*AS*/
|
||||||
|
/*EM*/[_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e,_e] /*EM*/
|
||||||
];
|
];
|
||||||
|
|
||||||
var values = [
|
var values = [
|
||||||
|
|||||||
@@ -46,6 +46,12 @@
|
|||||||
#include "nscore.h"
|
#include "nscore.h"
|
||||||
#include "prtime.h"
|
#include "prtime.h"
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Forward declarations for new string types
|
||||||
|
*/
|
||||||
|
class nsAString;
|
||||||
|
class nsACString;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Start commenting out the C++ versions of the below in the output header
|
* Start commenting out the C++ versions of the below in the output header
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -50,15 +50,17 @@ interface nsIDataType : nsISupports
|
|||||||
const PRUint16 VTYPE_WCHAR = 12; // TD_WCHAR = 12,
|
const PRUint16 VTYPE_WCHAR = 12; // TD_WCHAR = 12,
|
||||||
const PRUint16 VTYPE_VOID = 13; // TD_VOID = 13,
|
const PRUint16 VTYPE_VOID = 13; // TD_VOID = 13,
|
||||||
const PRUint16 VTYPE_ID = 14; // TD_PNSIID = 14,
|
const PRUint16 VTYPE_ID = 14; // TD_PNSIID = 14,
|
||||||
const PRUint16 VTYPE_ASTRING = 15; // TD_DOMSTRING = 15,
|
const PRUint16 VTYPE_DOMSTRING = 15; // TD_DOMSTRING = 15,
|
||||||
const PRUint16 VTYPE_CHAR_STR = 16; // TD_PSTRING = 16,
|
const PRUint16 VTYPE_CHAR_STR = 16; // TD_PSTRING = 16,
|
||||||
const PRUint16 VTYPE_WCHAR_STR = 17; // TD_PWSTRING = 17,
|
const PRUint16 VTYPE_WCHAR_STR = 17; // TD_PWSTRING = 17,
|
||||||
const PRUint16 VTYPE_INTERFACE = 18; // TD_INTERFACE_TYPE = 18,
|
const PRUint16 VTYPE_INTERFACE = 18; // TD_INTERFACE_TYPE = 18,
|
||||||
const PRUint16 VTYPE_INTERFACE_IS = 19; // TD_INTERFACE_IS_TYPE = 19,
|
const PRUint16 VTYPE_INTERFACE_IS = 19; // TD_INTERFACE_IS_TYPE = 19,
|
||||||
const PRUint16 VTYPE_ARRAY = 20; // TD_ARRAY = 20,
|
const PRUint16 VTYPE_ARRAY = 20; // TD_ARRAY = 20,
|
||||||
const PRUint16 VTYPE_STRING_SIZE_IS = 21; // TD_PSTRING_SIZE_IS = 21,
|
const PRUint16 VTYPE_STRING_SIZE_IS = 21; // TD_PSTRING_SIZE_IS = 21,
|
||||||
const PRUint16 VTYPE_WSTRING_SIZE_IS = 22; // TD_PWSTRING_SIZE_IS = 22
|
const PRUint16 VTYPE_WSTRING_SIZE_IS = 22; // TD_PWSTRING_SIZE_IS = 22,
|
||||||
|
const PRUint16 VTYPE_UTF8STRING = 23; // TD_UTF8STRING = 23,
|
||||||
|
const PRUint16 VTYPE_CSTRING = 24; // TD_CSTRING = 24,
|
||||||
|
const PRUint16 VTYPE_ASTRING = 25; // TD_ASTRING = 25,
|
||||||
const PRUint16 VTYPE_EMPTY = 255;
|
const PRUint16 VTYPE_EMPTY = 255;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -91,6 +93,9 @@ interface nsIVariant : nsISupports
|
|||||||
[noscript] wchar getAsWChar();
|
[noscript] wchar getAsWChar();
|
||||||
[notxpcom] nsresult getAsID(out nsID retval);
|
[notxpcom] nsresult getAsID(out nsID retval);
|
||||||
[noscript] AString getAsAString();
|
[noscript] AString getAsAString();
|
||||||
|
[noscript] DOMString getAsDOMString();
|
||||||
|
[noscript] ACString getAsACString();
|
||||||
|
[noscript] AUTF8String getAsAUTF8String();
|
||||||
[noscript] string getAsString();
|
[noscript] string getAsString();
|
||||||
[noscript] wstring getAsWString();
|
[noscript] wstring getAsWString();
|
||||||
[noscript] nsISupports getAsISupports();
|
[noscript] nsISupports getAsISupports();
|
||||||
@@ -138,6 +143,9 @@ interface nsIWritableVariant : nsIVariant
|
|||||||
void setAsWChar(in wchar aValue);
|
void setAsWChar(in wchar aValue);
|
||||||
void setAsID(in nsIDRef aValue);
|
void setAsID(in nsIDRef aValue);
|
||||||
void setAsAString(in AString aValue);
|
void setAsAString(in AString aValue);
|
||||||
|
void setAsDOMString(in DOMString aValue);
|
||||||
|
void setAsACString(in ACString aValue);
|
||||||
|
void setAsAUTF8String(in AUTF8String aValue);
|
||||||
void setAsString(in string aValue);
|
void setAsString(in string aValue);
|
||||||
void setAsWString(in wstring aValue);
|
void setAsWString(in wstring aValue);
|
||||||
void setAsISupports(in nsISupports aValue);
|
void setAsISupports(in nsISupports aValue);
|
||||||
|
|||||||
@@ -52,6 +52,16 @@ static nsresult AString2Double(const nsAString& aString, double* retval)
|
|||||||
return rv;
|
return rv;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static nsresult AUTF8String2Double(const nsAUTF8String& aString, double* retval)
|
||||||
|
{
|
||||||
|
return String2Double(PromiseFlatUTF8String(aString).get(), retval);
|
||||||
|
}
|
||||||
|
|
||||||
|
static nsresult ACString2Double(const nsACString& aString, double* retval)
|
||||||
|
{
|
||||||
|
return String2Double(PromiseFlatCString(aString).get(), retval);
|
||||||
|
}
|
||||||
|
|
||||||
// Fills outVariant with double, PRUint32, or PRInt32.
|
// Fills outVariant with double, PRUint32, or PRInt32.
|
||||||
// Returns NS_OK, an error code, or a non-NS_OK success code
|
// Returns NS_OK, an error code, or a non-NS_OK success code
|
||||||
static nsresult ToManageableNumber(const nsDiscriminatedUnion& inData,
|
static nsresult ToManageableNumber(const nsDiscriminatedUnion& inData,
|
||||||
@@ -112,12 +122,27 @@ static nsresult ToManageableNumber(const nsDiscriminatedUnion& inData,
|
|||||||
return rv;
|
return rv;
|
||||||
outData->mType = nsIDataType::VTYPE_DOUBLE;
|
outData->mType = nsIDataType::VTYPE_DOUBLE;
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
|
case nsIDataType::VTYPE_DOMSTRING:
|
||||||
case nsIDataType::VTYPE_ASTRING:
|
case nsIDataType::VTYPE_ASTRING:
|
||||||
rv = AString2Double(*inData.u.mAStringValue, &outData->u.mDoubleValue);
|
rv = AString2Double(*inData.u.mAStringValue, &outData->u.mDoubleValue);
|
||||||
if(NS_FAILED(rv))
|
if(NS_FAILED(rv))
|
||||||
return rv;
|
return rv;
|
||||||
outData->mType = nsIDataType::VTYPE_DOUBLE;
|
outData->mType = nsIDataType::VTYPE_DOUBLE;
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
|
case nsIDataType::VTYPE_UTF8STRING:
|
||||||
|
rv = AUTF8String2Double(*inData.u.mUTF8StringValue,
|
||||||
|
&outData->u.mDoubleValue);
|
||||||
|
if(NS_FAILED(rv))
|
||||||
|
return rv;
|
||||||
|
outData->mType = nsIDataType::VTYPE_DOUBLE;
|
||||||
|
return NS_OK;
|
||||||
|
case nsIDataType::VTYPE_CSTRING:
|
||||||
|
rv = ACString2Double(*inData.u.mCStringValue,
|
||||||
|
&outData->u.mDoubleValue);
|
||||||
|
if(NS_FAILED(rv))
|
||||||
|
return rv;
|
||||||
|
outData->mType = nsIDataType::VTYPE_DOUBLE;
|
||||||
|
return NS_OK;
|
||||||
case nsIDataType::VTYPE_WCHAR_STR:
|
case nsIDataType::VTYPE_WCHAR_STR:
|
||||||
case nsIDataType::VTYPE_WSTRING_SIZE_IS:
|
case nsIDataType::VTYPE_WSTRING_SIZE_IS:
|
||||||
tempString.Assign(inData.u.wstr.mWStringValue);
|
tempString.Assign(inData.u.wstr.mWStringValue);
|
||||||
@@ -196,6 +221,9 @@ static void FreeArray(nsDiscriminatedUnion* data)
|
|||||||
// The rest are illegal.
|
// The rest are illegal.
|
||||||
case nsIDataType::VTYPE_VOID:
|
case nsIDataType::VTYPE_VOID:
|
||||||
case nsIDataType::VTYPE_ASTRING:
|
case nsIDataType::VTYPE_ASTRING:
|
||||||
|
case nsIDataType::VTYPE_DOMSTRING:
|
||||||
|
case nsIDataType::VTYPE_UTF8STRING:
|
||||||
|
case nsIDataType::VTYPE_CSTRING:
|
||||||
case nsIDataType::VTYPE_WSTRING_SIZE_IS:
|
case nsIDataType::VTYPE_WSTRING_SIZE_IS:
|
||||||
case nsIDataType::VTYPE_STRING_SIZE_IS:
|
case nsIDataType::VTYPE_STRING_SIZE_IS:
|
||||||
case nsIDataType::VTYPE_ARRAY:
|
case nsIDataType::VTYPE_ARRAY:
|
||||||
@@ -285,6 +313,9 @@ static nsresult CloneArray(PRUint16 inType, const nsIID* inIID,
|
|||||||
|
|
||||||
// The rest are illegal.
|
// The rest are illegal.
|
||||||
case nsIDataType::VTYPE_ASTRING:
|
case nsIDataType::VTYPE_ASTRING:
|
||||||
|
case nsIDataType::VTYPE_DOMSTRING:
|
||||||
|
case nsIDataType::VTYPE_UTF8STRING:
|
||||||
|
case nsIDataType::VTYPE_CSTRING:
|
||||||
case nsIDataType::VTYPE_STRING_SIZE_IS:
|
case nsIDataType::VTYPE_STRING_SIZE_IS:
|
||||||
case nsIDataType::VTYPE_WSTRING_SIZE_IS:
|
case nsIDataType::VTYPE_WSTRING_SIZE_IS:
|
||||||
case nsIDataType::VTYPE_VOID:
|
case nsIDataType::VTYPE_VOID:
|
||||||
@@ -405,6 +436,9 @@ static nsresult CloneArray(PRUint16 inType, const nsIID* inIID,
|
|||||||
case nsIDataType::VTYPE_ARRAY:
|
case nsIDataType::VTYPE_ARRAY:
|
||||||
case nsIDataType::VTYPE_EMPTY:
|
case nsIDataType::VTYPE_EMPTY:
|
||||||
case nsIDataType::VTYPE_ASTRING:
|
case nsIDataType::VTYPE_ASTRING:
|
||||||
|
case nsIDataType::VTYPE_DOMSTRING:
|
||||||
|
case nsIDataType::VTYPE_UTF8STRING:
|
||||||
|
case nsIDataType::VTYPE_CSTRING:
|
||||||
case nsIDataType::VTYPE_STRING_SIZE_IS:
|
case nsIDataType::VTYPE_STRING_SIZE_IS:
|
||||||
case nsIDataType::VTYPE_WSTRING_SIZE_IS:
|
case nsIDataType::VTYPE_WSTRING_SIZE_IS:
|
||||||
default:
|
default:
|
||||||
@@ -656,7 +690,12 @@ static PRBool String2ID(const nsDiscriminatedUnion& data, nsID* pid)
|
|||||||
case nsIDataType::VTYPE_CHAR_STR:
|
case nsIDataType::VTYPE_CHAR_STR:
|
||||||
case nsIDataType::VTYPE_STRING_SIZE_IS:
|
case nsIDataType::VTYPE_STRING_SIZE_IS:
|
||||||
return pid->Parse(data.u.str.mStringValue);
|
return pid->Parse(data.u.str.mStringValue);
|
||||||
|
case nsIDataType::VTYPE_CSTRING:
|
||||||
|
return pid->Parse(PromiseFlatCString(*data.u.mCStringValue).get());
|
||||||
|
case nsIDataType::VTYPE_UTF8STRING:
|
||||||
|
return pid->Parse(PromiseFlatUTF8String(*data.u.mUTF8StringValue).get());
|
||||||
case nsIDataType::VTYPE_ASTRING:
|
case nsIDataType::VTYPE_ASTRING:
|
||||||
|
case nsIDataType::VTYPE_DOMSTRING:
|
||||||
pString = data.u.mAStringValue;
|
pString = data.u.mAStringValue;
|
||||||
break;
|
break;
|
||||||
case nsIDataType::VTYPE_WCHAR_STR:
|
case nsIDataType::VTYPE_WCHAR_STR:
|
||||||
@@ -694,6 +733,9 @@ nsVariant::ConvertToID(const nsDiscriminatedUnion& data, nsID * _retval)
|
|||||||
*_retval = data.u.iface.mInterfaceID;
|
*_retval = data.u.iface.mInterfaceID;
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
case nsIDataType::VTYPE_ASTRING:
|
case nsIDataType::VTYPE_ASTRING:
|
||||||
|
case nsIDataType::VTYPE_DOMSTRING:
|
||||||
|
case nsIDataType::VTYPE_UTF8STRING:
|
||||||
|
case nsIDataType::VTYPE_CSTRING:
|
||||||
case nsIDataType::VTYPE_CHAR_STR:
|
case nsIDataType::VTYPE_CHAR_STR:
|
||||||
case nsIDataType::VTYPE_WCHAR_STR:
|
case nsIDataType::VTYPE_WCHAR_STR:
|
||||||
case nsIDataType::VTYPE_STRING_SIZE_IS:
|
case nsIDataType::VTYPE_STRING_SIZE_IS:
|
||||||
@@ -718,6 +760,9 @@ static nsresult ToString(const nsDiscriminatedUnion& data,
|
|||||||
{
|
{
|
||||||
// all the stuff we don't handle...
|
// all the stuff we don't handle...
|
||||||
case nsIDataType::VTYPE_ASTRING:
|
case nsIDataType::VTYPE_ASTRING:
|
||||||
|
case nsIDataType::VTYPE_DOMSTRING:
|
||||||
|
case nsIDataType::VTYPE_UTF8STRING:
|
||||||
|
case nsIDataType::VTYPE_CSTRING:
|
||||||
case nsIDataType::VTYPE_CHAR_STR:
|
case nsIDataType::VTYPE_CHAR_STR:
|
||||||
case nsIDataType::VTYPE_WCHAR_STR:
|
case nsIDataType::VTYPE_WCHAR_STR:
|
||||||
case nsIDataType::VTYPE_STRING_SIZE_IS:
|
case nsIDataType::VTYPE_STRING_SIZE_IS:
|
||||||
@@ -782,7 +827,8 @@ static nsresult ToString(const nsDiscriminatedUnion& data,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* static */ nsresult
|
/* static */ nsresult
|
||||||
nsVariant::ConvertToAString(const nsDiscriminatedUnion& data, nsAWritableString & _retval)
|
nsVariant::ConvertToAString(const nsDiscriminatedUnion& data,
|
||||||
|
nsAWritableString & _retval)
|
||||||
{
|
{
|
||||||
nsCAutoString tempCString;
|
nsCAutoString tempCString;
|
||||||
nsresult rv;
|
nsresult rv;
|
||||||
@@ -790,18 +836,28 @@ nsVariant::ConvertToAString(const nsDiscriminatedUnion& data, nsAWritableString
|
|||||||
switch(data.mType)
|
switch(data.mType)
|
||||||
{
|
{
|
||||||
case nsIDataType::VTYPE_ASTRING:
|
case nsIDataType::VTYPE_ASTRING:
|
||||||
|
case nsIDataType::VTYPE_DOMSTRING:
|
||||||
_retval.Assign(*data.u.mAStringValue);
|
_retval.Assign(*data.u.mAStringValue);
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
|
case nsIDataType::VTYPE_CSTRING:
|
||||||
|
CopyASCIItoUCS2(*data.u.mCStringValue, _retval);
|
||||||
|
return NS_OK;
|
||||||
|
case nsIDataType::VTYPE_UTF8STRING:
|
||||||
|
// XXX This is an extra copy that should be avoided
|
||||||
|
// once Jag lands support for UTF8String and associated
|
||||||
|
// conversion methods.
|
||||||
|
_retval.Assign(NS_ConvertUTF8toUCS2(*data.u.mUTF8StringValue));
|
||||||
|
return NS_OK;
|
||||||
case nsIDataType::VTYPE_CHAR_STR:
|
case nsIDataType::VTYPE_CHAR_STR:
|
||||||
tempCString.Assign(data.u.str.mStringValue);
|
CopyASCIItoUCS2(nsDependentCString(data.u.str.mStringValue), _retval);
|
||||||
CopyASCIItoUCS2(tempCString, _retval);
|
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
case nsIDataType::VTYPE_WCHAR_STR:
|
case nsIDataType::VTYPE_WCHAR_STR:
|
||||||
_retval.Assign(data.u.wstr.mWStringValue);
|
_retval.Assign(data.u.wstr.mWStringValue);
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
case nsIDataType::VTYPE_STRING_SIZE_IS:
|
case nsIDataType::VTYPE_STRING_SIZE_IS:
|
||||||
tempCString.Assign(data.u.str.mStringValue, data.u.str.mStringLength);
|
CopyASCIItoUCS2(nsDependentCString(data.u.str.mStringValue,
|
||||||
CopyASCIItoUCS2(tempCString, _retval);
|
data.u.str.mStringLength),
|
||||||
|
_retval);
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
case nsIDataType::VTYPE_WSTRING_SIZE_IS:
|
case nsIDataType::VTYPE_WSTRING_SIZE_IS:
|
||||||
_retval.Assign(data.u.wstr.mWStringValue, data.u.wstr.mWStringLength);
|
_retval.Assign(data.u.wstr.mWStringValue, data.u.wstr.mWStringLength);
|
||||||
@@ -818,12 +874,131 @@ nsVariant::ConvertToAString(const nsDiscriminatedUnion& data, nsAWritableString
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* static */ nsresult
|
||||||
|
nsVariant::ConvertToACString(const nsDiscriminatedUnion& data,
|
||||||
|
nsACString & _retval)
|
||||||
|
{
|
||||||
|
nsresult rv;
|
||||||
|
|
||||||
|
switch(data.mType)
|
||||||
|
{
|
||||||
|
case nsIDataType::VTYPE_ASTRING:
|
||||||
|
case nsIDataType::VTYPE_DOMSTRING:
|
||||||
|
CopyUCS2toASCII(*data.u.mAStringValue, _retval);
|
||||||
|
return NS_OK;
|
||||||
|
case nsIDataType::VTYPE_CSTRING:
|
||||||
|
_retval.Assign(*data.u.mCStringValue);
|
||||||
|
return NS_OK;
|
||||||
|
case nsIDataType::VTYPE_UTF8STRING:
|
||||||
|
// XXX This is an extra copy that should be avoided
|
||||||
|
// once Jag lands support for UTF8String and associated
|
||||||
|
// conversion methods.
|
||||||
|
CopyUCS2toASCII(NS_ConvertUTF8toUCS2(*data.u.mUTF8StringValue),
|
||||||
|
_retval);
|
||||||
|
return NS_OK;
|
||||||
|
case nsIDataType::VTYPE_CHAR_STR:
|
||||||
|
_retval.Assign(*data.u.str.mStringValue);
|
||||||
|
return NS_OK;
|
||||||
|
case nsIDataType::VTYPE_WCHAR_STR:
|
||||||
|
CopyUCS2toASCII(nsDependentString(data.u.wstr.mWStringValue),
|
||||||
|
_retval);
|
||||||
|
return NS_OK;
|
||||||
|
case nsIDataType::VTYPE_STRING_SIZE_IS:
|
||||||
|
_retval.Assign(data.u.str.mStringValue, data.u.str.mStringLength);
|
||||||
|
return NS_OK;
|
||||||
|
case nsIDataType::VTYPE_WSTRING_SIZE_IS:
|
||||||
|
CopyUCS2toASCII(nsDependentString(data.u.wstr.mWStringValue,
|
||||||
|
data.u.wstr.mWStringLength), _retval);
|
||||||
|
return NS_OK;
|
||||||
|
case nsIDataType::VTYPE_WCHAR:
|
||||||
|
{
|
||||||
|
const PRUnichar* str = &data.u.mWCharValue;
|
||||||
|
CopyUCS2toASCII(Substring(str, str), _retval);
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
rv = ToString(data, _retval);
|
||||||
|
if(NS_FAILED(rv))
|
||||||
|
return rv;
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* static */ nsresult
|
||||||
|
nsVariant::ConvertToAUTF8String(const nsDiscriminatedUnion& data,
|
||||||
|
nsAUTF8String & _retval)
|
||||||
|
{
|
||||||
|
nsCAutoString tempCString;
|
||||||
|
nsresult rv;
|
||||||
|
|
||||||
|
switch(data.mType)
|
||||||
|
{
|
||||||
|
case nsIDataType::VTYPE_ASTRING:
|
||||||
|
case nsIDataType::VTYPE_DOMSTRING:
|
||||||
|
// XXX Extra copy. Jag will fix when he lands UTF8String
|
||||||
|
_retval.Assign(NS_ConvertUCS2toUTF8(*data.u.mAStringValue));
|
||||||
|
return NS_OK;
|
||||||
|
case nsIDataType::VTYPE_CSTRING:
|
||||||
|
// XXX Extra copy and conversion.
|
||||||
|
// Jag will fix when he lands UTF8String
|
||||||
|
_retval.Assign(NS_ConvertUCS2toUTF8(
|
||||||
|
NS_ConvertASCIItoUCS2(*data.u.mCStringValue)));
|
||||||
|
return NS_OK;
|
||||||
|
case nsIDataType::VTYPE_UTF8STRING:
|
||||||
|
_retval.Assign(*data.u.mUTF8StringValue);
|
||||||
|
return NS_OK;
|
||||||
|
case nsIDataType::VTYPE_CHAR_STR:
|
||||||
|
// XXX Extra copy and conversion.
|
||||||
|
// Jag will fix when he lands UTF8String
|
||||||
|
_retval.Assign(NS_ConvertUCS2toUTF8(
|
||||||
|
NS_ConvertASCIItoUCS2(
|
||||||
|
nsDependentCString(data.u.str.mStringValue))));
|
||||||
|
return NS_OK;
|
||||||
|
case nsIDataType::VTYPE_WCHAR_STR:
|
||||||
|
// XXX Extra copy. Jag will fix when he lands UTF8String
|
||||||
|
_retval.Assign(NS_ConvertUCS2toUTF8(
|
||||||
|
nsDependentString(data.u.wstr.mWStringValue)));
|
||||||
|
return NS_OK;
|
||||||
|
case nsIDataType::VTYPE_STRING_SIZE_IS:
|
||||||
|
// XXX Extra copy and conversion.
|
||||||
|
// Jag will fix when he lands UTF8String
|
||||||
|
_retval.Assign(NS_ConvertUCS2toUTF8(
|
||||||
|
NS_ConvertASCIItoUCS2(
|
||||||
|
nsDependentCString(data.u.str.mStringValue,
|
||||||
|
data.u.str.mStringLength))));
|
||||||
|
return NS_OK;
|
||||||
|
case nsIDataType::VTYPE_WSTRING_SIZE_IS:
|
||||||
|
// XXX Extra copy. Jag will fix when he lands UTF8String
|
||||||
|
_retval.Assign(NS_ConvertUCS2toUTF8(
|
||||||
|
nsDependentString(data.u.wstr.mWStringValue,
|
||||||
|
data.u.wstr.mWStringLength)));
|
||||||
|
return NS_OK;
|
||||||
|
case nsIDataType::VTYPE_WCHAR:
|
||||||
|
{
|
||||||
|
// XXX Extra copies. Jag will fix when he lands UTF8String
|
||||||
|
nsAutoString tempString(data.u.mWCharValue);
|
||||||
|
_retval.Assign(NS_ConvertUCS2toUTF8(tempString));
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
rv = ToString(data, tempCString);
|
||||||
|
if(NS_FAILED(rv))
|
||||||
|
return rv;
|
||||||
|
// XXX Extra copy and conversion.
|
||||||
|
// Jag will fix when he lands UTF8String
|
||||||
|
_retval.Assign(NS_ConvertUCS2toUTF8(
|
||||||
|
NS_ConvertASCIItoUCS2(tempCString)));
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* static */ nsresult
|
/* static */ nsresult
|
||||||
nsVariant::ConvertToString(const nsDiscriminatedUnion& data, char **_retval)
|
nsVariant::ConvertToString(const nsDiscriminatedUnion& data, char **_retval)
|
||||||
{
|
{
|
||||||
PRUint32 ignored;
|
PRUint32 ignored;
|
||||||
return nsVariant::ConvertToStringWithSize(data, &ignored, _retval);
|
return nsVariant::ConvertToStringWithSize(data, &ignored, _retval);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* static */ nsresult
|
/* static */ nsresult
|
||||||
nsVariant::ConvertToWString(const nsDiscriminatedUnion& data, PRUnichar **_retval)
|
nsVariant::ConvertToWString(const nsDiscriminatedUnion& data, PRUnichar **_retval)
|
||||||
{
|
{
|
||||||
@@ -841,29 +1016,57 @@ nsVariant::ConvertToStringWithSize(const nsDiscriminatedUnion& data, PRUint32 *s
|
|||||||
switch(data.mType)
|
switch(data.mType)
|
||||||
{
|
{
|
||||||
case nsIDataType::VTYPE_ASTRING:
|
case nsIDataType::VTYPE_ASTRING:
|
||||||
|
case nsIDataType::VTYPE_DOMSTRING:
|
||||||
*size = data.u.mAStringValue->Length();
|
*size = data.u.mAStringValue->Length();
|
||||||
*str = ToNewCString(*data.u.mAStringValue);
|
*str = ToNewCString(*data.u.mAStringValue);
|
||||||
return *str ? NS_OK : NS_ERROR_OUT_OF_MEMORY;
|
return *str ? NS_OK : NS_ERROR_OUT_OF_MEMORY;
|
||||||
|
case nsIDataType::VTYPE_CSTRING:
|
||||||
|
*size = data.u.mCStringValue->Length();
|
||||||
|
*str = ToNewCString(*data.u.mCStringValue);
|
||||||
|
return *str ? NS_OK : NS_ERROR_OUT_OF_MEMORY;
|
||||||
|
case nsIDataType::VTYPE_UTF8STRING:
|
||||||
|
{
|
||||||
|
// XXX This is doing 1 extra copy. Need to fix this
|
||||||
|
// when Jag lands UTF8String
|
||||||
|
// we want:
|
||||||
|
// *size = *data.mUTF8StringValue->Length();
|
||||||
|
// *str = ToNewCString(*data.mUTF8StringValue);
|
||||||
|
// But this will have to do for now.
|
||||||
|
NS_ConvertUTF8toUCS2 tempString(*data.u.mUTF8StringValue);
|
||||||
|
*size = tempString.Length();
|
||||||
|
*str = ToNewCString(tempString);
|
||||||
|
return *str ? NS_OK : NS_ERROR_OUT_OF_MEMORY;
|
||||||
|
}
|
||||||
case nsIDataType::VTYPE_CHAR_STR:
|
case nsIDataType::VTYPE_CHAR_STR:
|
||||||
tempCString.Assign(data.u.str.mStringValue);
|
{
|
||||||
*size = tempCString.Length();
|
nsDependentCString cString(data.u.str.mStringValue);
|
||||||
*str = ToNewCString(tempCString);
|
*size = cString.Length();
|
||||||
|
*str = ToNewCString(cString);
|
||||||
return *str ? NS_OK : NS_ERROR_OUT_OF_MEMORY;
|
return *str ? NS_OK : NS_ERROR_OUT_OF_MEMORY;
|
||||||
|
}
|
||||||
case nsIDataType::VTYPE_WCHAR_STR:
|
case nsIDataType::VTYPE_WCHAR_STR:
|
||||||
tempString.Assign(data.u.wstr.mWStringValue);
|
{
|
||||||
*size = tempString.Length();
|
nsDependentString string(data.u.wstr.mWStringValue);
|
||||||
*str = ToNewCString(tempString);
|
*size = string.Length();
|
||||||
|
*str = ToNewCString(string);
|
||||||
return *str ? NS_OK : NS_ERROR_OUT_OF_MEMORY;
|
return *str ? NS_OK : NS_ERROR_OUT_OF_MEMORY;
|
||||||
|
}
|
||||||
case nsIDataType::VTYPE_STRING_SIZE_IS:
|
case nsIDataType::VTYPE_STRING_SIZE_IS:
|
||||||
tempCString.Assign(data.u.str.mStringValue, data.u.str.mStringLength);
|
{
|
||||||
*size = tempCString.Length();
|
nsDependentCString cString(data.u.str.mStringValue,
|
||||||
*str = ToNewCString(tempCString);
|
data.u.str.mStringLength);
|
||||||
|
*size = cString.Length();
|
||||||
|
*str = ToNewCString(cString);
|
||||||
return *str ? NS_OK : NS_ERROR_OUT_OF_MEMORY;
|
return *str ? NS_OK : NS_ERROR_OUT_OF_MEMORY;
|
||||||
|
}
|
||||||
case nsIDataType::VTYPE_WSTRING_SIZE_IS:
|
case nsIDataType::VTYPE_WSTRING_SIZE_IS:
|
||||||
tempString.Assign(data.u.wstr.mWStringValue, data.u.wstr.mWStringLength);
|
{
|
||||||
*size = tempString.Length();
|
nsDependentString string(data.u.wstr.mWStringValue,
|
||||||
*str = ToNewCString(tempString);
|
data.u.wstr.mWStringLength);
|
||||||
|
*size = string.Length();
|
||||||
|
*str = ToNewCString(string);
|
||||||
return *str ? NS_OK : NS_ERROR_OUT_OF_MEMORY;
|
return *str ? NS_OK : NS_ERROR_OUT_OF_MEMORY;
|
||||||
|
}
|
||||||
case nsIDataType::VTYPE_WCHAR:
|
case nsIDataType::VTYPE_WCHAR:
|
||||||
tempString.Assign(data.u.mWCharValue);
|
tempString.Assign(data.u.mWCharValue);
|
||||||
*size = tempString.Length();
|
*size = tempString.Length();
|
||||||
@@ -888,29 +1091,57 @@ nsVariant::ConvertToWStringWithSize(const nsDiscriminatedUnion& data, PRUint32 *
|
|||||||
switch(data.mType)
|
switch(data.mType)
|
||||||
{
|
{
|
||||||
case nsIDataType::VTYPE_ASTRING:
|
case nsIDataType::VTYPE_ASTRING:
|
||||||
|
case nsIDataType::VTYPE_DOMSTRING:
|
||||||
*size = data.u.mAStringValue->Length();
|
*size = data.u.mAStringValue->Length();
|
||||||
*str = ToNewUnicode(*data.u.mAStringValue);
|
*str = ToNewUnicode(*data.u.mAStringValue);
|
||||||
return *str ? NS_OK : NS_ERROR_OUT_OF_MEMORY;
|
return *str ? NS_OK : NS_ERROR_OUT_OF_MEMORY;
|
||||||
|
case nsIDataType::VTYPE_CSTRING:
|
||||||
|
*size = data.u.mCStringValue->Length();
|
||||||
|
*str = ToNewUnicode(*data.u.mCStringValue);
|
||||||
|
return *str ? NS_OK : NS_ERROR_OUT_OF_MEMORY;
|
||||||
|
case nsIDataType::VTYPE_UTF8STRING:
|
||||||
|
{
|
||||||
|
// XXX This is an extra copy that should be avoided
|
||||||
|
// once Jag lands his new UTF8String code.
|
||||||
|
// We want this:
|
||||||
|
// *size = data.u.mUTF8StringValue->Length();
|
||||||
|
// *str = ToNewUnicode(*data.u.mUTF8StringValue);
|
||||||
|
// But this will have to do for now.
|
||||||
|
NS_ConvertUTF8toUCS2 ucString(*data.u.mUTF8StringValue);
|
||||||
|
*size = ucString.Length();
|
||||||
|
*str = ToNewUnicode(ucString);
|
||||||
|
return *str ? NS_OK : NS_ERROR_OUT_OF_MEMORY;
|
||||||
|
}
|
||||||
case nsIDataType::VTYPE_CHAR_STR:
|
case nsIDataType::VTYPE_CHAR_STR:
|
||||||
tempCString.Assign(data.u.str.mStringValue);
|
{
|
||||||
*size = tempCString.Length();
|
nsDependentCString cString(data.u.str.mStringValue);
|
||||||
*str = ToNewUnicode(tempCString);
|
*size = cString.Length();
|
||||||
|
*str = ToNewUnicode(cString);
|
||||||
return *str ? NS_OK : NS_ERROR_OUT_OF_MEMORY;
|
return *str ? NS_OK : NS_ERROR_OUT_OF_MEMORY;
|
||||||
|
}
|
||||||
case nsIDataType::VTYPE_WCHAR_STR:
|
case nsIDataType::VTYPE_WCHAR_STR:
|
||||||
tempString.Assign(data.u.wstr.mWStringValue);
|
{
|
||||||
*size = tempString.Length();
|
nsDependentString string(data.u.wstr.mWStringValue);
|
||||||
*str = ToNewUnicode(tempString);
|
*size = string.Length();
|
||||||
|
*str = ToNewUnicode(string);
|
||||||
return *str ? NS_OK : NS_ERROR_OUT_OF_MEMORY;
|
return *str ? NS_OK : NS_ERROR_OUT_OF_MEMORY;
|
||||||
|
}
|
||||||
case nsIDataType::VTYPE_STRING_SIZE_IS:
|
case nsIDataType::VTYPE_STRING_SIZE_IS:
|
||||||
tempCString.Assign(data.u.str.mStringValue, data.u.str.mStringLength);
|
{
|
||||||
*size = tempCString.Length();
|
nsDependentCString cString(data.u.str.mStringValue,
|
||||||
*str = ToNewUnicode(tempCString);
|
data.u.str.mStringLength);
|
||||||
|
*size = cString.Length();
|
||||||
|
*str = ToNewUnicode(cString);
|
||||||
return *str ? NS_OK : NS_ERROR_OUT_OF_MEMORY;
|
return *str ? NS_OK : NS_ERROR_OUT_OF_MEMORY;
|
||||||
|
}
|
||||||
case nsIDataType::VTYPE_WSTRING_SIZE_IS:
|
case nsIDataType::VTYPE_WSTRING_SIZE_IS:
|
||||||
tempString.Assign(data.u.wstr.mWStringValue, data.u.wstr.mWStringLength);
|
{
|
||||||
*size = tempString.Length();
|
nsDependentString string(data.u.wstr.mWStringValue,
|
||||||
*str = ToNewUnicode(tempString);
|
data.u.wstr.mWStringLength);
|
||||||
|
*size = string.Length();
|
||||||
|
*str = ToNewUnicode(string);
|
||||||
return *str ? NS_OK : NS_ERROR_OUT_OF_MEMORY;
|
return *str ? NS_OK : NS_ERROR_OUT_OF_MEMORY;
|
||||||
|
}
|
||||||
case nsIDataType::VTYPE_WCHAR:
|
case nsIDataType::VTYPE_WCHAR:
|
||||||
tempString.Assign(data.u.mWCharValue);
|
tempString.Assign(data.u.mWCharValue);
|
||||||
*size = tempString.Length();
|
*size = tempString.Length();
|
||||||
@@ -1058,6 +1289,7 @@ nsVariant::SetFromVariant(nsDiscriminatedUnion* data, nsIVariant* aValue)
|
|||||||
CASE__SET_FROM_VARIANT_TYPE(VTYPE_ID, mIDValue, ID)
|
CASE__SET_FROM_VARIANT_TYPE(VTYPE_ID, mIDValue, ID)
|
||||||
|
|
||||||
case nsIDataType::VTYPE_ASTRING:
|
case nsIDataType::VTYPE_ASTRING:
|
||||||
|
case nsIDataType::VTYPE_DOMSTRING:
|
||||||
case nsIDataType::VTYPE_WCHAR_STR:
|
case nsIDataType::VTYPE_WCHAR_STR:
|
||||||
case nsIDataType::VTYPE_WSTRING_SIZE_IS:
|
case nsIDataType::VTYPE_WSTRING_SIZE_IS:
|
||||||
CASE__SET_FROM_VARIANT_VTYPE_PROLOGUE(VTYPE_ASTRING);
|
CASE__SET_FROM_VARIANT_VTYPE_PROLOGUE(VTYPE_ASTRING);
|
||||||
@@ -1069,6 +1301,26 @@ nsVariant::SetFromVariant(nsDiscriminatedUnion* data, nsIVariant* aValue)
|
|||||||
delete data->u.mAStringValue;
|
delete data->u.mAStringValue;
|
||||||
CASE__SET_FROM_VARIANT_VTYPE_EPILOGUE(VTYPE_ASTRING)
|
CASE__SET_FROM_VARIANT_VTYPE_EPILOGUE(VTYPE_ASTRING)
|
||||||
|
|
||||||
|
case nsIDataType::VTYPE_CSTRING:
|
||||||
|
CASE__SET_FROM_VARIANT_VTYPE_PROLOGUE(VTYPE_CSTRING);
|
||||||
|
data->u.mCStringValue = new nsCString();
|
||||||
|
if(!data->u.mCStringValue)
|
||||||
|
return NS_ERROR_OUT_OF_MEMORY;
|
||||||
|
rv = aValue->GetAsACString(*data->u.mCStringValue);
|
||||||
|
if(NS_FAILED(rv))
|
||||||
|
delete data->u.mCStringValue;
|
||||||
|
CASE__SET_FROM_VARIANT_VTYPE_EPILOGUE(VTYPE_CSTRING)
|
||||||
|
|
||||||
|
case nsIDataType::VTYPE_UTF8STRING:
|
||||||
|
CASE__SET_FROM_VARIANT_VTYPE_PROLOGUE(VTYPE_UTF8STRING);
|
||||||
|
data->u.mUTF8StringValue = new nsUTF8String();
|
||||||
|
if(!data->u.mUTF8StringValue)
|
||||||
|
return NS_ERROR_OUT_OF_MEMORY;
|
||||||
|
rv = aValue->GetAsAUTF8String(*data->u.mUTF8StringValue);
|
||||||
|
if(NS_FAILED(rv))
|
||||||
|
delete data->u.mUTF8StringValue;
|
||||||
|
CASE__SET_FROM_VARIANT_VTYPE_EPILOGUE(VTYPE_UTF8STRING)
|
||||||
|
|
||||||
case nsIDataType::VTYPE_CHAR_STR:
|
case nsIDataType::VTYPE_CHAR_STR:
|
||||||
case nsIDataType::VTYPE_STRING_SIZE_IS:
|
case nsIDataType::VTYPE_STRING_SIZE_IS:
|
||||||
CASE__SET_FROM_VARIANT_VTYPE_PROLOGUE(VTYPE_STRING_SIZE_IS);
|
CASE__SET_FROM_VARIANT_VTYPE_PROLOGUE(VTYPE_STRING_SIZE_IS);
|
||||||
@@ -1189,6 +1441,25 @@ nsVariant::SetFromAString(nsDiscriminatedUnion* data, const nsAReadableString &
|
|||||||
return NS_ERROR_OUT_OF_MEMORY;
|
return NS_ERROR_OUT_OF_MEMORY;
|
||||||
DATA_SETTER_EPILOGUE(data, VTYPE_ASTRING);
|
DATA_SETTER_EPILOGUE(data, VTYPE_ASTRING);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* static */ nsresult
|
||||||
|
nsVariant::SetFromACString(nsDiscriminatedUnion* data, const nsACString & aValue)
|
||||||
|
{
|
||||||
|
DATA_SETTER_PROLOGUE(data);
|
||||||
|
if(!(data->u.mCStringValue = new nsCString(aValue)))
|
||||||
|
return NS_ERROR_OUT_OF_MEMORY;
|
||||||
|
DATA_SETTER_EPILOGUE(data, VTYPE_CSTRING);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* static */ nsresult
|
||||||
|
nsVariant::SetFromAUTF8String(nsDiscriminatedUnion* data, const nsAUTF8String & aValue)
|
||||||
|
{
|
||||||
|
DATA_SETTER_PROLOGUE(data);
|
||||||
|
if(!(data->u.mUTF8StringValue = new nsUTF8String(aValue)))
|
||||||
|
return NS_ERROR_OUT_OF_MEMORY;
|
||||||
|
DATA_SETTER_EPILOGUE(data, VTYPE_UTF8STRING);
|
||||||
|
}
|
||||||
|
|
||||||
/* static */ nsresult
|
/* static */ nsresult
|
||||||
nsVariant::SetFromString(nsDiscriminatedUnion* data, const char *aValue)
|
nsVariant::SetFromString(nsDiscriminatedUnion* data, const char *aValue)
|
||||||
{
|
{
|
||||||
@@ -1305,8 +1576,15 @@ nsVariant::Cleanup(nsDiscriminatedUnion* data)
|
|||||||
case nsIDataType::VTYPE_ID:
|
case nsIDataType::VTYPE_ID:
|
||||||
break;
|
break;
|
||||||
case nsIDataType::VTYPE_ASTRING:
|
case nsIDataType::VTYPE_ASTRING:
|
||||||
|
case nsIDataType::VTYPE_DOMSTRING:
|
||||||
delete data->u.mAStringValue;
|
delete data->u.mAStringValue;
|
||||||
break;
|
break;
|
||||||
|
case nsIDataType::VTYPE_CSTRING:
|
||||||
|
delete data->u.mCStringValue;
|
||||||
|
break;
|
||||||
|
case nsIDataType::VTYPE_UTF8STRING:
|
||||||
|
delete data->u.mUTF8StringValue;
|
||||||
|
break;
|
||||||
case nsIDataType::VTYPE_CHAR_STR:
|
case nsIDataType::VTYPE_CHAR_STR:
|
||||||
case nsIDataType::VTYPE_STRING_SIZE_IS:
|
case nsIDataType::VTYPE_STRING_SIZE_IS:
|
||||||
nsMemory::Free((char*)data->u.str.mStringValue);
|
nsMemory::Free((char*)data->u.str.mStringValue);
|
||||||
@@ -1367,14 +1645,17 @@ nsVariant::nsVariant()
|
|||||||
{nsIDataType::VTYPE_WCHAR , TD_WCHAR },
|
{nsIDataType::VTYPE_WCHAR , TD_WCHAR },
|
||||||
{nsIDataType::VTYPE_VOID , TD_VOID },
|
{nsIDataType::VTYPE_VOID , TD_VOID },
|
||||||
{nsIDataType::VTYPE_ID , TD_PNSIID },
|
{nsIDataType::VTYPE_ID , TD_PNSIID },
|
||||||
{nsIDataType::VTYPE_ASTRING , TD_DOMSTRING },
|
{nsIDataType::VTYPE_DOMSTRING , TD_DOMSTRING },
|
||||||
{nsIDataType::VTYPE_CHAR_STR , TD_PSTRING },
|
{nsIDataType::VTYPE_CHAR_STR , TD_PSTRING },
|
||||||
{nsIDataType::VTYPE_WCHAR_STR , TD_PWSTRING },
|
{nsIDataType::VTYPE_WCHAR_STR , TD_PWSTRING },
|
||||||
{nsIDataType::VTYPE_INTERFACE , TD_INTERFACE_TYPE },
|
{nsIDataType::VTYPE_INTERFACE , TD_INTERFACE_TYPE },
|
||||||
{nsIDataType::VTYPE_INTERFACE_IS , TD_INTERFACE_IS_TYPE},
|
{nsIDataType::VTYPE_INTERFACE_IS , TD_INTERFACE_IS_TYPE},
|
||||||
{nsIDataType::VTYPE_ARRAY , TD_ARRAY },
|
{nsIDataType::VTYPE_ARRAY , TD_ARRAY },
|
||||||
{nsIDataType::VTYPE_STRING_SIZE_IS , TD_PSTRING_SIZE_IS },
|
{nsIDataType::VTYPE_STRING_SIZE_IS , TD_PSTRING_SIZE_IS },
|
||||||
{nsIDataType::VTYPE_WSTRING_SIZE_IS , TD_PWSTRING_SIZE_IS }
|
{nsIDataType::VTYPE_WSTRING_SIZE_IS , TD_PWSTRING_SIZE_IS },
|
||||||
|
{nsIDataType::VTYPE_UTF8STRING , TD_UTF8STRING },
|
||||||
|
{nsIDataType::VTYPE_CSTRING , TD_CSTRING },
|
||||||
|
{nsIDataType::VTYPE_ASTRING , TD_ASTRING }
|
||||||
};
|
};
|
||||||
static const int length = sizeof(array)/sizeof(array[0]);
|
static const int length = sizeof(array)/sizeof(array[0]);
|
||||||
static PRBool inited = PR_FALSE;
|
static PRBool inited = PR_FALSE;
|
||||||
@@ -1493,6 +1774,26 @@ NS_IMETHODIMP nsVariant::GetAsAString(nsAWritableString & _retval)
|
|||||||
return nsVariant::ConvertToAString(mData, _retval);
|
return nsVariant::ConvertToAString(mData, _retval);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* DOMString getAsDOMString (); */
|
||||||
|
NS_IMETHODIMP nsVariant::GetAsDOMString(nsAWritableString & _retval)
|
||||||
|
{
|
||||||
|
// A DOMString maps to an AString internally, so we can re-use
|
||||||
|
// ConvertToAString here.
|
||||||
|
return nsVariant::ConvertToAString(mData, _retval);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ACString getAsACString (); */
|
||||||
|
NS_IMETHODIMP nsVariant::GetAsACString(nsACString & _retval)
|
||||||
|
{
|
||||||
|
return nsVariant::ConvertToACString(mData, _retval);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* AUTF8String getAsAUTF8String (); */
|
||||||
|
NS_IMETHODIMP nsVariant::GetAsAUTF8String(nsAUTF8String & _retval)
|
||||||
|
{
|
||||||
|
return nsVariant::ConvertToAUTF8String(mData, _retval);
|
||||||
|
}
|
||||||
|
|
||||||
/* string getAsString (); */
|
/* string getAsString (); */
|
||||||
NS_IMETHODIMP nsVariant::GetAsString(char **_retval)
|
NS_IMETHODIMP nsVariant::GetAsString(char **_retval)
|
||||||
{
|
{
|
||||||
@@ -1661,6 +1962,30 @@ NS_IMETHODIMP nsVariant::SetAsAString(const nsAReadableString & aValue)
|
|||||||
return nsVariant::SetFromAString(&mData, aValue);
|
return nsVariant::SetFromAString(&mData, aValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* void setAsDOMString (in DOMString aValue); */
|
||||||
|
NS_IMETHODIMP nsVariant::SetAsDOMString(const nsAString & aValue)
|
||||||
|
{
|
||||||
|
if(!mWritable) return NS_ERROR_OBJECT_IS_IMMUTABLE;
|
||||||
|
|
||||||
|
// A DOMString maps to an AString internally, so we can re-use
|
||||||
|
// SetFromAString here.
|
||||||
|
return nsVariant::SetFromAString(&mData, aValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* void setAsACString (in ACString aValue); */
|
||||||
|
NS_IMETHODIMP nsVariant::SetAsACString(const nsACString & aValue)
|
||||||
|
{
|
||||||
|
if(!mWritable) return NS_ERROR_OBJECT_IS_IMMUTABLE;
|
||||||
|
return nsVariant::SetFromACString(&mData, aValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* void setAsAUTF8String (in AUTF8String aValue); */
|
||||||
|
NS_IMETHODIMP nsVariant::SetAsAUTF8String(const nsAUTF8String & aValue)
|
||||||
|
{
|
||||||
|
if(!mWritable) return NS_ERROR_OBJECT_IS_IMMUTABLE;
|
||||||
|
return nsVariant::SetFromAUTF8String(&mData, aValue);
|
||||||
|
}
|
||||||
|
|
||||||
/* void setAsString (in string aValue); */
|
/* void setAsString (in string aValue); */
|
||||||
NS_IMETHODIMP nsVariant::SetAsString(const char *aValue)
|
NS_IMETHODIMP nsVariant::SetAsString(const char *aValue)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -26,6 +26,15 @@
|
|||||||
#include "nsIVariant.h"
|
#include "nsIVariant.h"
|
||||||
#include "xpt_struct.h"
|
#include "xpt_struct.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Map the nsAUTF8String, nsUTF8String classes to the nsACString and
|
||||||
|
* nsCString classes respectively for now. These defines need to be removed
|
||||||
|
* once Jag lands his nsUTF8String implementation.
|
||||||
|
*/
|
||||||
|
#define nsAUTF8String nsACString
|
||||||
|
#define nsUTF8String nsCString
|
||||||
|
#define PromiseFlatUTF8String PromiseFlatCString
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* nsDiscriminatedUnion is a type that nsIVariant implementors *may* use
|
* nsDiscriminatedUnion is a type that nsIVariant implementors *may* use
|
||||||
* to hold underlying data. It has no methods. So, its use requires no linkage
|
* to hold underlying data. It has no methods. So, its use requires no linkage
|
||||||
@@ -50,6 +59,8 @@ struct NS_COM nsDiscriminatedUnion
|
|||||||
PRUnichar mWCharValue;
|
PRUnichar mWCharValue;
|
||||||
nsIID mIDValue;
|
nsIID mIDValue;
|
||||||
nsAString* mAStringValue;
|
nsAString* mAStringValue;
|
||||||
|
nsAUTF8String* mUTF8StringValue;
|
||||||
|
nsACString* mCStringValue;
|
||||||
struct {
|
struct {
|
||||||
nsISupports* mInterfaceValue;
|
nsISupports* mInterfaceValue;
|
||||||
nsIID mInterfaceID;
|
nsIID mInterfaceID;
|
||||||
@@ -111,6 +122,8 @@ public:
|
|||||||
static nsresult ConvertToWChar(const nsDiscriminatedUnion& data, PRUnichar *_retval);
|
static nsresult ConvertToWChar(const nsDiscriminatedUnion& data, PRUnichar *_retval);
|
||||||
static nsresult ConvertToID(const nsDiscriminatedUnion& data, nsID * _retval);
|
static nsresult ConvertToID(const nsDiscriminatedUnion& data, nsID * _retval);
|
||||||
static nsresult ConvertToAString(const nsDiscriminatedUnion& data, nsAWritableString & _retval);
|
static nsresult ConvertToAString(const nsDiscriminatedUnion& data, nsAWritableString & _retval);
|
||||||
|
static nsresult ConvertToAUTF8String(const nsDiscriminatedUnion& data, nsAUTF8String & _retval);
|
||||||
|
static nsresult ConvertToACString(const nsDiscriminatedUnion& data, nsACString & _retval);
|
||||||
static nsresult ConvertToString(const nsDiscriminatedUnion& data, char **_retval);
|
static nsresult ConvertToString(const nsDiscriminatedUnion& data, char **_retval);
|
||||||
static nsresult ConvertToWString(const nsDiscriminatedUnion& data, PRUnichar **_retval);
|
static nsresult ConvertToWString(const nsDiscriminatedUnion& data, PRUnichar **_retval);
|
||||||
static nsresult ConvertToISupports(const nsDiscriminatedUnion& data, nsISupports **_retval);
|
static nsresult ConvertToISupports(const nsDiscriminatedUnion& data, nsISupports **_retval);
|
||||||
@@ -136,6 +149,8 @@ public:
|
|||||||
static nsresult SetFromWChar(nsDiscriminatedUnion* data, PRUnichar aValue);
|
static nsresult SetFromWChar(nsDiscriminatedUnion* data, PRUnichar aValue);
|
||||||
static nsresult SetFromID(nsDiscriminatedUnion* data, const nsID & aValue);
|
static nsresult SetFromID(nsDiscriminatedUnion* data, const nsID & aValue);
|
||||||
static nsresult SetFromAString(nsDiscriminatedUnion* data, const nsAReadableString & aValue);
|
static nsresult SetFromAString(nsDiscriminatedUnion* data, const nsAReadableString & aValue);
|
||||||
|
static nsresult SetFromAUTF8String(nsDiscriminatedUnion* data, const nsAUTF8String & aValue);
|
||||||
|
static nsresult SetFromACString(nsDiscriminatedUnion* data, const nsACString & aValue);
|
||||||
static nsresult SetFromString(nsDiscriminatedUnion* data, const char *aValue);
|
static nsresult SetFromString(nsDiscriminatedUnion* data, const char *aValue);
|
||||||
static nsresult SetFromWString(nsDiscriminatedUnion* data, const PRUnichar *aValue);
|
static nsresult SetFromWString(nsDiscriminatedUnion* data, const PRUnichar *aValue);
|
||||||
static nsresult SetFromISupports(nsDiscriminatedUnion* data, nsISupports *aValue);
|
static nsresult SetFromISupports(nsDiscriminatedUnion* data, nsISupports *aValue);
|
||||||
|
|||||||
Reference in New Issue
Block a user