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:
nisheeth@netscape.com
2002-03-05 02:22:02 +00:00
parent e7e7402f08
commit b2dc7013bb
7 changed files with 739 additions and 311 deletions

View File

@@ -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)
{ {

View File

@@ -103,10 +103,10 @@ static nsresult ConvertAndCopyVariant(nsIVariant *inVar, PRUint16 type, nsIVaria
switch(type) switch(type)
{ {
case nsIDataType::VTYPE_INT8: case nsIDataType::VTYPE_INT8:
MEMBER_COPY_CAST(Int8, PRUint8) MEMBER_COPY_CAST(Int8, PRUint8)
break; break;
case nsIDataType::VTYPE_INT16: case nsIDataType::VTYPE_INT16:
MEMBER_COPY(Int16) MEMBER_COPY(Int16)
break; break;
case nsIDataType::VTYPE_INT32: case nsIDataType::VTYPE_INT32:
@@ -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;

View File

@@ -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 = [

View File

@@ -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
*/ */

View File

@@ -34,7 +34,7 @@ interface nsIDataType : nsISupports
{ {
// These MUST match the declarations in xpt_struct.h. // These MUST match the declarations in xpt_struct.h.
// Otherwise the world is likely to explode. // Otherwise the world is likely to explode.
// From xpt_struct.h ... // From xpt_struct.h ...
const PRUint16 VTYPE_INT8 = 0; // TD_INT8 = 0, const PRUint16 VTYPE_INT8 = 0; // TD_INT8 = 0,
const PRUint16 VTYPE_INT16 = 1; // TD_INT16 = 1, const PRUint16 VTYPE_INT16 = 1; // TD_INT16 = 1,
const PRUint16 VTYPE_INT32 = 2; // TD_INT32 = 2, const PRUint16 VTYPE_INT32 = 2; // TD_INT32 = 2,
@@ -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);

File diff suppressed because it is too large Load Diff

View File

@@ -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
@@ -35,21 +44,23 @@
struct NS_COM nsDiscriminatedUnion struct NS_COM nsDiscriminatedUnion
{ {
union { union {
PRInt8 mInt8Value; PRInt8 mInt8Value;
PRInt16 mInt16Value; PRInt16 mInt16Value;
PRInt32 mInt32Value; PRInt32 mInt32Value;
PRInt64 mInt64Value; PRInt64 mInt64Value;
PRUint8 mUint8Value; PRUint8 mUint8Value;
PRUint16 mUint16Value; PRUint16 mUint16Value;
PRUint32 mUint32Value; PRUint32 mUint32Value;
PRUint64 mUint64Value; PRUint64 mUint64Value;
float mFloatValue; float mFloatValue;
double mDoubleValue; double mDoubleValue;
PRBool mBoolValue; PRBool mBoolValue;
char mCharValue; char mCharValue;
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);