class TestCase::Scope {
  
  static method switch : int () {
    
    # switch condition has own scope
    {
      switch (my $num = 1) {
        
      }
      
      my $num = 2;
      
      unless ($num == 2) {
        return 0;
      }
    }
    
    # Objects in condition part is destroyed.
    {
      switch ((my $object = Int->new(1), my $num = 1, $num)) {
        
      }
    }
    
    return 1;
  }
  
  static method while : int () {
    
    # while condition has own scope
    {
      while (my $num = 0) {
        
      }
      
      my $num = 2;
      
      unless ($num == 2) {
        return 0;
      }
    }
    
    # Objects in condition part is destroyed.
    {
      while ((my $object = Int->new(1), my $num = 0, $num)) {
        
      }
    }
    
    return 1;
  }
  
  static method if : int () {
    
    # while condition has own scope
    {
      if (my $num = 0) {
        
      }
      
      my $num = 2;
      
      unless ($num == 2) {
        return 0;
      }
    }
    
    # Objects in condition part is destroyed.
    {
      if ((my $object = Int->new(1), my $num = 0, $num)) {
        
      }
    }
    
    return 1;
  }
  
  static method extra : int () {
    
    {
      if (0) {
        "";
      }
    }
    
    return 1;
  }
}
