/*
* pettanR system.js
- * version 0.5.41
+ * version 0.5.42
*
* gadgetOS
* author:
GET_INDEX = Util.getIndex,
abstractFlag = true,
privateFlag = true,
+ killPrivateFlag = true,
f = true,
c = Util.copyArray,
a; /* arguments */
/* 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 ];
};
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;
};
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;
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 );
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 {
};
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,
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!' );
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 = [];
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;