Move voidable string into xpcom. Part of fix for bug 221387 (XPathExpression.createExpression doesn't throw NAMESPACE_ERR). r=bz, sr=dbaron.

This commit is contained in:
peter%propagandism.org 2003-10-09 16:15:29 +00:00
Родитель 16014e6ec2
Коммит 9059682e5b
4 изменённых файлов: 35 добавлений и 37 удалений

Просмотреть файл

@ -2383,41 +2383,6 @@ protected:
nsBufferHandle<PRUnichar> mBufferHandle;
};
// "voidable" nsAString implementation
class XPCVoidableString : public nsAutoString
{
public:
XPCVoidableString() :
nsAutoString(), mIsVoid(PR_FALSE)
{ }
char_type* GetWritableFragment(nsWritableFragment<char_type>& aFragment,
nsFragmentRequest aRequest,
PRUint32 aOffset)
{
mIsVoid = PR_FALSE;
return nsAutoString::GetWritableFragment(aFragment, aRequest, aOffset);
}
PRBool IsVoid() const
{
return mIsVoid;
}
void SetIsVoid(PRBool aVoid)
{
if(aVoid && !mIsVoid) {
Truncate();
}
mIsVoid = aVoid;
}
protected:
PRBool mIsVoid;
};
// readable string conversions, static methods only
class XPCStringConvert
{

Просмотреть файл

@ -1606,7 +1606,7 @@ XPCWrappedNative::CallMethod(XPCCallContext& ccx,
#define PARAM_AUTOSTRING_COUNT 1
#if PARAM_AUTOSTRING_COUNT
XPCVoidableString autoStrings[PARAM_AUTOSTRING_COUNT];
nsVoidableString autoStrings[PARAM_AUTOSTRING_COUNT];
int autoStringIndex = 0;
#endif
@ -1808,7 +1808,7 @@ XPCWrappedNative::CallMethod(XPCCallContext& ccx,
}
#endif
dp->SetValIsDOMString();
if(!(dp->val.p = new XPCVoidableString()))
if(!(dp->val.p = new nsVoidableString()))
{
JS_ReportOutOfMemory(ccx);
goto done;

Просмотреть файл

@ -1330,6 +1330,24 @@ nsAutoString::nsAutoString(const CBufDescriptor& aBuffer) : nsString() {
AddNullTerminator(*this);
}
PRUnichar* nsVoidableString::GetWritableFragment(nsWritableFragment<PRUnichar>& aFragment,nsFragmentRequest aRequest,PRUint32 aOffset) {
mIsVoid = PR_FALSE;
return nsAutoString::GetWritableFragment(aFragment, aRequest, aOffset);
}
PRBool nsVoidableString::IsVoid() const {
return mIsVoid;
}
void nsVoidableString::SetIsVoid(PRBool aVoid) {
if (aVoid && !mIsVoid) {
Truncate();
}
mIsVoid = aVoid;
}
void
NS_ConvertASCIItoUTF16::Init( const char* aCString, PRUint32 aLength )
{

Просмотреть файл

@ -482,6 +482,21 @@ public:
PRUnichar mBuffer[kDefaultStringSize];
};
class nsVoidableString : public nsAutoString
{
public:
nsVoidableString() :
nsAutoString(),
mIsVoid(PR_FALSE) { }
char_type* GetWritableFragment(nsWritableFragment<char_type>& aFragment, nsFragmentRequest aRequest, PRUint32 aOffset);
PRBool IsVoid() const;
void SetIsVoid(PRBool aVoid);
protected:
PRBool mIsVoid;
};
// NS_DEF_DERIVED_STRING_OPERATOR_PLUS(nsAutoString, PRUnichar)
class NS_COM NS_ConvertASCIItoUTF16