#(* SP 13 6 *)

class print_some_c:
  def __init__(s, l):
    s.l = l

  def __call__(s, f):
    def decorated(*args):
      # Print all arguments with indices in l
      for i in s.l:
        if (i < len(args) and i >= 0):
          print "Arg %d: %s" % (i, str(args[i])) 

      ret = f(*args);
      # Print  returns if there are -1 in l
      if (-1 in s.l):
        print "Return %s" % str(ret)

      return ret
    return decorated

def print_some_f(l):
  def decorator(f):
    def decorated(*args):
      # Print all arguments with indices in l
      for i in l:
        if (i < len(args) and i >= 0):
          print "Arg %d: %s" % (i, str(args[i])) 

      ret = f(*args);
      # Print  returns if there are -1 in l
      if (-1 in l):
        print "Return %s" % str(ret)

      return ret
    return decorated
      
  return decorator

@print_some_f([-1,1,0])
def plus(x,y):
    print "WASSSAAAAP"
    return x+y

plus(1,3)

