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();
   }
   
  
  
  

Reply via email to