1. 08 May, 2001 1 kayıt (commit)
  2. 14 Nis, 2001 2 kayıt (commit)
  3. 21 Mar, 2001 1 kayıt (commit)
    • Jeremy Hylton's avatar
      Fix PyFrame_FastToLocals() and counterpart to deal with cells and · 220ae7c0
      Jeremy Hylton yazdı
      frees.  Note there doesn't seem to be any way to test LocalsToFast(),
      because the instructions that trigger it are illegal in nested scopes
      with free variables.
      
      Fix allocation strategy for cells that are also formal parameters.
      Instead of emitting LOAD_FAST / STORE_DEREF pairs for each parameter,
      have the argument handling code in eval_code2() do the right thing.
      
      A side-effect of this change is that cell variables that are also
      arguments are listed at the front of co_cellvars in the order they
      appear in the argument list.
      220ae7c0
  4. 13 Mar, 2001 1 kayıt (commit)
    • Jeremy Hylton's avatar
      Variety of small INC/DECREF patches that fix reported memory leaks · 30c9f399
      Jeremy Hylton yazdı
      with free variables.  Thanks to Martin v. Loewis for finding two of
      the problems.  This fixes SF buf 405583.
      
      There is also a C API change: PyFrame_New() is reverting to its
      pre-2.1 signature.  The change introduced by nested scopes was a
      mistake.  XXX Is this okay between beta releases?
      
      cell_clear(), the GC helper, must decref its reference to break
      cycles.
      
      frame_dealloc() must dealloc all cell vars and free vars in addition
      to locals.
      
      eval_code2() setup code must INCREF cells it copies out of the
      closure.
      
      The STORE_DEREF opcode implementation must DECREF the object it passes
      to PyCell_Set().
      30c9f399
  5. 29 Ock, 2001 1 kayıt (commit)
    • Jeremy Hylton's avatar
      Remove f_closure slot of frameobject and use f_localsplus instead. · 2b724da8
      Jeremy Hylton yazdı
      This change eliminates an extra malloc/free when a frame with free
      variables is created.  Any cell vars or free vars are stored in
      f_localsplus after the locals and before the stack.
      
      eval_code2() fills in the appropriate values after handling
      initialization of locals.
      
      To track the size the frame has an f_size member that tracks the total
      size of f_localsplus. It used to be implicitly f_nlocals + f_stacksize.
      2b724da8
  6. 25 Ock, 2001 1 kayıt (commit)
    • Jeremy Hylton's avatar
      PEP 227 implementation · 64949cb7
      Jeremy Hylton yazdı
      The majority of the changes are in the compiler.  The mainloop changes
      primarily to implement the new opcodes and to pass a function's
      closure to eval_code2().  Frames and functions got new slots to hold
      the closure.
      
      Include/compile.h
          Add co_freevars and co_cellvars slots to code objects.
          Update PyCode_New() to take freevars and cellvars as arguments
      Include/funcobject.h
          Add func_closure slot to function objects.
          Add GetClosure()/SetClosure() functions (and corresponding
          macros) for getting at the closure.
      Include/frameobject.h
          PyFrame_New() now takes a closure.
      Include/opcode.h
          Add four new opcodes: MAKE_CLOSURE, LOAD_CLOSURE, LOAD_DEREF,
          STORE_DEREF.
          Remove comment about old requirement for opcodes to fit in 7
          bits.
      compile.c
          Implement changes to code objects for co_freevars and co_cellvars.
      
          Modify symbol table to use st_cur_name (string object for the name
          of the current scope) and st_cur_children (list of nested blocks).
          Also define st_nested, which might more properly be called
          st_cur_nested.  Add several DEF_XXX flags to track def-use
          information for free variables.
      
          New or modified functions of note:
          com_make_closure(struct compiling *, PyCodeObject *)
              Emit LOAD_CLOSURE opcodes as needed to pass cells for free
              variables into nested scope.
          com_addop_varname(struct compiling *, int, char *)
              Emits opcodes for LOAD_DEREF and STORE_DEREF.
          get_ref_type(struct compiling *, char *name)
              Return NAME_CLOSURE if ref type is FREE or CELL
          symtable_load_symbols(struct compiling *)
              Decides what variables are cell or free based on def-use info.
              Can now raise SyntaxError if nested scopes are mixed with
              exec or from blah import *.
          make_scope_info(PyObject *, PyObject *, int, int)
              Helper functions for symtable scope stack.
          symtable_update_free_vars(struct symtable *)
              After a code block has been analyzed, it must check each of
              its children for free variables that are not defined in the
              block.  If a variable is free in a child and not defined in
              the parent, then it is defined by block the enclosing the
              current one or it is a global.  This does the right logic.
          symtable_add_use() is now a macro for symtable_add_def()
          symtable_assign(struct symtable *, node *)
              Use goto instead of for (;;)
      
          Fixed bug in symtable where name of keyword argument in function
          call was treated as assignment in the scope of the call site. Ex:
              def f():
                  g(a=2) # a was considered a local of f
      
      ceval.c
          eval_code2() now take one more argument, a closure.
          Implement LOAD_CLOSURE, LOAD_DEREF, STORE_DEREF, MAKE_CLOSURE>
      
          Also: When name error occurs for global variable, report that the
          name was global in the error mesage.
      
      Objects/frameobject.c
          Initialize f_closure to be a tuple containing space for cellvars
          and freevars.  f_closure is NULL if neither are present.
      Objects/funcobject.c
          Add support for func_closure.
      Python/import.c
          Change the magic number.
      Python/marshal.c
          Track changes to code objects.
      64949cb7
  7. 01 Eyl, 2000 1 kayıt (commit)
  8. 09 Tem, 2000 1 kayıt (commit)
  9. 30 Haz, 2000 2 kayıt (commit)
  10. 03 May, 2000 1 kayıt (commit)
    • Guido van Rossum's avatar
      Vladimir Marangozov's long-awaited malloc restructuring. · b18618da
      Guido van Rossum yazdı
      For more comments, read the patches@python.org archives.
      For documentation read the comments in mymalloc.h and objimpl.h.
      
      (This is not exactly what Vladimir posted to the patches list; I've
      made a few changes, and Vladimir sent me a fix in private email for a
      problem that only occurs in debug mode.  I'm also holding back on his
      change to main.c, which seems unnecessary to me.)
      b18618da
  11. 13 Mar, 2000 1 kayıt (commit)
    • Guido van Rossum's avatar
      Christian Tismer's "trashcan" patch: · d724b234
      Guido van Rossum yazdı
      Added wrapping macros to dictobject.c, listobject.c, tupleobject.c,
      frameobject.c, traceback.c that safely prevends core dumps
      on stack overflow. Macros and functions in object.c, object.h.
      The method is an "elevator destructor" that turns cascading
      deletes into tail recursive behavior when some limit is hit.
      d724b234
  12. 20 Ock, 2000 1 kayıt (commit)
  13. 19 Eki, 1998 1 kayıt (commit)
  14. 25 Eyl, 1998 1 kayıt (commit)
  15. 14 May, 1998 1 kayıt (commit)
  16. 19 Şub, 1998 1 kayıt (commit)
  17. 31 Eki, 1997 1 kayıt (commit)
  18. 05 Agu, 1997 1 kayıt (commit)
  19. 02 Agu, 1997 1 kayıt (commit)
  20. 05 May, 1997 1 kayıt (commit)
  21. 29 Nis, 1997 1 kayıt (commit)
  22. 03 Nis, 1997 1 kayıt (commit)
  23. 14 Şub, 1997 1 kayıt (commit)
  24. 24 Ock, 1997 1 kayıt (commit)
  25. 20 Ock, 1997 2 kayıt (commit)
    • Guido van Rossum's avatar
      3bb63a8d
    • Guido van Rossum's avatar
      Changes that appear to give another 12% speedup. · f3e85a03
      Guido van Rossum yazdı
      Rather than allocating a list object for the fast locals and another
      (extensible one) for the value stack and allocating the block stack
      dynamically, allocate the block stack with a fixed size (CO_MAXBLOCKS
      from compile.h), and stick the locals and value stack at the end of
      the object (this is now possible since the stack size is known
      beforehand).  Get rid of the owner field and the nvalues argument --
      it is available in the code object, like nlocals.
      
      This requires small changes in ceval.c only.
      f3e85a03
  26. 18 Ock, 1997 1 kayıt (commit)
  27. 17 Ock, 1997 1 kayıt (commit)
  28. 05 Ara, 1996 1 kayıt (commit)
  29. 25 Eki, 1996 1 kayıt (commit)
  30. 26 Tem, 1995 1 kayıt (commit)
  31. 18 Tem, 1995 1 kayıt (commit)
  32. 04 Nis, 1995 1 kayıt (commit)
  33. 17 Ock, 1995 1 kayıt (commit)
  34. 10 Ock, 1995 1 kayıt (commit)
  35. 04 Ock, 1995 1 kayıt (commit)
  36. 02 Ock, 1995 1 kayıt (commit)
  37. 30 Agu, 1994 1 kayıt (commit)