Skip to content

Commit

Permalink
qtcollider: simplify and optimize referencing SC symbols and classes …
Browse files Browse the repository at this point in the history
…in C++
  • Loading branch information
jleben committed May 4, 2012
1 parent b2bb1dd commit df52a2b
Show file tree
Hide file tree
Showing 12 changed files with 76 additions and 118 deletions.
58 changes: 24 additions & 34 deletions QtCollider/Common.h
Expand Up @@ -100,40 +100,30 @@ namespace QtCollider {

QPalette systemPalette();

extern PyrSymbol *s_interpretCmdLine;
extern PyrSymbol *s_interpretPrintCmdLine;
extern PyrSymbol *s_doFunction;
extern PyrSymbol *s_doDrawFunc;
extern PyrSymbol *s_prRelease;
extern PyrSymbol *s_Rect;
extern PyrSymbol *s_Point;
extern PyrSymbol *s_Color;
extern PyrSymbol *s_Size;
extern PyrSymbol *s_Array;
extern PyrSymbol *s_FloatArray;
extern PyrSymbol *s_SymbolArray;
extern PyrSymbol *s_String;
extern PyrSymbol *s_QPalette;
extern PyrSymbol *s_QFont;
extern PyrSymbol *s_QObject;
extern PyrSymbol *s_QLayout;
extern PyrSymbol *s_QTreeViewItem;

#define class_Rect s_Rect->u.classobj
#define class_Point s_Point->u.classobj
#define class_Color s_Color->u.classobj
#define class_Size s_Size->u.classobj
#define class_Array s_Array->u.classobj
#define class_FloatArray s_FloatArray->u.classobj
#define class_SymbolArray s_SymbolArray->u.classobj
#define class_String s_String->u.classobj
#define class_QPalette s_QPalette->u.classobj
#define class_QFont s_QFont->u.classobj
#define class_QObject s_QObject->u.classobj
#define class_QLayout s_QLayout->u.classobj
#define class_QTreeViewItem s_QTreeViewItem->u.classobj

#define SC_CLASS( SYM ) getsym(#SYM)->u.classobj
#define QC_DO_SYMBOLS \
QC_DO_SYMBOL(interpretCmdLine); \
QC_DO_SYMBOL(interpretPrintCmdLine); \
QC_DO_SYMBOL(doFunction); \
QC_DO_SYMBOL(doDrawFunc); \
QC_DO_SYMBOL(prRelease); \
QC_DO_SYMBOL(Rect); \
QC_DO_SYMBOL(Point); \
QC_DO_SYMBOL(Color); \
QC_DO_SYMBOL(Size); \
QC_DO_SYMBOL(QPalette); \
QC_DO_SYMBOL(QFont); \
QC_DO_SYMBOL(QObject); \
QC_DO_SYMBOL(QLayout); \
QC_DO_SYMBOL(QTreeViewItem); \
QC_DO_SYMBOL(Gradient); \
QC_DO_SYMBOL(HiliteGradient);

#define QC_DO_SYMBOL(SYM) extern PyrSymbol * sym_##SYM
QC_DO_SYMBOLS
#undef QC_DO_SYMBOL

#define SC_SYM( SYM ) QtCollider::sym_##SYM
#define SC_CLASS( SYM ) SC_SYM(SYM)->u.classobj

}

Expand Down
4 changes: 2 additions & 2 deletions QtCollider/QObjectProxy.cpp
Expand Up @@ -90,7 +90,7 @@ bool QObjectProxy::invokeMethod( const char *method, PyrSlot *retSlot, PyrSlot *
// get data from argument slots
QtCollider::Variant argSlots[10];

if( isKindOfSlot( argSlot, class_Array ) ) {
if( isKindOfSlot( argSlot, class_array ) ) {
PyrSlot *slots = slotRawObject( argSlot )->slots;
int size = slotRawObject( argSlot )->size;
int i;
Expand Down Expand Up @@ -210,7 +210,7 @@ void QObjectProxy::customEvent( QEvent *event )
destroyEvent( static_cast<DestroyEvent*>(event) );
return;
case (QEvent::Type) QtCollider::Event_Proxy_Release:
invokeScMethod(s_prRelease);
invokeScMethod(SC_SYM(prRelease));
return;
default: ;
}
Expand Down
2 changes: 1 addition & 1 deletion QtCollider/QWidgetProxy.cpp
Expand Up @@ -485,7 +485,7 @@ void QWidgetProxy::customPaint( QPainter *painter )
QtCollider::lockLang();

if( QtCollider::beginPainting( painter ) ) {
invokeScMethod( s_doDrawFunc, QList<QVariant>(), 0, true );
invokeScMethod( SC_SYM(doDrawFunc), QList<QVariant>(), 0, true );
QtCollider::endPainting();
}

Expand Down
2 changes: 1 addition & 1 deletion QtCollider/QcApplication.cpp
Expand Up @@ -111,7 +111,7 @@ void QcApplication::interpret( const QString &str, bool print )
SetObject(&slotRawInterpreter(&g->process->interpreter)->cmdLine, strObj);
g->gc->GCWrite(slotRawObject(&g->process->interpreter), strObj);

runLibrary( print ? QtCollider::s_interpretPrintCmdLine : QtCollider::s_interpretCmdLine );
runLibrary( print ? SC_SYM(interpretPrintCmdLine) : SC_SYM(interpretCmdLine) );
}
QtCollider::unlockLang();
}
Expand Down
2 changes: 1 addition & 1 deletion QtCollider/QcSignalSpy.h
Expand Up @@ -174,7 +174,7 @@ class QcFunctionSignalHandler : public QcSignalSpy

args.prepend( QVariant::fromValue( _handler ) );

_proxy->invokeScMethod( s_doFunction, args );
_proxy->invokeScMethod( SC_SYM(doFunction), args );
}

PyrObject * _handler;
Expand Down
70 changes: 35 additions & 35 deletions QtCollider/Slot.cpp
Expand Up @@ -50,7 +50,7 @@ static QPalette::ColorRole paletteColorRoles[] = {

void Slot::setRect( PyrSlot *slot, const QRectF &r )
{
PyrObject *obj = instantiateObject( gMainVMGlobals->gc, class_Rect, 0, true, true );
PyrObject *obj = instantiateObject( gMainVMGlobals->gc, SC_CLASS(Rect), 0, true, true );
SetObject( slot, obj );

PyrSlot *slots = obj->slots;
Expand All @@ -62,7 +62,7 @@ void Slot::setRect( PyrSlot *slot, const QRectF &r )

void Slot::setPoint( PyrSlot *slot, const QPointF &pt )
{
PyrObject *obj = instantiateObject( gMainVMGlobals->gc, class_Point, 0, true, true );
PyrObject *obj = instantiateObject( gMainVMGlobals->gc, SC_CLASS(Point), 0, true, true );
SetObject( slot, obj );

PyrSlot *slots = obj->slots;
Expand All @@ -72,7 +72,7 @@ void Slot::setPoint( PyrSlot *slot, const QPointF &pt )

void Slot::setSize( PyrSlot *slot, const QSizeF &sz )
{
PyrObject *obj = instantiateObject( gMainVMGlobals->gc, class_Size, 0, true, true );
PyrObject *obj = instantiateObject( gMainVMGlobals->gc, SC_CLASS(Size), 0, true, true );
SetObject( slot, obj );

PyrSlot *slots = obj->slots;
Expand All @@ -94,7 +94,7 @@ void Slot::setColor( PyrSlot *slot, const QColor &c )
return;
}

PyrObject *obj = instantiateObject( gMainVMGlobals->gc, class_Color, 0, true, true );
PyrObject *obj = instantiateObject( gMainVMGlobals->gc, SC_CLASS(Color), 0, true, true );
SetObject( slot, obj );

PyrSlot *slots = obj->slots;
Expand All @@ -107,7 +107,7 @@ void Slot::setColor( PyrSlot *slot, const QColor &c )
void Slot::setPalette( PyrSlot *slot, const QPalette &plt )
{
PyrGC *gc = gMainVMGlobals->gc;
PyrObject *obj = instantiateObject( gc, class_QPalette, 0, true, true );
PyrObject *obj = instantiateObject( gc, SC_CLASS(QPalette), 0, true, true );
SetObject( slot, obj );

QPalette_Init( gMainVMGlobals, obj, plt );
Expand All @@ -129,7 +129,7 @@ void Slot::setQObject( PyrSlot *s, QObject *o )

void Slot::setTreeWidgetItem( PyrSlot *s, const SafePtr<QcTreeWidget::Item> & itemPtr )
{
PyrObject *obj = instantiateObject( gMainVMGlobals->gc, class_QTreeViewItem, 0, true, true );
PyrObject *obj = instantiateObject( gMainVMGlobals->gc, SC_CLASS(QTreeViewItem), 0, true, true );
QcTreeWidget::Item::initialize( gMainVMGlobals, obj, itemPtr );
SetObject( s, obj );
}
Expand Down Expand Up @@ -308,7 +308,7 @@ QString Slot::toString( PyrSlot *slot )
if( IsSym(slot) ) {
return QString::fromUtf8( slotRawSymbol(slot)->name );
}
else if( isKindOfSlot( slot, class_String ) ) {
else if( isKindOfSlot( slot, class_string ) ) {
int len = slotRawObject( slot )->size;
return QString::fromUtf8( slotRawString(slot)->s, len );
}
Expand All @@ -317,7 +317,7 @@ QString Slot::toString( PyrSlot *slot )

QPointF Slot::toPoint( PyrSlot *slot )
{
if( !isKindOfSlot( slot, class_Point ) ) {
if( !isKindOfSlot( slot, SC_CLASS(Point) ) ) {
return QPointF();
}
PyrSlot *slots = slotRawObject( slot )->slots;
Expand All @@ -330,7 +330,7 @@ QPointF Slot::toPoint( PyrSlot *slot )

QRectF Slot::toRect( PyrSlot *slot )
{
if( !isKindOfSlot( slot, class_Rect ) ) {
if( !isKindOfSlot( slot, SC_CLASS(Rect) ) ) {
return QRectF();
}

Expand All @@ -347,7 +347,7 @@ QRectF Slot::toRect( PyrSlot *slot )

QSizeF Slot::toSize( PyrSlot *slot )
{
if( !isKindOfSlot( slot, class_Size ) ) {
if( !isKindOfSlot( slot, SC_CLASS(Size) ) ) {
return QSizeF();
}

Expand Down Expand Up @@ -390,7 +390,7 @@ QColor Slot::toColor( PyrSlot *slot )
PyrObject *obj = slotRawObject(slot);
PyrClass *klass = obj->classptr;

if( klass == class_Color )
if( klass == SC_CLASS(Color) )
return asColor(obj);

if( klass == SC_CLASS(Gradient) || klass == SC_CLASS(HiliteGradient) )
Expand All @@ -411,7 +411,7 @@ QColor Slot::toColor( PyrSlot *slot )

QFont Slot::toFont( PyrSlot *slot )
{
if( !isKindOfSlot( slot, class_QFont ) )
if( !isKindOfSlot( slot, SC_CLASS(QFont) ) )
return QFont();

PyrSlot *slots = slotRawObject(slot)->slots;
Expand Down Expand Up @@ -445,7 +445,7 @@ QFont Slot::toFont( PyrSlot *slot )

QPalette Slot::toPalette( PyrSlot *slot )
{
if( !isKindOfSlot( slot, class_QPalette ) )
if( !isKindOfSlot( slot, SC_CLASS(QPalette) ) )
return QPalette();

QPalette *p = QPALETTE_FROM_OBJECT(slotRawObject(slot));
Expand All @@ -454,7 +454,7 @@ QPalette Slot::toPalette( PyrSlot *slot )

VariantList Slot::toVariantList( PyrSlot *slot )
{
if( isKindOfSlot( slot, class_Array ) ) {
if( isKindOfSlot( slot, class_array ) ) {
PyrObject *obj = slotRawObject( slot );
PyrSlot *slots = obj->slots;
int size = obj->size;
Expand All @@ -463,7 +463,7 @@ VariantList Slot::toVariantList( PyrSlot *slot )
list.data << Slot::toVariant( slots );
return list;
}
else if( isKindOfSlot( slot, class_SymbolArray ) ) {
else if( isKindOfSlot( slot, class_symbolarray ) ) {
PyrSymbolArray *symarray = slotRawSymbolArray( slot );
PyrSymbol **symbols = symarray->symbols;
int size = symarray->size;
Expand Down Expand Up @@ -515,7 +515,7 @@ static QVector<numeric_type> toNumericVector( PyrObject *obj )

QObjectProxy* Slot::toObjectProxy( PyrSlot *slot )
{
if( !isKindOfSlot( slot, class_QObject ) ) return 0;
if( !isKindOfSlot( slot, SC_CLASS(QObject) ) ) return 0;
QObjectProxy *proxy = 0;
PyrSlot *proxySlot = slotRawObject( slot )->slots;
if( IsPtr( proxySlot ) ) proxy = (QObjectProxy*) slotRawPtr( proxySlot );
Expand All @@ -524,7 +524,7 @@ QObjectProxy* Slot::toObjectProxy( PyrSlot *slot )

QcTreeWidget::ItemPtr Slot::toTreeWidgetItem( PyrSlot *slot )
{
if( !isKindOfSlot( slot, class_QTreeViewItem ) ) return QcTreeWidget::ItemPtr();
if( !isKindOfSlot( slot, SC_CLASS(QTreeViewItem) ) ) return QcTreeWidget::ItemPtr();
PyrSlot *ptrSlot = slotRawObject(slot)->slots+0;
if( IsPtr( ptrSlot ) ) {
QcTreeWidget::ItemPtr *safePtr = static_cast<QcTreeWidget::ItemPtr*>( slotRawPtr(ptrSlot) );
Expand Down Expand Up @@ -563,38 +563,38 @@ QVariant Slot::toVariant( PyrSlot *slot )
else if( format == obj_int32 || format == obj_int16 || format == obj_int8 )
return QVariant::fromValue< QVector<int> >( toNumericVector<int>(obj) );

else if( isKindOfSlot( slot, class_String ) ) {
else if( isKindOfSlot( slot, class_string ) ) {
return QVariant( toString(slot) );
}
else if( isKindOfSlot( slot, class_Point ) ) {
else if( isKindOfSlot( slot, SC_CLASS(Point) ) ) {
return QVariant( toPoint( slot ) );
}
else if( isKindOfSlot( slot, class_Rect ) ) {
else if( isKindOfSlot( slot, SC_CLASS(Rect) ) ) {
return QVariant( toRect(slot) );
}
else if( isKindOfSlot( slot, class_Size ) ) {
else if( isKindOfSlot( slot, SC_CLASS(Size) ) ) {
return QVariant( toSize(slot) );
}
else if( klass == class_Color ||
else if( klass == SC_CLASS(Color) ||
klass == SC_CLASS(Gradient) ||
klass == SC_CLASS(HiliteGradient) )
{
return QVariant::fromValue<QColor>( toColor(slot) );
}
else if( isKindOfSlot( slot, class_QFont ) ) {
else if( isKindOfSlot( slot, SC_CLASS(QFont) ) ) {
return QVariant::fromValue<QFont>( toFont(slot) );
}
else if( isKindOfSlot( slot, class_QPalette ) ) {
else if( isKindOfSlot( slot, SC_CLASS(QPalette) ) ) {
return QVariant::fromValue<QPalette>( toPalette(slot) );
}
else if( isKindOfSlot( slot, class_QObject ) ) {
else if( isKindOfSlot( slot, SC_CLASS(QObject) ) ) {
proxy = toObjectProxy(slot);
return QVariant::fromValue<QObjectProxy*>( proxy );
}
else if( isKindOfSlot( slot, class_Array ) || isKindOfSlot( slot, class_SymbolArray ) ) {
else if( isKindOfSlot( slot, class_array ) || isKindOfSlot( slot, class_symbolarray ) ) {
return QVariant::fromValue<VariantList>( toVariantList(slot) );
}
else if( isKindOfSlot( slot, class_QTreeViewItem ) ) {
else if( isKindOfSlot( slot, SC_CLASS(QTreeViewItem) ) ) {
return QVariant::fromValue<QcTreeWidget::ItemPtr>( toTreeWidgetItem(slot) );
}
else {
Expand Down Expand Up @@ -652,34 +652,34 @@ void QtCollider::Variant::setData( PyrSlot *slot )
_type = qMetaTypeId< QVector<int> >();
_ptr = new QVector<int>( toNumericVector<int>(obj) );
}
else if( isKindOfSlot( slot, class_String ) ) {
else if( isKindOfSlot( slot, class_string ) ) {
_type = QMetaType::QString;
_ptr = new QString( toString(slot) );
}
else if( isKindOfSlot( slot, class_Point ) ) {
else if( isKindOfSlot( slot, SC_CLASS(Point) ) ) {
_type = QMetaType::QPointF;
_ptr = new QPointF( toPoint(slot) );
}
else if( isKindOfSlot( slot, class_Rect ) ) {
else if( isKindOfSlot( slot, SC_CLASS(Rect) ) ) {
_type = QMetaType::QRectF;
_ptr = new QRectF( toRect(slot) );
}
else if( isKindOfSlot( slot, class_Size ) ) {
else if( isKindOfSlot( slot, SC_CLASS(Size) ) ) {
_type = QMetaType::QSizeF;
_ptr = new QSizeF( toSize(slot) );
}
else if( klass == class_Color ||
else if( klass == SC_CLASS(Color) ||
klass == SC_CLASS(Gradient) ||
klass == SC_CLASS(HiliteGradient) )
{
_type = QMetaType::QColor;
_ptr = new QColor( toColor(slot) );
}
else if( isKindOfSlot( slot, class_Array ) || isKindOfSlot( slot, class_SymbolArray ) ) {
else if( isKindOfSlot( slot, class_array ) || isKindOfSlot( slot, class_symbolarray ) ) {
_type = qMetaTypeId<VariantList>();
_ptr = new VariantList( toVariantList(slot) );
}
else if( isKindOfSlot( slot, class_QObject ) ) {
else if( isKindOfSlot( slot, SC_CLASS(QObject) ) ) {
proxy = toObjectProxy(slot);
if( !proxy ) {
_type = QMetaType::Void;
Expand All @@ -690,7 +690,7 @@ void QtCollider::Variant::setData( PyrSlot *slot )
_ptr = new QObjectProxy*( proxy );
}
}
else if( isKindOfSlot( slot, class_QTreeViewItem ) ) {
else if( isKindOfSlot( slot, SC_CLASS(QTreeViewItem) ) ) {
_type = qMetaTypeId<QcTreeWidget::ItemPtr>();
_ptr = new QcTreeWidget::ItemPtr( toTreeWidgetItem(slot) );
}
Expand Down
4 changes: 2 additions & 2 deletions QtCollider/primitives/prim_QObject.cpp
Expand Up @@ -72,7 +72,7 @@ QC_LANG_PRIMITIVE( QObject_New, 2, PyrSlot *r, PyrSlot *a, VMGlobals *g )

PyrSlot *slotArg = a+1;

if( isKindOfSlot( slotArg, class_Array ) ) {
if( isKindOfSlot( slotArg, class_array ) ) {
PyrObject *array = slotRawObject( slotArg );
PyrSlot *s = array->slots;
int size = array->size;
Expand Down Expand Up @@ -464,7 +464,7 @@ QC_LANG_PRIMITIVE( QObject_DisconnectObject, 2, PyrSlot *r, PyrSlot *a, VMGlobal
QC_LANG_PRIMITIVE( QObject_ConnectSlot, 3, PyrSlot *r, PyrSlot *a, VMGlobals *g )
{
// Args: signal, receiver, slot
if( !isKindOfSlot( a+1, class_QObject )
if( !isKindOfSlot( a+1, SC_CLASS(QObject) )
|| NotSym( a+0 ) || NotSym( a+2 ) ) return errWrongType;

PyrSymbol *symSig = slotRawSymbol( a+0 );
Expand Down
2 changes: 1 addition & 1 deletion QtCollider/primitives/prim_QPalette.cpp
Expand Up @@ -40,7 +40,7 @@ int QPalette_Finalize( struct VMGlobals *g, struct PyrObject *obj )

void QPalette_Init( struct VMGlobals *g, struct PyrObject *obj, const QPalette & palette )
{
assert( obj->classptr == class_QPalette );
assert( obj->classptr == SC_CLASS(QPalette) );
assert( IsNil(obj->slots) && IsNil(obj->slots+1) );

QPalette *p = new QPalette(palette);
Expand Down
2 changes: 1 addition & 1 deletion QtCollider/primitives/prim_QPen.cpp
Expand Up @@ -215,7 +215,7 @@ QC_QPEN_PRIMITIVE( QPen_SetDashPattern, 1, PyrSlot *r, PyrSlot *a, VMGlobals *g
{
if( !IsObj( a ) ) return errWrongType;
PyrObject *obj = slotRawObject( a );
if( obj->classptr != class_FloatArray ) return errWrongType;
if( obj->classptr != class_floatarray ) return errWrongType;
PyrFloatArray *farray = reinterpret_cast<PyrFloatArray*>(obj);

int s = farray->size;
Expand Down

0 comments on commit df52a2b

Please sign in to comment.