Changes of Revision 65
lightspark.spec
Changed
x
1
2
%endif
3
4
Name: lightspark
5
-Version: 0.7.2.99+git20150403.1618
6
+Version: 0.7.2.99+git20150419.1419
7
Release: 0
8
Summary: Modern, free, open-source flash player implementation
9
License: LGPL-3.0+
10
lightspark.tar.xz/src/allclasses.h
Changed
68
1
2
3
//Events
4
REGISTER_CLASS_NAME(AsyncErrorEvent,"flash.events")
5
+REGISTER_CLASS_NAME(ContextMenuEvent,"flash.events")
6
REGISTER_CLASS_NAME(DRMErrorEvent,"flash.events")
7
REGISTER_CLASS_NAME(DRMStatusEvent,"flash.events")
8
REGISTER_CLASS_NAME(DataEvent,"flash.events")
9
10
REGISTER_CLASS_NAME(EventPhase,"flash.events")
11
REGISTER_CLASS_NAME(FocusEvent,"flash.events")
12
REGISTER_CLASS_NAME(FullScreenEvent,"flash.events")
13
+REGISTER_CLASS_NAME(GestureEvent,"flash.events")
14
REGISTER_CLASS_NAME(HTTPStatusEvent,"flash.events")
15
REGISTER_CLASS_NAME(IEventDispatcher,"flash.events")
16
REGISTER_CLASS_NAME(IOErrorEvent,"flash.events")
17
18
REGISTER_CLASS_NAME(KeyboardEvent,"flash.events")
19
REGISTER_CLASS_NAME(MouseEvent,"flash.events")
20
REGISTER_CLASS_NAME(NetStatusEvent,"flash.events")
21
+REGISTER_CLASS_NAME(PressAndTapGestureEvent,"flash.events")
22
REGISTER_CLASS_NAME(ProgressEvent,"flash.events")
23
REGISTER_CLASS_NAME(SecurityErrorEvent,"flash.events")
24
REGISTER_CLASS_NAME(StageVideoEvent,"flash.events")
25
26
REGISTER_CLASS_NAME(StatusEvent,"flash.events")
27
REGISTER_CLASS_NAME(TextEvent,"flash.events")
28
REGISTER_CLASS_NAME(TimerEvent,"flash.events")
29
-REGISTER_CLASS_NAME(ContextMenuEvent,"flash.events")
30
+REGISTER_CLASS_NAME(TouchEvent,"flash.events")
31
+REGISTER_CLASS_NAME(TransformGestureEvent,"flash.events")
32
REGISTER_CLASS_NAME(UncaughtErrorEvent,"flash.events")
33
34
//External interface (browser interaction)
35
36
//Net
37
REGISTER_CLASS_NAME(NetConnection,"flash.net")
38
REGISTER_CLASS_NAME(NetStream,"flash.net")
39
+REGISTER_CLASS_NAME(NetStreamAppendBytesAction,"flash.net")
40
REGISTER_CLASS_NAME(NetStreamPlayTransitions,"flash.net")
41
REGISTER_CLASS_NAME(NetStreamPlayOptions,"flash.net")
42
REGISTER_CLASS_NAME(ObjectEncoding,"flash.net")
43
REGISTER_CLASS_NAME(Responder,"flash.net")
44
REGISTER_CLASS_NAME(SharedObject,"flash.net")
45
+REGISTER_CLASS_NAME(SharedObjectFlushStatus,"flash.net")
46
REGISTER_CLASS_NAME(URLLoader,"flash.net")
47
REGISTER_CLASS_NAME(URLLoaderDataFormat,"flash.net")
48
REGISTER_CLASS_NAME(URLRequest,"flash.net")
49
50
REGISTER_CLASS_NAME(EastAsianJustifier,"flash.text.engine")
51
REGISTER_CLASS_NAME(ElementFormat,"flash.text.engine")
52
REGISTER_CLASS_NAME(FontDescription,"flash.text.engine")
53
+REGISTER_CLASS_NAME(FontMetrics,"flash.text.engine")
54
+REGISTER_CLASS_NAME(FontLookup,"flash.text.engine")
55
REGISTER_CLASS_NAME(FontWeight,"flash.text.engine")
56
+REGISTER_CLASS_NAME(Kerning,"flash.text.engine")
57
+REGISTER_CLASS_NAME(LineJustification,"flash.text.engine")
58
REGISTER_CLASS_NAME(SpaceJustifier,"flash.text.engine")
59
+REGISTER_CLASS_NAME(TextBaseline,"flash.text.engine")
60
REGISTER_CLASS_NAME(TextBlock,"flash.text.engine")
61
REGISTER_CLASS_NAME(TextElement,"flash.text.engine")
62
REGISTER_CLASS_NAME(TextJustifier,"flash.text.engine")
63
REGISTER_CLASS_NAME(TextLine,"flash.text.engine")
64
+REGISTER_CLASS_NAME(TextLineValidity,"flash.text.engine")
65
66
//Utils
67
REGISTER_CLASS_NAME(ByteArray,"flash.utils")
68
lightspark.tar.xz/src/asobject.cpp
Changed
81
1
2
}
3
bool ASObject::isConstructed() const
4
{
5
- return traitsInitialized && constructorCalled;
6
+ return traitsInitialized && constructIndicator;
7
}
8
variables_map::variables_map(MemoryAccount* m):
9
Variables(std::less<mapType::key_type>(), reporter_allocator<mapType::value_type>(m)),slots_vars(m)
10
11
{
12
//Initializing an already existing variable
13
LOG(LOG_NOT_IMPLEMENTED,"Variable " << name << "already initialized");
14
- o->decRef();
15
+ if (o != NULL)
16
+ o->decRef();
17
return;
18
}
19
20
21
{
22
if (obj == NULL) // create dynamic object
23
{
24
- if(mainObj->is<Class_base>() &&
25
+ if (type == Type::anyType)
26
+ {
27
+ // type could not be found, so it's stored as an uninitialized variable
28
+ uninitializedVar v;
29
+ mainObj->incRef();
30
+ v.mainObj = mainObj;
31
+ v.mname = mname;
32
+ v.traitKind = traitKind;
33
+ v.typemname = *typemname;
34
+ context->uninitializedVars.push_back(v);
35
+
36
+ obj = getSys()->getUndefinedRef();
37
+ obj = type->coerce(obj);
38
+ }
39
+ else if(mainObj->is<Class_base>() &&
40
mainObj->as<Class_base>()->class_name.getQualifiedName() == typemname->qualifiedString())
41
{
42
// avoid recursive construction
43
44
else
45
{
46
obj = getSys()->getUndefinedRef();
47
+ obj = type->coerce(obj);
48
}
49
}
50
- obj = type->coerce(obj);
51
}
52
assert(traitKind==DECLARED_TRAIT || traitKind==CONSTANT_TRAIT);
53
54
55
}
56
57
ASObject::ASObject(MemoryAccount* m):Variables(m),classdef(NULL),proxyMultiName(NULL),
58
- type(T_OBJECT),traitsInitialized(false),constructorCalled(false),implEnable(true)
59
+ type(T_OBJECT),traitsInitialized(false),constructIndicator(false),implEnable(true)
60
{
61
#ifndef NDEBUG
62
//Stuff only used in debugging
63
64
}
65
66
ASObject::ASObject(Class_base* c):Variables((c)?c->memoryAccount:NULL),classdef(NULL),proxyMultiName(NULL),
67
- type(T_OBJECT),traitsInitialized(false),constructorCalled(false),implEnable(true)
68
+ type(T_OBJECT),traitsInitialized(false),constructIndicator(false),implEnable(true)
69
{
70
setClass(c);
71
#ifndef NDEBUG
72
73
}
74
75
ASObject::ASObject(const ASObject& o):Variables((o.classdef)?o.classdef->memoryAccount:NULL),classdef(NULL),proxyMultiName(NULL),
76
- type(o.type),traitsInitialized(false),constructorCalled(false),implEnable(true)
77
+ type(o.type),traitsInitialized(false),constructIndicator(false),implEnable(true)
78
{
79
if(o.classdef)
80
setClass(o.classdef);
81
lightspark.tar.xz/src/asobject.h
Changed
28
1
2
virtual ~ASObject();
3
SWFOBJECT_TYPE type;
4
bool traitsInitialized:1;
5
- bool constructorCalled:1;
6
+ bool constructIndicator:1;
7
void serializeDynamicProperties(ByteArray* out, std::map<tiny_string, uint32_t>& stringMap,
8
std::map<const ASObject*, uint32_t>& objMap,
9
std::map<const Class_base*, uint32_t> traitsMap) const;
10
11
bool isPrimitive() const;
12
13
bool isInitialized() const {return traitsInitialized;}
14
- bool isConstructed() const;
15
+ virtual bool isConstructed() const;
16
17
/* helper functions for calling the "valueOf" and
18
* "toString" AS-functions which may be members of this
19
20
void applyProxyProperty(multiname &name);
21
22
void dumpVariables() { Variables.dumpVariables(); }
23
+
24
+ void setConstructIndicator() { constructIndicator = true; }
25
};
26
27
class Number;
28
lightspark.tar.xz/src/backends/netutils.h
Changed
20
1
2
//-- DOWNLOADED DATA
3
//File length (can change in certain cases, resulting in reallocation of the buffer (non-cached))
4
uint32_t length;
5
- //Append data to the internal buffer
6
- void append(uint8_t* buffer, uint32_t length);
7
//Set the length of the downloaded file, can be called multiple times to accomodate a growing file
8
void setLength(uint32_t _length);
9
public:
10
11
bool isRedirected() { return redirected; }
12
const tiny_string& getOriginalURL() { return originalURL; }
13
uint16_t getRequestStatus() { return requestStatus; }
14
-
15
+ //Append data to the internal buffer
16
+ void append(uint8_t* buffer, uint32_t length);
17
};
18
19
class ThreadedDownloader : public Downloader, public IThreadJob
20
lightspark.tar.xz/src/scripting/abc.cpp
Changed
105
1
2
builtin->registerBuiltin("ContentElement","flash.text.engine",Class<ContentElement>::getRef());
3
builtin->registerBuiltin("ElementFormat","flash.text.engine",Class<ElementFormat>::getRef());
4
builtin->registerBuiltin("FontDescription","flash.text.engine",Class<FontDescription>::getRef());
5
+ builtin->registerBuiltin("FontMetrics","flash.text.engine",Class<FontMetrics>::getRef());
6
+ builtin->registerBuiltin("FontLookup","flash.text.engine",Class<FontLookup>::getRef());
7
builtin->registerBuiltin("FontWeight","flash.text.engine",Class<FontWeight>::getRef());
8
+ builtin->registerBuiltin("Kerning","flash.text.engine",Class<Kerning>::getRef());
9
+ builtin->registerBuiltin("LineJustification","flash.text.engine",Class<LineJustification>::getRef());
10
+ builtin->registerBuiltin("TextBaseline","flash.text.engine",Class<TextBaseline>::getRef());
11
builtin->registerBuiltin("TextBlock","flash.text.engine",Class<TextBlock>::getRef());
12
builtin->registerBuiltin("TextElement","flash.text.engine",Class<TextElement>::getRef());
13
builtin->registerBuiltin("TextLine","flash.text.engine",Class<TextLine>::getRef());
14
+ builtin->registerBuiltin("TextLineValidity","flash.text.engine",Class<TextLineValidity>::getRef());
15
builtin->registerBuiltin("TextJustifier","flash.text.engine",Class<TextJustifier>::getRef());
16
builtin->registerBuiltin("SpaceJustifier","flash.text.engine",Class<SpaceJustifier>::getRef());
17
builtin->registerBuiltin("EastAsianJustifier","flash.text.engine",Class<EastAsianJustifier>::getRef());
18
19
builtin->registerBuiltin("clearInterval","flash.utils",_MR(Class<IFunction>::getFunction(clearInterval)));
20
builtin->registerBuiltin("clearTimeout","flash.utils",_MR(Class<IFunction>::getFunction(clearTimeout)));
21
builtin->registerBuiltin("describeType","flash.utils",_MR(Class<IFunction>::getFunction(describeType)));
22
+ builtin->registerBuiltin("escapeMultiByte","flash.utils",_MR(Class<IFunction>::getFunction(escapeMultiByte)));
23
+ builtin->registerBuiltin("unescapeMultiByte","flash.utils",_MR(Class<IFunction>::getFunction(unescapeMultiByte)));
24
builtin->registerBuiltin("IExternalizable","flash.utils",InterfaceClass<IExternalizable>::getRef());
25
builtin->registerBuiltin("IDataInput","flash.utils",InterfaceClass<IDataInput>::getRef());
26
builtin->registerBuiltin("IDataOutput","flash.utils",InterfaceClass<IDataOutput>::getRef());
27
28
builtin->registerBuiltin("DRMStatusEvent","flash.events",Class<DRMStatusEvent>::getRef());
29
builtin->registerBuiltin("StageVideoEvent","flash.events",Class<StageVideoEvent>::getRef());
30
builtin->registerBuiltin("StageVideoAvailabilityEvent","flash.events",Class<StageVideoAvailabilityEvent>::getRef());
31
- builtin->registerBuiltin("TouchEvent","flash.events",Class<ASObject>::getStubClass(QName("TouchEvent","flash.events")));
32
- builtin->registerBuiltin("GestureEvent","flash.events",Class<ASObject>::getStubClass(QName("GestureEvent","flash.events")));
33
- builtin->registerBuiltin("PressAndTapGestureEvent","flash.events",Class<ASObject>::getStubClass(QName("PressAndTapGestureEvent","flash.events")));
34
- builtin->registerBuiltin("TransformGestureEvent","flash.events",Class<ASObject>::getStubClass(QName("TransformGestureEvent","flash.events")));
35
+ builtin->registerBuiltin("TouchEvent","flash.events",Class<TouchEvent>::getRef());
36
+ builtin->registerBuiltin("GestureEvent","flash.events",Class<GestureEvent>::getRef());
37
+ builtin->registerBuiltin("PressAndTapGestureEvent","flash.events",Class<PressAndTapGestureEvent>::getRef());
38
+ builtin->registerBuiltin("TransformGestureEvent","flash.events",Class<TransformGestureEvent>::getRef());
39
builtin->registerBuiltin("ContextMenuEvent","flash.events",Class<ContextMenuEvent>::getRef());
40
builtin->registerBuiltin("UncaughtErrorEvent","flash.events",Class<UncaughtErrorEvent>::getRef());
41
42
43
builtin->registerBuiltin("LocalConnection","flash.net",Class<ASObject>::getStubClass(QName("LocalConnection","flash.net")));
44
builtin->registerBuiltin("NetConnection","flash.net",Class<NetConnection>::getRef());
45
builtin->registerBuiltin("NetStream","flash.net",Class<NetStream>::getRef());
46
+ builtin->registerBuiltin("NetStreamAppendBytesAction","flash.net",Class<NetStreamAppendBytesAction>::getRef());
47
builtin->registerBuiltin("NetStreamPlayOptions","flash.net",Class<NetStreamPlayOptions>::getRef());
48
builtin->registerBuiltin("NetStreamPlayTransitions","flash.net",Class<NetStreamPlayTransitions>::getRef());
49
builtin->registerBuiltin("URLLoader","flash.net",Class<URLLoader>::getRef());
50
51
builtin->registerBuiltin("URLRequestMethod","flash.net",Class<URLRequestMethod>::getRef());
52
builtin->registerBuiltin("URLVariables","flash.net",Class<URLVariables>::getRef());
53
builtin->registerBuiltin("SharedObject","flash.net",Class<SharedObject>::getRef());
54
+ builtin->registerBuiltin("SharedObjectFlushStatus","flash.net",Class<SharedObjectFlushStatus>::getRef());
55
builtin->registerBuiltin("ObjectEncoding","flash.net",Class<ObjectEncoding>::getRef());
56
builtin->registerBuiltin("Socket","flash.net",Class<ASObject>::getStubClass(QName("Socket","flash.net")));
57
builtin->registerBuiltin("Responder","flash.net",Class<Responder>::getRef());
58
59
Class_inherit* derived_class_tmp=static_cast<Class_inherit*>(derived_class);
60
if(derived_class_tmp->isBinded())
61
{
62
- LOG(LOG_ERROR, "Class already binded to a tag. Not binding");
63
+ LOG(LOG_ERROR, "Class already binded to a tag. Not binding:"<<s<< " class:"<<derived_class_tmp->getQualifiedClassName());
64
return NULL;
65
}
66
return derived_class_tmp;
67
68
ret->decRef();
69
70
entry->decRef();
71
+
72
+ // initialize vars where type was not known during script init
73
+ // this may happen for variables of private classes defined in this script
74
+ for (auto it = uninitializedVars.begin(); it != uninitializedVars.end(); it++)
75
+ {
76
+ uninitializedVar v = *it;
77
+ LOG(LOG_CALLS,"initialize uninitialized var:"<< v.mainObj->toDebugString()<<" "<< v.mname << " " <<v.typemname);
78
+ v.mainObj->initializeVariableByMultiname(v.mname,NULL,&v.typemname,this,v.traitKind);
79
+ v.mainObj->decRef();
80
+ }
81
+ uninitializedVars.clear();
82
LOG(LOG_CALLS, "Finished script init for script " << i );
83
}
84
85
86
//do interfaces have cinit methods?
87
//TODO: call them, set constructor property, do something
88
if(classes[t->classi].cinit != 0)
89
- LOG(LOG_NOT_IMPLEMENTED,"Interface cinit (static):"<<className);
90
+ {
91
+ method_info* m=&methods[classes[t->classi].cinit];
92
+ if (m->body)
93
+ LOG(LOG_NOT_IMPLEMENTED,"Interface cinit (static):"<<className);
94
+ }
95
if(instances[t->classi].init != 0)
96
- LOG(LOG_NOT_IMPLEMENTED,"Interface cinit (constructor):"<<className);
97
+ {
98
+ method_info* m=&methods[instances[t->classi].init];
99
+ if (m->body)
100
+ LOG(LOG_NOT_IMPLEMENTED,"Interface cinit (constructor):"<<className);
101
+ }
102
ret = ci;
103
}
104
else
105
lightspark.tar.xz/src/scripting/abc.h
Changed
27
1
2
ARGS_TYPE type;
3
};
4
5
+struct uninitializedVar
6
+{
7
+ uninitializedVar():mname(NULL),mainObj(NULL),typemname(NULL),traitKind(NO_CREATE_TRAIT) {}
8
+ multiname mname;
9
+ ASObject* mainObj;
10
+ multiname typemname;
11
+ TRAIT_KIND traitKind;
12
+};
13
+
14
class ABCContext
15
{
16
friend class ABCVm;
17
18
uint32_t namespaceBaseId;
19
20
std::vector<bool> hasRunScriptInit;
21
+ // list of vars that have to be initialized after script init is done
22
+ std::vector<uninitializedVar> uninitializedVars;
23
+
24
/**
25
Construct and insert in the a object a given trait
26
@param obj the tarhget object
27
lightspark.tar.xz/src/scripting/abc_opcodes.cpp
Changed
47
1
2
}
3
}
4
5
- LOG(LOG_NOT_IMPLEMENTED,"callProperty: " << name->normalizedName() << " not found on " << obj->toDebugString());
6
+ LOG(LOG_NOT_IMPLEMENTED,"callProperty: " << name->qualifiedString() << " not found on " << obj->toDebugString());
7
if(keepReturn)
8
th->runtime_stack_push(getSys()->getUndefinedRef());
9
10
11
namearg->setProxyProperty(*name);
12
proxyArgs[1]=namearg;
13
LOG(LOG_ERROR,"Proxy::getDescend:"<<namearg->toDebugString()<<*name);
14
-
15
+
16
//We now suppress special handling
17
LOG(LOG_CALLS,_("Proxy::callProperty"));
18
f->incRef();
19
20
ret->context=th->context;
21
22
//Null is a "valid" base class
23
- if(baseClass->getObjectType()!=T_NULL)
24
+ // Undefined is used in private Classes that will be defined later
25
+ if(baseClass->getObjectType()!=T_NULL && baseClass->getObjectType()!=T_UNDEFINED)
26
{
27
assert_and_throw(baseClass->is<Class_base>());
28
Class_base* base = baseClass->as<Class_base>();
29
30
for(unsigned int i=0;i<cur->trait_count;i++)
31
{
32
int kind=cur->traits[i].kind&0xf;
33
- if(kind==traits_info::Method || kind==traits_info::Setter || kind==traits_info::Getter)
34
+ if(kind==traits_info::Method || kind==traits_info::Setter || kind==traits_info::Getter || kind==traits_info::Slot)
35
th->context->buildTrait(ret,&cur->traits[i],true);
36
}
37
38
39
}
40
assert_and_throw(ret2->is<Undefined>());
41
ret2->decRef();
42
- LOG(LOG_CALLS,_("End of Class init ") << ret);
43
+ LOG(LOG_CALLS,_("End of Class init ") << *mname <<" " <<ret);
44
th->runtime_stack_push(ret);
45
cinit->decRef();
46
47
lightspark.tar.xz/src/scripting/flash/display/flashdisplay.cpp
Changed
66
1
2
LoaderInfo::LoaderInfo(Class_base* c):EventDispatcher(c),applicationDomain(NullRef),securityDomain(NullRef),
3
contentType("application/x-shockwave-flash"),
4
bytesLoaded(0),bytesTotal(0),sharedEvents(NullRef),
5
- loader(NullRef),bytesData(NullRef),loadStatus(STARTED),actionScriptVersion(3),childAllowsParent(true)
6
+ loader(NullRef),bytesData(NullRef),loadStatus(STARTED),actionScriptVersion(3),swfVersion(0),childAllowsParent(true)
7
{
8
}
9
10
LoaderInfo::LoaderInfo(Class_base* c, _R<Loader> l):EventDispatcher(c),applicationDomain(NullRef),securityDomain(NullRef),
11
contentType("application/x-shockwave-flash"),
12
bytesLoaded(0),bytesTotal(0),sharedEvents(NullRef),
13
- loader(l),bytesData(NullRef),loadStatus(STARTED),actionScriptVersion(3),childAllowsParent(true)
14
+ loader(l),bytesData(NullRef),loadStatus(STARTED),actionScriptVersion(3),swfVersion(0),childAllowsParent(true)
15
{
16
}
17
18
19
c->setDeclaredMethodByQName("height","",Class<IFunction>::getFunction(_getHeight),GETTER_METHOD,true);
20
REGISTER_GETTER(c,parameters);
21
REGISTER_GETTER(c,actionScriptVersion);
22
+ REGISTER_GETTER(c,swfVersion);
23
REGISTER_GETTER(c,childAllowsParent);
24
REGISTER_GETTER(c,contentType);
25
}
26
27
ASFUNCTIONBODY_GETTER(LoaderInfo,actionScriptVersion);
28
ASFUNCTIONBODY_GETTER(LoaderInfo,childAllowsParent);
29
ASFUNCTIONBODY_GETTER(LoaderInfo,contentType);
30
+ASFUNCTIONBODY_GETTER(LoaderInfo,swfVersion);
31
32
void LoaderInfo::buildTraits(ASObject* o)
33
{
34
35
return;
36
if(!loader.isNull() && obj==waitedObject)
37
loader->setContent(obj);
38
- if (bytesData.isNull())
39
- bytesData = _NR<ByteArray>(Class<ByteArray>::getInstanceS());
40
- bytesData->writeObject(obj.getPtr());
41
sendInit();
42
waitedObject.reset();
43
}
44
45
ASFUNCTIONBODY(LoaderInfo,_getBytes)
46
{
47
LoaderInfo* th=static_cast<LoaderInfo*>(obj);
48
+ if (th->bytesData.isNull())
49
+ th->bytesData = _NR<ByteArray>(Class<ByteArray>::getInstanceS());
50
+ if (!th->loader->getContent().isNull())
51
+ th->bytesData->writeObject(th->loader->getContent().getPtr());
52
+
53
return th->bytesData.getPtr();
54
}
55
56
57
58
// Wait for some data, making sure our check for failure is working
59
sbuf->sgetc(); // peek one byte
60
+ if(downloader->getRequestStatus() == 204) // empty answer
61
+ return;
62
+
63
if(cache->hasFailed()) //Check to see if the download failed for some reason
64
{
65
LOG(LOG_ERROR, "Loader::execute(): Download of URL failed: " << url);
66
lightspark.tar.xz/src/scripting/flash/display/flashdisplay.h
Changed
9
1
2
void sendInit();
3
public:
4
ASPROPERTY_GETTER(uint32_t,actionScriptVersion);
5
+ ASPROPERTY_GETTER(uint32_t,swfVersion);
6
ASPROPERTY_GETTER(bool, childAllowsParent);
7
LoaderInfo(Class_base* c);
8
LoaderInfo(Class_base* c, _R<Loader> l);
9
lightspark.tar.xz/src/scripting/flash/events/flashevents.cpp
Changed
40
1
2
c->setVariableByQName("MENU_ITEM_SELECT","",Class<ASString>::getInstanceS("menuItemSelect"),DECLARED_TRAIT);
3
c->setVariableByQName("MENU_SELECT","",Class<ASString>::getInstanceS("menuSelect"),DECLARED_TRAIT);
4
}
5
+
6
+
7
+void TouchEvent::sinit(Class_base* c)
8
+{
9
+ CLASS_SETUP(c, Event, _constructor, CLASS_SEALED);
10
+ c->setVariableByQName("TOUCH_BEGIN","",Class<ASString>::getInstanceS("touchBegin"),DECLARED_TRAIT);
11
+ c->setVariableByQName("TOUCH_END","",Class<ASString>::getInstanceS("touchEnd"),DECLARED_TRAIT);
12
+ c->setVariableByQName("TOUCH_MOVE","",Class<ASString>::getInstanceS("touchMove"),DECLARED_TRAIT);
13
+ c->setVariableByQName("TOUCH_OUT","",Class<ASString>::getInstanceS("touchOut"),DECLARED_TRAIT);
14
+ c->setVariableByQName("TOUCH_OVER","",Class<ASString>::getInstanceS("touchOver"),DECLARED_TRAIT);
15
+ c->setVariableByQName("TOUCH_ROLL_OUT","",Class<ASString>::getInstanceS("touchRollOut"),DECLARED_TRAIT);
16
+ c->setVariableByQName("TOUCH_ROLL_OVER","",Class<ASString>::getInstanceS("touchRollOver"),DECLARED_TRAIT);
17
+ c->setVariableByQName("TOUCH_TAP","",Class<ASString>::getInstanceS("touchTap"),DECLARED_TRAIT);
18
+}
19
+
20
+void GestureEvent::sinit(Class_base* c)
21
+{
22
+ CLASS_SETUP(c, Event, _constructor, CLASS_SEALED);
23
+ c->setVariableByQName("GESTURE_TWO_FINGER_TAP","",Class<ASString>::getInstanceS("gestureTwoFingerTap"),DECLARED_TRAIT);
24
+}
25
+
26
+void PressAndTapGestureEvent::sinit(Class_base* c)
27
+{
28
+ CLASS_SETUP(c, GestureEvent, _constructor, CLASS_SEALED);
29
+ c->setVariableByQName("GESTURE_PRESS_AND_TAP","",Class<ASString>::getInstanceS("gesturePressAndTap"),DECLARED_TRAIT);
30
+}
31
+
32
+void TransformGestureEvent::sinit(Class_base* c)
33
+{
34
+ CLASS_SETUP(c, GestureEvent, _constructor, CLASS_SEALED);
35
+ c->setVariableByQName("GESTURE_PAN","",Class<ASString>::getInstanceS("gesturePan"),DECLARED_TRAIT);
36
+ c->setVariableByQName("GESTURE_ROTATE","",Class<ASString>::getInstanceS("gestureRotate"),DECLARED_TRAIT);
37
+ c->setVariableByQName("GESTURE_SWIPE","",Class<ASString>::getInstanceS("gestureSwipe"),DECLARED_TRAIT);
38
+ c->setVariableByQName("GESTURE_ZOOM","",Class<ASString>::getInstanceS("gestureZoom"),DECLARED_TRAIT);
39
+}
40
lightspark.tar.xz/src/scripting/flash/events/flashevents.h
Changed
39
1
2
static void buildTraits(ASObject* o) {}
3
};
4
5
+class TouchEvent: public Event
6
+{
7
+public:
8
+ TouchEvent(Class_base* c) : Event(c, "TouchEvent") {}
9
+ static void sinit(Class_base*);
10
+ static void buildTraits(ASObject* o) {}
11
+};
12
+
13
+class GestureEvent: public Event
14
+{
15
+public:
16
+ GestureEvent(Class_base* c, const tiny_string& t = "GestureEvent") : Event(c, t) {}
17
+ static void sinit(Class_base*);
18
+ static void buildTraits(ASObject* o) {}
19
+};
20
+
21
+class PressAndTapGestureEvent: public GestureEvent
22
+{
23
+public:
24
+ PressAndTapGestureEvent(Class_base* c) : GestureEvent(c, "PressAndTapGestureEvent") {}
25
+ static void sinit(Class_base*);
26
+ static void buildTraits(ASObject* o) {}
27
+};
28
+class TransformGestureEvent: public GestureEvent
29
+{
30
+public:
31
+ TransformGestureEvent(Class_base* c) : GestureEvent(c, "TransformGestureEvent") {}
32
+ static void sinit(Class_base*);
33
+ static void buildTraits(ASObject* o) {}
34
+};
35
+
36
+
37
}
38
#endif /* SCRIPTING_FLASH_EVENTS_FLASHEVENTS_H */
39
lightspark.tar.xz/src/scripting/flash/net/flashnet.cpp
Changed
80
1
2
c->setVariableByQName("BINARY","",Class<ASString>::getInstanceS("binary"),DECLARED_TRAIT);
3
}
4
5
+void SharedObjectFlushStatus::sinit(Class_base* c)
6
+{
7
+ CLASS_SETUP_NO_CONSTRUCTOR(c, ASObject, CLASS_FINAL);
8
+ c->setVariableByQName("FLUSHED","",Class<ASString>::getInstanceS("flushed"),DECLARED_TRAIT);
9
+ c->setVariableByQName("PENDING","",Class<ASString>::getInstanceS("pending"),DECLARED_TRAIT);
10
+}
11
+
12
SharedObject::SharedObject(Class_base* c):EventDispatcher(c)
13
{
14
data=_MR(new_asobject());
15
16
CLASS_SETUP_NO_CONSTRUCTOR(c, EventDispatcher, CLASS_SEALED);
17
c->setDeclaredMethodByQName("getLocal","",Class<IFunction>::getFunction(getLocal),NORMAL_METHOD,false);
18
REGISTER_GETTER(c,data);
19
-};
20
+}
21
22
ASFUNCTIONBODY_GETTER(SharedObject,data);
23
24
25
soundTransform = _MNR(Class<SoundTransform>::getInstanceS());
26
}
27
28
+void NetStreamAppendBytesAction::sinit(Class_base* c)
29
+{
30
+ CLASS_SETUP_NO_CONSTRUCTOR(c, ASObject, CLASS_FINAL);
31
+ c->setVariableByQName("END_SEQUENCE","",Class<ASString>::getInstanceS("endSequence"),DECLARED_TRAIT);
32
+ c->setVariableByQName("RESET_BEGIN","",Class<ASString>::getInstanceS("resetBegin"),DECLARED_TRAIT);
33
+ c->setVariableByQName("RESET_SEEK","",Class<ASString>::getInstanceS("resetSeek"),DECLARED_TRAIT);
34
+}
35
+
36
void NetStream::finalize()
37
{
38
EventDispatcher::finalize();
39
40
c->setDeclaredMethodByQName("checkPolicyFile","",Class<IFunction>::getFunction(_getCheckPolicyFile),GETTER_METHOD,true);
41
c->setDeclaredMethodByQName("checkPolicyFile","",Class<IFunction>::getFunction(_setCheckPolicyFile),SETTER_METHOD,true);
42
c->setDeclaredMethodByQName("attach","",Class<IFunction>::getFunction(attach),NORMAL_METHOD,true);
43
+ c->setDeclaredMethodByQName("appendBytes","",Class<IFunction>::getFunction(appendBytes),NORMAL_METHOD,true);
44
+ c->setDeclaredMethodByQName("appendBytesAction","",Class<IFunction>::getFunction(appendBytesAction),NORMAL_METHOD,true);
45
REGISTER_GETTER(c, backBufferLength);
46
REGISTER_GETTER_SETTER(c, backBufferTime);
47
REGISTER_GETTER(c, bufferLength);
48
49
ASFUNCTIONBODY(NetStream,seek)
50
{
51
//NetStream* th=Class<NetStream>::cast(obj);
52
+ LOG(LOG_NOT_IMPLEMENTED,"NetStream.seek is not implemented yet");
53
assert_and_throw(argslen == 1);
54
return NULL;
55
}
56
57
th->connection=netConnection;
58
return NULL;
59
}
60
+ASFUNCTIONBODY(NetStream,appendBytes)
61
+{
62
+ NetStream* th=Class<NetStream>::cast(obj);
63
+ _NR<ByteArray> bytearray;
64
+ ARG_UNPACK(bytearray);
65
+
66
+ if(!bytearray.isNull())
67
+ th->downloader->append(bytearray->getBuffer(bytearray->getLength(),false),bytearray->getLength());
68
+ return NULL;
69
+}
70
+ASFUNCTIONBODY(NetStream,appendBytesAction)
71
+{
72
+ //NetStream* th=Class<NetStream>::cast(obj);
73
+ LOG(LOG_NOT_IMPLEMENTED,"NetStream.appendBytesAction is not implemented yet");
74
+ assert_and_throw(argslen == 1);
75
+ return NULL;
76
+}
77
78
//Tick is called from the timer thread, this happens only if a decoder is available
79
void NetStream::tick()
80
lightspark.tar.xz/src/scripting/flash/net/flashnet.h
Changed
40
1
2
static void sinit(Class_base*);
3
};
4
5
+
6
+class SharedObjectFlushStatus: public ASObject
7
+{
8
+public:
9
+ SharedObjectFlushStatus(Class_base* c):ASObject(c){}
10
+ static void sinit(Class_base*);
11
+};
12
+
13
class SharedObject: public EventDispatcher
14
{
15
public:
16
17
ASPROPERTY_GETTER_SETTER(NullableRef<ASObject>,client);
18
};
19
20
+class NetStreamAppendBytesAction: public ASObject
21
+{
22
+public:
23
+ NetStreamAppendBytesAction(Class_base* c):ASObject(c){}
24
+ static void sinit(Class_base*);
25
+};
26
+
27
+
28
class SoundTransform;
29
class NetStream: public EventDispatcher, public IThreadJob, public ITickJob
30
{
31
32
ASFUNCTION(_getCheckPolicyFile);
33
ASFUNCTION(_setCheckPolicyFile);
34
ASFUNCTION(attach);
35
+ ASFUNCTION(appendBytes);
36
+ ASFUNCTION(appendBytesAction);
37
ASPROPERTY_GETTER(number_t, backBufferLength);
38
ASPROPERTY_GETTER_SETTER(number_t, backBufferTime);
39
ASPROPERTY_GETTER(number_t, bufferLength);
40
lightspark.tar.xz/src/scripting/flash/system/flashsystem.cpp
Changed
11
1
2
LOG(LOG_CALLS,_("Looking for definition of ") << name);
3
ASObject* target;
4
ASObject* o=th->getVariableAndTargetByMultiname(name,target);
5
- assert_and_throw(o);
6
+ if(o == NULL)
7
+ throwError<ReferenceError>(kClassNotFoundError,name.normalizedName());
8
9
//TODO: specs says that also namespaces and function may be returned
10
assert_and_throw(o->getObjectType()==T_CLASS);
11
lightspark.tar.xz/src/scripting/flash/text/flashtextengine.cpp
Changed
402
1
2
void ContentElement::sinit(Class_base* c)
3
{
4
CLASS_SETUP(c, ASObject, _constructorNotInstantiatable, CLASS_SEALED);
5
+ REGISTER_GETTER_SETTER(c,elementFormat);
6
+}
7
+ASFUNCTIONBODY_GETTER_SETTER(ContentElement,elementFormat)
8
+
9
+ElementFormat::ElementFormat(Class_base *c): ASObject(c),
10
+ alignmentBaseline("useDominantBaseline"),
11
+ alpha(1.0),
12
+ baselineShift(0.0),
13
+ breakOpportunity("auto"),
14
+ color(0x000000),
15
+ digitCase("default"),
16
+ digitWidth("default"),
17
+ dominantBaseline("roman"),
18
+ fontDescription(NULL),
19
+ fontSize(12.0),
20
+ kerning("on"),
21
+ ligatureLevel("common"),
22
+ locale("en"),
23
+ locked(false),
24
+ textRotation("auto"),
25
+ trackingLeft(0.0),
26
+ trackingRight(0.0),
27
+ typographicCase("default")
28
+{
29
+
30
}
31
32
void ElementFormat::sinit(Class_base* c)
33
{
34
CLASS_SETUP(c, ASObject, _constructor, CLASS_FINAL | CLASS_SEALED);
35
c->setVariableByQName("GRAPHIC_ELEMENT","",abstract_ui(0xFDEF),CONSTANT_TRAIT);
36
+ REGISTER_GETTER_SETTER(c,alignmentBaseline);
37
+ REGISTER_GETTER_SETTER(c,alpha);
38
+ REGISTER_GETTER_SETTER(c,baselineShift);
39
+ REGISTER_GETTER_SETTER(c,breakOpportunity);
40
+ REGISTER_GETTER_SETTER(c,color);
41
+ REGISTER_GETTER_SETTER(c,digitCase);
42
+ REGISTER_GETTER_SETTER(c,digitWidth);
43
+ REGISTER_GETTER_SETTER(c,dominantBaseline);
44
+ REGISTER_GETTER_SETTER(c,fontDescription);
45
+ REGISTER_GETTER_SETTER(c,fontSize);
46
+ REGISTER_GETTER_SETTER(c,kerning);
47
+ REGISTER_GETTER_SETTER(c,ligatureLevel);
48
+ REGISTER_GETTER_SETTER(c,locale);
49
+ REGISTER_GETTER_SETTER(c,locked);
50
+ REGISTER_GETTER_SETTER(c,textRotation);
51
+ REGISTER_GETTER_SETTER(c,trackingLeft);
52
+ REGISTER_GETTER_SETTER(c,trackingRight);
53
+ REGISTER_GETTER_SETTER(c,typographicCase);
54
}
55
+ASFUNCTIONBODY_GETTER_SETTER(ElementFormat,alignmentBaseline)
56
+ASFUNCTIONBODY_GETTER_SETTER(ElementFormat,alpha)
57
+ASFUNCTIONBODY_GETTER_SETTER(ElementFormat,baselineShift)
58
+ASFUNCTIONBODY_GETTER_SETTER(ElementFormat,breakOpportunity)
59
+ASFUNCTIONBODY_GETTER_SETTER(ElementFormat,color)
60
+ASFUNCTIONBODY_GETTER_SETTER(ElementFormat,digitCase)
61
+ASFUNCTIONBODY_GETTER_SETTER(ElementFormat,digitWidth)
62
+ASFUNCTIONBODY_GETTER_SETTER(ElementFormat,dominantBaseline)
63
+ASFUNCTIONBODY_GETTER_SETTER(ElementFormat,fontDescription)
64
+ASFUNCTIONBODY_GETTER_SETTER(ElementFormat,fontSize)
65
+ASFUNCTIONBODY_GETTER_SETTER(ElementFormat,kerning)
66
+ASFUNCTIONBODY_GETTER_SETTER(ElementFormat,ligatureLevel)
67
+ASFUNCTIONBODY_GETTER_SETTER(ElementFormat,locale)
68
+ASFUNCTIONBODY_GETTER_SETTER(ElementFormat,locked)
69
+ASFUNCTIONBODY_GETTER_SETTER(ElementFormat,textRotation)
70
+ASFUNCTIONBODY_GETTER_SETTER(ElementFormat,trackingLeft)
71
+ASFUNCTIONBODY_GETTER_SETTER(ElementFormat,trackingRight)
72
+ASFUNCTIONBODY_GETTER_SETTER(ElementFormat,typographicCase)
73
74
ASFUNCTIONBODY(ElementFormat, _constructor)
75
{
76
- LOG(LOG_NOT_IMPLEMENTED, "ElementFormat class not implemented");
77
+ ElementFormat* th=static_cast<ElementFormat*>(obj);
78
+ ARG_UNPACK(th->fontDescription, NullRef)(th->fontSize, 12.0)(th->color, 0x000000) (th->alpha, 1.0)(th->textRotation, "auto")
79
+ (th->dominantBaseline, "roman") (th->alignmentBaseline, "useDominantBaseline") (th->baselineShift, 0.0)(th->kerning, "on")
80
+ (th->trackingRight, 0.0)(th->trackingLeft, 0.0)(th->locale, "en")(th->breakOpportunity, "auto")(th->digitCase, "default")
81
+ (th->digitWidth, "default")(th->ligatureLevel, "common")(th->typographicCase, "default");
82
return NULL;
83
}
84
85
+void FontLookup::sinit(Class_base* c)
86
+{
87
+ CLASS_SETUP_NO_CONSTRUCTOR(c, ASObject, CLASS_FINAL | CLASS_SEALED);
88
+ c->setVariableByQName("DEVICE","",Class<ASString>::getInstanceS("device"),CONSTANT_TRAIT);
89
+ c->setVariableByQName("EMBEDDED_CFF","",Class<ASString>::getInstanceS("embeddedCFF"),CONSTANT_TRAIT);
90
+}
91
+
92
void FontDescription::sinit(Class_base* c)
93
{
94
CLASS_SETUP(c, ASObject, _constructor, CLASS_FINAL | CLASS_SEALED);
95
+ REGISTER_GETTER_SETTER(c,cffHinting);
96
+ REGISTER_GETTER_SETTER(c,fontLookup);
97
+ REGISTER_GETTER_SETTER(c,fontName);
98
+ REGISTER_GETTER_SETTER(c,fontPosture);
99
+ REGISTER_GETTER_SETTER(c,fontWeight);
100
+ REGISTER_GETTER_SETTER(c,locked);
101
+ REGISTER_GETTER_SETTER(c,renderingMode);
102
}
103
104
ASFUNCTIONBODY(FontDescription, _constructor)
105
106
LOG(LOG_NOT_IMPLEMENTED, "FontDescription class not implemented");
107
return NULL;
108
}
109
+ASFUNCTIONBODY_GETTER_SETTER(FontDescription,cffHinting)
110
+ASFUNCTIONBODY_GETTER_SETTER(FontDescription,fontLookup)
111
+ASFUNCTIONBODY_GETTER_SETTER(FontDescription,fontName)
112
+ASFUNCTIONBODY_GETTER_SETTER(FontDescription,fontPosture)
113
+ASFUNCTIONBODY_GETTER_SETTER(FontDescription,fontWeight)
114
+ASFUNCTIONBODY_GETTER_SETTER(FontDescription,locked)
115
+ASFUNCTIONBODY_GETTER_SETTER(FontDescription,renderingMode)
116
117
void FontWeight::sinit(Class_base* c)
118
{
119
120
c->setVariableByQName("NORMAL","",Class<ASString>::getInstanceS("normal"),CONSTANT_TRAIT);
121
}
122
123
+void FontMetrics::sinit(Class_base* c)
124
+{
125
+ CLASS_SETUP(c, ASObject,_constructor, CLASS_FINAL);
126
+}
127
+ASFUNCTIONBODY(FontMetrics, _constructor)
128
+{
129
+ //FontMetrics* th=static_cast<FontMetrics*>(obj);
130
+ LOG(LOG_NOT_IMPLEMENTED, "FontMetrics is a stub");
131
+ return NULL;
132
+}
133
+
134
+void Kerning::sinit(Class_base* c)
135
+{
136
+ CLASS_SETUP_NO_CONSTRUCTOR(c, ASObject, CLASS_FINAL | CLASS_SEALED);
137
+ c->setVariableByQName("AUTO","",Class<ASString>::getInstanceS("auto"),CONSTANT_TRAIT);
138
+ c->setVariableByQName("OFF","",Class<ASString>::getInstanceS("off"),CONSTANT_TRAIT);
139
+ c->setVariableByQName("ON","",Class<ASString>::getInstanceS("on"),CONSTANT_TRAIT);
140
+}
141
+
142
+void LineJustification::sinit(Class_base* c)
143
+{
144
+ CLASS_SETUP_NO_CONSTRUCTOR(c, ASObject, CLASS_FINAL | CLASS_SEALED);
145
+ c->setVariableByQName("ALL_BUT_LAST","",Class<ASString>::getInstanceS("allButLast"),CONSTANT_TRAIT);
146
+ c->setVariableByQName("ALL_BUT_MANDATORY_BREAK","",Class<ASString>::getInstanceS("allButMandatoryBreak"),CONSTANT_TRAIT);
147
+ c->setVariableByQName("ALL_INCLUDING_LAST","",Class<ASString>::getInstanceS("allIncludingLast"),CONSTANT_TRAIT);
148
+ c->setVariableByQName("UNJUSTIFIED","",Class<ASString>::getInstanceS("unjustified"),CONSTANT_TRAIT);
149
+}
150
+void TextBaseline::sinit(Class_base* c)
151
+{
152
+ CLASS_SETUP_NO_CONSTRUCTOR(c, ASObject, CLASS_FINAL | CLASS_SEALED);
153
+ c->setVariableByQName("ASCENT","",Class<ASString>::getInstanceS("ascent"),CONSTANT_TRAIT);
154
+ c->setVariableByQName("DESCENT","",Class<ASString>::getInstanceS("descent"),CONSTANT_TRAIT);
155
+ c->setVariableByQName("IDEOGRAPHIC_BOTTOM","",Class<ASString>::getInstanceS("ideographicBottom"),CONSTANT_TRAIT);
156
+ c->setVariableByQName("IDEOGRAPHIC_CENTER","",Class<ASString>::getInstanceS("ideographicCenter"),CONSTANT_TRAIT);
157
+ c->setVariableByQName("IDEOGRAPHIC_TOP","",Class<ASString>::getInstanceS("ideographicTop"),CONSTANT_TRAIT);
158
+ c->setVariableByQName("ROMAN","",Class<ASString>::getInstanceS("roman"),CONSTANT_TRAIT);
159
+ c->setVariableByQName("USE_DOMINANT_BASELINE","",Class<ASString>::getInstanceS("useDominantBaseline"),CONSTANT_TRAIT);
160
+}
161
162
void TextJustifier::sinit(Class_base* c)
163
{
164
165
}
166
ASFUNCTIONBODY(SpaceJustifier, _constructor)
167
{
168
- SpaceJustifier* th=static_cast<SpaceJustifier*>(obj);
169
+ //SpaceJustifier* th=static_cast<SpaceJustifier*>(obj);
170
LOG(LOG_NOT_IMPLEMENTED, "SpaceJustifier is a stub");
171
return NULL;
172
}
173
174
}
175
ASFUNCTIONBODY(EastAsianJustifier, _constructor)
176
{
177
- EastAsianJustifier* th=static_cast<EastAsianJustifier*>(obj);
178
+ //EastAsianJustifier* th=static_cast<EastAsianJustifier*>(obj);
179
LOG(LOG_NOT_IMPLEMENTED, "EastAsianJustifier is a stub");
180
return NULL;
181
}
182
183
{
184
CLASS_SETUP(c, ASObject, _constructor, CLASS_FINAL | CLASS_SEALED);
185
c->setDeclaredMethodByQName("createTextLine","",Class<IFunction>::getFunction(createTextLine),NORMAL_METHOD,true);
186
+ c->setDeclaredMethodByQName("recreateTextLine","",Class<IFunction>::getFunction(recreateTextLine),NORMAL_METHOD,true);
187
REGISTER_GETTER_SETTER(c, content);
188
REGISTER_GETTER_SETTER(c, textJustifier);
189
+ REGISTER_GETTER_SETTER(c, bidiLevel);
190
}
191
192
ASFUNCTIONBODY_GETTER_SETTER(TextBlock, content)
193
ASFUNCTIONBODY_GETTER_SETTER(TextBlock, textJustifier)
194
+ASFUNCTIONBODY_GETTER_SETTER(TextBlock, bidiLevel)
195
196
ASFUNCTIONBODY(TextBlock, _constructor)
197
{
198
199
TextBlock* th=static_cast<TextBlock*>(obj);
200
_NR<TextLine> previousLine;
201
int32_t width;
202
- ARG_UNPACK (previousLine, NullRef) (width, MAX_LINE_WIDTH);
203
+ number_t lineOffset;
204
+ bool fitSomething;
205
+ ARG_UNPACK (previousLine, NullRef) (width, MAX_LINE_WIDTH) (lineOffset, 0.0) (fitSomething, false);
206
207
if (argslen > 2)
208
LOG(LOG_NOT_IMPLEMENTED, "TextBlock::createTextLine ignored some parameters");
209
210
- if (width <= 0 || width > MAX_LINE_WIDTH)
211
- throw Class<ArgumentError>::getInstanceS("Invalid width");
212
-
213
- if (!previousLine.isNull())
214
+ if (!fitSomething && (width < 0 || width > MAX_LINE_WIDTH))
215
{
216
- LOG(LOG_NOT_IMPLEMENTED, "TextBlock::createTextLine supports a single line only");
217
- return getSys()->getNullRef();
218
+ throwError<ArgumentError>(kOutOfRangeError,"Invalid width");
219
}
220
221
+ // TODO handle non TextElement Content
222
+ if (th->content.isNull() || !th->content->is<TextElement>() || th->content->as<TextElement>()->text.empty())
223
+ return NULL;
224
+ tiny_string linetext = th->content->as<TextElement>()->text;
225
+ if (fitSomething && linetext == "")
226
+ linetext = " ";
227
+
228
+ LOG(LOG_NOT_IMPLEMENTED,"splitting textblock in multiple lines not implemented");
229
+ th->content->as<TextElement>()->text = "";
230
th->incRef();
231
- TextLine *textLine = Class<TextLine>::getInstanceS(th->content, _MNR(th));
232
+ TextLine *textLine = Class<TextLine>::getInstanceS(linetext, _MNR(th));
233
textLine->width = (uint32_t)width;
234
+ textLine->previousLine = previousLine;
235
textLine->updateSizes();
236
+ if (textLine->width > textLine->textWidth)
237
+ {
238
+ delete textLine;
239
+ th->decRef();
240
+ return NULL;
241
+ }
242
+ if (!previousLine.isNull())
243
+ previousLine->nextLine == textLine;
244
return textLine;
245
}
246
+ASFUNCTIONBODY(TextBlock, recreateTextLine)
247
+{
248
+ TextBlock* th=static_cast<TextBlock*>(obj);
249
+ _NR<TextLine> previousLine;
250
+ _NR<TextLine> textLine;
251
+ int32_t width;
252
+ number_t lineOffset;
253
+ bool fitSomething;
254
+ ARG_UNPACK (textLine) (previousLine, NullRef) (width, MAX_LINE_WIDTH) (lineOffset, 0.0) (fitSomething, false);
255
+
256
+ if (argslen > 2)
257
+ LOG(LOG_NOT_IMPLEMENTED, "TextBlock::recreateTextLine ignored some parameters");
258
+ LOG(LOG_NOT_IMPLEMENTED, "TextBlock::recreateTextLine doesn't check all parameters for validity");
259
+
260
+ // TODO handle non TextElement Content
261
+ if (th->content.isNull() || !th->content->is<TextElement>() || th->content->as<TextElement>()->text.empty())
262
+ return NULL;
263
+
264
+ if (!fitSomething && (width < 0 || width > MAX_LINE_WIDTH))
265
+ {
266
+ throwError<ArgumentError>(kOutOfRangeError,"Invalid width");
267
+ }
268
+
269
+ if (textLine.isNull())
270
+ {
271
+ throwError<ArgumentError>(kInvalidArgumentError,"Invalid argument: textLine");
272
+ }
273
+
274
+ if (th != textLine->textBlock.getPtr())
275
+ {
276
+ throwError<ArgumentError>(kInvalidArgumentError,"Invalid argument: textLine is in different textBlock");
277
+ }
278
+ if (fitSomething && textLine->text == "")
279
+ textLine->text = " ";
280
+ textLine->width = (uint32_t)width;
281
+ textLine->previousLine = previousLine;
282
+ textLine->updateSizes();
283
+ if (textLine->width > textLine->textWidth)
284
+ {
285
+ return NULL;
286
+ }
287
+ if (!previousLine.isNull())
288
+ previousLine->nextLine == textLine;
289
+ return textLine.getPtr();
290
+}
291
292
void TextElement::sinit(Class_base* c)
293
{
294
295
return NULL;
296
}
297
298
-TextLine::TextLine(Class_base* c, _NR<ContentElement> content, _NR<TextBlock> owner)
299
- : DisplayObjectContainer(c), TextData()
300
+TextLine::TextLine(Class_base* c, tiny_string linetext, _NR<TextBlock> owner)
301
+ : DisplayObjectContainer(c), TextData(),nextLine(NULL),previousLine(NULL),userData(NULL)
302
{
303
textBlock = owner;
304
305
- if (content.isNull() || !content->is<TextElement>())
306
- {
307
- LOG(LOG_NOT_IMPLEMENTED, "TextLine supports only TextElements");
308
- return;
309
- }
310
-
311
- TextElement *textElement = content->as<TextElement>();
312
- text = textElement->text;
313
+ text = linetext;
314
updateSizes();
315
requestInvalidation(getSys());
316
}
317
318
void TextLine::sinit(Class_base* c)
319
{
320
CLASS_SETUP(c, DisplayObjectContainer, _constructor, CLASS_FINAL | CLASS_SEALED);
321
- REGISTER_GETTER(c, textBlock);
322
c->setVariableByQName("MAX_LINE_WIDTH","",abstract_ui(MAX_LINE_WIDTH),CONSTANT_TRAIT);
323
+ c->setDeclaredMethodByQName("descent","",Class<IFunction>::getFunction(getDescent),GETTER_METHOD,true);
324
+ c->setDeclaredMethodByQName("ascent","",Class<IFunction>::getFunction(getAscent),GETTER_METHOD,true);
325
+ c->setDeclaredMethodByQName("textWidth","",Class<IFunction>::getFunction(getTextWidth),GETTER_METHOD,true);
326
+ c->setDeclaredMethodByQName("textHeight","",Class<IFunction>::getFunction(getTextHeight),GETTER_METHOD,true);
327
+ REGISTER_GETTER(c, textBlock);
328
+ REGISTER_GETTER(c, nextLine);
329
+ REGISTER_GETTER(c, previousLine);
330
+ REGISTER_GETTER_SETTER(c, validity);
331
+ REGISTER_GETTER_SETTER(c, userData);
332
}
333
334
+
335
ASFUNCTIONBODY_GETTER(TextLine, textBlock);
336
+ASFUNCTIONBODY_GETTER(TextLine, nextLine);
337
+ASFUNCTIONBODY_GETTER(TextLine, previousLine);
338
+ASFUNCTIONBODY_GETTER_SETTER(TextLine, validity);
339
+ASFUNCTIONBODY_GETTER_SETTER(TextLine, userData);
340
341
ASFUNCTIONBODY(TextLine, _constructor)
342
{
343
344
345
return NULL;
346
}
347
+ASFUNCTIONBODY(TextLine, getDescent)
348
+{
349
+ LOG(LOG_NOT_IMPLEMENTED,"TextLine.descent");
350
+ return abstract_d(0);
351
+}
352
+
353
+ASFUNCTIONBODY(TextLine, getAscent)
354
+{
355
+ TextLine* th=static_cast<TextLine*>(obj);
356
+ LOG(LOG_NOT_IMPLEMENTED,"TextLine.ascent");
357
+ return abstract_d(th->textHeight);
358
+}
359
+
360
+ASFUNCTIONBODY(TextLine, getTextWidth)
361
+{
362
+ TextLine* th=static_cast<TextLine*>(obj);
363
+ return abstract_d(th->textWidth);
364
+}
365
+
366
+ASFUNCTIONBODY(TextLine, getTextHeight)
367
+{
368
+ TextLine* th=static_cast<TextLine*>(obj);
369
+ return abstract_d(th->textHeight);
370
+}
371
+
372
373
void TextLine::updateSizes()
374
{
375
376
h = height;
377
//Compute (text)width, (text)height
378
CairoPangoRenderer::getBounds(*this, w, h, tw, th);
379
+ if (w == 0)
380
+ w = tw;
381
+ if (h == 0)
382
+ h = th;
383
width = w; //TODO: check the case when w,h == 0
384
+
385
textWidth = w;
386
height = h;
387
textHeight = h;
388
389
return DisplayObjectContainer::hitTestImpl(_MR(this), x, y, type);
390
}
391
}
392
+
393
+void TextLineValidity::sinit(Class_base* c)
394
+{
395
+ CLASS_SETUP_NO_CONSTRUCTOR(c, ASObject, CLASS_FINAL | CLASS_SEALED);
396
+ c->setVariableByQName("INVALID","",Class<ASString>::getInstanceS("invalid"),CONSTANT_TRAIT);
397
+ c->setVariableByQName("POSSIBLY_INVALID","",Class<ASString>::getInstanceS("possiblyInvalid"),CONSTANT_TRAIT);
398
+ c->setVariableByQName("STATIC","",Class<ASString>::getInstanceS("static"),CONSTANT_TRAIT);
399
+ c->setVariableByQName("VALID","",Class<ASString>::getInstanceS("valid"),CONSTANT_TRAIT);
400
+}
401
+
402
lightspark.tar.xz/src/scripting/flash/text/flashtextengine.h
Changed
181
1
2
namespace lightspark
3
{
4
5
+class ElementFormat;
6
class ContentElement: public ASObject
7
{
8
public:
9
- ContentElement(Class_base* c): ASObject(c) {};
10
+ ContentElement(Class_base* c): ASObject(c),elementFormat(NULL) {}
11
static void sinit(Class_base* c);
12
+ ASPROPERTY_GETTER_SETTER(_NR<ElementFormat>,elementFormat);
13
};
14
15
+class FontDescription;
16
class ElementFormat: public ASObject
17
{
18
public:
19
- ElementFormat(Class_base* c): ASObject(c) {};
20
+ ElementFormat(Class_base* c);
21
static void sinit(Class_base* c);
22
ASFUNCTION(_constructor);
23
+ ASPROPERTY_GETTER_SETTER(tiny_string,alignmentBaseline);
24
+ ASPROPERTY_GETTER_SETTER(number_t,alpha);
25
+ ASPROPERTY_GETTER_SETTER(number_t,baselineShift);
26
+ ASPROPERTY_GETTER_SETTER(tiny_string,breakOpportunity);
27
+ ASPROPERTY_GETTER_SETTER(uint,color);
28
+ ASPROPERTY_GETTER_SETTER(tiny_string,digitCase);
29
+ ASPROPERTY_GETTER_SETTER(tiny_string,digitWidth);
30
+ ASPROPERTY_GETTER_SETTER(tiny_string,dominantBaseline);
31
+ ASPROPERTY_GETTER_SETTER(_NR<FontDescription>,fontDescription);
32
+ ASPROPERTY_GETTER_SETTER(number_t,fontSize);
33
+ ASPROPERTY_GETTER_SETTER(tiny_string,kerning);
34
+ ASPROPERTY_GETTER_SETTER(tiny_string,ligatureLevel);
35
+ ASPROPERTY_GETTER_SETTER(tiny_string,locale);
36
+ ASPROPERTY_GETTER_SETTER(bool,locked);
37
+ ASPROPERTY_GETTER_SETTER(tiny_string,textRotation);
38
+ ASPROPERTY_GETTER_SETTER(number_t,trackingLeft);
39
+ ASPROPERTY_GETTER_SETTER(number_t,trackingRight);
40
+ ASPROPERTY_GETTER_SETTER(tiny_string,typographicCase);
41
+};
42
+
43
+class FontLookup: public ASObject
44
+{
45
+public:
46
+ FontLookup(Class_base* c): ASObject(c) {}
47
+ static void sinit(Class_base* c);
48
};
49
50
class FontDescription: public ASObject
51
{
52
public:
53
- FontDescription(Class_base* c): ASObject(c) {};
54
+ FontDescription(Class_base* c): ASObject(c),
55
+ cffHinting("horizontalStem"), fontLookup("device"), fontName("_serif"), fontPosture("normal"), fontWeight("normal"),locked(false), renderingMode("cff") {}
56
static void sinit(Class_base* c);
57
ASFUNCTION(_constructor);
58
+ ASPROPERTY_GETTER_SETTER(tiny_string,cffHinting);
59
+ ASPROPERTY_GETTER_SETTER(tiny_string,fontLookup);
60
+ ASPROPERTY_GETTER_SETTER(tiny_string,fontName);
61
+ ASPROPERTY_GETTER_SETTER(tiny_string,fontPosture);
62
+ ASPROPERTY_GETTER_SETTER(tiny_string,fontWeight);
63
+ ASPROPERTY_GETTER_SETTER(bool,locked);
64
+ ASPROPERTY_GETTER_SETTER(tiny_string,renderingMode);
65
};
66
67
class FontWeight: public ASObject
68
{
69
public:
70
- FontWeight(Class_base* c): ASObject(c) {};
71
+ FontWeight(Class_base* c): ASObject(c) {}
72
+ static void sinit(Class_base* c);
73
+};
74
+
75
+class FontMetrics: public ASObject
76
+{
77
+public:
78
+ FontMetrics(Class_base* c): ASObject(c) {}
79
+ static void sinit(Class_base* c);
80
+ ASFUNCTION(_constructor);
81
+};
82
+
83
+class Kerning: public ASObject
84
+{
85
+public:
86
+ Kerning(Class_base* c): ASObject(c) {}
87
+ static void sinit(Class_base* c);
88
+};
89
+class LineJustification: public ASObject
90
+{
91
+public:
92
+ LineJustification(Class_base* c): ASObject(c) {}
93
+ static void sinit(Class_base* c);
94
+};
95
+
96
+class TextBaseline: public ASObject
97
+{
98
+public:
99
+ TextBaseline(Class_base* c): ASObject(c) {}
100
static void sinit(Class_base* c);
101
};
102
103
class TextJustifier: public ASObject
104
{
105
public:
106
- TextJustifier(Class_base* c): ASObject(c) {};
107
+ TextJustifier(Class_base* c): ASObject(c) {}
108
static void sinit(Class_base* c);
109
ASFUNCTION(_constructor);
110
};
111
112
class SpaceJustifier: public TextJustifier
113
{
114
public:
115
- SpaceJustifier(Class_base* c): TextJustifier(c) {};
116
+ SpaceJustifier(Class_base* c): TextJustifier(c) {}
117
static void sinit(Class_base* c);
118
ASFUNCTION(_constructor);
119
};
120
121
class EastAsianJustifier: public TextJustifier
122
{
123
public:
124
- EastAsianJustifier(Class_base* c): TextJustifier(c) {};
125
+ EastAsianJustifier(Class_base* c): TextJustifier(c) {}
126
static void sinit(Class_base* c);
127
ASFUNCTION(_constructor);
128
};
129
130
class TextBlock: public ASObject
131
{
132
public:
133
- TextBlock(Class_base* c): ASObject(c) {};
134
+ TextBlock(Class_base* c): ASObject(c),bidiLevel(0) {}
135
static void sinit(Class_base* c);
136
ASFUNCTION(_constructor);
137
ASFUNCTION(createTextLine);
138
+ ASFUNCTION(recreateTextLine);
139
ASPROPERTY_GETTER_SETTER(_NR<ContentElement>, content);
140
ASPROPERTY_GETTER_SETTER(_NR<TextJustifier>, textJustifier);
141
+ ASPROPERTY_GETTER_SETTER(int,bidiLevel);
142
};
143
144
class TextElement: public ContentElement
145
{
146
public:
147
- TextElement(Class_base* c): ContentElement(c) {};
148
+ TextElement(Class_base* c): ContentElement(c) {}
149
static void sinit(Class_base* c);
150
ASFUNCTION(_constructor);
151
ASPROPERTY_GETTER_SETTER(tiny_string,text);
152
153
void renderImpl(RenderContext& ctxt) const;
154
_NR<DisplayObject> hitTestImpl(_NR<DisplayObject> last, number_t x, number_t y, DisplayObject::HIT_TYPE type);
155
public:
156
- TextLine(Class_base* c, _NR<ContentElement> content=NullRef, _NR<TextBlock> owner=NullRef);
157
+ TextLine(Class_base* c,tiny_string linetext = "", _NR<TextBlock> owner=NullRef);
158
static void sinit(Class_base* c);
159
void updateSizes();
160
ASFUNCTION(_constructor);
161
ASPROPERTY_GETTER(_NR<TextBlock>, textBlock);
162
+ ASPROPERTY_GETTER(_NR<TextLine>, nextLine);
163
+ ASPROPERTY_GETTER(_NR<TextLine>, previousLine);
164
+ ASPROPERTY_GETTER_SETTER(tiny_string,validity);
165
+ ASPROPERTY_GETTER_SETTER(_NR<ASObject>,userData);
166
+ ASFUNCTION(getDescent);
167
+ ASFUNCTION(getAscent);
168
+ ASFUNCTION(getTextWidth);
169
+ ASFUNCTION(getTextHeight);
170
+
171
+};
172
+
173
+class TextLineValidity: public ASObject
174
+{
175
+public:
176
+ TextLineValidity(Class_base* c): ASObject(c) {}
177
+ static void sinit(Class_base* c);
178
};
179
180
}
181
lightspark.tar.xz/src/scripting/flash/ui/ContextMenuItem.cpp
Changed
15
1
2
void ContextMenuItem::sinit(Class_base* c)
3
{
4
CLASS_SETUP(c, EventDispatcher, _constructor, CLASS_FINAL);
5
+ REGISTER_GETTER_SETTER(c, caption);
6
}
7
8
ASFUNCTIONBODY(ContextMenuItem,_constructor)
9
10
return NULL;
11
}
12
13
+ASFUNCTIONBODY_GETTER_SETTER(ContextMenuItem,caption);
14
15
lightspark.tar.xz/src/scripting/flash/ui/ContextMenuItem.h
Changed
9
1
2
ContextMenuItem(Class_base* c):EventDispatcher(c){}
3
static void sinit(Class_base* c);
4
ASFUNCTION(_constructor);
5
+ ASPROPERTY_GETTER_SETTER(tiny_string, caption);
6
};
7
8
}
9
lightspark.tar.xz/src/scripting/flash/utils/flashutils.cpp
Changed
18
1
2
getSys()->intervalManager->clearInterval(args[0]->toInt(), IntervalRunner::TIMEOUT, true);
3
return NULL;
4
}
5
+
6
+ASFUNCTIONBODY(lightspark,escapeMultiByte)
7
+{
8
+ tiny_string str;
9
+ ARG_UNPACK (str, "undefined");
10
+ return Class<ASString>::getInstanceS(URLInfo::encode(str, URLInfo::ENCODE_ESCAPE));
11
+}
12
+ASFUNCTIONBODY(lightspark,unescapeMultiByte)
13
+{
14
+ tiny_string str;
15
+ ARG_UNPACK (str, "undefined");
16
+ return Class<ASString>::getInstanceS(URLInfo::decode(str, URLInfo::ENCODE_ESCAPE));
17
+}
18
lightspark.tar.xz/src/scripting/flash/utils/flashutils.h
Changed
10
1
2
ASObject* clearInterval(ASObject* obj,ASObject* const* args, const unsigned int argslen);
3
ASObject* clearTimeout(ASObject* obj,ASObject* const* args, const unsigned int argslen);
4
ASObject* describeType(ASObject* obj,ASObject* const* args, const unsigned int argslen);
5
+ASObject* escapeMultiByte(ASObject* obj,ASObject* const* args, const unsigned int argslen);
6
+ASObject* unescapeMultiByte(ASObject* obj,ASObject* const* args, const unsigned int argslen);
7
8
}
9
10
lightspark.tar.xz/src/scripting/toplevel/ASString.cpp
Changed
19
1
2
{
3
case T_STRING:
4
{
5
+ if (!this->isConstructed())
6
+ return !r->isConstructed();
7
const ASString* s=static_cast<const ASString*>(r);
8
return s->data==data;
9
}
10
11
return toNumber()==r->toNumber();
12
case T_NULL:
13
case T_UNDEFINED:
14
+ if (!this->isConstructed())
15
+ return true;
16
return false;
17
default:
18
return r->isEqual(this);
19
lightspark.tar.xz/src/scripting/toplevel/ASString.h
Changed
10
1
2
o->decRef();
3
return getSys()->getNullRef();
4
}
5
+ if(!o->isConstructed())
6
+ return o;
7
tiny_string n = o->toString();
8
o->decRef();
9
return Class<ASString>::getInstanceS(n);
10
lightspark.tar.xz/src/scripting/toplevel/Boolean.cpp
Changed
24
1
2
case T_UINTEGER:
3
return o->as<UInteger>()->val != 0;
4
case T_STRING:
5
+ if (!o->isConstructed())
6
+ return false;
7
return !o->as<ASString>()->data.empty();
8
- case T_CLASS:
9
case T_FUNCTION:
10
- return true;
11
case T_ARRAY:
12
case T_OBJECT:
13
// not constructed objects return false
14
15
return b->val==val;
16
}
17
case T_STRING:
18
+ if (!r->isConstructed())
19
+ return false;
20
+ return val==r->toNumber();
21
case T_INTEGER:
22
case T_UINTEGER:
23
case T_NUMBER:
24
lightspark.tar.xz/src/scripting/toplevel/Integer.cpp
Changed
12
1
2
void Integer::sinit(Class_base* c)
3
{
4
CLASS_SETUP(c, ASObject, _constructor, CLASS_SEALED | CLASS_FINAL);
5
- c->setVariableByQName("MAX_VALUE","",new (c->memoryAccount) Integer(c,numeric_limits<int32_t>::max()),CONSTANT_TRAIT);
6
- c->setVariableByQName("MIN_VALUE","",new (c->memoryAccount) Integer(c,numeric_limits<int32_t>::min()),CONSTANT_TRAIT);
7
+ c->setVariableByQName("MAX_VALUE","",abstract_i(numeric_limits<int32_t>::max()),CONSTANT_TRAIT);
8
+ c->setVariableByQName("MIN_VALUE","",abstract_i(numeric_limits<int32_t>::min()),CONSTANT_TRAIT);
9
c->setDeclaredMethodByQName("toString",AS3,Class<IFunction>::getFunction(_toString),NORMAL_METHOD,true);
10
c->setDeclaredMethodByQName("toFixed",AS3,Class<IFunction>::getFunction(_toFixed,1),NORMAL_METHOD,true);
11
c->setDeclaredMethodByQName("toExponential",AS3,Class<IFunction>::getFunction(_toExponential,1),NORMAL_METHOD,true);
12
lightspark.tar.xz/src/scripting/toplevel/Number.cpp
Changed
24
1
2
void Number::sinit(Class_base* c)
3
{
4
CLASS_SETUP(c, ASObject, _constructor, CLASS_SEALED | CLASS_FINAL);
5
- //Must create and link the number the hard way
6
- Number* ninf=new (c->memoryAccount) Number(c, -numeric_limits<double>::infinity());
7
- Number* pinf=new (c->memoryAccount) Number(c, numeric_limits<double>::infinity());
8
- Number* pmax=new (c->memoryAccount) Number(c, numeric_limits<double>::max());
9
- Number* pmin=new (c->memoryAccount) Number(c, numeric_limits<double>::min());
10
- Number* pnan=new (c->memoryAccount) Number(c, numeric_limits<double>::quiet_NaN());
11
- c->setVariableByQName("NEGATIVE_INFINITY","",ninf,CONSTANT_TRAIT);
12
- c->setVariableByQName("POSITIVE_INFINITY","",pinf,CONSTANT_TRAIT);
13
- c->setVariableByQName("MAX_VALUE","",pmax,CONSTANT_TRAIT);
14
- c->setVariableByQName("MIN_VALUE","",pmin,CONSTANT_TRAIT);
15
- c->setVariableByQName("NaN","",pnan,CONSTANT_TRAIT);
16
+ c->setVariableByQName("NEGATIVE_INFINITY","",abstract_d(-numeric_limits<double>::infinity()),CONSTANT_TRAIT);
17
+ c->setVariableByQName("POSITIVE_INFINITY","",abstract_d(numeric_limits<double>::infinity()),CONSTANT_TRAIT);
18
+ c->setVariableByQName("MAX_VALUE","",abstract_d(numeric_limits<double>::max()),CONSTANT_TRAIT);
19
+ c->setVariableByQName("MIN_VALUE","",abstract_d(numeric_limits<double>::min()),CONSTANT_TRAIT);
20
+ c->setVariableByQName("NaN","",abstract_d(numeric_limits<double>::quiet_NaN()),CONSTANT_TRAIT);
21
c->setDeclaredMethodByQName("toString",AS3,Class<IFunction>::getFunction(_toString),NORMAL_METHOD,true);
22
c->setDeclaredMethodByQName("toFixed",AS3,Class<IFunction>::getFunction(toFixed,1),NORMAL_METHOD,true);
23
c->setDeclaredMethodByQName("toExponential",AS3,Class<IFunction>::getFunction(toExponential,1),NORMAL_METHOD,true);
24
lightspark.tar.xz/src/scripting/toplevel/toplevel.cpp
Changed
92
1
2
case T_NUMBER:
3
case T_INTEGER:
4
case T_UINTEGER:
5
- case T_STRING:
6
case T_BOOLEAN:
7
return false;
8
+ case T_FUNCTION:
9
+ case T_STRING:
10
+ if (!r->isConstructed())
11
+ return true;
12
+ return false;
13
default:
14
return r->isEqual(this);
15
}
16
17
case T_INTEGER:
18
case T_UINTEGER:
19
case T_NUMBER:
20
- case T_STRING:
21
case T_BOOLEAN:
22
return false;
23
+ case T_FUNCTION:
24
+ case T_STRING:
25
+ if (!r->isConstructed())
26
+ return true;
27
+ return false;
28
default:
29
return r->isEqual(this);
30
}
31
32
return o;
33
if(o->is<Class_base>())
34
{ /* classes can be cast to the type 'Object' or 'Class' */
35
- if(this == Class<ASObject>::getClass()
36
+ if(this == Class<ASObject>::getClass()
37
|| (class_name.name=="Class" && class_name.ns==""))
38
- return o; /* 'this' is the type of a class */
39
- else
40
- throwError<TypeError>(kCheckTypeFailedError, o->getClassName(), getQualifiedClassName());
41
+ return o; /* 'this' is the type of a class */
42
+ else
43
+ throwError<TypeError>(kCheckTypeFailedError, o->getClassName(), getQualifiedClassName());
44
}
45
if (o->is<ObjectConstructor>())
46
return o;
47
48
{
49
target->incRef();
50
ASObject* ret=constructor->call(target,args,argslen);
51
- target->constructorCalled = true;
52
+ target->constructIndicator = true;
53
assert_and_throw(ret->is<Undefined>());
54
ret->decRef();
55
}
56
else
57
{
58
- target->constructorCalled = true;
59
+ target->constructIndicator = true;
60
for(uint32_t i=0;i<argslen;i++)
61
args[i]->decRef();
62
//throwError<TypeError>(kConstructOfNonFunctionError);
63
64
{
65
if (argslen > 0)
66
throwError<EvalError>(kFunctionConstructorError);
67
- return getNopFunction();
68
+ ASObject* ret = getNopFunction();
69
+ if (construct)
70
+ ret->setConstructIndicator();
71
+ return ret;
72
}
73
74
Class<IFunction>* Class<IFunction>::getClass()
75
76
ret->prototype = _MNR(new_functionPrototype(ret, ret->super->prototype));
77
ret->incRef();
78
ret->prototype->getObj()->setVariableByQName("constructor","",ret,DYNAMIC_TRAIT);
79
+ ret->prototype->getObj()->setConstructIndicator();
80
ret->incRef();
81
*retAddr = ret;
82
83
84
ObjectPrototype::ObjectPrototype(Class_base* c) : ASObject(c)
85
{
86
traitsInitialized = true;
87
- constructorCalled = true;
88
+ constructIndicator = true;
89
}
90
bool ObjectPrototype::isEqual(ASObject* r)
91
{
92
lightspark.tar.xz/src/scripting/toplevel/toplevel.h
Changed
40
1
2
/* returns whether this is this a method of a function */
3
bool isMethod() const { return inClass != NULL; }
4
bool isBound() const { return closure_this; }
5
+ bool isConstructed() const { return constructIndicator; }
6
void finalize();
7
ASFUNCTION(apply);
8
ASFUNCTION(_call);
9
10
ret->setClass(getClass());
11
}
12
ret->closure_this=c;
13
+ ret->constructIndicator = true;
14
//std::cout << "Binding " << ret << std::endl;
15
return ret;
16
}
17
18
{
19
Class<IFunction>* c=Class<IFunction>::getClass();
20
Function* ret=new (c->memoryAccount) Function(c, v);
21
+ ret->constructIndicator = true;
22
return ret;
23
}
24
static Function* getFunction(Function::as_function v, int len)
25
26
Class<IFunction>* c=Class<IFunction>::getClass();
27
Function* ret=new (c->memoryAccount) Function(c, v);
28
ret->length = len;
29
+ ret->constructIndicator = true;
30
return ret;
31
}
32
static SyntheticFunction* getSyntheticFunction(method_info* m)
33
{
34
Class<IFunction>* c=Class<IFunction>::getClass();
35
SyntheticFunction* ret=new (c->memoryAccount) SyntheticFunction(c, m);
36
+ ret->constructIndicator = true;
37
c->handleConstruction(ret,NULL,0,true);
38
return ret;
39
}
40
lightspark.tar.xz/src/swf.cpp
Changed
22
1
2
{
3
Class_base* movieClipClass = Class<MovieClip>::getClass();
4
RootMovieClip* ret=new (movieClipClass->memoryAccount) RootMovieClip(li, appDomain, secDomain, movieClipClass);
5
- ret->constructorCalled = true;
6
+ ret->constructIndicator = true;
7
return ret;
8
}
9
10
11
try
12
{
13
parseSWFHeader(root, ver);
14
+ if (loader)
15
+ {
16
+ _NR<LoaderInfo> li=loader->getContentLoaderInfo();
17
+ li->swfVersion = root->version;
18
+ }
19
if(root->version < 9)
20
{
21
LOG(LOG_INFO,"SWF version " << root->version << " is not handled by lightspark, falling back to gnash (if available)");
22
lightspark.tar.xz/src/swftypes.cpp
Changed
37
1
2
3
tiny_string multiname::qualifiedString() const
4
{
5
- assert_and_throw(ns.size()==1);
6
+ assert_and_throw(ns.size()>=1);
7
assert_and_throw(name_type==NAME_STRING);
8
const tiny_string nsName=ns[0].getImpl().name;
9
const tiny_string& name=getSys()->getStringFromUniqueId(name_s_id);
10
11
assert(v.version!=0xff);
12
UI8 FillStyleCount;
13
s >> FillStyleCount;
14
+ int fsc = FillStyleCount;
15
if(FillStyleCount==0xff)
16
- LOG(LOG_ERROR,_("Fill array extended not supported"));
17
-
18
- for(int i=0;i<FillStyleCount;i++)
19
+ {
20
+ UI16_SWF ExtendedFillStyleCount;
21
+ s >> ExtendedFillStyleCount;
22
+ fsc = ExtendedFillStyleCount;
23
+ }
24
+ for(int i=0;i<fsc;i++)
25
{
26
FILLSTYLE t(v.version);
27
s >> t;
28
29
else
30
{
31
LOG(LOG_ERROR,_("Not supported fill style ") << (int)v.FillStyleType);
32
- throw ParseException("Not supported fill style");
33
+ throw ParseException("Not supported fill style");
34
}
35
return s;
36
}
37