blob: dbcc0f8517a6a4c0d2a7db1275d950bbeb9dd306 [file] [log] [blame]
// PR c++/39367
// { dg-options "-O" }
class QScriptEnginePrivate;
class QScriptClassInfo;
namespace QScript {
enum Type { InvalidType };
};
class QScriptValueImpl {
public:
inline QScriptValueImpl();
QScript::Type m_type;
};
namespace QScript {
namespace Ecma {
class Core {
public:
inline QScriptEnginePrivate *engine() const { }
inline QScriptClassInfo *classInfo() const { }
QScriptValueImpl publicPrototype;
};
class Boolean: public Core {
void newBoolean(QScriptValueImpl *result, bool value = false);
};
}
template <typename T> class Buffer {
public:
inline void reserve(int num);
inline void resize(int s);
T *m_data;
int m_capacity;
int m_size;
};
}
template <typename T> void QScript::Buffer<T>::resize(int s) {
if (m_capacity < s)
reserve (s << 1);
}
template <typename T> void QScript::Buffer<T>::reserve(int x) {
T *new_data = new T[m_capacity];
for (int i=0; i<m_size; ++i)
new_data[i] = m_data[i];
}
class QScriptObject {
public:
inline void reset();
QScript::Buffer<QScriptValueImpl> m_values;
};
class QScriptEnginePrivate {
public:
inline QScriptObject *allocObject() { return 0; }
inline void newObject(QScriptValueImpl *o, const QScriptValueImpl &proto,
QScriptClassInfo *oc = 0);
};
inline void QScriptEnginePrivate::newObject(QScriptValueImpl *o,
const QScriptValueImpl &proto,
QScriptClassInfo *oc)
{
QScriptObject *od = allocObject();
od->reset();
}
inline QScriptValueImpl::QScriptValueImpl() : m_type(QScript::InvalidType) { }
inline void QScriptObject::reset() { m_values.resize(0); }
namespace QScript {
namespace Ecma {
void Boolean::newBoolean(QScriptValueImpl *result, bool value)
{
engine()->newObject(result, publicPrototype, classInfo());
}
}
}