- \r
- if( X_EMPTY_OBJECT[ name ] ) return;\r
- \r
- while( sClass ){\r
- def = X_Class_getClassDef( sClass );\r
- sClass = def.SuperClass;\r
- sFunc = sClass.prototype[ name ];\r
- if( sFunc === funcNameOrFunc ){\r
- hit = true; // 現在の関数にヒット\r
- } else\r
- if( hit && X_Object_inObject( name, this ) ){\r
- if( X_Type_isFunction( sFunc ) ){\r
- switch( args.length ){\r
- case 1 :\r
- return sFunc.call( this );\r
- case 2 :\r
- return sFunc.call( this, args[ 1 ] );\r
- case 3 :\r
- return sFunc.call( this, args[ 1 ], args[ 2 ] );\r
- case 4 :\r
- return sFunc.call( this, args[ 1 ], args[ 2 ], args[ 3 ] );\r
- default :\r
- args = X_Array_copy( args );\r
- args.shift();\r
- return sFunc.apply( this, args );\r
+ \r
+ if( i === -1 ){\r
+ X_Class_SUPER_CALLER[ i = X_Class_SUPER_CALLER.length ] = me;\r
+ t = stack = X_Class_SUPER_STACKS[ i ] = 0;\r
+ } else {\r
+ t = stack = X_Class_SUPER_STACKS[ i ];\r
+ \r
+ while( t ){\r
+ sClass = X_Class_getClassDef( sClass ).SuperClass;\r
+ --t;\r
+ }; \r
+ };\r
+\r
+ if( sClass ){\r
+ myFunc = sClass.prototype[ name ];\r
+\r
+ while( sClass ){\r
+ ++t;\r
+ sClass = X_Class_getClassDef( sClass ).SuperClass; \r
+ sFunc = sClass.prototype[ name ];\r
+ \r
+ if( sFunc !== myFunc /* X_Object_own( name, sClass.prototype ) */ ){\r
+ if( X_Type_isFunction( sFunc ) ){\r
+ X_Class_SUPER_STACKS[ i ] += t;\r
+ switch( args.length ){\r
+ case 1 :\r
+ ret = sFunc.call( me );\r
+ break;\r
+ case 2 :\r
+ ret = sFunc.call( me, args[ 1 ] );\r
+ break;\r
+ case 3 :\r
+ ret = sFunc.call( me, args[ 1 ], args[ 2 ] );\r
+ break;\r
+ case 4 :\r
+ ret = sFunc.call( me, args[ 1 ], args[ 2 ], args[ 3 ] );\r
+ break;\r
+ default :\r
+ args = X_Array_copy( args );\r
+ args.shift();\r
+ ret = sFunc.apply( me, args );\r
+ break; \r
+ };\r