|
@@ -4,7 +4,9 @@
|
|
|
|
|
|
|
|
struct SQUserData : SQDelegable
|
|
struct SQUserData : SQDelegable
|
|
|
{
|
|
{
|
|
|
- SQUserData(SQSharedState *ss){ _delegate = 0; _hook = NULL; INIT_CHAIN(); ADD_TO_CHAIN(&_ss(this)->_gc_chain, this); }
|
|
|
|
|
|
|
+ SQUserData(SQSharedState *ss, SQInteger size=0):_size(size),_hook(NULL),_typetag(0) {
|
|
|
|
|
+ _delegate = 0; INIT_CHAIN(); ADD_TO_CHAIN(&_ss(this)->_gc_chain, this);
|
|
|
|
|
+ }
|
|
|
~SQUserData()
|
|
~SQUserData()
|
|
|
{
|
|
{
|
|
|
REMOVE_FROM_CHAIN(&_ss(this)->_gc_chain, this);
|
|
REMOVE_FROM_CHAIN(&_ss(this)->_gc_chain, this);
|
|
@@ -13,9 +15,7 @@ struct SQUserData : SQDelegable
|
|
|
static SQUserData* Create(SQSharedState *ss, SQInteger size)
|
|
static SQUserData* Create(SQSharedState *ss, SQInteger size)
|
|
|
{
|
|
{
|
|
|
SQUserData* ud = (SQUserData*)SQ_MALLOC(sq_aligning(sizeof(SQUserData))+size);
|
|
SQUserData* ud = (SQUserData*)SQ_MALLOC(sq_aligning(sizeof(SQUserData))+size);
|
|
|
- new (ud) SQUserData(ss);
|
|
|
|
|
- ud->_size = size;
|
|
|
|
|
- ud->_typetag = 0;
|
|
|
|
|
|
|
+ new (ud) SQUserData(ss, size);
|
|
|
return ud;
|
|
return ud;
|
|
|
}
|
|
}
|
|
|
#ifndef NO_GARBAGE_COLLECTOR
|
|
#ifndef NO_GARBAGE_COLLECTOR
|
|
@@ -24,11 +24,11 @@ struct SQUserData : SQDelegable
|
|
|
SQObjectType GetType(){ return OT_USERDATA;}
|
|
SQObjectType GetType(){ return OT_USERDATA;}
|
|
|
#endif
|
|
#endif
|
|
|
void Release() {
|
|
void Release() {
|
|
|
- if (_hook) {
|
|
|
|
|
|
|
+ if (_hook) {
|
|
|
#if !defined(NO_GARBAGE_COLLECTOR) && defined(SQ_WITH_DELAYED_RELEASE_HOOKS)
|
|
#if !defined(NO_GARBAGE_COLLECTOR) && defined(SQ_WITH_DELAYED_RELEASE_HOOKS)
|
|
|
- _sharedstate->AddDelayedReleaseHook(_hook, (SQUserPointer)sq_aligning(this + 1), _size);
|
|
|
|
|
-#else
|
|
|
|
|
- _hook((SQUserPointer)sq_aligning(this + 1),_size, 0);
|
|
|
|
|
|
|
+ _sharedstate->AddDelayedReleaseHook(_hook, (SQUserPointer)sq_aligning(this + 1), _size);
|
|
|
|
|
+#else
|
|
|
|
|
+ _hook((SQUserPointer)sq_aligning(this + 1),_size, 0);
|
|
|
#endif
|
|
#endif
|
|
|
}
|
|
}
|
|
|
SQInteger tsize = _size;
|
|
SQInteger tsize = _size;
|