cvsuser 04/07/14 05:18:12
Modified: . MANIFEST
languages/python mdis.py pie-thon.pl
ops object.ops
Added: languages/python/t/basic oo_class.t
Log:
Pie-thon 65 - instantiate an object derived from int
Revision Changes Path
1.706 +2 -1 parrot/MANIFEST
Index: MANIFEST
===================================================================
RCS file: /cvs/public/parrot/MANIFEST,v
retrieving revision 1.705
retrieving revision 1.706
diff -u -w -r1.705 -r1.706
--- MANIFEST 13 Jul 2004 14:09:08 -0000 1.705
+++ MANIFEST 14 Jul 2004 12:18:02 -0000 1.706
@@ -2271,6 +2271,7 @@
languages/python/t/basic/03_types.t []
languages/python/t/basic/func.t []
languages/python/t/basic/oo_attr.t []
+languages/python/t/basic/oo_class.t []
languages/python/t/basic/iter.t []
languages/python/t/pie/b2.t []
languages/python/t/pie/b5.t []
1.1 parrot/languages/python/t/basic/oo_class.t
Index: oo_class.t
===================================================================
# $Id: oo_class.t,v 1.1 2004/07/14 12:18:06 leo Exp $
use strict;
use lib '../../lib';
use Parrot::Test tests => 1;
sub test {
language_output_is('python', $_[0], '', $_[1]);
}
test(<<'CODE', 'object isa');
class C(int):
pass
def main():
i = C()
print isinstance(i, C)
print isinstance(i, int)
print isinstance(i, long)
if __name__ == '__main__':
main()
CODE
1.2 +6 -0 parrot/languages/python/mdis.py
Index: mdis.py
===================================================================
RCS file: /cvs/public/parrot/languages/python/mdis.py,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -w -r1.1 -r1.2
--- mdis.py 12 Jul 2004 10:49:35 -0000 1.1
+++ mdis.py 14 Jul 2004 12:18:08 -0000 1.2
@@ -145,7 +145,13 @@
print
for i, c in consts.items():
print
+ # class creation code seem to have that name inside
+ for n in c.co_names:
+ if n == ('__module__'):
+ i = 'Build::' + i
+ break
print "Disassembly of %s" % i
+ print "#dir %s" % dir(c)
disassemble(c)
def disassemble_string(code, lasti=-1, varnames=None, names=None,
1.43 +34 -6 parrot/languages/python/pie-thon.pl
Index: pie-thon.pl
===================================================================
RCS file: /cvs/public/parrot/languages/python/pie-thon.pl,v
retrieving revision 1.42
retrieving revision 1.43
diff -u -w -r1.42 -r1.43
--- pie-thon.pl 14 Jul 2004 09:42:25 -0000 1.42
+++ pie-thon.pl 14 Jul 2004 12:18:08 -0000 1.43
@@ -19,6 +19,7 @@
my %builtin_ops = (
abs => 'o',
+ isinstance => 's',
);
my %builtins = (
@@ -452,12 +453,18 @@
$p = promote($tos);
if ($cur_func eq 'test::main') {
$main_names{$c} = $p;
+ print <<EOC;
+ store_lex -1, "$c", $p $cmt
+EOC
}
+ else {
print <<EOC;
store_lex -1, $n, $p $cmt
EOC
}
+ }
$names{$c} = $p;
+ $lexicals{$c} = $p;
}
sub STORE_GLOBAL {
@@ -497,7 +504,7 @@
elsif ($main_names{$c}) {
$p = temp('P');
print <<EOC;
- $p = find_lex -1, $n $cmt
+ $p = find_lex "$c" $cmt
EOC
}
else {
@@ -932,6 +939,23 @@
return $rets{$a} if defined $rets{$a};
return 'P';
}
+sub OPC_isinstance
+{
+ my ($n, $c, $cmt) = @_;
+ my $i = temp('I');
+ my $cl = pop @stack;
+ my $ob = pop @stack;
+ my $s = temp('S');
+ my $b = temp('P');
+ # TODO make op or function
+ print <<EOC;
+ $s = classname $cl->[1]
+ $i = isa $ob->[1], $s
+ $b = new Boolean
+ $b = $i
+EOC
+ push @stack, [-1, $b, 'P'];
+}
sub CALL_FUNCTION
{
@@ -1002,7 +1026,7 @@
if ($tos->[2] eq 'o') { # builtin opcode
$t = temp('P');
print <<EOC;
- $t = new $DEFVAR
+ $t = new $DEFVAR # builtin opcode
$t = $func $args $cmt
EOC
}
@@ -1055,10 +1079,12 @@
sub LOAD_FAST
{
my ($n, $c, $cmt) = @_;
- if ($lexicals{$c}) {
+ my $p;
+ if ($p=$lexicals{$c}) {
print <<EOC;
- # lexical $n '$c' $cmt
+ # lexical $n '$c' := $p $cmt
EOC
+ $c = $p;
}
else {
my $p = 5 + keys %params;
@@ -1077,9 +1103,11 @@
sub STORE_FAST
{
+ return STORE_NAME(@_);
my ($n, $c, $cmt) = @_;
my $tos = pop @stack;
- if ($lexicals{$c}) {
+ my $p;
+ if ($p = $lexicals{$c}) {
print <<"EOC";
assign $c, $tos->[1] $cmt
EOC
1.45 +7 -6 parrot/ops/object.ops
Index: object.ops
===================================================================
RCS file: /cvs/public/parrot/ops/object.ops,v
retrieving revision 1.44
retrieving revision 1.45
diff -u -w -r1.44 -r1.45
--- object.ops 23 Jun 2004 07:14:35 -0000 1.44
+++ object.ops 14 Jul 2004 12:18:12 -0000 1.45
@@ -292,8 +292,9 @@
PMC* classname_pmc;
if (!(PObj_get_FLAGS($2) & (PObj_is_class_FLAG|PObj_is_object_FLAG))) {
- internal_exception(NO_CLASS, "PMC is neither class nor object");
+ $1 = VTABLE_name(interpreter, $2);
}
+ else {
classname_pmc = get_attrib_num((Buffer *)PMC_data($2), PCD_CLASS_NAME);
if (classname_pmc) {
$1 = VTABLE_get_string(interpreter, classname_pmc);
@@ -301,7 +302,7 @@
else {
internal_exception(NO_CLASS, "Class doesn't exist");
}
-
+ }
goto NEXT();
}