fglock / Perlito

"Perlito" Perl programming language compiler
http://fglock.github.io/Perlito/
Other
414 stars 47 forks source link

Supposedly blessed reference is not blessed #35

Closed kurpitsa closed 8 years ago

kurpitsa commented 8 years ago

I have a file A.pm:

package A;

sub test { bless {}; }

sub somemethod { print "test"; }

1;

and test.pl:

use A;

works:

A->somemethod();

dies:

A->test()->somemethod();

Now if i run

perl test.pl

Output is:

testtest

But if instead

nodejs ./perlito5.js -I./src5/lib -I./lib -I. ./test.pl

I get:

testCan't locate object method "somemethod" via package "undefined" (perhaps you forgot to load "undefined"?) at ./test.pl line 13 Error at CORE.die (/home/ipe/Fortress/game_perl/Perlito-master/perlito5.js:2746:28) at p5call (/home/ipe/Fortress/game_perl/Perlito-master/perlito5.js:192:20) at eval (eval at (/home/ipe/Fortress/game_perl/Perlito-master/perlito5.js:42606:56), :17:2) at eval (eval at (/home/ipe/Fortress/game_perl/Perlito-master/perlito5.js:42606:56), :19:3) at /home/ipe/Fortress/game_perl/Perlito-master/perlito5.js:42606:11 at /home/ipe/Fortress/game_perl/Perlito-master/perlito5.js:42627:7 at /home/ipe/Fortress/game_perl/Perlito-master/perlito5.js:42643:6 at /home/ipe/Fortress/game_perl/Perlito-master/perlito5.js:42950:5 at /home/ipe/Fortress/game_perl/Perlito-master/perlito5.js:42963:4 at Object. (/home/ipe/Fortress/game_perl/Perlito-master/perlito5.js:42964:3)

So the method test does not return a blessed reference as it should. I have compiled perlito5.js using build-5js.

fglock commented 8 years ago

I've pushed a fix - "implemented 1-argument bless()":

diff --git a/src5/lib/Perlito5/Javascript2/Emitter.pm b/src5/lib/Perlito5/Javascript2/Emitter.pm index 4872748..e509870 100644 --- a/src5/lib/Perlito5/Javascript2/Emitter.pm +++ b/src5/lib/Perlito5/Javascript2/Emitter.pm @@ -1607,6 +1607,17 @@ package Perlito5::AST::Apply; my $self = $_[0]; 'p5make_package(' . Perlito5::Javascript2::escape_string($self->{namespace} ) . ')'; },

2015-12-08 20:15 GMT+01:00 kurpitsa notifications@github.com:

I have a file A.pm:

package A;

sub test { bless {}; }

sub somemethod { print "test"; }

1;

and test.pl:

use A;

works:

A->somemethod();

dies:

A->test()->somemethod();

Now if i run

perl test.pl

Output is:

testtest

But if instead

nodejs ./perlito5.js -I./src5/lib -I./lib -I. ./test.pl

I get:

testCan't locate object method "somemethod" via package "undefined" (perhaps you forgot to load "undefined"?) at ./test.pl line 13 Error at CORE.die (/home/ipe/Fortress/game_perl/Perlito-master/perlito5.js:2746:28) at p5call (/home/ipe/Fortress/game_perl/Perlito-master/perlito5.js:192:20) at eval (eval at (/home/ipe/Fortress/game_perl/Perlito-master/perlito5.js:42606:56), :17:2) at eval (eval at (/home/ipe/Fortress/game_perl/Perlito-master/perlito5.js:42606:56), :19:3) at /home/ipe/Fortress/game_perl/Perlito-master/perlito5.js:42606:11 at /home/ipe/Fortress/game_perl/Perlito-master/perlito5.js:42627:7 at /home/ipe/Fortress/game_perl/Perlito-master/perlito5.js:42643:6 at /home/ipe/Fortress/game_perl/Perlito-master/perlito5.js:42950:5 at /home/ipe/Fortress/game_perl/Perlito-master/perlito5.js:42963:4 at Object. (/home/ipe/Fortress/game_perl/Perlito-master/perlito5.js:42964:3)

So the method test does not return a blessed reference as it should. I have compiled perlito5.js using build-5js.

— Reply to this email directly or view it on GitHub https://github.com/fglock/Perlito/issues/35.

kurpitsa commented 8 years ago

Ok, seems to work, thanks!