Changes of Revision 65

lightspark.spec Changed
x
 
1
@@ -24,7 +24,7 @@
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
@@ -110,6 +110,7 @@
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
@@ -119,6 +120,7 @@
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
@@ -126,6 +128,7 @@
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
@@ -133,7 +136,8 @@
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
@@ -166,11 +170,13 @@
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
@@ -223,12 +229,18 @@
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
@@ -421,7 +421,7 @@
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
@@ -703,7 +703,8 @@
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
@@ -900,7 +901,21 @@
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
@@ -915,9 +930,9 @@
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
@@ -1267,7 +1282,7 @@
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
@@ -1276,7 +1291,7 @@
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
@@ -1286,7 +1301,7 @@
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
@@ -283,7 +283,7 @@
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
@@ -428,7 +428,7 @@
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
@@ -495,6 +495,8 @@
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
@@ -125,8 +125,6 @@
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
@@ -163,7 +161,8 @@
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
@@ -360,10 +360,16 @@
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
@@ -389,6 +395,8 @@
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
@@ -424,10 +432,10 @@
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
@@ -436,6 +444,7 @@
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
@@ -446,6 +455,7 @@
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
@@ -1343,7 +1353,7 @@
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
@@ -1539,6 +1549,17 @@
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
@@ -2039,9 +2060,17 @@
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
@@ -142,6 +142,15 @@
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
@@ -174,6 +183,9 @@
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
@@ -366,7 +366,7 @@
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
@@ -1892,7 +1892,7 @@
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
@@ -2044,7 +2044,8 @@
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
@@ -2075,7 +2076,7 @@
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
@@ -2165,7 +2166,7 @@
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
@@ -54,14 +54,14 @@
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
@@ -81,6 +81,7 @@
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
@@ -89,6 +90,7 @@
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
@@ -164,9 +166,6 @@
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
@@ -253,6 +252,11 @@
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
@@ -317,6 +321,9 @@
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
@@ -247,6 +247,7 @@
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
@@ -1285,3 +1285,38 @@
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
@@ -536,5 +536,37 @@
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
@@ -589,6 +589,13 @@
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
@@ -601,7 +608,7 @@
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
@@ -984,6 +991,14 @@
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
@@ -1019,6 +1034,8 @@
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
@@ -1253,6 +1270,7 @@
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
@@ -1267,6 +1285,23 @@
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
@@ -94,6 +94,14 @@
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
@@ -208,6 +216,14 @@
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
@@ -273,6 +289,8 @@
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
@@ -287,7 +287,8 @@
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
@@ -30,23 +30,102 @@
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
@@ -54,6 +133,13 @@
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
@@ -62,6 +148,44 @@
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
@@ -78,7 +202,7 @@
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
@@ -88,7 +212,7 @@
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
@@ -97,12 +221,15 @@
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
@@ -119,26 +246,87 @@
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
@@ -158,19 +346,12 @@
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
@@ -178,11 +359,24 @@
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
@@ -191,6 +385,31 @@
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
@@ -199,7 +418,12 @@
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
@@ -263,3 +487,13 @@
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
@@ -29,40 +29,104 @@
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
@@ -70,7 +134,7 @@
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
@@ -78,7 +142,7 @@
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
@@ -86,18 +150,20 @@
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
@@ -114,11 +180,27 @@
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
@@ -25,6 +25,7 @@
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
@@ -33,4 +34,5 @@
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
@@ -32,6 +32,7 @@
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
@@ -232,3 +232,16 @@
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
@@ -67,6 +67,8 @@
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
@@ -538,6 +538,8 @@
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
@@ -548,6 +550,8 @@
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
@@ -88,6 +88,8 @@
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
@@ -52,10 +52,10 @@
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
@@ -142,6 +142,9 @@
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
@@ -196,8 +196,8 @@
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
@@ -260,17 +260,11 @@
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
@@ -85,9 +85,13 @@
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
@@ -570,9 +574,13 @@
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
@@ -806,11 +814,11 @@
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
@@ -956,13 +964,13 @@
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
@@ -1915,7 +1923,10 @@
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
@@ -1937,6 +1948,7 @@
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
@@ -2349,7 +2361,7 @@
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
@@ -343,6 +343,7 @@
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
@@ -372,6 +373,7 @@
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
@@ -489,6 +491,7 @@
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
@@ -496,12 +499,14 @@
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
@@ -145,7 +145,7 @@
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
@@ -1346,6 +1346,11 @@
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
@@ -43,7 +43,7 @@
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
@@ -523,10 +523,14 @@
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
@@ -814,7 +818,7 @@
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