This repository was archived by the owner on Jan 15, 2020. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 25
This repository was archived by the owner on Jan 15, 2020. It is now read-only.
Segmentation fault (core dumped) on node v0.6.x #20
Copy link
Copy link
Open
Description
The code below crashes sometimes with segmentation error. I tested it on node 0.6.6( crashes ) and 0.4.12 ( works ) Look to get in the handler, other traps are default.
var Proxy = require( 'node-proxy' );
function ProxyHandler( target ) {
return {
getOwnPropertyDescriptor : function( name ) {
var desc = Object.getOwnPropertyDescriptor( target, name );
if ( desc !== undefined ) {
desc.configurable = true;
}
return desc;
},
getPropertyDescriptor : function( name ) {
var desc = Object.getOwnPropertyDescriptor( target, name );
var parent = Object.getPrototypeOf( target );
while ( desc === undefined && parent !== null ) {
desc = Object.getOwnPropertyDescriptor( parent, name );
parent = Object.getPrototypeOf( parent );
}
if ( desc !== undefined ) {
desc.configurable = true;
}
return desc;
},
getOwnPropertyNames : function() {
return Object.getOwnPropertyNames( target );
},
getPropertyNames : function() {
var props = Object.getOwnPropertyNames( target );
var parent = Object.getPrototypeOf( target );
while ( parent !== null ) {
props = props.concat( Object.getOwnPropertyNames( parent ) );
parent = Object.getPrototypeOf( parent );
}
return props;
},
defineProperty : function( name, desc ) {
return Object.defineProperty( target, name, desc );
},
'delete' : function( name ) {
return delete target[ name ];
},
fix : function() {
if ( !Object.isFrozen( target ) ) return undefined;
var props = {};
for ( var name in target ) {
props[ name ] = Object.getOwnPropertyDescriptor( target, name );
}
return props;
},
has : function( name ) {
return name in target;
},
hasOwn : function( name ) {
return ({}).hasOwnProperty.call( target, name );
},
get : function( receiver, name ) {
var super_prototype = Object.getPrototypeOf( Object.getPrototypeOf( Object.getPrototypeOf( target ) ));
return super_prototype[ name ].bind( target );
},
set : function( receiver, name, val ) {
target[ name ] = val;
return true;
},
enumerate : function() {
var result = [];
for ( var name in target ) {
result.push( name );
}
return result;
},
iterate : function() {
var props = this.enumerate();
var i = 0;
return {
next: function() {
if ( i === props.length ) throw StopIteration;
return props[i++];
}
};
},
keys : function() {
return Object.keys( target );
}
}
}
function ClassA() {}
ClassA.prototype.method = function() {};
require('util').inherits( ClassB, ClassA );
function ClassB() {}
ClassB.prototype.method = function() {
var handler = ProxyHandler( this );
var s = Proxy.create( handler, Object.getPrototypeOf( this ) );
s.method();
};
var j = 0;
require('util').inherits( ClassC, ClassB );
function ClassC() {
console.log( j++ );
this.method();
}
for( var i = 0; i < 50; i++ ) new ClassC;
console.log( 'All good' );Metadata
Metadata
Assignees
Labels
No labels