OSDN Git Service

version 0.5.42, fixed Class.
authoritozyun <itozyun@user.sourceforge.jp>
Tue, 15 Jan 2013 23:59:48 +0000 (08:59 +0900)
committeritozyun <itozyun@user.sourceforge.jp>
Tue, 15 Jan 2013 23:59:48 +0000 (08:59 +0900)
0.5.x/javascripts/system.js

index f9a6a77..4d262ea 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * pettanR system.js
- *   version 0.5.41
+ *   version 0.5.42
  *
  * gadgetOS
  *   author:
@@ -133,6 +133,7 @@ var Class = ( function(){
                GET_INDEX          = Util.getIndex,
                abstractFlag       = true,
                privateFlag        = true,
+               killPrivateFlag    = true,
                f                  = true,
                c                  = Util.copyArray,
                a; /* arguments */
@@ -173,7 +174,6 @@ var Class = ( function(){
        /* over のプロパティを target にコピーする.ただし target の プロパティが優先, force で解除 */
        function override( target, over, force ){
                for( var p in over ){
-                       if( p === CONSTRUCTOR ) continue;
                        if( force === true || typeof target[ p ] === 'undefined' ){
                                target[ p ] = over[ p ];
                        };
@@ -208,16 +208,16 @@ var Class = ( function(){
                        opt_super = !!( classSetting & Class.SUPER_ACCESS );
                        params.push( args.shift() );
                };
-               if( getClassDef( args[ 0 ] ) ){
-                       params.push( args.shift() );
+               if( !getClass( args[ 0 ] ) ){
+                       params.push( superDef.privateClass || null );
                } else {
-                       superDef.privateClass && params.push( superDef.privateClass );
+                       params.push( args.shift() );
                };
-               params.push( override( new Super(), args[ 0 ], true ) ); /* props */
-               
                abstractFlag = false;
-               klass = Class.create.apply( null, params );
+               params.push( override( new Super(), args[ 0 ], true ) ); /* props */
                abstractFlag = true;
+               
+               klass = Class.create.apply( Class, params );
                if( opt_super === true ) getClassDef( klass ).Super = Super.prototype;
                return klass;
        };
@@ -229,6 +229,9 @@ var Class = ( function(){
                                klass = getClass( instance ),
                                def   = getClassDef( klass ),
                                privateData, p, i;
+                       if( def.isPrivate === true && killPrivateFlag === true ){
+                               throw new Error( 'PrivateInstance.kill() work in PrivateUser.kill().' );
+                       };
                        Type.isFunction( instance.onKill ) === true && instance.onKill();
                        for( p in instance ){
                                if( instance.hasOwnProperty && !instance.hasOwnProperty( p ) ) continue;
@@ -241,7 +244,9 @@ var Class = ( function(){
                        if( def.privateClass ){
                                privateData = klass.getPrivateData( instance );
                                if( privateData ){
+                                       killPrivateFlag = false;
                                        privateData.kill();
+                                       killPrivateFlag = true;
                                        i = GET_INDEX( def.dataList, privateData );
                                        def.dataList.splice( i, 1 );
                                        def.userList.splice( i, 1 );
@@ -332,7 +337,16 @@ var Class = ( function(){
        function G(){
                var klass = this,
                        def   = getClassDef( klass ),   
-                       instance;       
+                       instance;
+               if( def.Abstract === true ){
+                       if( abstractFlag === true ){
+                               throw new Error( 'AbstractClass!' );
+                       };
+                       f = false;
+                       instance = new klass();
+                       f = true;
+                       return instance;
+               };
                if( def.pool && def.pool.length > 0 ){
                        instance = def.pool.shift();
                } else {
@@ -368,19 +382,6 @@ var Class = ( function(){
                };
                return instance;
        };
-       /* Constructor Real for AbstractClass */
-       function A(){
-               var klass = this,
-                       instance;
-               if( abstractFlag === true ){
-                       throw new Error( 'AbstractClass!' );
-               };
-               f = false;
-               instance = new klass();
-               f = true;
-               return instance;
-       };
-       
        
        return {
                POOL_OBJECT  : 1,
@@ -413,9 +414,11 @@ var Class = ( function(){
                                args.shift();
                        };
                        privateDef = getClassDef( args[ 0 ] );
-                       if( privateDef ){
+                       if( !privateDef ){
+                               args[ 0 ] === null && args.shift();
+                       } else {
                                if( privateDef.isPrivate !== true ){
-                                       throw new Error( 'PrivateClass not found! please, Class.createPrivateData().' );
+                                       throw new Error( 'PrivateClass not found! please, Class.create( Class.PRIVATE, {...} ).' );
                                } else
                                if( privateDef.Abstract === true ){
                                        throw new Error( 'PrivateClass is Abstract!' );
@@ -429,12 +432,9 @@ var Class = ( function(){
                        
                        if( Type.isFunction( props[ CONSTRUCTOR ] ) === true ){
                                classDef[ CONSTRUCTOR ] = props[ CONSTRUCTOR ];
+                               delete props[ CONSTRUCTOR ];
                        };
 
-                       if( opt_abstract === true ){
-                               klass = function(){ a = arguments; if( f ) return A.apply( a.callee, c( a ) )};
-                               classDef.Abstract = true;
-                       } else
                        if( opt_private === true ){
                                klass = function(){ a = arguments; if( f ) return P.apply( a.callee, c( a ) )};
                                if( opt_pool === true ) classDef.pool = [];
@@ -444,8 +444,9 @@ var Class = ( function(){
                                        classDef.pool = [];
                                        classDef.live = [];
                                };
+                               if( opt_abstract === true ) classDef.Abstract = true;
                        };
-                       klass.prototype = override( override( {}, props, true ), ClassBase, false );
+                       klass.prototype = override( props, ClassBase, false );
                        
                        if( opt_final === true ){
                                classDef.Final = true;