We truncated the diff of some files because they were too big.
If you want to see the full diff for every file, click here.
Changes of Revision 112
lightspark.spec
Changed
x
1
2
%bcond_without librtmp
3
4
Name: lightspark
5
-Version: 0.7.2.99+git20160710.1738
6
+Version: 0.7.2.99+git20160814.1809
7
Release: 0
8
Summary: Modern, free, open-source flash player implementation
9
License: LGPL-3.0+
10
lightspark.tar.xz/CMakeLists.txt
Changed
23
1
2
CHECK_FUNCTION_EXISTS(av_frame_alloc HAVE_AV_FRAME_ALLOC)
3
CHECK_FUNCTION_EXISTS(av_frame_unref HAVE_AV_FRAME_UNREF)
4
CHECK_FUNCTION_EXISTS(av_packet_unref HAVE_AV_PACKET_UNREF)
5
+ CHECK_FUNCTION_EXISTS(avcodec_send_packet HAVE_AVCODEC_SEND_PACKET)
6
+ CHECK_FUNCTION_EXISTS(avcodec_receive_frame HAVE_AVCODEC_RECEIVE_FRAME)
7
8
CHECK_C_SOURCE_COMPILES("#include <libavcodec/avcodec.h>\nint main() { enum AVCodecID c; return 0; }" HAVE_AVCODECID)
9
10
11
IF(HAVE_AV_PACKET_UNREF)
12
ADD_DEFINITIONS(-DHAVE_AV_PACKET_UNREF)
13
ENDIF(HAVE_AV_PACKET_UNREF)
14
+ IF(HAVE_AVCODEC_SEND_PACKET)
15
+ ADD_DEFINITIONS(-DHAVE_AVCODEC_SEND_PACKET)
16
+ ENDIF(HAVE_AVCODEC_SEND_PACKET)
17
+ IF(HAVE_AVCODEC_RECEIVE_FRAME)
18
+ ADD_DEFINITIONS(-DHAVE_AVCODEC_RECEIVE_FRAME)
19
+ ENDIF(HAVE_AVCODEC_RECEIVE_FRAME)
20
ADD_DEFINITIONS(-DENABLE_LIBAVCODEC)
21
ENDIF(ENABLE_LIBAVCODEC)
22
23
lightspark.tar.xz/src/asobject.cpp
Changed
21
1
2
}
3
}
4
5
-ASObject::ASObject(Class_base* c,SWFOBJECT_TYPE t):objfreelist(c && c->isReusable ? c->freelist : NULL),Variables((c)?c->memoryAccount:NULL),varcount(0),classdef(c),proxyMultiName(NULL),sys(c?c->sys:NULL),
6
- type(t),traitsInitialized(false),constructIndicator(false),constructorCallComplete(false),implEnable(true)
7
+ASObject::ASObject(Class_base* c,SWFOBJECT_TYPE t,CLASS_SUBTYPE st):objfreelist(c && c->isReusable ? c->freelist : NULL),Variables((c)?c->memoryAccount:NULL),varcount(0),classdef(c),proxyMultiName(NULL),sys(c?c->sys:NULL),
8
+ type(t),subtype(st),traitsInitialized(false),constructIndicator(false),constructorCallComplete(false),implEnable(true)
9
{
10
#ifndef NDEBUG
11
//Stuff only used in debugging
12
13
}
14
15
ASObject::ASObject(const ASObject& o):objfreelist(o.classdef && o.classdef->isReusable ? o.classdef->freelist : NULL),Variables((o.classdef)?o.classdef->memoryAccount:NULL),varcount(0),classdef(NULL),proxyMultiName(NULL),sys(o.classdef? o.classdef->sys : NULL),
16
- type(o.type),traitsInitialized(false),constructIndicator(false),constructorCallComplete(false),implEnable(true)
17
+ type(o.type),subtype(o.subtype),traitsInitialized(false),constructIndicator(false),constructorCallComplete(false),implEnable(true)
18
{
19
#ifndef NDEBUG
20
//Stuff only used in debugging
21
lightspark.tar.xz/src/asobject.h
Changed
80
1
2
uint32_t nameId;
3
nsNameAndKind ns;
4
varName(uint32_t name, const nsNameAndKind& _ns):nameId(name),ns(_ns){}
5
- bool operator<(const varName& r) const
6
+ inline bool operator<(const varName& r) const
7
{
8
//Sort by name first
9
if(nameId==r.nameId)
10
11
else
12
return nameId<r.nameId;
13
}
14
+ inline bool operator==(const varName& r) const
15
+ {
16
+ return nameId==r.nameId && ns == r.ns;
17
+ }
18
};
19
20
class variables_map
21
22
SystemState* sys;
23
protected:
24
ASObject(MemoryAccount* m):objfreelist(NULL),Variables(m),varcount(0),classdef(NULL),proxyMultiName(NULL),sys(NULL),
25
- type(T_OBJECT),traitsInitialized(false),constructIndicator(false),constructorCallComplete(false),implEnable(true)
26
+ type(T_OBJECT),subtype(SUBTYPE_NOT_SET),traitsInitialized(false),constructIndicator(false),constructorCallComplete(false),implEnable(true)
27
{
28
#ifndef NDEBUG
29
//Stuff only used in debugging
30
31
destroy();
32
}
33
SWFOBJECT_TYPE type;
34
+ CLASS_SUBTYPE subtype;
35
+
36
bool traitsInitialized:1;
37
bool constructIndicator:1;
38
bool constructorCallComplete:1; // indicates that the constructor including all super constructors has been called
39
40
// called when object is really destroyed
41
virtual void destroy(){}
42
public:
43
- ASObject(Class_base* c,SWFOBJECT_TYPE t = T_OBJECT);
44
+ ASObject(Class_base* c,SWFOBJECT_TYPE t = T_OBJECT,CLASS_SUBTYPE subtype = SUBTYPE_NOT_SET);
45
46
#ifndef NDEBUG
47
//Stuff only used in debugging
48
49
class Type;
50
class ASQName;
51
class Namespace;
52
+class Proxy;
53
+class RegExp;
54
+class XML;
55
+class XMLList;
56
+class Class_inherit;
57
+class ObjectConstructor;
58
+class Function_object;
59
+class Date;
60
+
61
template<> inline bool ASObject::is<Number>() const { return type==T_NUMBER; }
62
template<> inline bool ASObject::is<Integer>() const { return type==T_INTEGER; }
63
template<> inline bool ASObject::is<UInteger>() const { return type==T_UINTEGER; }
64
65
template<> inline bool ASObject::is<Type>() const { return type==T_CLASS; }
66
template<> inline bool ASObject::is<ASQName>() const { return type==T_QNAME; }
67
template<> inline bool ASObject::is<Namespace>() const { return type==T_NAMESPACE; }
68
+template<> inline bool ASObject::is<Proxy>() const { return subtype==SUBTYPE_PROXY; }
69
+template<> inline bool ASObject::is<RegExp>() const { return subtype==SUBTYPE_REGEXP; }
70
+template<> inline bool ASObject::is<XML>() const { return subtype==SUBTYPE_XML; }
71
+template<> inline bool ASObject::is<XMLList>() const { return subtype==SUBTYPE_XMLLIST; }
72
+template<> inline bool ASObject::is<Date>() const { return subtype==SUBTYPE_DATE; }
73
+template<> inline bool ASObject::is<Class_inherit>() const { return subtype==SUBTYPE_INHERIT; }
74
+template<> inline bool ASObject::is<ObjectConstructor>() const { return subtype==SUBTYPE_OBJECTCONSTRUCTOR; }
75
+template<> inline bool ASObject::is<Function_object>() const { return subtype==SUBTYPE_FUNCTIONOBJECT; }
76
+
77
+
78
}
79
#endif /* ASOBJECT_H */
80
lightspark.tar.xz/src/backends/decoder.cpp
Changed
201
1
2
else
3
status=INIT;
4
}
5
+#if LIBAVFORMAT_VERSION_MAJOR > 56
6
+FFMpegVideoDecoder::FFMpegVideoDecoder(AVCodecID codecID, double frameRateHint):
7
+ ownedContext(true),curBuffer(0),codecContext(NULL),curBufferOffset(0)
8
+{
9
+ status=INIT;
10
+#ifdef HAVE_AVCODEC_ALLOC_CONTEXT3
11
+ codecContext=avcodec_alloc_context3(NULL);
12
+#else
13
+ codecContext=avcodec_alloc_context();
14
+#endif //HAVE_AVCODEC_ALLOC_CONTEXT3
15
+ //The tag is the header, initialize decoding
16
+ switch(codecID)
17
+ {
18
+ case CODEC_ID_H264:
19
+ videoCodec=H264;
20
+ break;
21
+ case CODEC_ID_FLV1:
22
+ videoCodec=H263;
23
+ break;
24
+ case CODEC_ID_VP6F:
25
+ videoCodec=VP6;
26
+ break;
27
+ default:
28
+ return;
29
+ }
30
+ AVCodec* codec=avcodec_find_decoder(codecID);
31
+#ifdef HAVE_AVCODEC_OPEN2
32
+ if(avcodec_open2(codecContext, codec, NULL)<0)
33
+#else
34
+ if(avcodec_open(codecContext, codec)<0)
35
+#endif //HAVE_AVCODEC_ALLOC_CONTEXT3
36
+ return;
37
+
38
+ frameRate=frameRateHint;
39
40
+ if(fillDataAndCheckValidity())
41
+ status=VALID;
42
+
43
+ frameIn=av_frame_alloc();
44
+}
45
+#else
46
FFMpegVideoDecoder::FFMpegVideoDecoder(AVCodecContext* _c, double frameRateHint):
47
ownedContext(false),curBuffer(0),codecContext(_c),curBufferOffset(0)
48
{
49
50
51
frameIn=av_frame_alloc();
52
}
53
+#endif
54
+
55
56
FFMpegVideoDecoder::~FFMpegVideoDecoder()
57
{
58
59
if(datalen==0)
60
return false;
61
int frameOk=0;
62
-#if HAVE_AVCODEC_DECODE_VIDEO2
63
+#if HAVE_AVCODEC_SEND_PACKET && HAVE_AVCODEC_RECEIVE_FRAME
64
+ AVPacket pkt;
65
+ av_init_packet(&pkt);
66
+ pkt.data=data;
67
+ pkt.size=datalen;
68
+ int ret = avcodec_send_packet(codecContext, &pkt);
69
+ if (ret == 0)
70
+ ret = avcodec_receive_frame(codecContext,frameIn);
71
+ frameOk=1;
72
+#elif HAVE_AVCODEC_DECODE_VIDEO2
73
AVPacket pkt;
74
av_init_packet(&pkt);
75
pkt.data=data;
76
77
{
78
int frameOk=0;
79
80
-#if HAVE_AVCODEC_DECODE_VIDEO2
81
+#if HAVE_AVCODEC_SEND_PACKET && HAVE_AVCODEC_RECEIVE_FRAME
82
+ int ret = avcodec_send_packet(codecContext, pkt);
83
+ if (ret == 0)
84
+ ret = avcodec_receive_frame(codecContext,frameIn);
85
+ frameOk=1;
86
+#elif HAVE_AVCODEC_DECODE_VIDEO2
87
int ret=avcodec_decode_video2(codecContext, frameIn, &frameOk, pkt);
88
#else
89
int ret=avcodec_decode_video(codecContext, frameIn, &frameOk, pkt->data, pkt->size);
90
91
#endif
92
}
93
94
+#if LIBAVFORMAT_VERSION_MAJOR > 56
95
+FFMpegAudioDecoder::FFMpegAudioDecoder(AVCodecID codecID):ownedContext(true),codecContext(NULL)
96
+{
97
+ status=INIT;
98
+ AVCodec* codec=avcodec_find_decoder(codecID);
99
+ assert(codec);
100
+#ifdef HAVE_AVCODEC_ALLOC_CONTEXT3
101
+ codecContext=avcodec_alloc_context3(NULL);
102
+#else
103
+ codecContext=avcodec_alloc_context();
104
+#endif //HAVE_AVCODEC_ALLOC_CONTEXT3
105
+
106
+#ifdef HAVE_AVCODEC_OPEN2
107
+ if(avcodec_open2(codecContext, codec, NULL)<0)
108
+#else
109
+ if(avcodec_open(codecContext, codec)<0)
110
+#endif //HAVE_AVCODEC_ALLOC_CONTEXT3
111
+ return;
112
+
113
+ if(fillDataAndCheckValidity())
114
+ status=VALID;
115
+#if HAVE_AVCODEC_DECODE_AUDIO4
116
+ frameIn=av_frame_alloc();
117
+#endif
118
+}
119
+#else
120
FFMpegAudioDecoder::FFMpegAudioDecoder(AVCodecContext* _c):ownedContext(false),codecContext(_c)
121
{
122
status=INIT;
123
124
frameIn=av_frame_alloc();
125
#endif
126
}
127
+#endif
128
129
FFMpegAudioDecoder::~FFMpegAudioDecoder()
130
{
131
132
{
133
FrameSamples& curTail=samplesBuffer.acquireLast();
134
int maxLen=AVCODEC_MAX_AUDIO_FRAME_SIZE;
135
-#if HAVE_AVCODEC_DECODE_AUDIO3 || HAVE_AVCODEC_DECODE_AUDIO4
136
+#if HAVE_AVCODEC_DECODE_AUDIO3 || HAVE_AVCODEC_DECODE_AUDIO4 || (HAVE_AVCODEC_SEND_PACKET && HAVE_AVCODEC_RECEIVE_FRAME)
137
AVPacket pkt;
138
av_init_packet(&pkt);
139
140
141
pkt.size = combinedBuffer.size();
142
overflowBuffer.clear();
143
}
144
-
145
-#if HAVE_AVCODEC_DECODE_AUDIO4
146
+#if HAVE_AVCODEC_SEND_PACKET && HAVE_AVCODEC_RECEIVE_FRAME
147
+ av_frame_unref(frameIn);
148
+ int ret = avcodec_send_packet(codecContext, &pkt);
149
+ if (ret == 0)
150
+ ret = avcodec_receive_frame(codecContext,frameIn);
151
+ if(ret<0)
152
+ {
153
+ LOG(LOG_ERROR,"not decoded audio:"<<ret);
154
+ }
155
+ else
156
+ {
157
+ maxLen = resampleFrameToS16(curTail);
158
+ }
159
+#elif HAVE_AVCODEC_DECODE_AUDIO4
160
av_frame_unref(frameIn);
161
int frameOk=0;
162
int32_t ret=avcodec_decode_audio4(codecContext, frameIn, &frameOk, &pkt);
163
164
FrameSamples& curTail=samplesBuffer.acquireLast();
165
int maxLen=AVCODEC_MAX_AUDIO_FRAME_SIZE;
166
167
-#if HAVE_AVCODEC_DECODE_AUDIO4
168
+#if HAVE_AVCODEC_SEND_PACKET && HAVE_AVCODEC_RECEIVE_FRAME
169
+ av_frame_unref(frameIn);
170
+ int ret = avcodec_send_packet(codecContext, pkt);
171
+ if (ret == 0)
172
+ ret = avcodec_receive_frame(codecContext,frameIn);
173
+ if(ret<0)
174
+ {
175
+ LOG(LOG_ERROR,"not decoded audio:"<<ret);
176
+ }
177
+ else
178
+ {
179
+ maxLen = resampleFrameToS16(curTail);
180
+ }
181
+#elif HAVE_AVCODEC_DECODE_AUDIO4
182
av_frame_unref(frameIn);
183
int frameOk=0;
184
int ret=avcodec_decode_audio4(codecContext, frameIn, &frameOk, pkt);
185
186
LOG_CALL(_("FFMpeg found ") << formatCtx->nb_streams << _(" streams"));
187
for(uint32_t i=0;i<formatCtx->nb_streams;i++)
188
{
189
+#if LIBAVFORMAT_VERSION_MAJOR > 56
190
+ if(formatCtx->streams[i]->codecpar->codec_type==AVMEDIA_TYPE_VIDEO && videoFound==false)
191
+#else
192
if(formatCtx->streams[i]->codec->codec_type==AVMEDIA_TYPE_VIDEO && videoFound==false)
193
+#endif
194
{
195
videoFound=true;
196
videoIndex=(int32_t)i;
197
}
198
+#if LIBAVFORMAT_VERSION_MAJOR > 56
199
+ else if(formatCtx->streams[i]->codecpar->codec_type==AVMEDIA_TYPE_AUDIO && formatCtx->streams[i]->codecpar->codec_id!=CODEC_ID_NONE && audioFound==false)
200
+#else
201
lightspark.tar.xz/src/backends/decoder.h
Changed
25
1
2
/*
3
Specialized constructor used by FFMpegStreamDecoder
4
*/
5
+#if LIBAVFORMAT_VERSION_MAJOR > 56
6
+ FFMpegVideoDecoder(AVCodecID codecID, double frameRateHint);
7
+#else
8
FFMpegVideoDecoder(AVCodecContext* codecContext, double frameRateHint);
9
+#endif
10
~FFMpegVideoDecoder();
11
/*
12
Specialized decoding used by FFMpegStreamDecoder
13
14
/*
15
Specialized constructor used by FFMpegStreamDecoder
16
*/
17
+#if LIBAVFORMAT_VERSION_MAJOR > 56
18
+ FFMpegAudioDecoder(AVCodecID codecID);
19
+#else
20
FFMpegAudioDecoder(AVCodecContext* codecContext);
21
+#endif
22
~FFMpegAudioDecoder();
23
/*
24
Specialized decoding used by FFMpegStreamDecoder
25
lightspark.tar.xz/src/parsing/tags.cpp
Changed
13
1
2
LOG(LOG_ERROR,_("Error while reading tag ") << h.getTagType() << _(". Size=") << actualLen << _(" expected: ") << expectedLen);
3
throw ParseException("Malformed SWF file");
4
}
5
- root->loaderInfo->setBytesLoaded(f.tellg());
6
+
7
+ // don't set loaded bytes if we are at the end of the file (this is done in RootMovieClip::initFrame() )
8
+ if (root->loaderInfo->getBytesTotal() != f.tellg())
9
+ root->loaderInfo->setBytesLoaded(f.tellg());
10
11
return ret;
12
}
13
lightspark.tar.xz/src/scripting/abc_opcodes.cpp
Changed
40
1
2
tmpcls = tmpcls->super;
3
}
4
}
5
- if(!o.isNull() && !(obj->classdef && obj->classdef->isProxy))
6
+ if(!o.isNull() && !obj->is<Proxy>())
7
{
8
o->incRef();
9
callImpl(th, o.getPtr(), obj, args, m, called_mi, keepReturn);
10
11
else
12
{
13
//If the object is a Proxy subclass, try to invoke callProperty
14
- if(obj->classdef && obj->classdef->isProxy)
15
+ if(obj->is<Proxy>())
16
{
17
//Check if there is a custom caller defined, skipping implementation to avoid recursive calls
18
multiname callPropertyName(NULL);
19
20
targetobject = xmlObj;
21
xmlObj->getDescendantsByQName(name->normalizedName(th->context->root->getSystemState()), ns_uri,name->isAttribute, ret);
22
}
23
- else if(obj->getClass()->isProxy)
24
+ else if(obj->is<Proxy>())
25
{
26
multiname callPropertyName(NULL);
27
callPropertyName.name_type=multiname::NAME_STRING;
28
29
30
void ABCVm::callImpl(call_context* th, ASObject* f, ASObject* obj, ASObject** args, int m, method_info** called_mi, bool keepReturn)
31
{
32
- if(f->is<Function>())
33
+ if(f->is<IFunction>())
34
{
35
- IFunction* func=f->as<Function>();
36
+ IFunction* func=f->as<IFunction>();
37
ASObject* ret=func->call(obj,args,m);
38
//call getMethodInfo only after the call, so it's updated
39
if(called_mi)
40
lightspark.tar.xz/src/scripting/class.cpp
Changed
9
1
2
this->getSystemState()->customClasses.insert(this).second;
3
assert(ret);
4
isReusable = true;
5
+ subtype = SUBTYPE_INHERIT;
6
}
7
8
ASObject* Class_inherit::getInstance(bool construct, ASObject* const* args, const unsigned int argslen, Class_base* realClass)
9
lightspark.tar.xz/src/scripting/flash/utils/Proxy.cpp
Changed
9
1
2
void Proxy::sinit(Class_base* c)
3
{
4
CLASS_SETUP_NO_CONSTRUCTOR(c, ASObject,CLASS_DYNAMIC_NOT_FINAL);
5
- c->isProxy = true;
6
c->setDeclaredMethodByQName("isAttribute","",Class<IFunction>::getFunction(c->getSystemState(),_isAttribute),NORMAL_METHOD,true);
7
}
8
9
lightspark.tar.xz/src/scripting/flash/utils/Proxy.h
Changed
10
1
2
private:
3
bool proxyconstructionCompleted;
4
public:
5
- Proxy(Class_base* c):ASObject(c),proxyconstructionCompleted(false){}
6
+ Proxy(Class_base* c):ASObject(c,T_OBJECT,SUBTYPE_PROXY),proxyconstructionCompleted(false){}
7
static void sinit(Class_base*);
8
static void buildTraits(ASObject* o);
9
// ASFUNCTION(_constructor);
10
lightspark.tar.xz/src/scripting/toplevel/Date.cpp
Changed
10
1
2
using namespace std;
3
using namespace lightspark;
4
5
-Date::Date(Class_base* c):ASObject(c),extrayears(0), nan(false), datetime(NULL),datetimeUTC(NULL)
6
+Date::Date(Class_base* c):ASObject(c,T_OBJECT,SUBTYPE_DATE),extrayears(0), nan(false), datetime(NULL),datetimeUTC(NULL)
7
{
8
}
9
10
lightspark.tar.xz/src/scripting/toplevel/RegExp.cpp
Changed
16
1
2
using namespace std;
3
using namespace lightspark;
4
5
-RegExp::RegExp(Class_base* c):ASObject(c),dotall(false),global(false),ignoreCase(false),
6
+RegExp::RegExp(Class_base* c):ASObject(c,T_OBJECT,SUBTYPE_REGEXP),dotall(false),global(false),ignoreCase(false),
7
extended(false),multiline(false),lastIndex(0)
8
{
9
}
10
11
-RegExp::RegExp(Class_base* c, const tiny_string& _re):ASObject(c),dotall(false),global(false),ignoreCase(false),
12
+RegExp::RegExp(Class_base* c, const tiny_string& _re):ASObject(c,T_OBJECT,SUBTYPE_REGEXP),dotall(false),global(false),ignoreCase(false),
13
extended(false),multiline(false),lastIndex(0),source(_re)
14
{
15
}
16
lightspark.tar.xz/src/scripting/toplevel/XML.cpp
Changed
21
1
2
prettyPrinting = true;
3
}
4
5
-XML::XML(Class_base* c):ASObject(c),parentNode(0),nodetype((pugi::xml_node_type)0),isAttribute(false),constructed(false)
6
+XML::XML(Class_base* c):ASObject(c,T_OBJECT,SUBTYPE_XML),parentNode(0),nodetype((pugi::xml_node_type)0),isAttribute(false),constructed(false)
7
{
8
}
9
10
-XML::XML(Class_base* c, const std::string &str):ASObject(c),parentNode(0),nodetype((pugi::xml_node_type)0),isAttribute(false),constructed(false)
11
+XML::XML(Class_base* c, const std::string &str):ASObject(c,T_OBJECT,SUBTYPE_XML),parentNode(0),nodetype((pugi::xml_node_type)0),isAttribute(false),constructed(false)
12
{
13
createTree(buildFromString(str, getParseMode()),false);
14
}
15
16
-XML::XML(Class_base* c, const pugi::xml_node& _n, XML* parent, bool fromXMLList):ASObject(c),parentNode(0),nodetype((pugi::xml_node_type)0),isAttribute(false),constructed(false)
17
+XML::XML(Class_base* c, const pugi::xml_node& _n, XML* parent, bool fromXMLList):ASObject(c,T_OBJECT,SUBTYPE_XML),parentNode(0),nodetype((pugi::xml_node_type)0),isAttribute(false),constructed(false)
18
{
19
if (parent)
20
{
21
lightspark.tar.xz/src/scripting/toplevel/XMLList.cpp
Changed
33
1
2
return NULL; \
3
}
4
5
-XMLList::XMLList(Class_base* c):ASObject(c),nodes(c->memoryAccount),constructed(false),targetobject(NULL),targetproperty(c->memoryAccount)
6
+XMLList::XMLList(Class_base* c):ASObject(c,T_OBJECT,SUBTYPE_XMLLIST),nodes(c->memoryAccount),constructed(false),targetobject(NULL),targetproperty(c->memoryAccount)
7
{
8
}
9
10
-XMLList::XMLList(Class_base* cb,bool c):ASObject(cb),nodes(cb->memoryAccount),constructed(c),targetobject(NULL),targetproperty(cb->memoryAccount)
11
+XMLList::XMLList(Class_base* cb,bool c):ASObject(cb,T_OBJECT,SUBTYPE_XMLLIST),nodes(cb->memoryAccount),constructed(c),targetobject(NULL),targetproperty(cb->memoryAccount)
12
{
13
assert(c);
14
}
15
16
-XMLList::XMLList(Class_base* c, const std::string& str):ASObject(c),nodes(c->memoryAccount),constructed(true),targetobject(NULL),targetproperty(c->memoryAccount)
17
+XMLList::XMLList(Class_base* c, const std::string& str):ASObject(c,T_OBJECT,SUBTYPE_XMLLIST),nodes(c->memoryAccount),constructed(true),targetobject(NULL),targetproperty(c->memoryAccount)
18
{
19
buildFromString(str);
20
}
21
22
XMLList::XMLList(Class_base* c, const XML::XMLVector& r):
23
- ASObject(c),nodes(r.begin(),r.end(),c->memoryAccount),constructed(true),targetobject(NULL),targetproperty(c->memoryAccount)
24
+ ASObject(c,T_OBJECT,SUBTYPE_XMLLIST),nodes(r.begin(),r.end(),c->memoryAccount),constructed(true),targetobject(NULL),targetproperty(c->memoryAccount)
25
{
26
}
27
XMLList::XMLList(Class_base* c, const XML::XMLVector& r, XMLList *targetobject, const multiname &targetproperty):
28
- ASObject(c),nodes(r.begin(),r.end(),c->memoryAccount),constructed(true),targetobject(targetobject),targetproperty(c->memoryAccount)
29
+ ASObject(c,T_OBJECT,SUBTYPE_XMLLIST),nodes(r.begin(),r.end(),c->memoryAccount),constructed(true),targetobject(targetobject),targetproperty(c->memoryAccount)
30
{
31
if (targetobject)
32
targetobject->incRef();
33
lightspark.tar.xz/src/scripting/toplevel/toplevel.cpp
Changed
52
1
2
3
Class_base::Class_base(const QName& name, MemoryAccount* m):ASObject(Class_object::getClass(getSys()),T_CLASS),protected_ns(getSys(),"",NAMESPACE),constructor(NULL),
4
borrowedVariables(m),
5
- context(NULL),class_name(name),memoryAccount(m),length(1),class_index(-1),isFinal(false),isSealed(false),isInterface(false),isReusable(false),isProxy(false),use_protected(false)
6
+ context(NULL),class_name(name),memoryAccount(m),length(1),class_index(-1),isFinal(false),isSealed(false),isInterface(false),isReusable(false),use_protected(false)
7
{
8
setConstant();
9
}
10
11
Class_base::Class_base(const Class_object*):ASObject((MemoryAccount*)NULL),protected_ns(getSys(),BUILTIN_STRINGS::EMPTY,NAMESPACE),constructor(NULL),
12
borrowedVariables(NULL),
13
- context(NULL),class_name(BUILTIN_STRINGS::STRING_CLASS,BUILTIN_STRINGS::EMPTY),memoryAccount(NULL),length(1),class_index(-1),isFinal(false),isSealed(false),isInterface(false),isReusable(false),isProxy(false),use_protected(false)
14
+ context(NULL),class_name(BUILTIN_STRINGS::STRING_CLASS,BUILTIN_STRINGS::EMPTY),memoryAccount(NULL),length(1),class_index(-1),isFinal(false),isSealed(false),isInterface(false),isReusable(false),use_protected(false)
15
{
16
setConstant();
17
type=T_CLASS;
18
19
void Class_base::setSuper(Ref<Class_base> super_)
20
{
21
assert(!super);
22
- isProxy = super_->isProxy;
23
super = super_;
24
copyBorrowedTraitsFromSuper();
25
}
26
27
isFinal = false;
28
isSealed = false;
29
isInterface = false;
30
- isProxy = false;
31
use_protected = false;
32
}
33
34
35
}
36
37
38
-ObjectConstructor::ObjectConstructor(Class_base* c,uint32_t length) : ASObject(c),_length(length)
39
+ObjectConstructor::ObjectConstructor(Class_base* c,uint32_t length) : ASObject(c,T_OBJECT,SUBTYPE_OBJECTCONSTRUCTOR),_length(length)
40
{
41
Class<ASObject>::getRef(c->getSystemState())->prototype->incRef();
42
this->prototype = Class<ASObject>::getRef(c->getSystemState())->prototype.getPtr();
43
44
return prevPrototype->getObj()->getVariableByMultiname(name, opt);
45
}
46
47
-Function_object::Function_object(Class_base* c, _R<ASObject> p) : ASObject(c), functionPrototype(p)
48
+Function_object::Function_object(Class_base* c, _R<ASObject> p) : ASObject(c,T_OBJECT,SUBTYPE_FUNCTIONOBJECT), functionPrototype(p)
49
{
50
traitsInitialized = true;
51
constructIndicator = true;
52
lightspark.tar.xz/src/scripting/toplevel/toplevel.h
Changed
10
1
2
3
// indicates if objects can be reused after they have lost their last reference
4
bool isReusable:1;
5
- // this is only set to true for Proxy and Proxy-derived classes
6
- bool isProxy:1;
7
private:
8
//TODO: move in Class_inherit
9
bool use_protected:1;
10
lightspark.tar.xz/src/swf.cpp
Changed
19
1
2
if (root->loaderInfo->getBytesLoaded() != root->loaderInfo->getBytesTotal())
3
{
4
LOG(LOG_NOT_IMPLEMENTED,"End of parsing, bytesLoaded != bytesTotal:"<< root->loaderInfo->getBytesLoaded()<<"/"<<root->loaderInfo->getBytesTotal());
5
- root->loaderInfo->setBytesLoaded(root->loaderInfo->getBytesTotal());
6
}
7
LOG(LOG_TRACE,_("End of parsing"));
8
}
9
10
vm->buildClassAndBindTag(it->first.raw_buf(), it->second);
11
12
MovieClip::initFrame();
13
+
14
+ if (finishedLoading && (loaderInfo->getBytesTotal() != loaderInfo->getBytesLoaded()))
15
+ loaderInfo->setBytesLoaded(loaderInfo->getBytesTotal());
16
}
17
18
/* This is run in vm's thread context */
19
lightspark.tar.xz/src/swftypes.h
Changed
10
1
2
3
enum SWFOBJECT_TYPE { T_OBJECT=0, T_INTEGER=1, T_NUMBER=2, T_FUNCTION=3, T_UNDEFINED=4, T_NULL=5, T_STRING=6,
4
/*UNUSED=7,*/ T_BOOLEAN=8, T_ARRAY=9, T_CLASS=10, T_QNAME=11, T_NAMESPACE=12, T_UINTEGER=13, T_PROXY=14, T_TEMPLATE=15};
5
+// this is used to avoid calls to dynamic_cast when testing for some classes
6
+enum CLASS_SUBTYPE { SUBTYPE_NOT_SET, SUBTYPE_PROXY, SUBTYPE_REGEXP, SUBTYPE_XML, SUBTYPE_XMLLIST,SUBTYPE_DATE, SUBTYPE_INHERIT, SUBTYPE_OBJECTCONSTRUCTOR,SUBTYPE_FUNCTIONOBJECT };
7
8
enum STACK_TYPE{STACK_NONE=0,STACK_OBJECT,STACK_INT,STACK_UINT,STACK_NUMBER,STACK_BOOLEAN};
9
inline std::ostream& operator<<(std::ostream& s, const STACK_TYPE& st)
10