Navigation Menu

Skip to content

Commit

Permalink
Probably fixed find_method and invoke. Fix a test in instance.t.
Browse files Browse the repository at this point in the history
  • Loading branch information
lucian1900 committed Aug 14, 2011
1 parent 8ea467d commit 38411c7
Show file tree
Hide file tree
Showing 5 changed files with 15 additions and 24 deletions.
11 changes: 4 additions & 7 deletions objects/src/instance.winxed
Expand Up @@ -50,10 +50,7 @@ class instance {
}

function invoke[vtable](var p [slurpy], var n [slurpy,named]) {
var sub;

if(self.__class__ != null)
sub = self.__class__.__call__;
var sub = self.__call__;

// if sub is a parrot Sub, it'll get executed
// if sub is an instance with __call__, this invoke will get called,
Expand All @@ -63,7 +60,8 @@ class instance {

function find_method[vtable](string name) {
// likely broken
var method = self.__dict__[name];
using Python.instance.get_pmc_keyed_str;
var method = self.*get_pmc_keyed_str(name);

// closure to soak up the obj
return function(var obj, var p[slurpy], var n[slurpy,named]) {
Expand All @@ -83,10 +81,9 @@ class instance {
if(exists dict['__class__']) {
var cls = dict['__class__'];

for(var i in get_mro(cls)) {
for(var i in get_mro(cls))
if(exists i.__dict__['__getattribute__'])
return i.__dict__['__getattribute__'](self, name);
}
}

return dict[name];
Expand Down
7 changes: 3 additions & 4 deletions objects/src/object.winxed
Expand Up @@ -21,11 +21,10 @@ function object(type) {
t.__init__ = function(obj) {};

t.__call__ = function() {
var f = t.__new__;
var n = f(t);
//f = n.__init__;
//f(n);
say('creating object instance');
var n = t.__new__(t);
n.__init__(n);

return n;
};

Expand Down
1 change: 1 addition & 0 deletions objects/src/type.winxed
Expand Up @@ -19,6 +19,7 @@ function type() {
};

t.__call__ = function(obj) {
say('creating type instance');
return obj.__class__;
};

Expand Down
4 changes: 1 addition & 3 deletions objects/t/instance.t
Expand Up @@ -99,10 +99,8 @@ class instance {

function call() {
var i = new Python.instance;
var c = new Python.instance;

i.__class__ = c;
c.__call__ = function(self){return 42;};
i.__call__ = function(obj){return 42;};

self.assert.equal(i(), 42);
}
Expand Down
16 changes: 6 additions & 10 deletions objects/t/type.t
Expand Up @@ -111,14 +111,11 @@ class type {
:(var t, var o) = boot();

var i = o();
say(i.__class__.__name__);

//self.assert.same(i.__class__, o);
self.assert.same(i.__class__, o); // it's t instead of o for some reason
}
function instance_get() {
self.status.todo('__getattribute__ broken for now.');

:(var t, var o) = boot();
var func = o.__new__;
Expand Down Expand Up @@ -155,20 +152,19 @@ class type {
function instance_set_attr() {
:(var t, var o) = boot();
var func = o.__new__;
var i = func(o);
var i = o.__new__(o);
i.foo = 'bar';
self.assert.equal(i.foo, 'bar');
}
function non_data_descriptor() {
:(var t, var o) = boot();
var f = o.__new__;
var i = f(o);

i.__get__ = function(attr, obj) {return 42;};
var i = o.__new__(o);
i.__get__ = function(obj, attr) {return 42;};
t.i = i;
self.assert.equal(t.i, 42);
}
}
Expand Down

0 comments on commit 38411c7

Please sign in to comment.