gnash-commit
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Gnash-commit] gnash ChangeLog server/as_object.cpp


From: Sandro Santilli
Subject: [Gnash-commit] gnash ChangeLog server/as_object.cpp
Date: Mon, 22 Jan 2007 20:57:05 +0000

CVSROOT:        /sources/gnash
Module name:    gnash
Changes by:     Sandro Santilli <strk>  07/01/22 20:57:05

Modified files:
        .              : ChangeLog 
        server         : as_object.cpp 

Log message:
                * server/as_function.cpp (getPrototype): use get_member to 
access
                  the prototype, in case it was set by ActionScript.
                * server/as_object.cpp (instanceOf): fix broken implementation 
always
                  returning true :/

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnash/ChangeLog?cvsroot=gnash&r1=1.2148&r2=1.2149
http://cvs.savannah.gnu.org/viewcvs/gnash/server/as_object.cpp?cvsroot=gnash&r1=1.25&r2=1.26

Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/gnash/gnash/ChangeLog,v
retrieving revision 1.2148
retrieving revision 1.2149
diff -u -b -r1.2148 -r1.2149
--- ChangeLog   22 Jan 2007 20:55:45 -0000      1.2148
+++ ChangeLog   22 Jan 2007 20:57:04 -0000      1.2149
@@ -1,6 +1,10 @@
 2007-01-22 Sandro Santilli <address@hidden>
 
        * server/as_object.h: add const version of get_prototype.
+       * server/as_function.cpp (getPrototype): use get_member to access
+         the prototype, in case it was set by ActionScript.
+       * server/as_object.cpp (instanceOf): fix broken implementation always
+         returning true :/
 
 2007-01-22 Sandro Santilli <address@hidden>
 

Index: server/as_object.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/as_object.cpp,v
retrieving revision 1.25
retrieving revision 1.26
diff -u -b -r1.25 -r1.26
--- server/as_object.cpp        19 Jan 2007 10:15:47 -0000      1.25
+++ server/as_object.cpp        22 Jan 2007 20:57:04 -0000      1.26
@@ -263,11 +263,17 @@
 bool
 as_object::instanceOf(as_function* ctor)
 {
-       as_object* proto=m_prototype.get();
-       do {
-               if ( proto == ctor->getPrototype() ) return true;
-               proto = ctor->getPrototype();
-       } while (proto);
+       const as_object* obj = this;
+
+       std::set<const as_object*> visited;
+
+       while (obj && visited.insert(obj).second )
+       {
+               if ( obj->get_prototype() == ctor->getPrototype() ) return true;
+               obj = obj->get_prototype();
+       }
+
+       if ( obj ) log_warning("Circular inheritance chain detected during 
instanceOf call");
 
        return false;
 }




reply via email to

[Prev in Thread] Current Thread [Next in Thread]