[pypy-svn] r39399 - in pypy/branch/ast-experiments: . lib-python lib-python/modified-2.4.1 lib-python/modified-2.4.1/test pypy pypy/annotation pypy/annotation/test pypy/bin pypy/config pypy/config/test pypy/doc pypy/doc/config pypy/doc/js pypy/doc/statistic pypy/doc/tool pypy/jit/codegen/llvm pypy/lang/automata/test pypy/lang/js pypy/lang/js/test pypy/lang/js/test/ecma pypy/lib/cslib pypy/lib/distributed pypy/lib/distributed/demo pypy/lib/distributed/test pypy/lib/pyontology pypy/lib/pyontology/test pypy/module/_cslib pypy/module/_stackless pypy/module/crypt pypy/module/sys pypy/objspace pypy/objspace/std pypy/rlib/cslib pypy/rpython pypy/rpython/lltypesystem pypy/rpython/memory/gctransform pypy/rpython/test pypy/tool pypy/tool/build pypy/tool/build/templates pypy/tool/build/test pypy/translator/c/src pypy/translator/cli/test pypy/translator/goal pypy/translator/js pypy/translator/js/demo pypy/translator/js/examples pypy/translator/js/examples/bnb pypy/translator/js/examples/bnb/data pypy/translator/js/examples/console pypy/translator/js/examples/console/test pypy/translator/js/examples/data pypy/translator/js/examples/djangoping pypy/translator/js/examples/djangoping/test pypy/translator/js/examples/test pypy/translator/js/lib pypy/translator/js/lib/test pypy/translator/js/modules pypy/translator/js/modules/test pypy/translator/js/test pypy/translator/llvm pypy/translator/llvm/module pypy/translator/llvm/test pypy/translator/oosupport

afayolle at codespeak.net afayolle at codespeak.net
Mon Feb 26 08:46:02 CET 2007


Author: afayolle
Date: Mon Feb 26 08:45:45 2007
New Revision: 39399

Added:
   pypy/branch/ast-experiments/pypy/doc/config/commandline.txt
      - copied unchanged from r39398, pypy/dist/pypy/doc/config/commandline.txt
   pypy/branch/ast-experiments/pypy/doc/config/index.txt
      - copied unchanged from r39398, pypy/dist/pypy/doc/config/index.txt
   pypy/branch/ast-experiments/pypy/doc/config/mergedblocks.png
      - copied unchanged from r39398, pypy/dist/pypy/doc/config/mergedblocks.png
   pypy/branch/ast-experiments/pypy/doc/config/unmergedblocks.png
      - copied unchanged from r39398, pypy/dist/pypy/doc/config/unmergedblocks.png
   pypy/branch/ast-experiments/pypy/doc/js/testing.txt
      - copied unchanged from r39398, pypy/dist/pypy/doc/js/testing.txt
   pypy/branch/ast-experiments/pypy/doc/release-0.99.0.txt
      - copied unchanged from r39398, pypy/dist/pypy/doc/release-0.99.0.txt
   pypy/branch/ast-experiments/pypy/doc/statistic/python-list.txt
      - copied unchanged from r39398, pypy/dist/pypy/doc/statistic/python-list.txt
   pypy/branch/ast-experiments/pypy/lang/js/conftest.py
      - copied unchanged from r39398, pypy/dist/pypy/lang/js/conftest.py
   pypy/branch/ast-experiments/pypy/lang/js/test/ecma/conftest.py
      - copied unchanged from r39398, pypy/dist/pypy/lang/js/test/ecma/conftest.py
   pypy/branch/ast-experiments/pypy/lib/cslib/
      - copied from r39398, pypy/dist/pypy/lib/cslib/
   pypy/branch/ast-experiments/pypy/lib/distributed/demo/
      - copied from r39398, pypy/dist/pypy/lib/distributed/demo/
   pypy/branch/ast-experiments/pypy/module/_cslib/
      - copied from r39398, pypy/dist/pypy/module/_cslib/
   pypy/branch/ast-experiments/pypy/rlib/cslib/
      - copied from r39398, pypy/dist/pypy/rlib/cslib/
   pypy/branch/ast-experiments/pypy/tool/build/templates/
      - copied from r39398, pypy/dist/pypy/tool/build/templates/
   pypy/branch/ast-experiments/pypy/tool/build/test/test_webserver.py
      - copied unchanged from r39398, pypy/dist/pypy/tool/build/test/test_webserver.py
   pypy/branch/ast-experiments/pypy/tool/build/webapp.py
      - copied unchanged from r39398, pypy/dist/pypy/tool/build/webapp.py
   pypy/branch/ast-experiments/pypy/tool/build/webserver.py
      - copied unchanged from r39398, pypy/dist/pypy/tool/build/webserver.py
   pypy/branch/ast-experiments/pypy/translator/js/examples/console/   (props changed)
      - copied from r39398, pypy/dist/pypy/translator/js/examples/console/
   pypy/branch/ast-experiments/pypy/translator/js/examples/djangoping/   (props changed)
      - copied from r39398, pypy/dist/pypy/translator/js/examples/djangoping/
   pypy/branch/ast-experiments/pypy/translator/js/examples/guestbook.py
      - copied unchanged from r39398, pypy/dist/pypy/translator/js/examples/guestbook.py
   pypy/branch/ast-experiments/pypy/translator/js/examples/guestbook_client.py
      - copied unchanged from r39398, pypy/dist/pypy/translator/js/examples/guestbook_client.py
   pypy/branch/ast-experiments/pypy/translator/js/examples/test/test_examples.py
      - copied unchanged from r39398, pypy/dist/pypy/translator/js/examples/test/test_examples.py
   pypy/branch/ast-experiments/pypy/translator/js/modules/test/test_mochikit.py
      - copied unchanged from r39398, pypy/dist/pypy/translator/js/modules/test/test_mochikit.py
Removed:
   pypy/branch/ast-experiments/pypy/doc/config/objspace.std.llvmallopts.txt
   pypy/branch/ast-experiments/pypy/doc/config/translation.debug_transform.txt
   pypy/branch/ast-experiments/pypy/translator/js/demo/
   pypy/branch/ast-experiments/pypy/translator/js/examples/console.py
Modified:
   pypy/branch/ast-experiments/LICENSE
   pypy/branch/ast-experiments/README
   pypy/branch/ast-experiments/lib-python/conftest.py
   pypy/branch/ast-experiments/lib-python/modified-2.4.1/socket.py
   pypy/branch/ast-experiments/lib-python/modified-2.4.1/test/test_descr.py
   pypy/branch/ast-experiments/pypy/annotation/test/test_annrpython.py
   pypy/branch/ast-experiments/pypy/annotation/unaryop.py
   pypy/branch/ast-experiments/pypy/bin/py.py
   pypy/branch/ast-experiments/pypy/config/config.py
   pypy/branch/ast-experiments/pypy/config/makerestdoc.py
   pypy/branch/ast-experiments/pypy/config/pypyoption.py
   pypy/branch/ast-experiments/pypy/config/test/test_makerestdoc.py
   pypy/branch/ast-experiments/pypy/config/translationoption.py
   pypy/branch/ast-experiments/pypy/conftest.py
   pypy/branch/ast-experiments/pypy/doc/_ref.txt
   pypy/branch/ast-experiments/pypy/doc/architecture.txt
   pypy/branch/ast-experiments/pypy/doc/cleanup-todo.txt
   pypy/branch/ast-experiments/pypy/doc/cli-backend.txt
   pypy/branch/ast-experiments/pypy/doc/coding-guide.txt
   pypy/branch/ast-experiments/pypy/doc/config/confrest.py
   pypy/branch/ast-experiments/pypy/doc/config/objspace.allworkingmodules.txt
   pypy/branch/ast-experiments/pypy/doc/config/objspace.compiler.txt
   pypy/branch/ast-experiments/pypy/doc/config/objspace.logbytecodes.txt
   pypy/branch/ast-experiments/pypy/doc/config/objspace.lowmem.txt
   pypy/branch/ast-experiments/pypy/doc/config/objspace.name.txt
   pypy/branch/ast-experiments/pypy/doc/config/objspace.nofaking.txt
   pypy/branch/ast-experiments/pypy/doc/config/objspace.opcodes.CALL_LIKELY_BUILTIN.txt
   pypy/branch/ast-experiments/pypy/doc/config/objspace.opcodes.txt
   pypy/branch/ast-experiments/pypy/doc/config/objspace.parser.txt
   pypy/branch/ast-experiments/pypy/doc/config/objspace.std.methodcachesize.txt
   pypy/branch/ast-experiments/pypy/doc/config/objspace.std.optimized_int_add.txt
   pypy/branch/ast-experiments/pypy/doc/config/objspace.std.prebuiltintfrom.txt
   pypy/branch/ast-experiments/pypy/doc/config/objspace.std.prebuiltintto.txt
   pypy/branch/ast-experiments/pypy/doc/config/objspace.std.txt
   pypy/branch/ast-experiments/pypy/doc/config/objspace.std.withdictmeasurement.txt
   pypy/branch/ast-experiments/pypy/doc/config/objspace.std.withfastslice.txt
   pypy/branch/ast-experiments/pypy/doc/config/objspace.std.withmethodcache.txt
   pypy/branch/ast-experiments/pypy/doc/config/objspace.std.withmethodcachecounter.txt
   pypy/branch/ast-experiments/pypy/doc/config/objspace.std.withmultidict.txt
   pypy/branch/ast-experiments/pypy/doc/config/objspace.std.withmultilist.txt
   pypy/branch/ast-experiments/pypy/doc/config/objspace.std.withprebuiltint.txt
   pypy/branch/ast-experiments/pypy/doc/config/objspace.std.withrangelist.txt
   pypy/branch/ast-experiments/pypy/doc/config/objspace.std.withsharingdict.txt
   pypy/branch/ast-experiments/pypy/doc/config/objspace.std.withstrdict.txt
   pypy/branch/ast-experiments/pypy/doc/config/objspace.std.withstrjoin.txt
   pypy/branch/ast-experiments/pypy/doc/config/objspace.std.withstrslice.txt
   pypy/branch/ast-experiments/pypy/doc/config/objspace.std.withtypeversion.txt
   pypy/branch/ast-experiments/pypy/doc/config/objspace.txt
   pypy/branch/ast-experiments/pypy/doc/config/objspace.usemodules._codecs.txt
   pypy/branch/ast-experiments/pypy/doc/config/objspace.usemodules._demo.txt
   pypy/branch/ast-experiments/pypy/doc/config/objspace.usemodules._file.txt
   pypy/branch/ast-experiments/pypy/doc/config/objspace.usemodules._pickle_support.txt
   pypy/branch/ast-experiments/pypy/doc/config/objspace.usemodules._random.txt
   pypy/branch/ast-experiments/pypy/doc/config/objspace.usemodules._stackless.txt
   pypy/branch/ast-experiments/pypy/doc/config/objspace.usemodules._weakref.txt
   pypy/branch/ast-experiments/pypy/doc/config/objspace.usemodules.bz2.txt
   pypy/branch/ast-experiments/pypy/doc/config/objspace.usemodules.posix.txt
   pypy/branch/ast-experiments/pypy/doc/config/objspace.usemodules.pypymagic.txt
   pypy/branch/ast-experiments/pypy/doc/config/objspace.usemodules.rctime.txt
   pypy/branch/ast-experiments/pypy/doc/config/objspace.usemodules.recparser.txt
   pypy/branch/ast-experiments/pypy/doc/config/objspace.usemodules.rsocket.txt
   pypy/branch/ast-experiments/pypy/doc/config/objspace.usemodules.time.txt
   pypy/branch/ast-experiments/pypy/doc/config/objspace.usemodules.txt
   pypy/branch/ast-experiments/pypy/doc/config/objspace.usepycfiles.txt
   pypy/branch/ast-experiments/pypy/doc/config/translation.backend.txt
   pypy/branch/ast-experiments/pypy/doc/config/translation.backendopt.clever_malloc_removal.txt
   pypy/branch/ast-experiments/pypy/doc/config/translation.backendopt.clever_malloc_removal_heuristic.txt
   pypy/branch/ast-experiments/pypy/doc/config/translation.backendopt.clever_malloc_removal_threshold.txt
   pypy/branch/ast-experiments/pypy/doc/config/translation.backendopt.constfold.txt
   pypy/branch/ast-experiments/pypy/doc/config/translation.backendopt.heap2stack.txt
   pypy/branch/ast-experiments/pypy/doc/config/translation.backendopt.inline.txt
   pypy/branch/ast-experiments/pypy/doc/config/translation.backendopt.inline_heuristic.txt
   pypy/branch/ast-experiments/pypy/doc/config/translation.backendopt.inline_threshold.txt
   pypy/branch/ast-experiments/pypy/doc/config/translation.backendopt.mallocs.txt
   pypy/branch/ast-experiments/pypy/doc/config/translation.backendopt.merge_if_blocks.txt
   pypy/branch/ast-experiments/pypy/doc/config/translation.backendopt.print_statistics.txt
   pypy/branch/ast-experiments/pypy/doc/config/translation.backendopt.profile_based_inline.txt
   pypy/branch/ast-experiments/pypy/doc/config/translation.backendopt.profile_based_inline_heuristic.txt
   pypy/branch/ast-experiments/pypy/doc/config/translation.backendopt.profile_based_inline_threshold.txt
   pypy/branch/ast-experiments/pypy/doc/config/translation.backendopt.raisingop2direct_call.txt
   pypy/branch/ast-experiments/pypy/doc/config/translation.backendopt.remove_asserts.txt
   pypy/branch/ast-experiments/pypy/doc/config/translation.backendopt.txt
   pypy/branch/ast-experiments/pypy/doc/config/translation.builtins_can_raise_exceptions.txt
   pypy/branch/ast-experiments/pypy/doc/config/translation.cc.txt
   pypy/branch/ast-experiments/pypy/doc/config/translation.cli.trace_calls.txt
   pypy/branch/ast-experiments/pypy/doc/config/translation.cli.txt
   pypy/branch/ast-experiments/pypy/doc/config/translation.compilerflags.txt
   pypy/branch/ast-experiments/pypy/doc/config/translation.countmallocs.txt
   pypy/branch/ast-experiments/pypy/doc/config/translation.debug.txt
   pypy/branch/ast-experiments/pypy/doc/config/translation.fork_before.txt
   pypy/branch/ast-experiments/pypy/doc/config/translation.gc.txt
   pypy/branch/ast-experiments/pypy/doc/config/translation.insist.txt
   pypy/branch/ast-experiments/pypy/doc/config/translation.instrument.txt
   pypy/branch/ast-experiments/pypy/doc/config/translation.instrumentctl.txt
   pypy/branch/ast-experiments/pypy/doc/config/translation.linkerflags.txt
   pypy/branch/ast-experiments/pypy/doc/config/translation.list_comprehension_operations.txt
   pypy/branch/ast-experiments/pypy/doc/config/translation.llvm_via_c.txt
   pypy/branch/ast-experiments/pypy/doc/config/translation.no__thread.txt
   pypy/branch/ast-experiments/pypy/doc/config/translation.output.txt
   pypy/branch/ast-experiments/pypy/doc/config/translation.profopt.txt
   pypy/branch/ast-experiments/pypy/doc/config/translation.simplifying.txt
   pypy/branch/ast-experiments/pypy/doc/config/translation.stackless.txt
   pypy/branch/ast-experiments/pypy/doc/config/translation.thread.txt
   pypy/branch/ast-experiments/pypy/doc/config/translation.txt
   pypy/branch/ast-experiments/pypy/doc/config/translation.type_system.txt
   pypy/branch/ast-experiments/pypy/doc/config/translation.vanilla.txt
   pypy/branch/ast-experiments/pypy/doc/config/translation.verbose.txt
   pypy/branch/ast-experiments/pypy/doc/config/translation.withsmallfuncsets.txt
   pypy/branch/ast-experiments/pypy/doc/configuration.txt
   pypy/branch/ast-experiments/pypy/doc/confrest.py
   pypy/branch/ast-experiments/pypy/doc/conftest.py
   pypy/branch/ast-experiments/pypy/doc/contact.txt
   pypy/branch/ast-experiments/pypy/doc/contributor.txt
   pypy/branch/ast-experiments/pypy/doc/dev_method.txt
   pypy/branch/ast-experiments/pypy/doc/eventhistory.txt
   pypy/branch/ast-experiments/pypy/doc/extcompiler.txt
   pypy/branch/ast-experiments/pypy/doc/extradoc.txt
   pypy/branch/ast-experiments/pypy/doc/faq.txt
   pypy/branch/ast-experiments/pypy/doc/geninterp.txt
   pypy/branch/ast-experiments/pypy/doc/getting-started.txt
   pypy/branch/ast-experiments/pypy/doc/glossary.txt
   pypy/branch/ast-experiments/pypy/doc/how-to-release.txt
   pypy/branch/ast-experiments/pypy/doc/index.txt
   pypy/branch/ast-experiments/pypy/doc/js/todo.txt
   pypy/branch/ast-experiments/pypy/doc/js/using.txt
   pypy/branch/ast-experiments/pypy/doc/js/webapps_with_pypy.txt
   pypy/branch/ast-experiments/pypy/doc/js/whatis.txt
   pypy/branch/ast-experiments/pypy/doc/news.txt
   pypy/branch/ast-experiments/pypy/doc/object-optimizations.txt
   pypy/branch/ast-experiments/pypy/doc/objspace-proxies.txt
   pypy/branch/ast-experiments/pypy/doc/objspace.txt
   pypy/branch/ast-experiments/pypy/doc/rctypes.txt
   pypy/branch/ast-experiments/pypy/doc/rlib.txt
   pypy/branch/ast-experiments/pypy/doc/statistic/loc.txt
   pypy/branch/ast-experiments/pypy/doc/statistic/number_files.txt
   pypy/branch/ast-experiments/pypy/doc/statistic/post.txt
   pypy/branch/ast-experiments/pypy/doc/statistic/release_dates.csv
   pypy/branch/ast-experiments/pypy/doc/statistic/sprint_dates.csv
   pypy/branch/ast-experiments/pypy/doc/statistic/statistic_irc_log.txt
   pypy/branch/ast-experiments/pypy/doc/statistic/subscribers.txt
   pypy/branch/ast-experiments/pypy/doc/tool/makecontributor.py
   pypy/branch/ast-experiments/pypy/doc/translation.txt
   pypy/branch/ast-experiments/pypy/doc/video-index.txt
   pypy/branch/ast-experiments/pypy/doc/windows.txt
   pypy/branch/ast-experiments/pypy/jit/codegen/llvm/rgenop.py
   pypy/branch/ast-experiments/pypy/lang/automata/test/test_dfa.py
   pypy/branch/ast-experiments/pypy/lang/js/driver.py
   pypy/branch/ast-experiments/pypy/lang/js/interpreter.py
   pypy/branch/ast-experiments/pypy/lang/js/js_interactive.py
   pypy/branch/ast-experiments/pypy/lang/js/jsobj.py
   pypy/branch/ast-experiments/pypy/lang/js/test/ecma/shell.js
   pypy/branch/ast-experiments/pypy/lang/js/test/test_interp.py
   pypy/branch/ast-experiments/pypy/lib/distributed/__init__.py
   pypy/branch/ast-experiments/pypy/lib/distributed/objkeeper.py
   pypy/branch/ast-experiments/pypy/lib/distributed/protocol.py
   pypy/branch/ast-experiments/pypy/lib/distributed/test/test_distributed.py
   pypy/branch/ast-experiments/pypy/lib/pyontology/pyontology.py
   pypy/branch/ast-experiments/pypy/lib/pyontology/test/test_ontology.py
   pypy/branch/ast-experiments/pypy/module/_stackless/interp_greenlet.py
   pypy/branch/ast-experiments/pypy/module/crypt/interp_crypt.py
   pypy/branch/ast-experiments/pypy/module/sys/version.py   (contents, props changed)
   pypy/branch/ast-experiments/pypy/objspace/std/stringobject.py
   pypy/branch/ast-experiments/pypy/objspace/taint.py
   pypy/branch/ast-experiments/pypy/objspace/thunk.py
   pypy/branch/ast-experiments/pypy/rpython/extfunc.py
   pypy/branch/ast-experiments/pypy/rpython/lltypesystem/lltype.py
   pypy/branch/ast-experiments/pypy/rpython/memory/gctransform/framework.py
   pypy/branch/ast-experiments/pypy/rpython/memory/gctransform/stacklessframework.py
   pypy/branch/ast-experiments/pypy/rpython/rfloat.py
   pypy/branch/ast-experiments/pypy/rpython/rint.py
   pypy/branch/ast-experiments/pypy/rpython/rmodel.py
   pypy/branch/ast-experiments/pypy/rpython/rtuple.py
   pypy/branch/ast-experiments/pypy/rpython/test/test_rlist.py
   pypy/branch/ast-experiments/pypy/rpython/test/test_rtuple.py
   pypy/branch/ast-experiments/pypy/tool/build/build.py
   pypy/branch/ast-experiments/pypy/tool/build/metaserver.py
   pypy/branch/ast-experiments/pypy/tool/build/test/test_metaserver.py
   pypy/branch/ast-experiments/pypy/tool/makerelease.py
   pypy/branch/ast-experiments/pypy/tool/option.py
   pypy/branch/ast-experiments/pypy/tool/statistic_over_time.py
   pypy/branch/ast-experiments/pypy/translator/c/src/obmalloc.c   (props changed)
   pypy/branch/ast-experiments/pypy/translator/c/src/signals.h   (contents, props changed)
   pypy/branch/ast-experiments/pypy/translator/cli/test/runtest.py
   pypy/branch/ast-experiments/pypy/translator/goal/app_main.py
   pypy/branch/ast-experiments/pypy/translator/goal/bench-cronjob.py
   pypy/branch/ast-experiments/pypy/translator/goal/targetjsstandalone.py
   pypy/branch/ast-experiments/pypy/translator/goal/translate.py
   pypy/branch/ast-experiments/pypy/translator/js/commproxy.py
   pypy/branch/ast-experiments/pypy/translator/js/examples/bnb/   (props changed)
   pypy/branch/ast-experiments/pypy/translator/js/examples/bnb/__init__.py   (props changed)
   pypy/branch/ast-experiments/pypy/translator/js/examples/bnb/bnb.py
   pypy/branch/ast-experiments/pypy/translator/js/examples/bnb/data/bnb.html
   pypy/branch/ast-experiments/pypy/translator/js/examples/bnb/servermessage.py
   pypy/branch/ast-experiments/pypy/translator/js/examples/console/test/   (props changed)
   pypy/branch/ast-experiments/pypy/translator/js/examples/data/index.html
   pypy/branch/ast-experiments/pypy/translator/js/examples/djangoping/test/   (props changed)
   pypy/branch/ast-experiments/pypy/translator/js/examples/over_client.py   (contents, props changed)
   pypy/branch/ast-experiments/pypy/translator/js/examples/overmind.py   (contents, props changed)
   pypy/branch/ast-experiments/pypy/translator/js/examples/pythonconsole.py
   pypy/branch/ast-experiments/pypy/translator/js/lib/support.py   (contents, props changed)
   pypy/branch/ast-experiments/pypy/translator/js/lib/test/__init__.py   (props changed)
   pypy/branch/ast-experiments/pypy/translator/js/lib/test/test_support.py   (props changed)
   pypy/branch/ast-experiments/pypy/translator/js/lib/test/test_url.py   (props changed)
   pypy/branch/ast-experiments/pypy/translator/js/lib/url.py   (props changed)
   pypy/branch/ast-experiments/pypy/translator/js/main.py
   pypy/branch/ast-experiments/pypy/translator/js/modules/dom.py
   pypy/branch/ast-experiments/pypy/translator/js/modules/mochikit.py
   pypy/branch/ast-experiments/pypy/translator/js/test/test_extfunc.py   (props changed)
   pypy/branch/ast-experiments/pypy/translator/js/test/test_main.py
   pypy/branch/ast-experiments/pypy/translator/js/test/test_rdict.py   (props changed)
   pypy/branch/ast-experiments/pypy/translator/llvm/buildllvm.py
   pypy/branch/ast-experiments/pypy/translator/llvm/externs2ll.py
   pypy/branch/ast-experiments/pypy/translator/llvm/gc.py
   pypy/branch/ast-experiments/pypy/translator/llvm/genllvm.py
   pypy/branch/ast-experiments/pypy/translator/llvm/module/support.py
   pypy/branch/ast-experiments/pypy/translator/llvm/test/runtest.py
   pypy/branch/ast-experiments/pypy/translator/oosupport/metavm.py
Log:
merge trunk with branch

svn merge -r 38798:39398  svn+ssh://codespeak.net/svn/pypy/dist



Modified: pypy/branch/ast-experiments/LICENSE
==============================================================================
--- pypy/branch/ast-experiments/LICENSE	(original)
+++ pypy/branch/ast-experiments/LICENSE	Mon Feb 26 08:45:45 2007
@@ -27,49 +27,73 @@
     DEALINGS IN THE SOFTWARE.
 
 
-PyPy Copyright holders 2003-2006
+PyPy Copyright holders 2003-2007
 ----------------------------------- 
 
 Except when otherwise stated (look for LICENSE files or information at
 the beginning of each file) the files in the 'pypy' directory are each
 copyrighted by one or more of the following people and organizations:    
 
-    Armin Rigo <arigo at tunes.org>
-    Samuele Pedroni <pedronis at strakt.com>
-    Holger Krekel <hpk at trillke.net>
-    Christian Tismer <tismer at tismer.com>
-    Michael Hudson <mwh at python.net>
-    Carl Friedrich Bolz <cfbolz at gmx.de>
-    Eric van Riet Paap <eric at vanrietpaap.nl>
-    Richard Emslie <rxe at ukshells.co.uk>
-    Anders Chrigstrom <ac at strakt.com>
-    Niklaus Haldimann <nhaldimann at gmx.ch>
-    Antonio Cuni <anto.cuni at gmail.com>
-    Maciek Fijalkowski <fijal at genesilico.pl>
-    Aurélien Campéas <aurelien.campeas at logilab.fr>
-    Seo Sanghyeon <sanxiyn at gmail.com>
-    Alex Martelli <aleaxit at yahoo.com>
-    Anders Lehmann <serendipity-soft at get2net.dk>
-    Stephan Diehl <stephan.diehl at gmx.net>
-    Patrick Maupin <pmaupin at gmail.com>
-    Ludovic Aubry <ludovic.aubry at logilab.fr>
-    Bob Ippolito <bob at redivi.com>
-    Adrien Di Mascio <adim at logilab.fr>
-    Jacob Hallen <jacob at strakt.com>
-    Laura Creighton <lac at strakt.com>
-    Marius Gedminas <mgedmin at b4net.lt>
-    Amaury Forgeot d Arc <amauryfa at gmail.com>
-    Boris Feigin <boria at fbg.uklinux.net>
-    Valentino Volonghi <dialtone at divmod.com>        
-    Bert Freudenberg <bert at impara.de>
-    Andrew Thompson <andrew.thompson at newhert.com>    
-    Jonathan David Riehl <jriehl at spaceship.com>
-    Amaury Forgeot D Arc <Amaury.Forgeotdarc at Ubitrade.Com>
-    Alexandre Fayolle <afayolle at debian.org>
-    Guido van Rossum <guido at python.org>
+    Armin Rigo
+    Samuele Pedroni
+    Michael Hudson
+    Carl Friedrich Bolz
+    Christian Tismer
+    Holger Krekel
+    Eric van Riet Paap
+    Antonio Cuni
+    Anders Chrigstrom
+    Maciek Fijalkowski
+    Richard Emslie
+    Aurelien Campeas
+    Anders Lehmann
+    Niklaus Haldimann
+    Seo Sanghyeon
+    Lawrence Oluyede
+    Alex Martelli
+    Ludovic Aubry
+    Adrien Di Mascio
+    Stephan Diehl
+    Guido Wesdorp
+    Stefan Schwarzer
+    Tomek Meka
+    Patrick Maupin
+    Leonardo Santagada
+    Bob Ippolito
+    Laura Creighton
+    Jacob Hallen
+    Marius Gedminas
+    Niko Matsakis
+    Amaury Forgeot d Arc
+    Guido van Rossum
+    Valentino Volonghi
+    Alexander Schremmer
+    Alexandre Fayolle
+    Wanja Saatkamp
+    Gerald Klix
+    Eugene Oden
+    Dinu Gherman
+    Guenter Jantzen
+    Ben Young
+    Nicolas Chauvat
+    Michael Twomey
+    Rocco Moretti
+    Simon Burton
+    Boris Feigin
+    Olivier Dormond
+    Gintautas Miliauskas
+    Stuart Williams
+    Jens-Uwe Mager
+    Brian Dorsey
+    Jonathan David Riehl
+    Anders Qvist
+    Beatrice During
+    Andreas Friedge
+    Alan McIntyre
+    Bert Freudenberg
 
     Heinrich-Heine University, Germany 
-    AB Strakt, Sweden  
+    Open End AB (formerly AB Strakt), Sweden  
     merlinux GmbH, Germany 
     tismerysoft GmbH, Germany 
     Logilab Paris, France 

Modified: pypy/branch/ast-experiments/README
==============================================================================
--- pypy/branch/ast-experiments/README	(original)
+++ pypy/branch/ast-experiments/README	Mon Feb 26 08:45:45 2007
@@ -1,16 +1,17 @@
 =======================================================
-PyPy: Python in Python implementation / Version 0.9.0
+PyPy: Python in Python implementation / Version 0.99.0
 =======================================================
 
-PyPy is an implementation of the Python programming language, written
-in Python.
+Welcome to PyPy!
 
-PyPy is very much a work in progress, but can already build a
-self-contained Python implementation that is completely independent of
-Python.
+PyPy is both an implementation of the Python programming language, and
+an extensive compiler framework for dynamic language implementations.
+You can build self-contained Python implementations which execute
+independently from CPython.
 
-For more, we invite you to head over to our getting-started document:
+We invite you to head over to our detailed getting-started document:
 
+    pypy/doc/getting-started.html or
     pypy/doc/getting-started.txt
     (local if you got a tarball or svn checkout)
 
@@ -23,8 +24,9 @@
 For information in what's new in this release, please read the release
 announcement:
 
-    pypy/doc/release-0.9.0.txt
-    http://codespeak.net/pypy/dist/pypy/doc/release-0.9.0.html
+    pypy/doc/release-0.99.0.txt or
+    pypy/doc/release-0.99.0.html
+    http://codespeak.net/pypy/dist/pypy/doc/release-0.99.0.html
 
 Since December 2004, the development of PyPy has been funded by the
 European Union's research programme.  For more information on this

Modified: pypy/branch/ast-experiments/lib-python/conftest.py
==============================================================================
--- pypy/branch/ast-experiments/lib-python/conftest.py	(original)
+++ pypy/branch/ast-experiments/lib-python/conftest.py	Mon Feb 26 08:45:45 2007
@@ -875,7 +875,7 @@
 
 class ReallyRunFileExternal(py.test.collect.Item): 
     _resultcache = None
-    def haskeyword(self, keyword): 
+    def _haskeyword(self, keyword): 
         if keyword == 'core': 
             return self.parent.regrtest.core 
         if keyword not in ('error', 'ok', 'timeout'): 

Modified: pypy/branch/ast-experiments/lib-python/modified-2.4.1/socket.py
==============================================================================
--- pypy/branch/ast-experiments/lib-python/modified-2.4.1/socket.py	(original)
+++ pypy/branch/ast-experiments/lib-python/modified-2.4.1/socket.py	Mon Feb 26 08:45:45 2007
@@ -144,6 +144,8 @@
         raise error(EBADF, 'Bad file descriptor')
     def _drop(self):
         pass
+    def _reuse(self):
+        pass
     send = recv = sendto = recvfrom = __getattr__ = _dummy
 
 class _socketobject(object):
@@ -188,6 +190,7 @@
 
         Return a regular file object corresponding to the socket.  The mode
         and bufsize arguments are as for the built-in open() function."""
+        self._sock._reuse()
         return _fileobject(self._sock, mode, bufsize)
 
     _s = ("def %s(self, *args): return self._sock.%s(*args)\n\n"
@@ -229,11 +232,14 @@
     closed = property(_getclosed, doc="True if the file is closed")
 
     def close(self):
-        try:
-            if self._sock:
+        if self._sock:
+            try:
                 self.flush()
-        finally:
-            self._sock = None
+            finally:
+                if self._sock:
+                    s = self._sock
+                    self._sock = None
+                    s._drop()
 
     def __del__(self):
         try:

Modified: pypy/branch/ast-experiments/lib-python/modified-2.4.1/test/test_descr.py
==============================================================================
--- pypy/branch/ast-experiments/lib-python/modified-2.4.1/test/test_descr.py	(original)
+++ pypy/branch/ast-experiments/lib-python/modified-2.4.1/test/test_descr.py	Mon Feb 26 08:45:45 2007
@@ -1193,7 +1193,6 @@
     gc.collect()
     vereq(Counted.counter, 1)
     s = None
-    import gc
     gc.collect()
     gc.collect()
     gc.collect()
@@ -2962,7 +2961,6 @@
         raise TestFailed, "d.foo should be undefined now"
 
     # Test a nasty bug in recurse_down_subclasses()
-    import gc
     class A(object):
         pass
     class B(A):
@@ -3895,7 +3893,7 @@
 
     vereq(c.attr, 1)
     # this makes a crash more likely:
-    import gc; gc.collect()
+    gc.collect()
     vereq(hasattr(c, 'attr'), False)
 
 import warnings

Modified: pypy/branch/ast-experiments/pypy/annotation/test/test_annrpython.py
==============================================================================
--- pypy/branch/ast-experiments/pypy/annotation/test/test_annrpython.py	(original)
+++ pypy/branch/ast-experiments/pypy/annotation/test/test_annrpython.py	Mon Feb 26 08:45:45 2007
@@ -443,6 +443,14 @@
         s = a.build_types(snippet.simple_iter, [list])
         assert isinstance(s, annmodel.SomeIterator)
         
+    def test_simple_iter_next(self):
+        def f(x):
+            i = iter(range(x))
+            return i.next()
+        a = self.RPythonAnnotator()
+        s = a.build_types(f, [int])
+        assert isinstance(s, annmodel.SomeInteger)
+
     def test_simple_iter_dict(self):
         a = self.RPythonAnnotator()
         t = somedict(annmodel.SomeInteger(), annmodel.SomeInteger())

Modified: pypy/branch/ast-experiments/pypy/annotation/unaryop.py
==============================================================================
--- pypy/branch/ast-experiments/pypy/annotation/unaryop.py	(original)
+++ pypy/branch/ast-experiments/pypy/annotation/unaryop.py	Mon Feb 26 08:45:45 2007
@@ -506,6 +506,7 @@
     def next(itr):
         return itr.s_container.getanyitem(*itr.variant)
     next.can_only_throw = _can_only_throw
+    method_next = next
 
 
 class __extend__(SomeInstance):

Modified: pypy/branch/ast-experiments/pypy/bin/py.py
==============================================================================
--- pypy/branch/ast-experiments/pypy/bin/py.py	(original)
+++ pypy/branch/ast-experiments/pypy/bin/py.py	Mon Feb 26 08:45:45 2007
@@ -13,7 +13,7 @@
 
 from pypy.tool import option
 from py.compat.optparse import make_option
-from pypy.interpreter import main, interactive, error
+from pypy.interpreter import main, interactive, error, gateway
 from pypy.config.config import OptionDescription, BoolOption, StrOption
 from pypy.config.config import Config, to_optparse
 import os, sys
@@ -27,8 +27,10 @@
     BoolOption("completer", "use readline commandline completer",
                default=False, cmdline="-C"),
     BoolOption("optimize",
-               "dummy optimization flag for compatibility with C Python",
+               "dummy optimization flag for compatibility with CPython",
                default=False, cmdline="-O"),
+    BoolOption("no_site_import", "do not 'import site' on initialization",
+               default=False, cmdline="-S"),
     StrOption("runmodule",
               "library module to be run as a script (terminates option list)",
               default=None, cmdline="-m"),
@@ -37,6 +39,16 @@
               default=None, cmdline="-c"),
     ])
 
+pypy_init = gateway.applevel('''
+def pypy_init(import_site):
+    if import_site:
+        try:
+            import site
+        except:
+            import sys
+            print >> sys.stderr, "import site' failed"
+''').interphook('pypy_init')
+
 def main_(argv=None):
     starttime = time.time()
     config, parser = option.get_standard_options()
@@ -90,6 +102,7 @@
     try:
         def do_start():
             space.startup()
+            pypy_init(space, space.wrap(not interactiveconfig.no_site_import))
         if main.run_toplevel(space, do_start,
                              verbose=interactiveconfig.verbose):
             # compile and run it

Modified: pypy/branch/ast-experiments/pypy/config/config.py
==============================================================================
--- pypy/branch/ast-experiments/pypy/config/config.py	(original)
+++ pypy/branch/ast-experiments/pypy/config/config.py	Mon Feb 26 08:45:45 2007
@@ -402,7 +402,8 @@
         return paths
 
 
-class OptHelpFormatter(optparse.IndentedHelpFormatter):
+class OptHelpFormatter(optparse.TitledHelpFormatter):
+    extra_useage = None
 
     def expand_default(self, option):
         assert self.parser
@@ -446,6 +447,14 @@
 
         return option.help
 
+    def format_usage(self, usage):
+        # XXX bit of a hack
+        result = optparse.TitledHelpFormatter.format_usage(self, usage)
+        if self.extra_useage is not None:
+            return result + "\n" + self.extra_useage + "\n\n"
+        return result
+
+
 
 class ConfigUpdate(object):
 
@@ -492,7 +501,7 @@
 
 
 def to_optparse(config, useoptions=None, parser=None,
-                parserargs=None, parserkwargs=None):
+                parserargs=None, parserkwargs=None, extra_useage=None):
     grps = {}
     def get_group(name, doc):
         steps = name.split('.')
@@ -509,8 +518,10 @@
             parserargs = []
         if parserkwargs is None:
             parserkwargs = {}
+        formatter = OptHelpFormatter()
+        formatter.extra_useage = extra_useage
         parser = optparse.OptionParser(
-            formatter=OptHelpFormatter(),
+            formatter=formatter,
             *parserargs, **parserkwargs)
     if useoptions is None:
         useoptions = config.getpaths(include_groups=True)

Modified: pypy/branch/ast-experiments/pypy/config/makerestdoc.py
==============================================================================
--- pypy/branch/ast-experiments/pypy/config/makerestdoc.py	(original)
+++ pypy/branch/ast-experiments/pypy/config/makerestdoc.py	Mon Feb 26 08:45:45 2007
@@ -1,19 +1,27 @@
 import py
 from py.__.rest.rst import Rest, Paragraph, Strong, ListItem, Title, Link
-from py.__.rest.rst import Directive
+from py.__.rest.rst import Directive, Em, Quote, Text
 
 from pypy.config.config import ChoiceOption, BoolOption, StrOption, IntOption
 from pypy.config.config import FloatOption, OptionDescription, Option, Config
 from pypy.config.config import ArbitraryOption, DEFAULT_OPTION_NAME
 from pypy.config.config import _getnegation
 
+configdocdir = py.magic.autopath().dirpath().dirpath().join("doc", "config")
+
 def get_fullpath(opt, path):
     if path:
         return "%s.%s" % (path, opt._name)
     else:
         return opt._name
 
-   
+
+def get_cmdline(cmdline, fullpath):
+    if cmdline is DEFAULT_OPTION_NAME:
+        return '--%s' % (fullpath.replace('.', '-'),)
+    else:
+        return cmdline
+
 
 class __extend__(Option):
     def make_rest_doc(self, path=""):
@@ -26,10 +34,7 @@
             ListItem(Strong("name:"), self._name),
             ListItem(Strong("description:"), self.doc))
         if self.cmdline is not None:
-            if self.cmdline is DEFAULT_OPTION_NAME:
-                cmdline = '--%s' % (fullpath.replace('.', '-'),)
-            else:
-                cmdline = self.cmdline
+            cmdline = get_cmdline(self.cmdline, fullpath)
             result.add(ListItem(Strong("command-line:"), cmdline))
         return result
 
@@ -140,15 +145,64 @@
         stack = []
         prefix = fullpath
         curr = content
-        for subpath in self.getpaths(include_groups=True):
-            subpath = fullpath + "." + subpath
+        config = Config(self)
+        for ending in self.getpaths(include_groups=True):
+            subpath = fullpath + "." + ending
             while not (subpath.startswith(prefix) and
                        subpath[len(prefix)] == "."):
                 curr, prefix = stack.pop()
-            print subpath, fullpath, curr
-            new = curr.add(ListItem(Link(subpath, subpath + ".html")))
+            print subpath, fullpath, ending, curr
+            sub, step = config._cfgimpl_get_home_by_path(ending)
+            doc = getattr(sub._cfgimpl_descr, step).doc
+            if doc:
+                new = curr.add(ListItem(Link(subpath + ":", subpath + ".html"),
+                                        Em(doc)))
+            else:
+                new = curr.add(ListItem(Link(subpath + ":", subpath + ".html")))
             stack.append((curr, prefix))
             prefix = subpath
             curr = new
         return content
 
+
+def _get_section_header(cmdline, fullpath, subdescr):
+    # XXX:  pypy specific hack
+    txtfile = configdocdir.join(fullpath + ".txt")
+    print txtfile,
+    if not txtfile.check():
+        print "not found"
+        return ""
+    print "found"
+    content = txtfile.read()
+    if ".. internal" in content:
+        return "Internal Options"
+    return ""
+
+def make_cmdline_overview(descr):
+    content = Rest(
+        Title("Overwiew of Command Line Options for '%s'" % (descr._name, ),
+              abovechar="=", belowchar="="))
+    cmdlines = []
+    config = Config(descr)
+    for path in config.getpaths(include_groups=False):
+        subconf, step = config._cfgimpl_get_home_by_path(path)
+        fullpath = (descr._name + "." + path)
+        prefix = fullpath.rsplit(".", 1)[0]
+        subdescr = getattr(subconf._cfgimpl_descr, step)
+        cmdline = get_cmdline(subdescr.cmdline, fullpath)
+        if cmdline is not None:
+            header = _get_section_header(cmdline, fullpath, subdescr)
+            cmdlines.append((header, cmdline, fullpath, subdescr))
+    cmdlines.sort(key=lambda x: (x[0], x[1].strip("-")))
+    currheader = ""
+    curr = content
+    for header, cmdline, fullpath, subdescr in cmdlines:
+        if header != currheader:
+            content.add(Title(header, abovechar="", belowchar="="))
+            curr = content.add(Paragraph())
+            currheader = header
+        curr.add(ListItem(Link(cmdline + ":", fullpath + ".html"),
+                          Text(subdescr.doc)))
+    return content
+    
+

Modified: pypy/branch/ast-experiments/pypy/config/pypyoption.py
==============================================================================
--- pypy/branch/ast-experiments/pypy/config/pypyoption.py	(original)
+++ pypy/branch/ast-experiments/pypy/config/pypyoption.py	Mon Feb 26 08:45:45 2007
@@ -23,20 +23,17 @@
 
 working_modules = default_modules.copy()
 working_modules.update(dict.fromkeys(
-    ["rsocket", "unicodedata", "mmap", "fcntl", "rctime", "select", "bz2",
+    ["rsocket", "unicodedata", "mmap", "fcntl", "rctime", "select",
      "crypt", "signal", "dyngram",
     ]
 ))
 
-if platform.machine() == "x86_64" and sys.maxint != 2147483647:
-    del working_modules['bz2'] # not 64 bit ready
-
 module_dependencies = { }
 if os.name == "posix":
     module_dependencies['rctime'] = [("objspace.usemodules.select", True),]
 
-                              
-pypy_optiondescription = OptionDescription("objspace", "Object Space Option", [
+
+pypy_optiondescription = OptionDescription("objspace", "Object Space Options", [
     ChoiceOption("name", "Object Space name",
                  ["std", "flow", "logic", "thunk", "cpy", "dump", "taint"],
                  "std",
@@ -49,11 +46,11 @@
                  },
                  cmdline='--objspace -o'),
 
-    ChoiceOption("parser", "parser",
+    ChoiceOption("parser", "which parser to use for app-level code",
                  ["pypy", "cpython"], "pypy",
                  cmdline='--parser'),
 
-    ChoiceOption("compiler", "compiler",
+    ChoiceOption("compiler", "which compiler to use for app-level code",
                  ["cpython", "ast"], "ast",
                  cmdline='--compiler'),
 
@@ -106,7 +103,7 @@
                    default=False,
                    requires=[("translation.gc", "boehm")]),
 
-        BoolOption("withprebuiltint", "prebuilt commonly used int objects",
+        BoolOption("withprebuiltint", "prebuild commonly used int objects",
                    default=False,
                    requires=[("objspace.std.withsmallint", False)]),
 
@@ -145,7 +142,7 @@
         BoolOption("withrangelist",
                    "enable special range list implementation that does not "
                    "actually create the full list until the resulting "
-                   "list is mutaged",
+                   "list is mutated",
                    default=False),
 
         BoolOption("withtypeversion",
@@ -160,7 +157,7 @@
                    requires=[("objspace.std.withmultidict", True),
                              ("objspace.std.withtypeversion", True)]),
         BoolOption("withmethodcache",
-                   "try to cache methods",
+                   "try to cache method lookups",
                    default=False,
                    requires=[("objspace.std.withshadowtracking", True)]),
         BoolOption("withmethodcachecounter",
@@ -207,15 +204,15 @@
                              ],
                    cmdline="--faassen", negation=False),
 
-        BoolOption("llvmallopts",
-                   "enable all optimizations, and use llvm compiled via C",
-                   default=False,
-                   requires=[("objspace.std.allopts", True),
-                             ("translation.llvm_via_c", True),
-                             ("translation.backend", "llvm")],
-                   cmdline="--llvm-faassen", negation=False),
+##         BoolOption("llvmallopts",
+##                    "enable all optimizations, and use llvm compiled via C",
+##                    default=False,
+##                    requires=[("objspace.std.allopts", True),
+##                              ("translation.llvm_via_c", True),
+##                              ("translation.backend", "llvm")],
+##                    cmdline="--llvm-faassen", negation=False),
      ]),
-    BoolOption("lowmem", "Try to use little memory during translation",
+    BoolOption("lowmem", "Try to use less memory during translation",
                default=False, cmdline="--lowmem",
                requires=[("objspace.geninterp", False)]),
 

Modified: pypy/branch/ast-experiments/pypy/config/test/test_makerestdoc.py
==============================================================================
--- pypy/branch/ast-experiments/pypy/config/test/test_makerestdoc.py	(original)
+++ pypy/branch/ast-experiments/pypy/config/test/test_makerestdoc.py	Mon Feb 26 08:45:45 2007
@@ -1,5 +1,5 @@
 from pypy.config.config import *
-import pypy.config.makerestdoc
+from pypy.config.makerestdoc import make_cmdline_overview
 
 from py.__.doc.conftest import restcheck
 
@@ -14,14 +14,16 @@
 def generate_html(descr):
     config = Config(descr)
     txt = descr.make_rest_doc().text()
-    checkrest(txt, descr._name + ".txt")
+    
+    result = {"": checkrest(txt, descr._name + ".txt")}
     for path in config.getpaths(include_groups=True):
         subconf, step = config._cfgimpl_get_home_by_path(path)
         fullpath = (descr._name + "." + path)
         prefix = fullpath.rsplit(".", 1)[0]
         txt = getattr(subconf._cfgimpl_descr, step).make_rest_doc(
                 prefix).text()
-        checkrest(txt, fullpath + ".txt")
+        result[path] = checkrest(txt, fullpath + ".txt")
+    return result
 
 def test_simple():
     descr = OptionDescription("foo", "doc", [
@@ -60,6 +62,22 @@
                        requires=[("a0.bar", "c"), ("a0.B2", True)]),
             ChoiceOption("bar", "more doc", ["a", "b", "c"],
                          default="a")])
-    generate_html(descr)
-
+    result = generate_html(descr)
+    assert "more doc" in result[""]
 
+def test_cmdline_overview():
+    descr = OptionDescription("foo", "doc", [
+            ChoiceOption("bar", "more doc", ["a", "b", "c"]),
+            OptionDescription("sub", "nope", [
+                ChoiceOption("subbar", "", ["d", "f"]),
+                BoolOption("boolean", "this is a boolean", default=False,
+                           cmdline="-b --with-b")
+                ]),
+            StrOption("str", "string option!", default="strange"),
+            IntOption("int", "integer option", default=42),
+            FloatOption("float", "float option", default=py.std.math.pi),
+            ArbitraryOption("surprise", "special", defaultfactory=int),
+            ])
+    generate_html(descr)
+    c = make_cmdline_overview(descr)
+    checkrest(c.text(), "index.txt")

Modified: pypy/branch/ast-experiments/pypy/config/translationoption.py
==============================================================================
--- pypy/branch/ast-experiments/pypy/config/translationoption.py	(original)
+++ pypy/branch/ast-experiments/pypy/config/translationoption.py	Mon Feb 26 08:45:45 2007
@@ -11,7 +11,7 @@
 
 translation_optiondescription = OptionDescription(
         "translation", "Translation Options", [
-    BoolOption("stackless", "compile stackless features in",
+    BoolOption("stackless", "enable stackless features during compilation",
                default=False, cmdline="--stackless",
                requires=[("translation.type_system", "lltype")]),
     ChoiceOption("type_system", "Type system to use when RTyping",
@@ -30,7 +30,7 @@
                      "cl":     [("translation.type_system", "ootype")],
                      },
                  cmdline="-b --backend"),
-    BoolOption("llvm_via_c", "compile llvm bytecode via C",
+    BoolOption("llvm_via_c", "compile llvm via C",
                default=False, cmdline="--llvm-via-c",
                requires=[("translation.backend", "llvm")]),
     ChoiceOption("gc", "Garbage Collection Strategy",
@@ -53,19 +53,16 @@
                cmdline=None),
 
     # misc
-    StrOption("cc", "Specify compiler", cmdline="--cc"),
+    StrOption("cc", "Specify compiler to use for compiling generated C", cmdline="--cc"),
     StrOption("profopt", "Specify profile based optimization script",
               cmdline="--profopt"),
-    BoolOption("debug_transform", "Perform the debug transformation",
-               default=False, cmdline="--debug-transform", negation=False),
-
     BoolOption("instrument", "internal: turn instrumentation on",
                default=False, cmdline=None),
 
     ArbitraryOption("instrumentctl", "internal",
-               default=None),        
+               default=None),
     StrOption("output", "Output file name", cmdline="--output"),
-    
+
     # portability options
     BoolOption("vanilla",
                "Try to be as portable as possible, which is not much",
@@ -75,16 +72,23 @@
     BoolOption("no__thread",
                "don't use __thread for implementing TLS",
                default=False, cmdline="--no__thread", negation=False),
-    StrOption("compilerflags", "Specify flags for the compiler", 
+    StrOption("compilerflags", "Specify flags for the C compiler",
                cmdline="--cflags"),
-    StrOption("linkerflags", "Specify flags for the linker",
+    StrOption("linkerflags", "Specify flags for the linker (C backend only)",
                cmdline="--ldflags"),
 
     # Flags of the TranslationContext:
     BoolOption("simplifying", "Simplify flow graphs", default=True),
-    BoolOption("builtins_can_raise_exceptions", "XXX", default=False,
+    BoolOption("builtins_can_raise_exceptions",
+               "When true, assume any call to a 'simple' builtin such as "
+               "'hex' can raise an arbitrary exception",
+               default=False,
                cmdline=None),
-    BoolOption("list_comprehension_operations", "XXX", default=False,
+    BoolOption("list_comprehension_operations",
+               "When true, look for and special-case the sequence of "
+               "operations that results from a list comprehension and "
+               "attempt to pre-allocate the list",
+               default=False,
                cmdline=None),
     ChoiceOption("fork_before",
                  "(UNIX) Create restartable checkpoint before step",
@@ -102,13 +106,15 @@
                   "for inlining",
                 default="pypy.translator.backendopt.inline.inlining_heuristic",
                 cmdline="--inline-heuristic"),
-        
+
         BoolOption("print_statistics", "Print statistics while optimizing",
                    default=False),
         BoolOption("merge_if_blocks", "Merge if ... elif chains",
                    cmdline="--if-block-merge", default=True),
         BoolOption("raisingop2direct_call",
-                   "Transform exception raising operations",
+                   "Transform operations that can implicitly raise an "
+                   "exception into calls to functions that explicitly "
+                   "raise exceptions",
                    default=False, cmdline="--raisingop2direct_call"),
         BoolOption("mallocs", "Remove mallocs", default=True),
         BoolOption("constfold", "Constant propagation",
@@ -133,7 +139,7 @@
                 cmdline="--prof-based-inline-heuristic"),
         # control clever malloc removal
         BoolOption("clever_malloc_removal",
-                   "Drives inlining to remove  mallocs in a clever way",
+                   "Drives inlining to remove mallocs in a clever way",
                    default=False,
                    cmdline="--clever-malloc-removal"),
         FloatOption("clever_malloc_removal_threshold",
@@ -148,8 +154,9 @@
                 cmdline="--clever-malloc-removal-heuristic"),
 
         BoolOption("remove_asserts",
-                   "Kill 'raise AssertionError', which lets the C "
-                   "optimizer remove the asserts", default=False),
+                   "Remove operations that look like 'raise AssertionError', "
+                   "which lets the C optimizer remove the asserts",
+                   default=False),
     ]),
 
     OptionDescription("cli", "GenCLI options", [

Modified: pypy/branch/ast-experiments/pypy/conftest.py
==============================================================================
--- pypy/branch/ast-experiments/pypy/conftest.py	(original)
+++ pypy/branch/ast-experiments/pypy/conftest.py	Mon Feb 26 08:45:45 2007
@@ -8,10 +8,11 @@
 
 rootdir = py.magic.autopath().dirpath()
 
+# distributed testing settings
 dist_rsync_roots = ['.', '../lib-python', '../py', '../demo']
 dist_rsync_ignore = ['_cache']
 
-#
+# 
 # PyPy's command line extra options (these are added 
 # to py.test's standard options) 
 #

Modified: pypy/branch/ast-experiments/pypy/doc/_ref.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/_ref.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/_ref.txt	Mon Feb 26 08:45:45 2007
@@ -11,6 +11,7 @@
 .. _`bin/`: ../../pypy/bin
 .. _`config/`: ../../pypy/config
 .. _`doc/`: ../../pypy/doc
+.. _`doc/config/`: ../../pypy/doc/config
 .. _`doc/discussion/`: ../../pypy/doc/discussion
 .. _`interpreter/`:
 .. _`pypy/interpreter`: ../../pypy/interpreter
@@ -32,6 +33,7 @@
 .. _`jit/`: ../../pypy/jit
 .. _`jit/codegen/`: ../../pypy/jit/codegen
 .. _`pypy/jit/codegen/model.py`: ../../pypy/jit/codegen/model.py
+.. _`jit/goal/`: ../../pypy/jit/goal
 .. _`jit/hintannotator/`: ../../pypy/jit/hintannotator
 .. _`jit/timeshifter/`: ../../pypy/jit/timeshifter
 .. _`pypy/jit/timeshifter/rvalue.py`: ../../pypy/jit/timeshifter/rvalue.py
@@ -41,8 +43,9 @@
 .. _`lang/prolog/`: ../../pypy/lang/prolog
 .. _`lib/`:
 .. _`pypy/lib/`: ../../pypy/lib
+.. _`lib/app_test/`: ../../pypy/lib/app_test
+.. _`lib/distributed/`: ../../pypy/lib/distributed
 .. _`pypy/lib/stackless.py`: ../../pypy/lib/stackless.py
-.. _`lib/test2/`:
 .. _`pypy/lib/test2`: ../../pypy/lib/test2
 .. _`module/`:
 .. _`pypy/module`:
@@ -56,6 +59,7 @@
 .. _`pypy/module/readline`: ../../pypy/module/readline
 .. _`objspace/`:
 .. _`pypy/objspace`: ../../pypy/objspace
+.. _`objspace/cpy/`:
 .. _`pypy/objspace/cpy`: ../../pypy/objspace/cpy
 .. _`objspace/dump.py`: ../../pypy/objspace/dump.py
 .. _`objspace/flow/`: ../../pypy/objspace/flow
@@ -69,7 +73,6 @@
 .. _`pypy/objspace/trace.py`: ../../pypy/objspace/trace.py
 .. _`pypy/rlib`:
 .. _`rlib/`: ../../pypy/rlib
-.. _`pypy/rlib/objectmodel.py`: ../../pypy/rlib/objectmodel.py
 .. _`pypy/rlib/rarithmetic.py`: ../../pypy/rlib/rarithmetic.py
 .. _`pypy/rlib/rctypes/rctypesobject.py`: ../../pypy/rlib/rctypes/rctypesobject.py
 .. _`pypy/rlib/rctypes/test/test_rctypesobject.py`: ../../pypy/rlib/rctypes/test/test_rctypesobject.py
@@ -83,10 +86,6 @@
 .. _`pypy/rpython/lltypesystem/lltype.py`:
 .. _`rpython/lltypesystem/lltype.py`: ../../pypy/rpython/lltypesystem/lltype.py
 .. _`rpython/memory/`: ../../pypy/rpython/memory
-.. _`pypy/rpython/memory/gc.py`: ../../pypy/rpython/memory/gc.py
-.. _`pypy/rpython/memory/lladdress.py`: ../../pypy/rpython/memory/lladdress.py
-.. _`pypy/rpython/memory/simulator.py`: ../../pypy/rpython/memory/simulator.py
-.. _`pypy/rpython/memory/support.py`: ../../pypy/rpython/memory/support.py
 .. _`pypy/rpython/module/`: ../../pypy/rpython/module
 .. _`pypy/rpython/module/ll_os.py`: ../../pypy/rpython/module/ll_os.py
 .. _`pypy/rpython/module/test`: ../../pypy/rpython/module/test
@@ -102,7 +101,6 @@
 .. _`tool/`: ../../pypy/tool
 .. _`tool/algo/`: ../../pypy/tool/algo
 .. _`tool/pytest/`: ../../pypy/tool/pytest
-.. _`tool/tb_server/`: ../../pypy/tool/tb_server
 .. _`pypy/translator`:
 .. _`translator/`: ../../pypy/translator
 .. _`translator/backendopt/`: ../../pypy/translator/backendopt
@@ -114,6 +112,7 @@
 .. _`translator/cli/`: ../../pypy/translator/cli
 .. _`translator/goal/`: ../../pypy/translator/goal
 .. _`pypy/translator/goal/targetnopstandalone.py`: ../../pypy/translator/goal/targetnopstandalone.py
+.. _`pypy/translator/goal/targetprologstandalone.py`: ../../pypy/translator/goal/targetprologstandalone.py
 .. _`translator/js/`: ../../pypy/translator/js
 .. _`translator/jvm/`: ../../pypy/translator/jvm
 .. _`translator/lisp/`: ../../pypy/translator/lisp

Modified: pypy/branch/ast-experiments/pypy/doc/architecture.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/architecture.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/architecture.txt	Mon Feb 26 08:45:45 2007
@@ -20,6 +20,10 @@
 Eventually, dynamic optimization techniques - implemented as another
 translation aspect - should become robust against language changes.
 
+As part of this process, we ended up developing a general
+framework for implementing dynamic languages and generating
+virtual machines for them `[VMC]_`.  As proof of concepts, we
+have a Prolog and an in-progress JavaScript interpreter.
 
 PyPy - an implementation of Python in Python
 ============================================
@@ -70,19 +74,28 @@
 details.  (Because of the nature of Python, this is already a
 complicated task, although not as much as writing it in - say - C.)
 Then we use this as a "language specification" and manipulate it to
-produce the more traditional interpreters that we want.  In the above
-sense, we are generating the concrete "mappings" of Python into
-lower-level target platforms.
-
-So far (autumn 2005), we have already succeeded in turning this "language
-specification" into reasonably efficient C-level code that performs
-basically the same job as CPython.  Memory management is inserted during
-this *translation* process.  It can be configured to use reference
-counting or not; thus we have already achieved two very different
-mappings of application Python code over C/Posix.  We have
-successfully also translated our Python interpreter into LLVM_ code,
-and we are working on targeting higher-level environments like
-Java and Squeak.
+produce the more traditional interpreters that we want.  In other words,
+we are generating concrete interpreters, all able to execute normal
+Python code, but themselves running on a variety of lower-level
+target platforms.
+
+So far (early 2007), we have already succeeded in turning this
+"language specification" into reasonably efficient C-level
+code that performs basically the same job as CPython (either
+by generating C source, or via LLVM_).  We can also generate a
+Python interpreter for .NET, and a Java (JVM) version is on
+its way.
+
+In addition to the platform diversity, we can generate very
+diverse interpreters for each platform.  Some of these
+differences come from the inclusion of optional language
+features or optimizations; but more fundamentally, and
+particularly when targetting C-level environments, many
+low-level details are inserted during this *translation*
+process - for example, memory management: the generated code
+can use the Boehm garbage collector, our custom collectors, or
+a simple reference counting scheme. These are all different
+concrete realisations of our "language specification".
 
 In some senses, PyPy project's central component is not its
 interpreter implementation, but its configurable translator.
@@ -180,11 +193,13 @@
   target platform;
 
 - the *code generator* which translates the resulting flow graph into
-  another language, currently C, LLVM_, Javascript (experimental).
+  another language, currently C, LLVM_, .NET, Javascript (in-progress)
+  or Java (JVM - in-progress).
 
-A more complete description of the phases of this process is out of the
-scope of the present introduction.  We will only give in the sequel a
-short overview.
+A more complete description of the phases of this process is
+out of the scope of the present introduction.  For more
+details, see the `translation document`_.  We will only give a
+short overview in the sequel.
 
 
 .. _`initialization time`:
@@ -241,45 +256,25 @@
 
     .. image:: image/translation-greyscale-small.png
 
-The complete translation process is described in more details in the
-`translation document`_.  You might also be interested in reading the
-more theoretically-oriented paper `Compiling dynamic language
-implementations`_.
-
-Status of the implementation (June 2006)
-========================================== 
-
-The work leading up to the pypy-0.9.0 release has concentrated on the
-features of the translation.  
-
-We can now produce a pypy-c that `has the majority of the features`_
-of `Stackless Python`_.  We have integrated the mark and sweep garbage
-collector written in RPython by Carl Friedrich as part of Google's
-Summer of Code 2005 with the translation machinery, and can produce a
-pypy-c that uses it for memory management.
-
-.. _`has the majority of the features`: stackless.html
-.. _`Stackless Python`: http://www.stackless.com/
-
-The self-contained PyPy version (single-threaded and using the
-`Boehm-Demers-Weiser garbage collector`_) now runs around 4-5 times
-slower than CPython, i.e. around 3 times faster than 0.8.0.
-
-We have improved our CPython compatibility still further, and now pass
-around 95% of CPython's core tests, the main improvement over 0.8.0
-being the implementation of the _weakref module.
-
-Our rather complete and Python 2.4-compliant interpreter consists 
-of about 30,000-50,000 lines of code (depending on the way you
-count code borrowed and adapted from other sources), with
-another 14,000 lines of unit tests.  If we include the tools,
-the parts related to code analysis and generation, and the
-standard library modules ported from C, PyPy is now 230,000
-lines of code including 62,000 lines of tests. Refer to 
-the `statistics web page`_ for more detailed information. 
+
+Further reading
+===============
+
+* `[VMC]`_ PyPy's approach to virtual machine construction
+  (Dynamic Languages Symposium 2006).
+
+* The `translation document`_ describes our translation process in detail.
+  You might also be interested in reading the more
+  theoretically-oriented paper `Compiling dynamic language
+  implementations`_.
+
+* All our `Technical reports`_.
+
+* `Getting started`_ with PyPy.
+
 
 .. _`statistics web page`: http://codespeak.net/~hpk/pypy-stat/
-.. _`very compliant`: http://codespeak.net/~hpk/pypy-testresult/
+.. _`very compliant`: http://www2.openend.se/~pedronis/pypy-c-test/allworkingmodules/summary.html
 .. _`Boehm-Demers-Weiser garbage collector`: http://www.hpl.hp.com/personal/Hans_Boehm/gc/
 .. _`RPython`: coding-guide.html#rpython
 .. _`abstract interpretation`: theory.html#abstract-interpretation
@@ -288,6 +283,8 @@
 .. _LLVM: http://llvm.org/
 .. _`PDF color version`: image/translation.pdf
 .. _`getting started`: getting-started.html
+.. _`[VMC]`: http://codespeak.net/svn/pypy/extradoc/talk/dls2006/pypy-vm-construction.pdf
+.. _`Technical reports`: index-report.html
 
 .. include:: _ref.txt
 

Modified: pypy/branch/ast-experiments/pypy/doc/cleanup-todo.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/cleanup-todo.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/cleanup-todo.txt	Mon Feb 26 08:45:45 2007
@@ -19,3 +19,4 @@
 
  - review the things implemented at applevel whether they are performance-
    critical
+

Modified: pypy/branch/ast-experiments/pypy/doc/cli-backend.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/cli-backend.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/cli-backend.txt	Mon Feb 26 08:45:45 2007
@@ -427,5 +427,5 @@
 
 
 .. _`Standard Ecma 335`: http://www.ecma-international.org/publications/standards/Ecma-335.htm
-.. _`flow graph`: http://codespeak.net/pypy/dist/pypy/doc/translation.html#the-flow-model
-.. _`rtyper`: http://codespeak.net/pypy/dist/pypy/doc/rtyper.html
+.. _`flow graph`: translation.html#the-flow-model
+.. _`rtyper`: rtyper.html

Modified: pypy/branch/ast-experiments/pypy/doc/coding-guide.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/coding-guide.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/coding-guide.txt	Mon Feb 26 08:45:45 2007
@@ -686,9 +686,12 @@
 Only specified names will be exported to a Mixed Module's applevel
 namespace.
 
-Sometimes it is neccessary to really write some functions in C (or whatever
-target language). See the `external functions documentation`_ for details.
+Sometimes it is necessary to really write some functions in C (or
+whatever target language). See `rctypes`_ and `external functions
+documentation`_ for details. The latter approach is cumbersome and
+being phased out and former has currently quite a few rough edges.
 
+.. _`rctypes`: rctypes.html
 .. _`external functions documentation`: translation.html#extfunccalls
 
 application level definitions

Modified: pypy/branch/ast-experiments/pypy/doc/config/confrest.py
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/config/confrest.py	(original)
+++ pypy/branch/ast-experiments/pypy/doc/config/confrest.py	Mon Feb 26 08:45:45 2007
@@ -1,5 +1,5 @@
 from pypy.doc.confrest import *
-import pypy.config.makerestdoc
+from pypy.config.makerestdoc import make_cmdline_overview
 from pypy.config.config import Config
 from pypy.config import pypyoption, translationoption
 
@@ -16,10 +16,10 @@
         self.menubar[:] = html.div(
             html.a("general documentation", href="../index.html",
                    class_="menu"), " ",
-            html.a("translation options", href="translation.html", 
-                   class_="menu"), 
-            html.a("standard interpreter options", href="objspace.html", 
-                   class_="menu"), 
+            html.a("config index", href="index.html",
+                   class_="menu"), " ",
+            html.a("command-line overview", href="commandline.html",
+                   class_="menu"), " ",
             " ", id="menubar")
 
 class Project(Project): 
@@ -29,10 +29,20 @@
     Page = PyPyPage 
 
     def get_content(self, txtpath, encoding):
+        if txtpath.basename == "commandline.txt":
+            result = [".. contents::"]
+            for descr in all_optiondescrs:
+                result.append(".. %s_:\n" % (descr._name, ))
+                result.append(make_cmdline_overview(descr).text())
+                result.append("")
+            result.append(txtpath.read())
+            return "\n".join(result)
         fullpath = txtpath.purebasename
         start = fullpath.split(".")[0]
         path = fullpath.rsplit(".", 1)[0]
-        basedescr = start_to_descr[start]
+        basedescr = start_to_descr.get(start)
+        if basedescr is None:
+            return txtpath.read()
         if fullpath.count(".") == 0:
             descr = basedescr
             path = ""
@@ -43,6 +53,9 @@
             descr = getattr(subconf._cfgimpl_descr, step)
         text = unicode(descr.make_rest_doc(path).text())
         if txtpath.check(file=True):
-            return u"%s\n\n%s" % (text, unicode(txtpath.read(), encoding))
+            content = txtpath.read()
+            if content:
+                text += "\nDescription\n==========="
+                return u"%s\n\n%s" % (text, unicode(txtpath.read(), encoding))
         return text
 

Modified: pypy/branch/ast-experiments/pypy/doc/config/objspace.allworkingmodules.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/config/objspace.allworkingmodules.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/config/objspace.allworkingmodules.txt	Mon Feb 26 08:45:45 2007
@@ -1,2 +1,2 @@
 This option enables the usage of all modules that are known to be working well
-and that translate without problem.
+and that translate without problems.

Modified: pypy/branch/ast-experiments/pypy/doc/config/objspace.compiler.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/config/objspace.compiler.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/config/objspace.compiler.txt	Mon Feb 26 08:45:45 2007
@@ -0,0 +1,3 @@
+Internal option.
+
+.. internal

Modified: pypy/branch/ast-experiments/pypy/doc/config/objspace.logbytecodes.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/config/objspace.logbytecodes.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/config/objspace.logbytecodes.txt	Mon Feb 26 08:45:45 2007
@@ -0,0 +1,3 @@
+Internal option.
+
+.. internal

Modified: pypy/branch/ast-experiments/pypy/doc/config/objspace.lowmem.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/config/objspace.lowmem.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/config/objspace.lowmem.txt	Mon Feb 26 08:45:45 2007
@@ -0,0 +1,4 @@
+Try to use as little memory as possible *during translation*. Currently only
+disables :config:`objspace.geninterp` which also makes the resulting binary
+slower.
+

Modified: pypy/branch/ast-experiments/pypy/doc/config/objspace.name.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/config/objspace.name.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/config/objspace.name.txt	Mon Feb 26 08:45:45 2007
@@ -1,12 +1,13 @@
-Which `Object Space`_ to use. The `Standard Object Space`_ gives the
+Determine which `Object Space`_ to use. The `Standard Object Space`_ gives the
 normal Python semantics, the others are `Object Space Proxies`_ giving
 additional features (except the Flow Object Space which is not intended
 for normal usage):
 
-  * thunk_: adds lazy evaluation to Python
-  * logic_: logical programming features
-  * taint_: soft security
-  * dump_:  dump all operations to a log
+  * thunk_: The thunk object space adds lazy evaluation to PyPy.
+  * logic_: The logic object space contains logical programming features.
+  * taint_: The taint object space adds soft security features.
+  * dump_:  Using this object spaces results in the dumpimp of all operations
+    to a log.
 
 .. _`Object Space`: ../objspace.html
 .. _`Object Space Proxies`: ../objspace-proxies.html

Modified: pypy/branch/ast-experiments/pypy/doc/config/objspace.nofaking.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/config/objspace.nofaking.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/config/objspace.nofaking.txt	Mon Feb 26 08:45:45 2007
@@ -0,0 +1,7 @@
+This options prevents the automagic borrowing of implementations of
+modules and types not present in PyPy from CPython.
+
+As such, it is required when translating, as then there is no CPython
+to borrow from.  For running py.py it is useful for testing the
+implementation of modules like "posix", but it makes everything even
+slower than it is already.

Modified: pypy/branch/ast-experiments/pypy/doc/config/objspace.opcodes.CALL_LIKELY_BUILTIN.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/config/objspace.opcodes.CALL_LIKELY_BUILTIN.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/config/objspace.opcodes.CALL_LIKELY_BUILTIN.txt	Mon Feb 26 08:45:45 2007
@@ -1,7 +1,7 @@
 Introduce a new opcode called ``CALL_LIKELY_BUILTIN``. It is used when something
 is called, that looks like a builtin function (but could in reality be shadowed
-by something in the module globals). For all module globals dictionaries it is
-then tracked, which builtin name is shadowed in this module. If the
+by a name in the module globals). For all module globals dictionaries it is
+then tracked which builtin name is shadowed in this module. If the
 ``CALL_LIKELY_BUILTIN`` opcode is executed, it is checked whether the builtin is
 shadowed. If not, the corresponding builtin is called. Otherwise the object that
 is shadowing it is called instead. If no shadowing is happening, this saves two

Modified: pypy/branch/ast-experiments/pypy/doc/config/objspace.opcodes.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/config/objspace.opcodes.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/config/objspace.opcodes.txt	Mon Feb 26 08:45:45 2007
@@ -0,0 +1 @@
+..  intentionally empty

Modified: pypy/branch/ast-experiments/pypy/doc/config/objspace.parser.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/config/objspace.parser.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/config/objspace.parser.txt	Mon Feb 26 08:45:45 2007
@@ -0,0 +1,3 @@
+Internal option.
+
+.. internal

Modified: pypy/branch/ast-experiments/pypy/doc/config/objspace.std.methodcachesize.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/config/objspace.std.methodcachesize.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/config/objspace.std.methodcachesize.txt	Mon Feb 26 08:45:45 2007
@@ -0,0 +1 @@
+Set the cache size (number of entries) for :config:`objspace.std.withmethodcache`.

Modified: pypy/branch/ast-experiments/pypy/doc/config/objspace.std.optimized_int_add.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/config/objspace.std.optimized_int_add.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/config/objspace.std.optimized_int_add.txt	Mon Feb 26 08:45:45 2007
@@ -0,0 +1,2 @@
+Optimize the addition of two integers a bit. Enabling this option gives small
+speedups.

Modified: pypy/branch/ast-experiments/pypy/doc/config/objspace.std.prebuiltintfrom.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/config/objspace.std.prebuiltintfrom.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/config/objspace.std.prebuiltintfrom.txt	Mon Feb 26 08:45:45 2007
@@ -0,0 +1 @@
+see :config:`objspace.std.withprebuiltint`.

Modified: pypy/branch/ast-experiments/pypy/doc/config/objspace.std.prebuiltintto.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/config/objspace.std.prebuiltintto.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/config/objspace.std.prebuiltintto.txt	Mon Feb 26 08:45:45 2007
@@ -0,0 +1 @@
+See :config:`objspace.std.withprebuiltint`.

Modified: pypy/branch/ast-experiments/pypy/doc/config/objspace.std.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/config/objspace.std.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/config/objspace.std.txt	Mon Feb 26 08:45:45 2007
@@ -0,0 +1 @@
+..  intentionally empty

Modified: pypy/branch/ast-experiments/pypy/doc/config/objspace.std.withdictmeasurement.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/config/objspace.std.withdictmeasurement.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/config/objspace.std.withdictmeasurement.txt	Mon Feb 26 08:45:45 2007
@@ -0,0 +1,3 @@
+Internal option.
+
+.. internal

Modified: pypy/branch/ast-experiments/pypy/doc/config/objspace.std.withfastslice.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/config/objspace.std.withfastslice.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/config/objspace.std.withfastslice.txt	Mon Feb 26 08:45:45 2007
@@ -1,5 +1,7 @@
-A variant of multilists_ that makes list slicing copy the list lazily (that is
-only when the original list or the slice are mutated.
+A variant of :config:`objspace.std.withmultilist` that makes list slicing copy
+the list lazily (that is only when the original list or the slice are mutated).
+This is not perfectly well tested.
 
+See the description of `object reimplementations`_ for more details.
 
-.. _multilists: objspace.std.withmultilist.html
+.. _`object reimplementations`: ../object-optimizations.html

Modified: pypy/branch/ast-experiments/pypy/doc/config/objspace.std.withmethodcache.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/config/objspace.std.withmethodcache.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/config/objspace.std.withmethodcache.txt	Mon Feb 26 08:45:45 2007
@@ -0,0 +1,3 @@
+Enable method caching. See the section "Method Caching" in `Alternative object
+implementations in the PyPy standard interpreter
+<../object-optimizations.html#method-caching>`__.

Modified: pypy/branch/ast-experiments/pypy/doc/config/objspace.std.withmethodcachecounter.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/config/objspace.std.withmethodcachecounter.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/config/objspace.std.withmethodcachecounter.txt	Mon Feb 26 08:45:45 2007
@@ -0,0 +1 @@
+Testing/debug option for :config:`objspace.std.withmethodcache`.

Modified: pypy/branch/ast-experiments/pypy/doc/config/objspace.std.withmultidict.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/config/objspace.std.withmultidict.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/config/objspace.std.withmultidict.txt	Mon Feb 26 08:45:45 2007
@@ -1,13 +1,8 @@
 This enables "multidicts". They are a different implementation of the Python
-``dict`` type, indistinguishable for the normal user (when using multidicts, the
-normal implementation is not used at all). When the multidict implementation is
-used, a dictionary can change its internal representation over its lifetime. It
-starts with an "empty" representation (that can represent only empty dicts). If
-a few keys are added, it changes its representation to a "small" one (that is
-optimized for small dicts). As long as only string keys are added, a
-representation optimized for string keys is used. Since this case is extremely
-common in Python, this makes multidicts a good deal faster than the regular
-dictionary implementation.
+``dict`` type, indistinguishable for the normal user (when using multidicts,
+the normal implementation is not used at all).  The flexibility of multidicts
+is used by a couple of other, even more advanced object implementations.
 
-The flexibility of multidicts is used by a couple of other, even more advanced
-object implementations.
+See the description of `object reimplementations`_ for more details.
+
+.. _`object reimplementations`: ../object-optimizations.html

Modified: pypy/branch/ast-experiments/pypy/doc/config/objspace.std.withmultilist.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/config/objspace.std.withmultilist.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/config/objspace.std.withmultilist.txt	Mon Feb 26 08:45:45 2007
@@ -1,11 +1,8 @@
 This enables "multilists". They are a different implementation of the Python
 ``list`` type, indistinguishable for the normal user (when using multilists, the
-normal implementation is not used at all). When the multilist implementation is
-used, a list can change its internal representation over its lifetime. If a list
-contains only strings, for example, the strings are stored directly without
-their wrapper (which gives a memory benefit on large lists).
+normal implementation is not used at all).
 
-Another special representation of lists that multilists support is the "range
-list", which is basically equivalent to what `objspace.std.withrangelist`_ does.
+See the page about `object reimplementations`_ for more details.
+
+.. _`object reimplementations`: ../object-optimizations.html
 
-.. _`objspace.std.withrangelist`: objspace.std.withrangelist.html

Modified: pypy/branch/ast-experiments/pypy/doc/config/objspace.std.withprebuiltint.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/config/objspace.std.withprebuiltint.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/config/objspace.std.withprebuiltint.txt	Mon Feb 26 08:45:45 2007
@@ -1,6 +1,5 @@
 This option enables the caching of small integer objects (similar to what
-CPython does). The range of which integers are cached can be influenced with the
-`objspace.std.prebuiltintfrom`_ and `objspace.std.prebuiltintto`_ options.
+CPython does). The range of which integers are cached can be influenced with
+the :config:`objspace.std.prebuiltintfrom` and
+:config:`objspace.std.prebuiltintto` options.
 
-.. _`objspace.std.prebuiltintfrom`: objspace.std.prebuiltintfrom.html
-.. _`objspace.std.prebuiltintto`: objspace.std.prebuiltintto.html

Modified: pypy/branch/ast-experiments/pypy/doc/config/objspace.std.withrangelist.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/config/objspace.std.withrangelist.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/config/objspace.std.withrangelist.txt	Mon Feb 26 08:45:45 2007
@@ -4,3 +4,8 @@
 mutated (and for example only iterated over), it uses only enough memory to
 store the start, stop and step of the range. This makes using ``range`` as
 efficient as ``xrange``, as long as the result is only used in a ``for``-loop.
+
+See the page about `object reimplementations`_ for more details.
+
+.. _`object reimplementations`: ../object-optimizations.html
+

Modified: pypy/branch/ast-experiments/pypy/doc/config/objspace.std.withsharingdict.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/config/objspace.std.withsharingdict.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/config/objspace.std.withsharingdict.txt	Mon Feb 26 08:45:45 2007
@@ -1,13 +1,6 @@
-Enable "sharing dictionaries". They are a special dict representation used
-together with `multidicts`_. This dict representation is used only for instance
-dictionaries and tries to make instance dictionaries use less memory (in fact,
-in the ideal case the memory behaviour should be mostly like that of using
-__slots__).
+Enable "sharing dictionaries".
 
-The idea is the following: Most instances of the same class have very similar
-attributes. Therefore all the instance dictionaries of these instances all store
-the same keys. To save memory, these common keys could be stored in a common
-place. This is exactly what "sharing dictionaries" are doing: only the values
-themselves are stored on the instance, the rest in a shared structure.
+See the page about `object optimizations`_ for more details.
+
+.. _`object optimizations`: ../object-optimizations.html
 
-.. _`multidicts`: objspace.std.withmultidict.html

Modified: pypy/branch/ast-experiments/pypy/doc/config/objspace.std.withstrdict.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/config/objspace.std.withstrdict.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/config/objspace.std.withstrdict.txt	Mon Feb 26 08:45:45 2007
@@ -0,0 +1 @@
+Obsolete. See :config:`objspace.std.withmultidict` instead.

Modified: pypy/branch/ast-experiments/pypy/doc/config/objspace.std.withstrjoin.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/config/objspace.std.withstrjoin.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/config/objspace.std.withstrjoin.txt	Mon Feb 26 08:45:45 2007
@@ -1,7 +1,7 @@
-Enable "string join" objects. They are a different implementation of the Python
-``str`` type, indistinguishable for the normal user. They represent the lazy
-addition of several strings without actually performing the addition (which
-involves copying etc.). When the actual value of the string join object is
-needed, the addition is performed. This makes it possible efficiently perform
-string additions in a loop without using the ``"".join(list_of_strings)``
-pattern.
+Enable "string join" objects.
+
+See the page about `object optimizations`_ for more details.
+
+.. _`object optimizations`: ../object-optimizations.html
+
+

Modified: pypy/branch/ast-experiments/pypy/doc/config/objspace.std.withstrslice.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/config/objspace.std.withstrslice.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/config/objspace.std.withstrslice.txt	Mon Feb 26 08:45:45 2007
@@ -1,8 +1,7 @@
-Enable "string slice" objects. They are a different implementation of the Python
-``str`` type, indistinguishable for the normal user. They represent the lazy
-slicing of a string without actually performing the slicing (which involves
-copying). This is only done for slices of step one.  When the actual value of
-the string slice object is needed, the slicing is done (although a lot of string
-methods don't make this necessary). This makes string slicing a very efficient
-operation. It also saves memory in some cases but can also lead to memory leaks,
-since the string slice retains a reference to the original string.
+Enable "string slice" objects.
+
+See the page about `object optimizations`_ for more details.
+
+.. _`object optimizations`: ../object-optimizations.html
+
+

Modified: pypy/branch/ast-experiments/pypy/doc/config/objspace.std.withtypeversion.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/config/objspace.std.withtypeversion.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/config/objspace.std.withtypeversion.txt	Mon Feb 26 08:45:45 2007
@@ -2,3 +2,5 @@
 (only internally visible) version that is updated when the type's dict is
 changed. This is e.g. used for invalidating caches. It does not make sense to
 enable this option alone.
+
+.. internal

Modified: pypy/branch/ast-experiments/pypy/doc/config/objspace.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/config/objspace.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/config/objspace.txt	Mon Feb 26 08:45:45 2007
@@ -0,0 +1 @@
+..  intentionally empty

Modified: pypy/branch/ast-experiments/pypy/doc/config/objspace.usemodules._codecs.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/config/objspace.usemodules._codecs.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/config/objspace.usemodules._codecs.txt	Mon Feb 26 08:45:45 2007
@@ -1,2 +1,2 @@
 Use the '_codecs' module. 
-This module is expected to be working and is included by default.
+Used by the 'codecs' standard lib module. This module is expected to be working and is included by default.

Modified: pypy/branch/ast-experiments/pypy/doc/config/objspace.usemodules._demo.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/config/objspace.usemodules._demo.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/config/objspace.usemodules._demo.txt	Mon Feb 26 08:45:45 2007
@@ -1 +1,5 @@
 Use the '_demo' module. 
+
+This is the demo module for the `extension compiler`_. Not enabled by default.
+
+.. _`extension compiler`: ../extcompiler.html

Modified: pypy/branch/ast-experiments/pypy/doc/config/objspace.usemodules._file.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/config/objspace.usemodules._file.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/config/objspace.usemodules._file.txt	Mon Feb 26 08:45:45 2007
@@ -1,2 +1,4 @@
-Use the '_file' module. 
-This module is essential, included by default and should not be removed.
+Use the '_file' module. It is an internal module that contains helper
+functionality for the builtin ``file`` type.
+
+.. internal

Modified: pypy/branch/ast-experiments/pypy/doc/config/objspace.usemodules._pickle_support.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/config/objspace.usemodules._pickle_support.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/config/objspace.usemodules._pickle_support.txt	Mon Feb 26 08:45:45 2007
@@ -1,2 +1,6 @@
 Use the '_pickle_support' module. 
-This module is expected to be working and is included by default.
+Internal helpers for pickling runtime builtin types (frames, cells, etc)
+for `stackless`_ tasklet pickling support.
+.. _`stackless`: ../stackless.html
+
+.. internal

Modified: pypy/branch/ast-experiments/pypy/doc/config/objspace.usemodules._random.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/config/objspace.usemodules._random.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/config/objspace.usemodules._random.txt	Mon Feb 26 08:45:45 2007
@@ -1,2 +1,2 @@
-Use the '_random' module. 
+Use the '_random' module. It is necessary to use the module "random" from the standard library.
 This module is expected to be working and is included by default.

Modified: pypy/branch/ast-experiments/pypy/doc/config/objspace.usemodules._stackless.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/config/objspace.usemodules._stackless.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/config/objspace.usemodules._stackless.txt	Mon Feb 26 08:45:45 2007
@@ -1 +1,6 @@
 Use the '_stackless' module. 
+
+Exposes the `stackless` primitives, and also implies a stackless build. 
+See also :config:`translation.stackless`.
+
+.. _`stackless`: ../stackless.html

Modified: pypy/branch/ast-experiments/pypy/doc/config/objspace.usemodules._weakref.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/config/objspace.usemodules._weakref.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/config/objspace.usemodules._weakref.txt	Mon Feb 26 08:45:45 2007
@@ -1,2 +1,6 @@
-Use the '_weakref' module. 
-This module is expected to be working and is included by default.
+Use the '_weakref' module, necessary for the standard lib 'weakref' module.
+PyPy's weakref implementation is not completely stable yet. The first
+difference to CPython is that weak references only go away after the next
+garbage collection, not immediately. The other problem seems to be that under
+certain circumstances (that we have not determined) weak references keep the
+object alive.

Modified: pypy/branch/ast-experiments/pypy/doc/config/objspace.usemodules.bz2.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/config/objspace.usemodules.bz2.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/config/objspace.usemodules.bz2.txt	Mon Feb 26 08:45:45 2007
@@ -1,2 +1,3 @@
 Use the 'bz2' module. 
-This module is expected to be fully working.
+This module is working "sometimes". It fails to build on 64 bit machines and
+can have issues on 32 bit machines.

Modified: pypy/branch/ast-experiments/pypy/doc/config/objspace.usemodules.posix.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/config/objspace.usemodules.posix.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/config/objspace.usemodules.posix.txt	Mon Feb 26 08:45:45 2007
@@ -1,2 +1,3 @@
-Use the 'posix' module. 
-This module is essential, included by default and should not be removed.
+Use the essential 'posix' module.
+This module is essential, included by default and cannot be removed (even when
+specified explicitly, the option gets overriden later).

Modified: pypy/branch/ast-experiments/pypy/doc/config/objspace.usemodules.pypymagic.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/config/objspace.usemodules.pypymagic.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/config/objspace.usemodules.pypymagic.txt	Mon Feb 26 08:45:45 2007
@@ -1,2 +1,7 @@
 Use the 'pypymagic' module. 
 This module is expected to be working and is included by default.
+It contains special (sometimes slightly magic) PyPy-specific functionality.
+For example most of the special functions described in the `object space proxies`
+document are in the module.
+
+.. _`object space proxy`: ../objspace-proxies.html

Modified: pypy/branch/ast-experiments/pypy/doc/config/objspace.usemodules.rctime.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/config/objspace.usemodules.rctime.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/config/objspace.usemodules.rctime.txt	Mon Feb 26 08:45:45 2007
@@ -1,2 +1,7 @@
 Use the 'rctime' module. 
-This module is expected to be fully working.
+
+'rctime' is our `rctypes`_ based implementation of the builtin 'time' module.
+It supersedes the less complete :config:`objspace.usemodules.time`,
+at least for C-like targets (the C and LLVM backends).
+
+.. _`rctypes`: ../rctypes.html

Modified: pypy/branch/ast-experiments/pypy/doc/config/objspace.usemodules.recparser.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/config/objspace.usemodules.recparser.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/config/objspace.usemodules.recparser.txt	Mon Feb 26 08:45:45 2007
@@ -1,2 +1,4 @@
 Use the 'recparser' module. 
-This module is expected to be working and is included by default.
+This is PyPy implementation of the standard library 'parser' module (e.g. if
+this option is enabled and you say ``import parser`` you get this module).
+It is enabled by default.

Modified: pypy/branch/ast-experiments/pypy/doc/config/objspace.usemodules.rsocket.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/config/objspace.usemodules.rsocket.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/config/objspace.usemodules.rsocket.txt	Mon Feb 26 08:45:45 2007
@@ -1,2 +1,7 @@
 Use the 'rsocket' module. 
-This module is expected to be fully working.
+
+This is our implementation of '_socket', the Python builtin module
+exposing socket primitives, which is wrapped and used by the standard
+library 'socket.py' module. 'rsocket' is based on `rctypes`_.
+
+.. _`rctypes`: ../rctypes.html

Modified: pypy/branch/ast-experiments/pypy/doc/config/objspace.usemodules.time.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/config/objspace.usemodules.time.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/config/objspace.usemodules.time.txt	Mon Feb 26 08:45:45 2007
@@ -1 +1,4 @@
 Use the 'time' module. 
+
+Obsolete; use :config:`objspace.usemodules.rctime` for our up-to-date version
+of the application-level 'time' module.

Modified: pypy/branch/ast-experiments/pypy/doc/config/objspace.usemodules.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/config/objspace.usemodules.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/config/objspace.usemodules.txt	Mon Feb 26 08:45:45 2007
@@ -0,0 +1 @@
+..  intentionally empty

Modified: pypy/branch/ast-experiments/pypy/doc/config/objspace.usepycfiles.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/config/objspace.usepycfiles.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/config/objspace.usepycfiles.txt	Mon Feb 26 08:45:45 2007
@@ -1,3 +1,4 @@
-Whether PyPy should import and generate "pyc" files. This is mostly always on,
+If this option is used, then PyPy imports and generates "pyc" files in the
+usual way. This is mostly always on,
 except when using other options that lead to PyPy-specific bytecodes that should
 not be cached on disk because they might confuse CPython.

Modified: pypy/branch/ast-experiments/pypy/doc/config/translation.backend.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/config/translation.backend.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/config/translation.backend.txt	Mon Feb 26 08:45:45 2007
@@ -0,0 +1,3 @@
+Which backend to use when translating, see `translation documentation`.
+
+.. _`translation documentation`: ../translation.html

Modified: pypy/branch/ast-experiments/pypy/doc/config/translation.backendopt.clever_malloc_removal.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/config/translation.backendopt.clever_malloc_removal.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/config/translation.backendopt.clever_malloc_removal.txt	Mon Feb 26 08:45:45 2007
@@ -0,0 +1,10 @@
+Try to inline flowgraphs based on whether doing so would enable malloc
+removal (:config:`translation.backendopt.mallocs`.) by eliminating
+calls that result in escaping. This is an experimental optimisation,
+also right now some eager inlining is necessary for helpers doing
+malloc itself to be inlined first for this to be effective.
+This option enable also an extra subsequent malloc removal phase.
+
+Callee flowgraphs are considered candidates based on a weight heuristic like
+for basic inlining. (see :config:`translation.backendopt.inline`,
+:config:`translation.backendopt.clever_malloc_removal_threshold` ).

Modified: pypy/branch/ast-experiments/pypy/doc/config/translation.backendopt.clever_malloc_removal_heuristic.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/config/translation.backendopt.clever_malloc_removal_heuristic.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/config/translation.backendopt.clever_malloc_removal_heuristic.txt	Mon Feb 26 08:45:45 2007
@@ -0,0 +1,4 @@
+Internal option. Switch to a different weight heuristic for inlining.
+This is for clever malloc removal (:config:`translation.backendopt.clever_malloc_removal`).
+
+.. internal

Modified: pypy/branch/ast-experiments/pypy/doc/config/translation.backendopt.clever_malloc_removal_threshold.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/config/translation.backendopt.clever_malloc_removal_threshold.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/config/translation.backendopt.clever_malloc_removal_threshold.txt	Mon Feb 26 08:45:45 2007
@@ -0,0 +1,2 @@
+Weight threshold used to decide whether to inline flowgraphs.  
+This is for clever malloc removal (:config:`translation.backendopt.clever_malloc_removal`).

Modified: pypy/branch/ast-experiments/pypy/doc/config/translation.backendopt.constfold.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/config/translation.backendopt.constfold.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/config/translation.backendopt.constfold.txt	Mon Feb 26 08:45:45 2007
@@ -0,0 +1 @@
+Do constant folding of operations and constant propagation on flowgraphs.

Modified: pypy/branch/ast-experiments/pypy/doc/config/translation.backendopt.heap2stack.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/config/translation.backendopt.heap2stack.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/config/translation.backendopt.heap2stack.txt	Mon Feb 26 08:45:45 2007
@@ -0,0 +1,2 @@
+Experimental optimisation, not very tested nor used at the moment.
+

Modified: pypy/branch/ast-experiments/pypy/doc/config/translation.backendopt.inline.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/config/translation.backendopt.inline.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/config/translation.backendopt.inline.txt	Mon Feb 26 08:45:45 2007
@@ -0,0 +1,10 @@
+Inline flowgraphs based on an heuristic, the default one considers
+essentially the a weight for the flowgraph based on the number of
+low-level operations in them (see
+:config:`translation.backendopt.inline_threshold` ).
+
+Some amount of inlining in order to have RPython builtin type helpers
+inlined is needed for malloc removal
+(:config:`translation.backendopt.mallocs`) to be effective.
+
+This optimisation is used by default.

Modified: pypy/branch/ast-experiments/pypy/doc/config/translation.backendopt.inline_heuristic.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/config/translation.backendopt.inline_heuristic.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/config/translation.backendopt.inline_heuristic.txt	Mon Feb 26 08:45:45 2007
@@ -0,0 +1,4 @@
+Internal option. Switch to a different weight heuristic for inlining.
+This is for basic inlining (:config:`translation.backendopt.inline`).
+
+.. internal

Modified: pypy/branch/ast-experiments/pypy/doc/config/translation.backendopt.inline_threshold.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/config/translation.backendopt.inline_threshold.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/config/translation.backendopt.inline_threshold.txt	Mon Feb 26 08:45:45 2007
@@ -0,0 +1,2 @@
+Weight threshold used to decide whether to inline flowgraphs.
+This is for basic inlining (:config:`translation.backendopt.inline`).

Modified: pypy/branch/ast-experiments/pypy/doc/config/translation.backendopt.mallocs.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/config/translation.backendopt.mallocs.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/config/translation.backendopt.mallocs.txt	Mon Feb 26 08:45:45 2007
@@ -0,0 +1,29 @@
+This optimization enables "malloc removal", which "explodes"
+allocations of structures which do not escape from the function they
+are allocated in into one or more additional local variables.
+
+An example.  Consider this rather unlikely seeming code::
+
+    class C:
+        pass
+    def f(y):
+        c = C()
+        c.x = y
+        return c.x
+
+Malloc removal will spot that the ``C`` object can never leave ``f``
+and replace the above with code like this::
+
+    def f(y):
+        _c__x = y
+        return _c__x
+
+It is rare for code to be directly written in a way that allows this
+optimization to be useful, but inlining often results in opportunities
+for its use (and indeed, this is one of the main reasons PyPy does its
+own inlining rather than relying on the C compilers).
+
+For much more information about this and other optimizations you can
+read section 4.1 of the `technical report on "Massive Parallelism and
+Translation Aspects"
+<http://codespeak.net/pypy/extradoc/eu-report/D07.1_Massive_Parallelism_and_Translation_Aspects-2006-12-15.pdf>`__.

Modified: pypy/branch/ast-experiments/pypy/doc/config/translation.backendopt.merge_if_blocks.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/config/translation.backendopt.merge_if_blocks.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/config/translation.backendopt.merge_if_blocks.txt	Mon Feb 26 08:45:45 2007
@@ -0,0 +1,26 @@
+This optimization converts parts of flow graphs that result from
+chains of ifs and elifs like this into merged blocks.
+
+By default flow graphing this kind of code::
+
+    if x == 0:
+        f()
+    elif x == 1:
+        g()
+    elif x == 4:
+        h()
+    else:
+        j()
+
+will result in a chain of blocks with two exits, somewhat like this:
+
+.. image:: unmergedblocks.png
+
+(reflecting how Python would interpret this code).  Running this
+optimization will transform the block structure to contain a single
+"choice block" with four exits:
+
+.. image:: mergedblocks.png
+
+This can then be turned into a switch by the C backend, allowing the C
+compiler to produce more efficient code.

Modified: pypy/branch/ast-experiments/pypy/doc/config/translation.backendopt.print_statistics.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/config/translation.backendopt.print_statistics.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/config/translation.backendopt.print_statistics.txt	Mon Feb 26 08:45:45 2007
@@ -0,0 +1,2 @@
+Debugging option. Print statics about the forest of flowgraphs as they
+go through the various backend optimisations.
\ No newline at end of file

Modified: pypy/branch/ast-experiments/pypy/doc/config/translation.backendopt.profile_based_inline.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/config/translation.backendopt.profile_based_inline.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/config/translation.backendopt.profile_based_inline.txt	Mon Feb 26 08:45:45 2007
@@ -0,0 +1,10 @@
+Inline flowgraphs only for call-sites for which there was a minimal
+number of calls during an instrumented run of the program. Callee
+flowgraphs are considered candidates based on a weight heuristic like
+for basic inlining. (see :config:`translation.backendopt.inline`,
+:config:`translation.backendopt.profile_based_inline_threshold` ).
+
+The option takes as value a string which is the arguments to pass to
+the program for the instrumented run.
+
+This optimisation is not used by default.
\ No newline at end of file

Modified: pypy/branch/ast-experiments/pypy/doc/config/translation.backendopt.profile_based_inline_heuristic.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/config/translation.backendopt.profile_based_inline_heuristic.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/config/translation.backendopt.profile_based_inline_heuristic.txt	Mon Feb 26 08:45:45 2007
@@ -0,0 +1,4 @@
+Internal option. Switch to a different weight heuristic for inlining.
+This is for profile-based inlining (:config:`translation.backendopt.profile_based_inline`).
+
+.. internal

Modified: pypy/branch/ast-experiments/pypy/doc/config/translation.backendopt.profile_based_inline_threshold.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/config/translation.backendopt.profile_based_inline_threshold.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/config/translation.backendopt.profile_based_inline_threshold.txt	Mon Feb 26 08:45:45 2007
@@ -0,0 +1,2 @@
+Weight threshold used to decide whether to inline flowgraphs.
+This is for profile-based inlining (:config:`translation.backendopt.profile_based_inline`).

Modified: pypy/branch/ast-experiments/pypy/doc/config/translation.backendopt.raisingop2direct_call.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/config/translation.backendopt.raisingop2direct_call.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/config/translation.backendopt.raisingop2direct_call.txt	Mon Feb 26 08:45:45 2007
@@ -0,0 +1,3 @@
+Internal option. Transformation required by the LLVM backend.
+
+.. internal

Modified: pypy/branch/ast-experiments/pypy/doc/config/translation.backendopt.remove_asserts.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/config/translation.backendopt.remove_asserts.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/config/translation.backendopt.remove_asserts.txt	Mon Feb 26 08:45:45 2007
@@ -0,0 +1 @@
+Remove raising of assertions from the flowgraphs, which might give small speedups.

Modified: pypy/branch/ast-experiments/pypy/doc/config/translation.backendopt.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/config/translation.backendopt.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/config/translation.backendopt.txt	Mon Feb 26 08:45:45 2007
@@ -0,0 +1,5 @@
+This group contains options about various backend optimization passes. Most of
+them are described in the `EU report about optimization`_
+
+.. _`EU report about optimization`: http://codespeak.net/pypy/extradoc/eu-report/D07.1_Massive_Parallelism_and_Translation_Aspects-2006-12-15.pdf
+

Modified: pypy/branch/ast-experiments/pypy/doc/config/translation.builtins_can_raise_exceptions.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/config/translation.builtins_can_raise_exceptions.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/config/translation.builtins_can_raise_exceptions.txt	Mon Feb 26 08:45:45 2007
@@ -0,0 +1,3 @@
+Internal option.
+
+.. internal

Modified: pypy/branch/ast-experiments/pypy/doc/config/translation.cc.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/config/translation.cc.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/config/translation.cc.txt	Mon Feb 26 08:45:45 2007
@@ -0,0 +1 @@
+Specify which C compiler to use.

Modified: pypy/branch/ast-experiments/pypy/doc/config/translation.cli.trace_calls.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/config/translation.cli.trace_calls.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/config/translation.cli.trace_calls.txt	Mon Feb 26 08:45:45 2007
@@ -0,0 +1,3 @@
+Internal. Debugging aid for the CLI backend.
+
+.. internal

Modified: pypy/branch/ast-experiments/pypy/doc/config/translation.cli.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/config/translation.cli.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/config/translation.cli.txt	Mon Feb 26 08:45:45 2007
@@ -0,0 +1 @@
+..  intentionally empty

Modified: pypy/branch/ast-experiments/pypy/doc/config/translation.compilerflags.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/config/translation.compilerflags.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/config/translation.compilerflags.txt	Mon Feb 26 08:45:45 2007
@@ -0,0 +1 @@
+Experimental. Specify extra flags to pass to the C compiler.

Modified: pypy/branch/ast-experiments/pypy/doc/config/translation.countmallocs.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/config/translation.countmallocs.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/config/translation.countmallocs.txt	Mon Feb 26 08:45:45 2007
@@ -0,0 +1,4 @@
+Internal; used by some of the C backend tests to check that the number of
+allocations matches the number of frees.
+
+.. internal

Modified: pypy/branch/ast-experiments/pypy/doc/config/translation.debug.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/config/translation.debug.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/config/translation.debug.txt	Mon Feb 26 08:45:45 2007
@@ -0,0 +1,2 @@
+Record extra debugging information during annotation. This leads to slightly
+less obscure error messages.

Modified: pypy/branch/ast-experiments/pypy/doc/config/translation.fork_before.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/config/translation.fork_before.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/config/translation.fork_before.txt	Mon Feb 26 08:45:45 2007
@@ -0,0 +1,4 @@
+This is an option mostly useful when working on the PyPy toolchain. If you use
+it, translate.py will fork before the specified phase. If the translation
+crashes after that fork, you can fix the bug in the toolchain, and continue
+translation at the fork-point.

Modified: pypy/branch/ast-experiments/pypy/doc/config/translation.gc.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/config/translation.gc.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/config/translation.gc.txt	Mon Feb 26 08:45:45 2007
@@ -0,0 +1,15 @@
+Choose the Garbage Collector used by the translated program:
+
+  - "ref": reference counting. Takes very long to translate and the result is
+    slow.
+
+  - "framework": our custom mark-and-sweep collector. Takes moderately long and
+    is the fastest option without external dependencies.
+
+  - "stacklessgc": same as "framework" but uses a different method to find the
+    garbage collection roots on the stack, by unwinding it, using stackless:
+    :config:`translation.stackless`.
+
+  - "boehm": use the Boehm conservative GC
+
+

Modified: pypy/branch/ast-experiments/pypy/doc/config/translation.insist.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/config/translation.insist.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/config/translation.insist.txt	Mon Feb 26 08:45:45 2007
@@ -0,0 +1,4 @@
+Don't stop on the first `rtyping`_ error. Instead, try to rtype as much as
+possible and show the collected error messages in the end.
+
+.. _`rtyping`: ../rtyper.html

Modified: pypy/branch/ast-experiments/pypy/doc/config/translation.instrument.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/config/translation.instrument.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/config/translation.instrument.txt	Mon Feb 26 08:45:45 2007
@@ -0,0 +1,3 @@
+Internal option.
+
+.. internal

Modified: pypy/branch/ast-experiments/pypy/doc/config/translation.instrumentctl.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/config/translation.instrumentctl.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/config/translation.instrumentctl.txt	Mon Feb 26 08:45:45 2007
@@ -0,0 +1,3 @@
+Internal option.
+
+.. internal

Modified: pypy/branch/ast-experiments/pypy/doc/config/translation.linkerflags.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/config/translation.linkerflags.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/config/translation.linkerflags.txt	Mon Feb 26 08:45:45 2007
@@ -0,0 +1 @@
+Experimental. Specify extra flags to pass to the linker.

Modified: pypy/branch/ast-experiments/pypy/doc/config/translation.list_comprehension_operations.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/config/translation.list_comprehension_operations.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/config/translation.list_comprehension_operations.txt	Mon Feb 26 08:45:45 2007
@@ -0,0 +1,2 @@
+Experimental optimisation for list comprehensions in RPython.
+

Modified: pypy/branch/ast-experiments/pypy/doc/config/translation.llvm_via_c.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/config/translation.llvm_via_c.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/config/translation.llvm_via_c.txt	Mon Feb 26 08:45:45 2007
@@ -0,0 +1,6 @@
+This options compiles LLVM code by using llc to convert it to C, then
+using gcc to compile this C instead of using LLVM's own code
+generators.  This generally results in better performance
+(particularly when using :config:`translation.profopt` to use gcc's
+profile-directed optimizations) but takes rather longer and uses more
+RAM.

Modified: pypy/branch/ast-experiments/pypy/doc/config/translation.no__thread.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/config/translation.no__thread.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/config/translation.no__thread.txt	Mon Feb 26 08:45:45 2007
@@ -0,0 +1,4 @@
+Don't use gcc __thread attribute for fast thread local storage
+implementation . Increases the chance that moving the resulting
+executable to another same processor Linux machine will work. (see
+:config:`translation.vanilla`).

Modified: pypy/branch/ast-experiments/pypy/doc/config/translation.output.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/config/translation.output.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/config/translation.output.txt	Mon Feb 26 08:45:45 2007
@@ -0,0 +1 @@
+Specify file name that the produced executable gets.

Modified: pypy/branch/ast-experiments/pypy/doc/config/translation.profopt.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/config/translation.profopt.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/config/translation.profopt.txt	Mon Feb 26 08:45:45 2007
@@ -0,0 +1,5 @@
+Use GCCs profile-guided optimizations. This option specifies the the
+arguments with which to call pypy-c (and in general the translated
+RPython program) to gather profile data. Example for pypy-c: "-c 'from
+richards import main;main(); from test import pystone;
+pystone.main()'"

Modified: pypy/branch/ast-experiments/pypy/doc/config/translation.simplifying.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/config/translation.simplifying.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/config/translation.simplifying.txt	Mon Feb 26 08:45:45 2007
@@ -0,0 +1,3 @@
+Internal option.
+
+.. internal

Modified: pypy/branch/ast-experiments/pypy/doc/config/translation.stackless.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/config/translation.stackless.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/config/translation.stackless.txt	Mon Feb 26 08:45:45 2007
@@ -0,0 +1,5 @@
+Run the `stackless transform`_ on each generated graph, which enables the use
+of coroutines at RPython level and the "stackless" module when translating
+PyPy.
+
+.. _`stackless transform`: ../stackless.html

Modified: pypy/branch/ast-experiments/pypy/doc/config/translation.thread.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/config/translation.thread.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/config/translation.thread.txt	Mon Feb 26 08:45:45 2007
@@ -0,0 +1,2 @@
+Enable threading. The only target where this has visible effect is PyPy (this
+also enables the ``thread`` module then).

Modified: pypy/branch/ast-experiments/pypy/doc/config/translation.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/config/translation.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/config/translation.txt	Mon Feb 26 08:45:45 2007
@@ -0,0 +1 @@
+..  intentionally empty

Modified: pypy/branch/ast-experiments/pypy/doc/config/translation.type_system.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/config/translation.type_system.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/config/translation.type_system.txt	Mon Feb 26 08:45:45 2007
@@ -0,0 +1,4 @@
+Which type system to use when rtyping_. This option should not be set
+explicitely.
+
+.. _rtyping: ../rtyper.html

Modified: pypy/branch/ast-experiments/pypy/doc/config/translation.vanilla.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/config/translation.vanilla.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/config/translation.vanilla.txt	Mon Feb 26 08:45:45 2007
@@ -0,0 +1,2 @@
+Try to make the resulting compiled program as portable (=moveable to another
+machine) as possible. Which is not much.

Modified: pypy/branch/ast-experiments/pypy/doc/config/translation.verbose.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/config/translation.verbose.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/config/translation.verbose.txt	Mon Feb 26 08:45:45 2007
@@ -0,0 +1 @@
+Print some more information during translation.

Modified: pypy/branch/ast-experiments/pypy/doc/config/translation.withsmallfuncsets.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/config/translation.withsmallfuncsets.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/config/translation.withsmallfuncsets.txt	Mon Feb 26 08:45:45 2007
@@ -0,0 +1,3 @@
+Represent function sets smaller than this option's value as an integer instead
+of a function pointer. A call is then done via a switch on that integer, which
+allows inlining etc. Small numbers for this can speed up PyPy (try 5).

Modified: pypy/branch/ast-experiments/pypy/doc/configuration.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/configuration.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/configuration.txt	Mon Feb 26 08:45:45 2007
@@ -183,7 +183,7 @@
 ===================================
 
 The two large parts of PyPy, the standard interpreter and the translation
-toolchain, have too separate sets of options. The translation toolchain options
+toolchain, have two separate sets of options. The translation toolchain options
 can be found on the ``config`` attribute of all ``TranslationContext``
 instances and are described in translationoption.py_. The interpreter options
 are attached to the object space, also under the name ``config`` and are

Modified: pypy/branch/ast-experiments/pypy/doc/confrest.py
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/confrest.py	(original)
+++ pypy/branch/ast-experiments/pypy/doc/confrest.py	Mon Feb 26 08:45:45 2007
@@ -4,19 +4,29 @@
 class PyPyPage(Page): 
     def fill_menubar(self):
         self.menubar = html.div(
-            html.a("news", href="news.html", class_="menu"), " ",
-            html.a("getting-started", 
-                   href="getting-started.html", class_="menu"), " ",
-            html.a("documentation", href="index.html", class_="menu"), " ",
-            html.a("svn", href="https://codespeak.net/viewvc/pypy/dist/", class_="menu"), " ", 
-            html.a("issues", 
-                   href="https://codespeak.net/issue/pypy-dev/", 
-                   class_="menu"), 
-            html.a("contact", href="contact.html", class_="menu"), " ", 
-            html.a("EU/project", 
+            html.a("news",
+                   href="http://codespeak.net/pypy/dist/pypy/doc/news.html",
+                   class_="menu"), " ",
+            html.a("getting-started",
+                   href=self.get_doclink("getting-started.html"),
+                   class_="menu"), " ",
+            html.a("documentation", href=self.get_doclink("index.html"),
+                   class_="menu"), " ",
+            html.a("svn", href="https://codespeak.net/viewvc/pypy/dist/",
+                   class_="menu"), " ",
+            html.a("issues",
+                   href="https://codespeak.net/issue/pypy-dev/",
+                   class_="menu"),
+            html.a("contact", href=self.get_doclink("contact.html"),
+                   class_="menu"), " ",
+            html.a("EU/project",
                    href="http://pypy.org/", class_="menu"), " ",
             " ", id="menubar")
 
+    def get_doclink(self, target):
+        return relpath(self.targetpath.strpath,
+                       self.project.get_docpath().join(target).strpath)
+
 class Project(Project): 
     mydir = py.magic.autopath().dirpath()
 

Modified: pypy/branch/ast-experiments/pypy/doc/conftest.py
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/conftest.py	(original)
+++ pypy/branch/ast-experiments/pypy/doc/conftest.py	Mon Feb 26 08:45:45 2007
@@ -1,5 +1,8 @@
 import py
 from py.__.doc.conftest import Directory, DoctestText, ReSTChecker
+from py.__.rest.directive import register_linkrole
+
+thisdir = py.magic.autopath().dirpath()
 
 Option = py.test.config.Option
 option = py.test.config.addoptions("pypy-doc options", 
@@ -41,3 +44,47 @@
     
 class Directory(Directory): 
     ReSTChecker = PyPyReSTChecker 
+
+try:
+    from docutils.parsers.rst import directives, states, roles
+except ImportError:
+    pass
+else:
+    # enable :config: link role
+    def config_role(name, rawtext, text, lineno, inliner, options={},
+                    content=[]):
+        from docutils import nodes
+        from pypy.config.pypyoption import get_pypy_config
+        from pypy.config.makerestdoc import get_cmdline
+        txt = thisdir.join("config", text + ".txt")
+        html = thisdir.join("config", text + ".html")
+        assert txt.check()
+        assert name == "config"
+        sourcedir = py.path.local(inliner.document.settings._source).dirpath()
+        curr = sourcedir
+        prefix = ""
+        while 1:
+            relative = str(html.relto(curr))
+            if relative:
+                break
+            curr = curr.dirpath()
+            prefix += "../"
+        config = get_pypy_config()
+        # begin horror
+        h, n = config._cfgimpl_get_home_by_path(text);
+        opt = getattr(h._cfgimpl_descr, n)
+        # end horror
+        cmdline = get_cmdline(opt.cmdline, text)
+        if cmdline is not None:
+            shortest_long_option = 'X'*1000
+            for cmd in cmdline.split():
+                if cmd.startswith('--') and len(cmd) < len(shortest_long_option):
+                    shortest_long_option = cmd
+            text = shortest_long_option
+        target = prefix + relative
+        print text, target
+        reference_node = nodes.reference(rawtext, text, name=text, refuri=target)
+        return [reference_node], []
+    config_role.content = True
+    config_role.options = {}
+    roles.register_canonical_role("config", config_role)

Modified: pypy/branch/ast-experiments/pypy/doc/contact.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/contact.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/contact.txt	Mon Feb 26 08:45:45 2007
@@ -39,7 +39,7 @@
 conferences all year round. They will be happy to meet in person with
 anyone interested in the project. Here is the list of planned events_.
 
-.. _events: http://codespeak.net/pypy/dist/pypy/doc/events.html
+.. _events: http://codespeak.net/pypy/dist/pypy/doc/news.html
 
 PyPy calendar
 =============

Modified: pypy/branch/ast-experiments/pypy/doc/contributor.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/contributor.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/contributor.txt	Mon Feb 26 08:45:45 2007
@@ -6,48 +6,73 @@
 code base, ordered by number of commits (which is certainly not a very
 appropriate measure but it's something)::
 
-    Armin Rigo 
+    Armin Rigo
     Samuele Pedroni
-    Christian Tismer
-    Holger Krekel
     Michael Hudson
     Carl Friedrich Bolz
+    Christian Tismer
+    Holger Krekel
     Eric van Riet Paap
+    Antonio Cuni
     Anders Chrigstrom
+    Maciek Fijalkowski
     Richard Emslie
-    Anders Lehmann 
+    Aurelien Campeas
+    Anders Lehmann
+    Niklaus Haldimann
     Seo Sanghyeon
+    Lawrence Oluyede
     Alex Martelli
     Ludovic Aubry
     Adrien Di Mascio
+    Stephan Diehl
+    Guido Wesdorp
     Stefan Schwarzer
-    Tomek Meka 
+    Tomek Meka
     Patrick Maupin
+    Leonardo Santagada
     Bob Ippolito
-    Jacob Hallen 
     Laura Creighton
-    Marius Gedminas 
-    Niklaus Haldimann 
+    Jacob Hallen
+    Marius Gedminas
+    Niko Matsakis
     Amaury Forgeot d Arc
     Guido van Rossum
-    Stephan Diehl
+    Valentino Volonghi
+    Alexander Schremmer
+    Alexandre Fayolle
+    Wanja Saatkamp
+    Gerald Klix
+    Eugene Oden
     Dinu Gherman
     Guenter Jantzen
-    Rocco Moretti 
-    Boris Feigin 
+    Ben Young
+    Nicolas Chauvat
+    Michael Twomey
+    Rocco Moretti
+    Simon Burton
+    Boris Feigin
     Olivier Dormond
-    Valentino Volonghi
+    Gintautas Miliauskas
+    Stuart Williams
+    Jens-Uwe Mager
     Brian Dorsey
     Jonathan David Riehl
+    Anders Qvist
+    Beatrice During
     Andreas Friedge
-    Jens-Uwe Mager
-    Bert Freudenberg
     Alan McIntyre
-    Anders Qvist
+    Bert Freudenberg
+    Pieter Zieschang
+    Jean-Paul Calderone
+    Jacob Oscarson
+    Ignas Mikalajunas
     Lutz Paelike
-    Jacek Generowicz
+    Christopher Armstrong
+    Yusei Tahara
     Andrew Thompson
-    Ben Young
-    Alexander Schremmer
+    Jacek Generowicz
+    Joshua Gilbert
+    Anna Ravencroft
+    Martin Blais
     Michael Chermside
-

Modified: pypy/branch/ast-experiments/pypy/doc/dev_method.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/dev_method.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/dev_method.txt	Mon Feb 26 08:45:45 2007
@@ -224,7 +224,7 @@
     some middle ground - thus increases the importance of feedback.
 
 
-.. _documentation: http://codespeak.net/pypy/dist/pypy/doc/getting-started.html
+.. _documentation: getting-started.html
 
 Can I join in?
 ++++++++++++++

Modified: pypy/branch/ast-experiments/pypy/doc/eventhistory.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/eventhistory.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/eventhistory.txt	Mon Feb 26 08:45:45 2007
@@ -140,7 +140,7 @@
 all these documents are not approved by the European Union and therefore only
 preliminary. *(01/06/2006)*
 
-.. _`reports for the EU`: http://codespeak.net/pypy/dist/pypy/doc/index-report.html
+.. _`reports for the EU`: index-report.html
 
 
 PyPy Sprint in Göteborg 7th - 11th December 2005 
@@ -168,7 +168,7 @@
 the `getting started`_ document for instructions about downloading it and
 trying it out.  There is also a short FAQ_.  *(11/03/2005)*
 
-.. _`release 0.8 announcement`: http://codespeak.net/pypy/dist/pypy/doc/release-0.8.0.html
+.. _`release 0.8 announcement`: release-0.8.0.html
 
 PyPy Sprint in Paris 10th-16th October 2005 
 ========================================================
@@ -203,9 +203,9 @@
 trying it out.  We also have the beginning of a FAQ_.  *(08/28/2005)*
 
 .. _`pypy-0.7.0`: 
-.. _`release announcement`: http://codespeak.net/pypy/dist/pypy/doc/release-0.7.0.html
-.. _`getting started`: http://codespeak.net/pypy/dist/pypy/doc/getting-started.html
-.. _FAQ: http://codespeak.net/pypy/dist/pypy/doc/faq.html
+.. _`release announcement`: release-0.7.0.html
+.. _`getting started`: getting-started.html
+.. _FAQ: faq.html
 
 PyPy Sprint in Heidelberg 22nd-29th August 2005
 ==========================================================
@@ -268,7 +268,7 @@
 .. _`pypy-dev`: http://codespeak.net/mailman/listinfo/pypy-dev
 
 .. _EuroPython: http://europython.org 
-.. _`translation`: http://codespeak.net/pypy/dist/pypy/doc/translation.html 
+.. _`translation`: translation.html 
 .. _`sprint announcement`: http://codespeak.net/pypy/extradoc/sprintinfo/EP2005-announcement.html
 .. _`list of people coming`: http://codespeak.net/pypy/extradoc/sprintinfo/EP2005-people.html
 

Modified: pypy/branch/ast-experiments/pypy/doc/extcompiler.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/extcompiler.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/extcompiler.txt	Mon Feb 26 08:45:45 2007
@@ -179,7 +179,7 @@
 
 This does not work, however, if you need special data attached to the
 instances of your class.  For this case, you need the second solution:
-write the class entierely at interp-level.  Such a class must inherit
+write the class entirely at interp-level.  Such a class must inherit
 from ``pypy.interpreter.baseobjspace.Wrappable``.  You can manipulate
 instances of such a class freely at interp-level.  Instances of
 subclasses of ``Wrappable`` are *not* wrapped; they are merely

Modified: pypy/branch/ast-experiments/pypy/doc/extradoc.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/extradoc.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/extradoc.txt	Mon Feb 26 08:45:45 2007
@@ -133,7 +133,7 @@
 
 * `GNU lightning`_ generates assembly language at runtime. 
 
-* Tunes_ is not entierely unrelated.  (See also the `review of
+* Tunes_ is not entirely unrelated.  (See also the `review of
   programming languages`_.)
 
 .. _`CLR under the hood`: http://download.microsoft.com/download/2/4/d/24dfac0e-fec7-4252-91b9-fb2310603f14/CLRUnderTheHood.BradA.ppt
@@ -144,7 +144,7 @@
 .. _`Croquet`: http://www.opencroquet.org/
 .. _`transparent dynamic optimization`: http://www.hpl.hp.com/techreports/1999/HPL-1999-77.pdf
 .. _Dynamo: http://www.hpl.hp.com/techreports/1999/HPL-1999-78.pdf
-.. _testdesign: http://codespeak.net/pypy/dist/pypy/doc/coding-guide.html#test-design
+.. _testdesign: coding-guide.html#test-design
 .. _feasible: http://codespeak.net/pipermail/pypy-dev/2004q2/001289.html
 .. _rock: http://codespeak.net/pipermail/pypy-dev/2004q1/001255.html
 .. _`GNU lightning`: http://www.gnu.org/software/lightning/lightning.html

Modified: pypy/branch/ast-experiments/pypy/doc/faq.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/faq.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/faq.txt	Mon Feb 26 08:45:45 2007
@@ -12,58 +12,52 @@
 What is PyPy?
 -------------
 
-XXX
+PyPy is both a Python reimplementation and a framework to implement
+interpreters and virtual machines for programming languages,
+especially dynamic ones. PyPy tries to find new answers about ease of
+creation, flexibility, maintainability and speed trade-offs for
+language implementations.  For further details see our `goal and
+architecture document`_ .
 
-------------------------------------------------------
-Why a new implementation of Python?  What does it add?
-------------------------------------------------------
+.. _`goal and architecture document`: architecture.html
 
-XXX
 
--------------------------------------------------------------------
-What is the status of the project?  Can it be used in practice yet?
--------------------------------------------------------------------
+.. _`drop in replacement`:
 
-PyPy is a very broad project with varying level of a completion among
-parts. For example compiler toolchain is a relatively mature part,
-which is known of running several other projects (see: XXX).
-
-XXX finish that one
-
------------------------------------------
-Is PyPy a drop in replacement of CPython?
------------------------------------------
-
-Not completely yet. There are various areas where PyPy is lacking, such as
-threading_ and `extension modules`_. The language features (including built in
-types and functions) are very complete and well tested, though. That means that
-projects not using many extension modules can probably directly use PyPy. A
-project using extension modules might get some problems, though.
+------------------------------------------
+Is PyPy a drop in replacement for CPython?
+------------------------------------------
 
-------------------------------
-On what platforms does it run?
-------------------------------
+Not completely, at least not yet. There are various areas where PyPy is lacking, such as
+threading_ and `extension modules`_. The language features (including builtin
+types and functions) are very complete and well tested, though. This means that
+a project not using many extension modules can probably directly use PyPy. A
+project using extension modules might get some problems, though.
 
-PyPy is regularly and extensively tested on Linux machines and on Mac OS X and
-mostly works under Windows too (but is tested there less extensively). PyPy
-needs a CPython running on the target platform to bootstrap, cross compilation
-is not really meant to work, currently. Apart from that restriction, translating
-PyPy is supposed to produce nice platform-independent code, so the chances are
-not too bad that it works.
-
-Currently (due to time restrictions) we are not trying hard to make PyPy support
-64 bit platforms. While this seems to still mostly work out, a few modules won't
-work on 64 bit machines, such as ``bz2``.
-
-----------------------------------------------
-Which Python version (2.x?) does PyPy support?
-----------------------------------------------
-
-PyPy currently targets to be fully compatible with Python 2.4. That means that
-it contains the stdandard library of Python 2.4 and that it supports 2.4
-features (such as decorators) but not the 2.5 features (with statement, ternary
-operators).  The 2.5 features will probably be eventually suported, the most
-important reasons why nobody is working on them is that we did not promise this
+--------------------------------
+On what platforms does PyPy run?
+--------------------------------
+
+PyPy is regularly and extensively tested on Linux machines and on Mac
+OS X and mostly works under Windows too (but is tested there less
+extensively). PyPy needs a CPython running on the target platform to
+bootstrap, as cross compilation is not really meant to work yet.
+At the moment you need CPython 2.4 for the translation process, 2.5 is
+not fully supported.
+
+Currently (due to time restrictions) we are not trying hard to support
+PyPy in a 64 bit environment.  While things seem to mostly work, a few
+modules won't work on 64 bit machines, such as ``bz2``.
+
+------------------------------------------------
+Which Python version (2.x?) does PyPy implement?
+------------------------------------------------
+
+PyPy currently aims to be fully compatible with Python 2.4. That means that
+it contains the standard library of Python 2.4 and that it supports 2.4
+features (such as decorators) but not the 2.5 features (with statement, the ternary
+operator).  The 2.5 features will probably be eventually supported, the most
+important reason why nobody is working on them is that we did not promise this
 to the EU and have currently enough other tasks.
 
 .. _threading:
@@ -72,7 +66,7 @@
 Do threads work?  What are the modules that work?
 -------------------------------------------------
 
-Operating-System threads work in a limited way. If you enable the ``thread``
+Operating system-level threads work in a limited way. If you enable the ``thread``
 module then PyPy will get support for GIL based threading. One limitation is
 that not that many IO operations actually release the GIL, which reduces the
 usefulness of threads. On the other hand, PyPy fully supports `stackless-like
@@ -90,7 +84,7 @@
 
  * mixed module implementations: exceptions, sys, __builtin__, posix
    _codecs, gc, _weakref, array, marshal, errno, math, _sre,  parser, symbol,
-   _random, socket, unicodedata, mmap, fcntl, time, select, bz2, crypt, 
+   _random, socket, unicodedata, mmap, fcntl, time, select, bz2, crypt,
    signal
 
 
@@ -103,18 +97,38 @@
 Can I use CPython extension modules?
 ------------------------------------
 
-No and there are no current plans to support this. CPython extension modules
+No and there are no short-term plans to support this. CPython extension modules
 rely heavily on CPython's C API which contains a lot of implementation details
-like reference counting, exact C-level objects implementations etc.
+like reference counting, exact C-level object implementation and layout etc.
 
-Although if your module uses ctypes rather than C-level code, there is a hope.
-You can try to write a mixed module (see next question).
+Although if your module uses ctypes rather than C-level code, there is
+a hope -- you can try to write a mixed module (see next question).
+
+The long-term answer might be different.  In principle, it should be possible
+for PyPy to support the CPython C API (or at least a large subset of its
+official part).  It means that "in the fullness of time" you might be able to
+simply recompile existing CPython extension modules and use them with PyPy.
 
 ------------------------------------------
 How do I write extension modules for PyPy?
 ------------------------------------------
 
-XXX
+PyPy extension modules are written in the form of `mixed modules`_, so
+called because they can contain a mixture of compiled and interpreted
+Python code.  At the moment they all need to be translated together with the rest of PyPy.
+
+We have a proof concept of what we call the `extension compiler`_ and
+our support for a static variant of the ctypes interface (`rctypes`_) to
+help with their development. At the moment both have quite some rough
+edges.  This kind of module can even be cross-compiled to regular CPython
+extension modules, although this doesn't deliver completely satisfying
+results so far.  This area is going to improve over time.
+
+.. _`mixed modules`: coding-guide.html#mixed-module-mechanism
+.. _`extension compiler`: extcompiler.html
+.. _`rctypes`: rctypes.html
+
+.. _`slower than CPython`:
 
 -----------------
 How fast is PyPy?
@@ -127,19 +141,21 @@
 a factor of 2000. The first translated version was roughly 300 times slower
 than CPython. In later versions, we increased the speed. CPython was about
 10-20 times as fast as version 0.8.0, 4-7 times as fast as version 0.9 and
-2.4 - 5 times as fast as the current version (1.0).
-Note that the speed heavily depends on the enabled options at compile time.
+2 to 4 times as fast as the current version (0.99).
+Note that the speed heavily depends on the options enabled at compile time.
 
 
+.. _`prolog and javascript`:
+
 -----------------------------------------------------------------------
 What is this talk about a JavaScript and a Prolog interpreter in PyPy?
 -----------------------------------------------------------------------
 
-Since a Python interpreter is a rather large and intricate thing, our toolsuite
-became quite advanced to support it. Therefore people had the idea of using it
+Since a Python interpreter is a rather large and intricate thing, our tool suite
+has become quite advanced to support it. This resulted in people having the idea of using it
 to implement interpreters for other dynamic languages than Python and get a lot
 of things for free (translation to various languages, stackless features,
-garbage collection, implementation of various things like arbitraryly long
+garbage collection, implementation of various things like arbitrarily long
 integers). Therefore people started to implement a `JavaScript interpreter`_
 (Leonardo Santagada as his Summer of PyPy project) and a `Prolog interpreter`_
 (Carl Friedrich Bolz as his Masters thesis). Both projects are undocumented and
@@ -165,18 +181,13 @@
 Coming to a sprint is usually also the best way to get into PyPy development.
 If you want to start on your own, take a look at the list of `project
 suggestions`_. If you get stuck or need advice, `contact us`_. Usually IRC is
-the most immediate mean to get feedback (at least during some parts of the day,
-many PyPy developers are in Europe) and the mailing list is better for long
+the most immediate way to get feedback (at least during some parts of the day;
+many PyPy developers are in Europe) and the `mailing list`_ is better for long
 discussions.
 
 .. _`project suggestions`: project-ideas.html
 .. _`contact us`: contact.html
-
-----------------------------------
-Why so many levels of abstraction?
-----------------------------------
-
-XXX see pypy-vm-construction
+.. _`mailing list`: contact.html
 
 ----------------------------------------------------------------------
 I am getting strange errors while playing with PyPy, what should I do?
@@ -200,9 +211,9 @@
 ------------------------------
 
 RPython is a restricted subset of the Python language. The restrictions are to
-ensure that type inference (and eventually translation to other languages) of
+ensure that type inference (and so, ultimately, translation to other languages) of
 the program is possible. These restrictions only apply after the full import
-happened, so at import time arbitrary Python code can be executed. Another
+happens, so at import time arbitrary Python code can be executed. Another
 important point is that the property of "being RPython" always applies to a full
 program, not to single functions or modules (the translation tool chain does a
 full program analysis).
@@ -211,14 +222,15 @@
 of mixing types in arbitrary ways. RPython does not allow the usage of two
 different types in the same variable. In this respect (and in some others) it
 feels a bit like Java. Other features not allowed in RPython are the usage of
-special methods (``__XXX__``) except ``__init__`` and ``__del__`` and reflection
-capabilities (e.g. ``__dict__``).
+special methods (``__xxx__``) except ``__init__`` and ``__del__``, and the
+usage of reflection capabilities (e.g. ``__dict__``).
 
 Most existing standard library modules are not RPython, except for
 some functions in ``os``, ``math`` and ``time`` that are natively
 supported. In general it is quite unlikely that an existing Python
-program is by chance RPython, mostly it has to be rewritten heavily.
-To read more about RPython limitations read `RPython description`_
+program is by chance RPython; it is most likely that it would have to be
+heavily rewritten.
+To read more about the RPython limitations read the `RPython description`_.
 
 .. _`RPython description`: coding-guide.html#restricted-python
 
@@ -265,9 +277,12 @@
 Do I have to rewrite my programs in RPython?
 --------------------------------------------
 
-No.  PyPy always runs your code in its own interpreter, which is a full
-and compliant Python 2.4 interpreter.  RPython_ is only the language in
-which parts of PyPy itself are written.  XXX
+No.  PyPy always runs your code in its own interpreter, which is a
+full and compliant Python 2.4 interpreter.  RPython_ is only the
+language in which parts of PyPy itself are written and extension
+modules for it.  The answer to whether something needs to be written as
+an extension module, apart from the "gluing to external libraries" reason, will
+change over time as speed for normal Python code improves.
 
 -------------------------
 Which backends are there?
@@ -282,12 +297,12 @@
 * Low level backends: C_, LLVM_
 * High level backends: CLI_, JVM_, JavaScript_
 
-Partially implemented backends:
+Partially implemented backends (both high-level):
 
 * Squeak_, `Common Lisp`_
 
 
-To learn more about backends take a look at the `translation document`_
+To learn more about backends take a look at the `translation document`_.
 
 .. _CLI: cli-backend.html
 .. _JavaScript: js/whatis.html
@@ -298,24 +313,15 @@
 .. _Squeak: translation.html#gensqueak
 .. _`Common Lisp`: translation.html#gencl
 
--------------------------------------------------------
-Are there other projects that need the PyPy tool chain?
--------------------------------------------------------
-
-XXX
-
 ----------------------
 How do I compile PyPy?
 ----------------------
 
-See the `getting-started`_ guide.  Note that at the moment this produces
-an executable that contains a lot of things that are hard-coded for your
-particular system (including paths and other stuff), so it's not
-suitable for being installed or redistributed.    XXX
-
----------------------------------
-How do I compile my own programs?
----------------------------------
+See the `getting-started`_ guide.
+
+--------------------------------------
+How do I compile my own interpreters?
+--------------------------------------
 
 Start from the example of
 `pypy/translator/goal/targetnopstandalone.py`_, which you compile by
@@ -325,36 +331,11 @@
 
 You can have a look at intermediate C source code, which is (at the
 moment) put in ``/tmp/usession-*/testing_1/testing_1.c``.  Of course,
-all the function and stuff indirectly used by your ``entry_point()``
-function has to be RPython_.     XXX
-
---------------------------------------------
-Why isn't there a simpler way of doing that?
---------------------------------------------
-
-One answer is that "officially speaking" supporting this is not a goal
-of the PyPy project.
-
-XXX
-
-A better answer might be that when the target of compilation turns out
-not to be RPython, working out *why* can be very difficult, and
-working on the annotator to make these messages clearer -- even if
-possible -- would take time away from other development tasks.
-
-It's not that writing RPython is difficult, but if there was some kind
-of rpythonc compiling tool there would be much more temptation to try
-to compile arbitrary, pre-existing Python programs and this is fairly
-unlikely to work (to start, there is very little in the way of an
-"RPython standard library"). XXX outdated
-
-
----------------------------------------------------------------------------
-What does the error message "slice start must be proven non-negative" mean?
----------------------------------------------------------------------------
-
-XXX
-
+all the functions and stuff used directly and indirectly by your
+``entry_point()`` function has to be RPython_. Another example you may
+want to look at is `pypy/translator/goal/targetprologstandalone.py`_,
+the target for the in-progress Prolog implementation; this target for
+example enables a stackless build programmatically.
 
 
 .. _`RPython`: coding-guide.html#rpython

Modified: pypy/branch/ast-experiments/pypy/doc/geninterp.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/geninterp.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/geninterp.txt	Mon Feb 26 08:45:45 2007
@@ -18,8 +18,8 @@
 any longer to execute this code.
 
 .. _`application-level`: coding-guide.html#app-preferable
-.. _exceptions: http://codespeak.net/pypy/dist/pypy/lib/_exceptions.py
-.. _oldstyle: http://codespeak.net/pypy/dist/pypy/lib/_classobj.py
+.. _exceptions: ../../pypy/lib/_exceptions.py
+.. _oldstyle: ../../pypy/lib/_classobj.py
 
 Examples are exceptions_ and oldstyle_ classes. They are
 needed in a very early phase of bootstrapping StdObjspace, but
@@ -48,7 +48,7 @@
 Example
 +++++++
 
-.. _implementation: http://codespeak.net/pypy/dist/pypy/translator/geninterplevel.py
+.. _implementation: ../../pypy/translator/geninterplevel.py
 
 Let's try a little example. You might want to look at the flowgraph that it
 produces. Here, we directly run the Python translation and look at the
@@ -177,8 +177,8 @@
 Interplevel Snippets in the Sources
 +++++++++++++++++++++++++++++++++++
 
-.. _`_exceptions.py`: http://codespeak.net/pypy/dist/pypy/lib/_exceptions.py
-.. _`_classobj.py`: http://codespeak.net/pypy/dist/pypy/lib/_classobj.py
+.. _`_exceptions.py`: ../../pypy/lib/_exceptions.py
+.. _`_classobj.py`: ../../pypy/lib/_classobj.py
 
 Code written in application space can consist of complete files
 to be translated (`_exceptions.py`_, `_classobj.py`_), or they

Modified: pypy/branch/ast-experiments/pypy/doc/getting-started.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/getting-started.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/getting-started.txt	Mon Feb 26 08:45:45 2007
@@ -20,33 +20,33 @@
 translation aspect - should become robust against language changes. `more...`_
 
 .. _Python: http://docs.python.org/ref
-.. _`more...`: http://codespeak.net/pypy/dist/pypy/doc/architecture.html
+.. _`more...`: architecture.html
 
 Just the facts 
 ============== 
 
 .. _gettingpypy: 
 
-Downloading & running the PyPy 0.9 release 
--------------------------------------------
+Downloading & running the PyPy 0.99 release 
+--------------------------------------------
 
 Download one of the following release files and unpack it: 
 
-*pypy-0.9*
+*pypy-0.99*
     
   * download one of 
 
-    * `pypy-0.9.0.tar.bz2`_ (unix line endings) or
-    * `pypy-0.9.0.tar.gz`_ (unix line endings) or
-    * `pypy-0.9.0.zip`_ (windows line-endings) and unpack it 
+    * `pypy-0.99.0.tar.bz2`_ (unix line endings) or
+    * `pypy-0.99.0.tar.gz`_ (unix line endings) or
+    * `pypy-0.99.0.zip`_ (windows line-endings) and unpack it 
     
   * alternatively run 
   
-    * ``svn co http://codespeak.net/svn/pypy/release/0.9.x pypy-0.9.x``
-      (the 0.9 maintenance branch)
+    * ``svn co http://codespeak.net/svn/pypy/release/0.99.x pypy-0.99.x``
+      (the 0.99 maintenance branch)
 
-to get it from the subversion repository then change to the
-``pypy-0.9.0`` or ``pypy-0.9.x`` directory and execute the following
+to get it from the subversion repository. Then change to the
+``pypy-0.99.0`` or ``pypy-0.99.x`` directory and execute the following
 command line::
 
     python pypy/bin/py.py 
@@ -62,9 +62,9 @@
 dependant on CPython anymore and becomes faster.
 
 .. _`95% of CPythons core language regression tests`: http://codespeak.net/~hpk/pypy-testresult/ 
-.. _`pypy-0.9.0.tar.bz2`: http://codespeak.net/download/pypy/pypy-0.9.0.tar.bz2
-.. _`pypy-0.9.0.zip`: http://codespeak.net/download/pypy/pypy-0.9.0.zip
-.. _`pypy-0.9.0.tar.gz`: http://codespeak.net/download/pypy/pypy-0.9.0.tar.gz
+.. _`pypy-0.99.0.tar.bz2`: http://codespeak.net/download/pypy/pypy-0.99.0.tar.bz2
+.. _`pypy-0.99.0.zip`: http://codespeak.net/download/pypy/pypy-0.99.0.zip
+.. _`pypy-0.99.0.tar.gz`: http://codespeak.net/download/pypy/pypy-0.99.0.tar.gz
 
 Svn-check out & run the latest PyPy as a two-liner
 --------------------------------------------------
@@ -155,8 +155,8 @@
 
 To start interpreting Python with PyPy, use Python 2.3 or greater::
 
-    cd pypy/bin
-    python py.py
+    cd pypy
+    python bin/py.py
 
 After a few seconds (remember: this is running on top of CPython), 
 you should be at the PyPy prompt, which is the same as the Python 
@@ -180,10 +180,9 @@
 
 To list the PyPy interpreter command line options, type::
 
-    cd pypy/bin
-    python py.py --help
+    cd pypy
+    python bin/py.py --help
 
-(this will give you a daunting list, so it is a good idea to use a pager).
 py.py supports most of the options that CPython supports too (in addition to a
 large amount of options that can be used to customize py.py).
 As an example of using PyPy from the command line, you could type::
@@ -195,6 +194,9 @@
 
     python py.py ../../lib-python/2.4.1/test/pystone.py 10
 
+See our  `configuration sections`_ for details about what all the commandline
+options do.
+
 Special PyPy features 
 -------------------------- 
 
@@ -240,9 +242,8 @@
     |- 6    BINARY_ADD
       |-    add(W_IntObject(1), W_IntObject(2))   -> W_IntObject(3)
     |- 7    STORE_NAME    0 (a)
-      |-    setitem(W_DictObject([<Entry 3098577608L,W_StringObject('__builtins__'),
-                    <pypy.module..., W_StringObject('a'), W_IntObject(3))   
-            -> <W_NoneObject()>
+      |-    hash(W_StringObject('a'))   -> W_IntObject(-468864544)
+      |-    int_w(W_IntObject(-468864544))   -> -468864544
     |-10    LOAD_CONST    2 (<W_NoneObject()>)
     |-13    RETURN_VALUE
     |- <<<< leave <inline>a = 1 + 2 @ 1 >>>>
@@ -257,8 +258,8 @@
 object space, providing lazily-computed objects in a fully
 transparent manner::
 
-    cd pypy/bin
-    python py.py -o thunk
+    cd pypy
+    python bin/py.py -o thunk
 
     >>>> from pypymagic import thunk
     >>>> def longcomputation(lst):
@@ -286,8 +287,8 @@
 
 It is interesting to note that this lazy-computing Python extension 
 is solely implemented in a small `objspace/thunk.py`_ file consisting 
-of around 100 lines of code. Since the 0.8.0 release it is even possible
-to `translate PyPy with the thunk object space`_.
+of around 200 lines of code. Since the 0.8.0 release you 
+can `translate PyPy with the thunk object space`_.
 
 Logic programming
 +++++++++++++++++
@@ -300,8 +301,8 @@
 
 Try it out::
 
-    cd pypy/bin
-    python py.py -o logic
+    cd pypy
+    python bin/py.py -o logic
 
     >>>> X = newvar()         # a logic variable
     >>>> bind(X, 42)          # give it a value
@@ -385,10 +386,13 @@
     `Dot Graphviz`_ that does not crash. This is only needed if you want to
     look at the flowgraphs.
 
+  * Use Python-2.4 for using translation tools because python2.5 
+    is (as of revision 39130) not fully supported. 
+
 To start the interactive translator shell do::
 
-    cd pypy/bin
-    python translatorshell.py
+    cd pypy
+    python bin/translatorshell.py
 
 Test snippets of translatable code are provided in the file
 ``pypy/translator/test/snippet.py``, which is imported under the name
@@ -436,7 +440,7 @@
 +++++++++++++++++++++++++++++++++++++++
 
 To translate for LLVM (`low level virtual machine`_) you must first have `LLVM
-installed with version 1.7`_ - the `how to install LLVM`_ provides some helpful
+installed with version 1.9`_ - the `how to install LLVM`_ provides some helpful
 hints.  Please note that you do not need the CFrontend to compile, make
 tools-only.
 
@@ -509,7 +513,7 @@
 executable directly from the shell; you can find the executable in one
 of the ``/tmp/usession-*`` directories::
 
-    anto at anto anto$ mono /tmp/usession-anto/main.exe 4 5
+    $ mono /tmp/usession-<username>/main.exe 4 5
     9
 
 To translate and run for CLI you must have the SDK installed: Windows
@@ -548,7 +552,7 @@
 ultimate example of source that our translation toolchain can process::
 
     cd pypy/translator/goal
-    python translate.py --run
+    python translate.py --run targetpypystandalone.py
 
 By default the translation process will try to use the
 `Boehm-Demers-Weiser garbage collector`_ for the translated PyPy (Use
@@ -559,7 +563,11 @@
 
 This whole process will take some time and quite a lot of memory. To
 reduce the memory footprint of the translation process you can use the
-option ``--lowmem`` With this option the whole process should be
+option ``--lowmem``::
+
+    python translate.py --run targetpypystandalone.py --lowmem
+
+With this option the whole process should be
 runnable on a machine with 512Mb of RAM. If the translation is
 finished running and after you closed the graph you will be greeted
 (because of ``--run`` option) by the friendly prompt of a PyPy
@@ -580,7 +588,7 @@
 
 With the default options, you can find the produced executable under the
 name ``pypy-c``.  Type ``pypy-c --help`` to see the options it supports --
-mainly the same basic options of CPython.  In addition, ``pypy-c --info``
+mainly the same basic options as CPython.  In addition, ``pypy-c --info``
 prints the translation options that where used to produce this particular
 executable.  This executable contains a lot of things that are hard-coded
 for your particular system (including paths), so it's not really meant to
@@ -609,13 +617,18 @@
      sweep collector, with two different approaches for finding roots
      (as we have seen Boehm's collector is the default).
 
+Find a more detailed description of the various options in our `configuration
+sections`_.
+
 You can also use the translate.py script to try out several smaller
 programs, e.g. a slightly changed version of Pystone::
 
     cd pypy/translator/goal
     python translate.py targetrpystonedalone
 
+This will produce the executable "targetrpystonedalone-c".
 
+.. _`configuration sections`: config/index.html
 
 .. _`translate PyPy with the thunk object space`:
 
@@ -676,35 +689,6 @@
 fine. Once assembled, you can run the produced executable with the
 Microsoft Runtime.
 
-You can also try the still very experimental ``clr`` module that
-enables integration with the surrounding .NET environment.  First, you
-have to tell translate.py to include the ``clr`` module::
-
-    ./translate.py --text --batch --backend=cli targetpypystandalone.py --withmod-clr
-
-Then, you can dynamically load .NET classes using the
-``clr.load_cli_classe`` method. After a class has been loaded, you can
-instantiate and use it as it were a normal Python class. Special
-methods such as indexers and properties are supported using the usual
-Python syntax:
-
-    >>>> import clr
-    >>>> ArrayList = clr.load_cli_class('System.Collections', 'ArrayList')
-    >>>> obj.Add(1)
-    0
-    >>>> obj.Add(2)
-    1
-    >>>> obj.Add("foo")
-    2
-    >>>> print obj[0], obj[1], obj[2]
-    1 2 foo
-    >>>> print obj.Count
-    3
-
-At the moment the only way to load a .NET class is to explicitly use
-``clr.load_cli_class``; in the future they will be automatically
-loaded when accessing .NET namespaces as they were Python modules, as
-IronPython does.
 
 .. _`start reading sources`: 
 
@@ -779,6 +763,16 @@
 
 	pygame: http://www.pygame.org/download.shtml
 
+CTypes (highly recommended)
+++++++++++++++++++++++++++++
+
+`ctypes`_ (version 0.9.9.6 or later) is required if you want to translate PyPy
+to C. See the `download page of ctypes`_.
+
+.. _`download page of ctypes`: http://sourceforge.net/project/showfiles.php?group_id=71702
+.. _`ctypes`: http://starship.python.net/crew/theller/ctypes/
+
+
 CLISP
 +++++++
 
@@ -801,9 +795,7 @@
 but if you want to have the ``py.test`` tool generally in your 
 path, you might like to visit: 
 
-    http://codespeak.net/py/current/doc/getting-started.html
-
-
+    http://codespeak.net/py/dist/download.html
 
 Getting involved 
 ================================== 
@@ -815,7 +807,7 @@
 as EuroPython or Pycon. Take a look at the list of upcoming events_ to
 plan where to meet with us.
 
-.. _events: http://codespeak.net/pypy/dist/pypy/doc/events.html
+.. _events: http://codespeak.net/pypy/dist/pypy/doc/news.html
 .. _`pypy-dev mailing list`: http://codespeak.net/mailman/listinfo/pypy-dev
 .. _`contact possibilities`: contact.html
 
@@ -824,7 +816,7 @@
 .. _`low level virtual machine`: http://llvm.org/
 .. _`how to install LLVM`: http://llvm.org/docs/GettingStarted.html
 .. _`LLVM mailing list`: http://mail.cs.uiuc.edu/mailman/listinfo/llvmdev
-.. _`LLVM installed with version 1.7`: http://llvm.org/releases
+.. _`LLVM installed with version 1.9`: http://llvm.org/releases
 
 .. _`Spidermonkey`: http://www.mozilla.org/js/spidermonkey/
 .. _`Google summer of code`: http://code.google.com/soc
@@ -845,11 +837,11 @@
 .. _mixedmodule.py:          http://codespeak.net/svn/pypy/dist/pypy/interpreter/mixedmodule.py
 .. _typedef.py:             http://codespeak.net/svn/pypy/dist/pypy/interpreter/typedef.py
 .. _Standard object space:  objspace.html#the-standard-object-space
-.. _objspace.py:            http://codespeak.net/pypy/dist/pypy/objspace/std/objspace.py
-.. _thunk:                  http://codespeak.net/pypy/dist/pypy/objspace/thunk.py
-.. _trace:                  http://codespeak.net/pypy/dist/pypy/objspace/trace.py
-.. _flow:                   http://codespeak.net/pypy/dist/pypy/objspace/flow/
-.. _translator.py:          http://codespeak.net/pypy/dist/pypy/translator/translator.py
+.. _objspace.py:            ../../pypy/objspace/std/objspace.py
+.. _thunk:                  ../../pypy/objspace/thunk.py
+.. _trace:                  ../../pypy/objspace/trace.py
+.. _flow:                   ../../pypy/objspace/flow/
+.. _translator.py:          ../../pypy/translator/translator.py
 .. _mailing lists:          contact.html
 .. _documentation:          index.html 
 .. _unit tests:             coding-guide.html#test-design

Modified: pypy/branch/ast-experiments/pypy/doc/glossary.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/glossary.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/glossary.txt	Mon Feb 26 08:45:45 2007
@@ -45,7 +45,7 @@
 
 **external function**
     Functions that we don't want to implement in Python for various
-    reasons (e.g. if they need to make calls into the OS) and whose
+    reasons (e.g. they need to make calls into the OS) and whose
     implementation will be provided by the backend.
 
 .. _`garbage collection framework`:
@@ -68,12 +68,6 @@
   `just in time compiler`_.  Our jit now has `some draft documentation
   <jit.html>`__.
 
-.. _`l3interpreter`:
-
-**l3interpreter**
-   Piece of code that is able to interpret L3 flow graphs.  This code
-   is unfinished and its future is unclear.
-
 .. _llinterpreter:
 
 **llinterpreter**

Modified: pypy/branch/ast-experiments/pypy/doc/how-to-release.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/how-to-release.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/how-to-release.txt	Mon Feb 26 08:45:45 2007
@@ -5,28 +5,43 @@
 ---------
 
 As a meta rule setting up issues in the tracker for items here may help not forgetting things.
+A set of todo files may also work.
 
 Check and prioritize all issues for the release, postpone some if necessary,
 create new  issues also as necessary. A meeting (or meetings) should be organized
 to decide what things are priorities, should go in and work for the release. 
-An important thing is to get the documentation into an up-to-date state.
+
+An important thing is to get the documentation into an up-to-date state!
 
 Release Steps
 ----------------
 
-* at code freeze make a release branch under http://codepeak.net/svn/pypy/release/x.y(.z) ,
-  some of the next updates may be done before or after branching;
-  make sure things are ported back to the trunk and to the branch as necessary
-* XXX find out and list the set  of testing necessary
-* update dist/pypy/doc/contributort.txt (and possibly dist/LICENSE)
+* at code freeze make a release branch under
+  http://codepeak.net/svn/pypy/release/x.y(.z). IMPORTANT: bump the
+  pypy version number in module/sys/version.py, notice that the branch
+  will capture the revision number of this change for the release;
+  some of the next updates may be done before or after branching; make
+  sure things are ported back to the trunk and to the branch as
+  necessary
+* update dist/pypy/doc/contributor.txt (and possibly dist/LICENSE)
 * update dist/README
 * write release announcement dist/pypy/doc/release-x.y(.z).txt
-* update the status section in dist/pypy/doc/architecture.txt
 * update dist/pypy/doc/getting-started.txt links at the top
   and release number references, make sure it is generally up-to-date
-* use, after the necessary updates, dist/pypy/tool/makerealase.py to make the tarballs 
-  on codespeak (XXX what about tagging the release?)
-* test the download links in dist/pypy/doc/getting-started.txt and possibly in the release announcement,
-  ask people to test them
+* use, after the necessary updates, dist/pypy/tool/makerelease.py to
+  make the tarballs on codespeak; this generates html doc for the
+  tarballs too.  Use::
+     
+     makerelease -tag .z pypy-x.y.z
+
+  to tag and produce final tarballs. Without the '-tag' this can
+  be used to make pre-release testing tarballs.
+* nowadays we have an extensive set of nightly builds and test
+  runs. Is probably good to do some minimal testing of the tarballs,
+  especially to check that things work even outside a working copy or
+  if some stuff is missing. We have some support for running part of
+  our nightly tests on tarballs (see
+  http://codespeak.net/svn/user/pedronis/tarball-testing).
 * write a news item for the release in dist/pypy/doc/news.txt
-* send announcements to pypy-dev, pypy-funding, python-list, python-announce, python-dev ...
+* send announcements to pypy-dev, pypy-funding, python-list,
+  python-announce, python-dev ...

Modified: pypy/branch/ast-experiments/pypy/doc/index.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/index.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/index.txt	Mon Feb 26 08:45:45 2007
@@ -30,9 +30,11 @@
 Status_ of the project.
 
 
-Meta-Documentation
+Project Documentation
 =====================================
 
+architecture_ gives a complete view of PyPy's basic design. 
+
 `coding guide`_ helps you to write code for PyPy (especially also describes
 coding in RPython a bit). 
 
@@ -50,7 +52,7 @@
 `PyPy video documentation`_ is a page linking to the videos (e.g. of talks and
 introductions) that are available.
 
-`EU reports`_ is a page that contains links to the
+`Technical reports`_ is a page that contains links to the
 reports that we submitted to the European Union.
 
 `license`_ contains licensing details (basically a straight MIT-license). 
@@ -85,14 +87,15 @@
 Source Code Documentation
 ===============================================
 
-architecture_ gives a complete view of PyPy's basic design. 
-
 `object spaces`_ discusses the object space interface 
 and several implementations. 
 
 `bytecode interpreter`_ explains the basic mechanisms 
 of the bytecode interpreter and virtual machine. 
 
+`object optimizations`_ describer various alternative object implementations
+(for strings, dicts and lists) in the standard object space.
+
 `translation`_ is a detailed overview of our translation process.  The
 rtyper_ is the largest component of our translation process.
 
@@ -115,6 +118,9 @@
 `rlib`_ describes some modules that can be used when implementing programs in
 RPython.
 
+`configuration documentation`_ describes the various configuration options that
+allow you to customize PyPy.
+
 `CLI backend`_ describes the details of the .NET backend.
 
 `JIT Generation in PyPy`_ describes how we produce the Python Just-in-time Compiler
@@ -130,14 +136,16 @@
 .. _`sprint reports`: sprint-reports.html
 .. _`talks and related projects`: extradoc.html
 .. _`license`: ../../LICENSE
-.. _`Nightly compliance test runs for compiled pypy-c`: http://www.strakt.com/~pedronis/pypy-c-test/
+.. _`Nightly compliance test runs for compiled pypy-c`: http://www2.openend.se/~pedronis/pypy-c-test/
 .. _`compliance test status`: http://codespeak.net/~hpk/pypy-testresult/
 .. _`PyPy statistics`: http://codespeak.net/~hpk/pypy-stat/
 .. _`object spaces`: objspace.html 
+.. _`object optimizations`: object-optimizations.html 
 .. _`translation`: translation.html 
 .. _`dynamic-language translation`: dynamic-language-translation.html
 .. _`low-level encapsulation`: low-level-encapsulation.html
 .. _`translation aspects`: translation-aspects.html
+.. _`configuration documentation`: config/
 .. _`coding guide`: coding-guide.html 
 .. _`architecture`: architecture.html 
 .. _`JavaScript backend` : js/using.html
@@ -145,6 +153,7 @@
 .. _`theory`: theory.html
 .. _`bytecode interpreter`: interpreter.html 
 .. _`EU reports`: index-report.html
+.. _`Technical reports`: index-report.html
 .. _`on Linux`: http://wyvern.cs.uni-duesseldorf.de/pypytest/summary.html
 .. _`on Windows`: http://scottdial.com/pypytest/
 .. _`on built pypy-c`: http://wyvern.cs.uni-duesseldorf.de/~fijal/pypy-c-tests/
@@ -170,8 +179,12 @@
 
 `doc/`_                        text versions of PyPy developer documentation
 
+`doc/config/`_                 documentation for the numerous translation options
+
 `doc/discussion/`_             drafts of ideas and documentation
 
+``doc/*/``                     other specific documentation topics or tools
+
 `interpreter/`_                `bytecode interpreter`_ and related objects
                                (frames, functions, modules,...) 
 
@@ -184,6 +197,8 @@
 
 `jit/codegen/`_                `jit backends`_ for different architectures
 
+`jit/goal/`_                   the translation targets that produce a PyPy with a JIT_
+
 `jit/hintannotator/`_          the `hint-annotator`_ that analyzes an interpreter
 
 `jit/timeshifter/`_            the `timeshifter`_ that turns an interpreter into a JIT compiler
@@ -200,12 +215,14 @@
 `lib/`_                        PyPy's wholesale reimplementations of CPython modules_
                                and experimental new application-level modules
 
-`lib/test2/`_                  tests running at interp-level against the reimplementations 
+`lib/app_test/`_               tests for the reimplementations, running on top of CPython
+
+`lib/distributed/`_            distributed execution prototype, based on `transparent proxies`_
 
 `module/`_                     contains `mixed modules`_ implementing core modules with 
                                both application and interpreter level code.
                                Not all are finished and working.  Use the ``--withmod-xxx``
-                               options of `translate.py`_.
+                               or ``--allworkingmodules`` translation options.
 
 `objspace/`_                   `object space`_ implementations
 
@@ -220,11 +237,13 @@
 
 `objspace/logic.py`_           the `logic object space`_, providing Prolog-like logic variables
 
+`objspace/cpy/`_               an object space supporting the `extension compiler`_
+
 `objspace/flow/`_              the FlowObjSpace_ implementing `abstract interpretation`
 
 `objspace/std/`_               the StdObjSpace_ implementing CPython's objects and types
 
-`rlib/`_                       a "standard library" for RPython_ programs
+`rlib/`_                       a `"standard library"`_ for RPython_ programs
 
 `rpython/`_                    the `RPython Typer`_ 
 
@@ -232,8 +251,7 @@
 
 `rpython/ootypesystem/`_       the `object-oriented type system`_ for OO backends
 
-`rpython/memory/`_             experimental garbage collector construction
-                               framework
+`rpython/memory/`_             the garbage collector construction framework
 
 `tool/`_                       various utilities and hacks used from various places 
 
@@ -242,17 +260,12 @@
 
 `tool/pytest/`_                support code for our `testing methods`_
 
-`tool/tb_server/`_             a somewhat outdated http-server for presenting 
-                               tracebacks in a helpful manner 
-
 `translator/`_                 translation_ backends and support code
 
 `translator/backendopt/`_      general optimizations that run before a backend generates code
 
 `translator/c/`_               the `GenC backend`_, producing C code from an
-                               RPython program (generally via the RTyper)
-
-`translator/lisp/`_            the `Common Lisp backend`_ (incomplete)
+                               RPython program (generally via the rtyper_)
 
 `translator/cli/`_             the `CLI backend`_ for `.NET`_ (Microsoft CLR or Mono_)
 
@@ -262,6 +275,8 @@
 
 `translator/jvm/`_             the Java backend (in-progress)
 
+`translator/lisp/`_            the `Common Lisp backend`_ (incomplete)
+
 `translator/llvm/`_            contains the `LLVM backend`_ producing LLVM assembler 
                                from fully annotated RPython programs 
 
@@ -269,7 +284,8 @@
 
 `translator/stackless/`_       the `Stackless Transform`_
 
-`translator/tool/`_            helper tools for translation 
+`translator/tool/`_            helper tools for translation, including the Pygame
+                               `graph viewer`_
 
 ``*/test/``                    many directories have a test subdirectory containing test 
                                modules (see `Testing in PyPy`_) 
@@ -291,6 +307,7 @@
 .. _`taint object space`: objspace-proxies.html#taint
 .. _`thunk object space`: objspace-proxies.html#thunk
 .. _`logic object space`: objspace-proxies.html#logic
+.. _`transparent proxies`: objspace-proxies.html#tproxy
 .. _`What PyPy can do for your objects`: objspace-proxies.html
 .. _`Stackless and coroutines`: stackless.html
 .. _StdObjSpace: objspace.html#the-standard-object-space 
@@ -308,6 +325,7 @@
 .. _`extension compiler`: extcompiler.html
 .. _`py.py`: getting-started.html#main-entry-point
 .. _`translatorshell.py`: getting-started.html#try-out-the-translator
+.. _JIT: jit.html
 .. _`JIT Generation in PyPy`: jit.html
 .. _`just-in-time compiler generator`: jit.html
 .. _`jit backends`: jit.html#backends
@@ -321,6 +339,8 @@
 .. _`translate.py`: getting-started.html#translating-the-pypy-interpreter
 .. _`.NET`: http://www.microsoft.com/net/
 .. _Mono: http://www.mono-project.com/
+.. _`"standard library"`: rlib.html
+.. _`graph viewer`: getting-started.html#try-out-the-translator
 
 .. include:: _ref.txt
 

Modified: pypy/branch/ast-experiments/pypy/doc/js/todo.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/js/todo.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/js/todo.txt	Mon Feb 26 08:45:45 2007
@@ -19,17 +19,16 @@
 
 * Support bound methods as arguments for callbacks.
 
-    Idea is to provide following:
+  - if you pass a bound method to a callback, this method is called
+    with previously bound self
 
-    - if you pass a bound method to a callback, this method is called
-      with previously bound self
-    - if you provide an unbound method for a callback, this is an error,
-      unless class is proper to the callback object (or high level class
-      apropriate for that DOM object), in which case a bound method is
-      called with apropriate self.
+  - if you provide an unbound method for a callback, this is an error,
+    unless class is proper to the callback object (or high level class
+    apropriate for that DOM object), in which case a bound method is
+    called with apropriate self.
 
-   I'm quite sure this can be done using RPython, but I'm totally unsure
-   how much effort this will require :-) (as usuall)
+  - I'm quite sure this can be done using RPython, but I'm totally unsure
+    how much effort this will require :-) (as usuall)
 
 * Cleanup of parent namespace (put all builtin functions into it's 
   own namespace?)

Modified: pypy/branch/ast-experiments/pypy/doc/js/using.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/js/using.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/js/using.txt	Mon Feb 26 08:45:45 2007
@@ -16,7 +16,7 @@
 
 The JavaScript backend lets you write `RPython`_ source code which gets
 translated into JavaScript and executed in a browser. The resulting
-JavaScript code should not depend on a browser (this is backend
+JavaScript code should not depend on a browser (this is a backend
 responsibility) and should integrate as much as possible with a web
 server.
 
@@ -27,10 +27,10 @@
 ----------------
 
 You can use a JavaScript backend in many different ways. One of those is
-to simply run `jscompile`_ from bin directory with module name and a
-list of functions to get your functions compiled. Another way is to use
-rpython2javascript from `js.main`_ which allows your javascript to be
-generated on-the-fly (e.g. when serving a web page).
+to simply run `jscompile`_ from the 'bin' directory with a module name and a
+list of functions, this makes that the listed functions get compiled. Another
+way is to use the rpython2javascript function from `js.main`_ to generate
+your javascript on-the-fly (e.g. when serving a web page).
 
 .. _`jscompile`: http://codespeak.net/svn/pypy/dist/pypy/bin/jscompile.py
 .. _`js.main`: http://codespeak.net/svn/pypy/dist/pypy/translator/js/main.py
@@ -70,16 +70,6 @@
 .. _`MochiKit`: http://www.mochikit.com/
 .. _`rpython2javascript`: 
 
-Web server integration:
------------------------
-
-There is an `example`_ of using this toolkit with BaseHTTPServer from
-the standard python library. Web server integration is simple - you can
-compile any RPython function at runtime and provide it to client as
-a JavaScript file.
-
-.. _`example`: http://codespeak.net/svn/pypy/dist/pypy/translator/js/demo/jsdemo/example.py
-
 Easy AJAX:
 ----------
 
@@ -88,22 +78,24 @@
 To achieve this, you must tell PyPy that *these* particular method calls
 need to be rendered in this way.
 
-First you must subclass BasicExternal from `bltregistry`_ and provide
-instance of it to RPython code (as global variable or any other way).
-Then you need to set class instance's `_render_xmlhttp` to `True`, to
-tell the JS backend to render it using xmlhttp communication. Because
-the web server code does not need to be rpython, you have to supply some
-way of telling PyPy what types can be returned out of it. This is done
-using the decorator `@described(retval = <used type>)` from
-`bltregistry`_. For example you may provide::
+To achieve this, first you must subclass BasicExternal from `bltregistry`_ and
+provide an instance of it to RPython code (for instance as global variable).
+Then you need to set class instance's `_render_xmlhttp` to `True`, to tell the
+JS backend to render it using xmlhttp communication. Because the web server
+code does not need to be rpython, you have to supply some way of telling PyPy
+what types can be returned out of it. This is done using the decorator
+`@callback(retval = <used type>)` from `bltregistry`_. For example you may
+provide::
+
+  from pypy.translator.js.lib.support import callback
 
-  @described(retval = {str:str})
+  @callback(retval = {str:str})
   def some_fun(self, some_arg = 3):
     ....
 
-to tell compiler that this function will return mapping from string to
-string and will take integer as an argument. You can simply specify the
-arguments using keyword arguments with an example, or pass an args
+The decorator tells the compiler that this function will return mapping from
+string to string and will take integer as an argument. You can simply specify
+the arguments using keyword arguments with an example, or pass an args
 dictionary to the described decorator.
 
 Then you must supply a method which returns JSON data in the server
@@ -121,18 +113,21 @@
 
 On the server side::
 
-  from pypy.rpython.ootypesystem.bltregistry import BasicExternal, described
+  from pypy.rpython.ootypesystem.bltregistry import BasicExternal
+  from pypy.translator.js.lib.support import callback
   
   class PingHandler(BasicExternal):
       _render_xmlhttp = True
 
-      @described(retval={str:str})
+      @callback(retval={str:str})
       def ping(self, ping_str="aa"):
           return dict(response="PONG: %s" % ping_str)
 
   ping_handler = PingHandler()    
 
-This uses the BasicExternal class and the described decorator to let PyPy know how to deal with the input and output of the methods. You then need an instance of the class to pass to other parts of the RPython code.
+This uses the BasicExternal class and the described decorator to let PyPy know
+how to deal with the input and output of the methods. Now you can use an
+instance of this class to pass to other parts of the RPython code.
 
 On the client you call the ping_handler.ping method with a callback::
 
@@ -170,6 +165,6 @@
 working copy on-line right now, sorry) and a simple example of JS a
 `console`_. There is also a simple `django ping example`_.
 
-.. _`here`: http://codespeak.net/svn/pypy/dist/pypy/translator/js/examples/start_bnb.py
+.. _`here`: http://codespeak.net/svn/pypy/dist/pypy/translator/js/examples/bnb/start_bnb.py
 .. _`console`: http://codespeak.net/svn/pypy/dist/pypy/translator/js/examples/console.py
-.. _`django ping example`: http://codespeak.net/svn/pypy/dist/pypy/translator/js/demo/jsdemo/djangoping
+.. _`django ping example`: http://codespeak.net/svn/pypy/dist/pypy/translator/js/examples/djangoping

Modified: pypy/branch/ast-experiments/pypy/doc/js/webapps_with_pypy.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/js/webapps_with_pypy.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/js/webapps_with_pypy.txt	Mon Feb 26 08:45:45 2007
@@ -18,11 +18,14 @@
 too much of anything in the (rather daunting) PyPy codebase besides the useful
 bits for web application development.
 
+Note that this document describes APIs that are not mature and will change in
+the near future.
+
 PyPy features for web developers
 ---------------------------------
 
 Of course the 'killer feature' of PyPy for web application developers is the
-ability to convert somewhat restricted Python code (aka RPython) into
+ability to convert somewhat restricted Python code (aka `RPython`_) into
 JavaScript code. Unlike other libraries that perform similar functionality,
 PyPy really interprets the code, and produces 'lower level' JavaScript code,
 so it implements Python core language features like list comprehensions, and
@@ -30,16 +33,17 @@
 This particulary means that when a program is in RPython, you can run it
 on top of Python interpreter with the same results as translated to JS version.
 
-However, mostly for demonstration purposes, some other interesting code is
-available in the PyPy code package that may help developing web apps. The most
-interesting of these I think is a library that transparently makes server-side
-functionality available to client-side code, using XMLHttpRequest. This code 
-lives in a module in pypy/translator/js/examples that's called 'server.py', and
-uses a library in pypy/translator/js called 'commproxy.py'.
-
-Note that the 'server.py' library currently is usable, but not complete: I
-assume there will be quite some development and refinement later. This may mean
-that certain things in this document are outdated.
+However, there is some other interesting code available in the PyPy package 
+that may help developing web apps. The most interesting of these I think is a
+library that transparently makes server-side functionality available to
+client-side code, using XMLHttpRequest. This code lives in a module in
+pypy/translator/js/examples that's called 'server.py', and uses a library in
+pypy/translator/js called 'commproxy.py'.
+
+Note that the 'server.py' library currently is usable, but not complete nor
+stable: I assume there will be quite some development and refinement later.
+This may mean that certain things in this document are outdated. There
+might be even a strong API rewrite at some point.
 
 Layers
 -------
@@ -72,7 +76,7 @@
 
     exposed functions only support common datatypes (ints, strings, lists
     of ints, etc.) for arguments and return values, and have to have those
-    arguments and return values 'described' so that the rtyper system can
+    arguments and return values 'described' so that the annotator system can
     discover how they should be exposed, and so that the (transparently used)
     XMLHttpRequest handler and JSON serializer know how they should be treated
 
@@ -87,6 +91,155 @@
 Writing a simple application
 -----------------------------
 
-XXX hands-on guide to writing guestbook or something
+To explain what needs to be done to write an application using all this, I
+decided to add the (almost mandatory) classic guestbook example. To show off
+the transparent XMLHttpRequest stuff, I chose to do one that stays on-screen
+when adding a message, so there's no screen refresh, but apart from that it's
+a very basic, simple guestbook. Of course the script is still too much code to
+fit in this document nicely, so I placed it in some nice files: on for
+`the server-side code`_ and one for `the client-side`_. Let's examine the
+server side first.
+
+guestbook.py
+++++++++++++
+
+If you examine the code, you will see 2 classes, one function and some code
+in the usual "if __name__ == '__main__'" block. The latter bit starts the
+webserver, passing one of the classes (Handler) as a handler to a
+BaseHTTPServer, which in turn uses the function (guestbook_client) to produce
+JavaScript, and the class (ExportedMethods) to serve 'AJAX' methods from.
+
+This will be what a general PyPy web application (using commproxy) will look
+like: a set of HTTP methods (web pages and scripts) on a Handler class, a set
+of 'RPC' methods on an ExportedMethods class, a main loop and perhaps some
+helper functionality (e.g. to convert RPython to JS). Let's examine the two
+classes in more detail.
+
+Handler
+~~~~~~~
+
+The Handler class is a normal BaseHTTPRequestHandler subclass, but with some
+pre-defined HTTP handlers (do_GET et al) that dispatch actual content
+generation to user-defined methods. If a '/' path is requested from the server,
+a method called 'index' is called, else the path is split on slashes, and the
+first bit, with dots replaced by underscores, is used to find a method, the
+other parts passed to that method as arguments. So calling '/foo.bar/baz' will
+result in the method 'foo_bar' getting called with argument 'baz'.
+
+Note that a method needs to have an attribute 'exposed' set to True to actually
+expose the method, if this attribute is not set requesting the path will result
+in a 404 error. Methods that aren't exposed can be used for internal purposes.
+
+There is some helper functionality, such as the Static class to serve static
+files and directories, in the pypy/translator/js/lib/server.py.
+
+(Note that even though currently BaseHTTPServer is used to deal with HTTP,
+this will likely change in the future, in favour of something like CherryPy.)
+
+ExportedMethods
+~~~~~~~~~~~~~~~
+
+The ExportedMethods class contains methods that are (through some magic)
+exposed to the client side, in an RPC-like fashion. This is implemented using
+XMLHttpRequest and JSON: when from the client-side a method is called here,
+the arguments to the method will be serialized and sent to the server, the
+method is called, the return value is serialized again and sent to the client,
+where a callback (registered on calling the method) is called with the return
+value as argument. Methods on ExportedMethods contain normal, unrestricted
+Python code, but do need to have the arguments and return value described in
+order for the proxy mechanism to deal with them.
+
+Let's take a look at the 'get_messages' method. The 'callback' decorator that
+wraps it is used to tell the proxy mechanism what arguments and return value
+is used (arguments can also be determined by examining the function signature,
+so only have to be provided when the function signature doesn't describe
+default values), using that decorator will mark the method for exposure. This
+particular method does not have arguments passed to it from the client, but
+does have a return value: a list of strings.
+
+The second message on this class, 'add_message', does have a set of arguments,
+which both have a string value, both of which are described in the function
+arguments (as default values).
+
+guestbook_client
+~~~~~~~~~~~~~~~~
+
+This function imports a Python (or RPython, actually) module and commands
+PyPy to convert a set of functions in it to JavaScript. This is all you need
+to do to get a conversion done, the function returns a string of directly
+executable JavaScript with the functions made available under their original
+name.
+
+guestbook_client.py
++++++++++++++++++++
+
+This contains the client-side code. It contains a couple of functions to
+display messages and add messages to the guestbook, all relatively simple,
+but there are a couple of things that need explanation.
+
+First thing to notice is of course that the code is RPython. This allows PyPy
+to translate it to JavaScript (and a lot of other things :), but does mean
+there are some restrictions: RPython is less dynamic than normal Python. For
+instance, you need to make sure that PyPy knows in advance of what types
+variables are, so changing a variable type, or writing functions that allow
+different types of variables (Python's 'duck typing') is not allowed.
+
+Another odd thing are the imports: these are ignored on the client. They
+are only there to satisfy the RPython to JavaScript translator, and to allow
+running the code as 'normal' Python, for instance when testing. Both the 'dom'
+object, and 'exported_methods' are made available on the client by some
+commproxy magic.
+
+In the functions, there are some other things to note. The 'exported_methods'
+variable is a reference to the exported_methods instance in guestbook.py, but
+because there's the commproxy between the client and server, the methods are
+wrapped, and the signatures are changed. The methods all need an additional
+argument, 'callback', when called from the client side, and rather than
+returning the return value directly, this callback is called with the return
+value as argument.
+
+Finishing up
+++++++++++++
+
+The previously described components together already make up a working web
+application. If you run the 'guestbook.py' script, the main loop bit on the
+bottom will be triggered, passing the Handler class to some BaseHTTPRequest
+server, which will start waiting for a request.
+
+If a browser is pointed to http://localhost:8008/ (the root of the
+application), the 'index' method will be called, which presents the HTML page
+with the form. A script tag will make that the JavaScript is retrieved from the
+server, which is built on-the-fly (if required) from the RPython
+'guestbook_client.py' file. An 'onload' handler on the <body> tag will trigger
+the 'init_guestbook()' function in this JS, which in turn calls the server's
+'exported_methods.get_messages()' function that provides the initial page
+content.
+
+If the form is filled in and the 'submit' button pressed, the 'add_message()'
+function is called, which gets the data from the form and calls the server's
+'exported_methods.add_message()' function. This then returns a string version
+of the message back to the client (to the '_add_message_callback' function)
+where it is presented.
+
+All this code is written without having to care about XMLHttpRequest and
+serialization, with a simple server-side interface, and in a testable manner.
+
+Conclusion
+----------
+
+Even though RPython is somewhat hard to debug sometimes, and the tools are
+still a little rough around the edges sometimes, PyPy can already be a valuable
+tool for web developers, with RPython to make code easier to write and test,
+and the commproxy to help dealing with asynchronous server calls and
+serialization. Do not expect that PyPy does not try to 'magically' make all web
+development problems go away: you will still need to manually write 
+client-side code, and still need to take care for dealing with browsers and
+such, except not in JavaScript but in RPython, and with the 'AJAX' stuff
+nicely tucked away. There may be future developments that will provide
+higher-level layers, and client-side widgets and such, but currently it's
+still 'work as usual', but with somewhat nicer (we hope ;) tools.
 
 .. _`RPython`: ../coding-guide.html#restricted-python
+.. _`the server-side code`: http://codespeak.net/svn/pypy/dist/pypy/translator/js/examples/guestbook.py
+.. _`the client-side`: http://codespeak.net/svn/pypy/dist/pypy/translator/js/examples/guestbook_client.py
+

Modified: pypy/branch/ast-experiments/pypy/doc/js/whatis.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/js/whatis.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/js/whatis.txt	Mon Feb 26 08:45:45 2007
@@ -1,6 +1,6 @@
-============================================
-What is pypy.js (JavaScript backend of pypy)
-============================================
+=============================================
+What is pypy.web (JavaScript backend of pypy)
+=============================================
 
 Author:
 =======
@@ -10,50 +10,49 @@
 Purpose:
 ========
 
-This document explains what pypy.js is and (just as important) what it is not.
+This document explains what pypy.web is and (just as important) what it is not.
 
 What is it?
 -----------
 
-Pypy.js is mostly RPython to javascript converter. Nothing more, nothing
-less. By `using`_ it you can write down RPython code (static enough subset
-of python) which get translated into JavaScript and then run it in a browser.
-As an addon you can get access to semi-transparent rendering of AJAX calls.
-
-This means that you might expect python semantics: ie. when trying to get
-non-existing key from dictionary, you'll get KeyError, not undefined element.
-If you prefer JavaScript semantics there is no point in using pypy.js, if
-you instead prefer Python semantics this is a good point. Some of the
-errors might appear at compile time (such as wrong number of arguments
-to function, non-existing global variable, non-existing method call).
-
-This also means that you will get python features - such as multi-inheritance,
-exception handling etc. But you'll not get python dynamic features - modifying
-dict access etc.
-
-This also means that it is much easier to write code in pypy.js than in
-JavaScript itself. The whole b'n'b demo is just about 250 lines of code, with
-many AJAX calls. Imagine writing it in JavaScript.
+Pypy.web is an RPython to JavaScript converter and a set of tools which
+evolved during PyPy developement. By `using`_ it you can write RPython
+code (a subset of Python static enough to compile), translate it into
+JavaScript and then run it in a browser. As an add-on you can 
+semi-transparently make 'AJAX' (JavaScript to server) calls.
+
+RPython to JavaScript
+---------------------
+
+When writing RPython you can expect full Python semantics from code you write:
+ie. when you're trying to get a non-existing key from a dictionary, you'll get
+a KeyError, not an undefined element. Also things like Python's
+object-orientation are fully supported. This in contrast to other efforts of
+getting Python converted to JavaScript, which usually provide only a very small
+subset of Python, and with JavaScript semantics.
+
+This means that you will get some Python features - such as exception handling,
+list comprehensions, etc., but do understand that you will _not_ get some of
+the more 'dynamic' features of Python - overloading operators, dynamic 
+modifications of \_\_dict\_\_ and such, because that will break RPython.
+
+Additional features
+-------------------
+
+It is much easier to write code in pypy.web than in JavaScript itself. The
+whole `b'n'b demo`_ is just about 250 lines of code, with many AJAX calls.
+Imagine writing it in JavaScript, it would easily exceed the number of lines,
+even with a nice library to handle the AJAX, and would almost certainly be less
+elegant and readable.
+
+Errors may appear already at compile time (such as providing the wrong number
+of arguments to a function, using a non-existing global variable, calling a
+non-existing method).
 
-We can say that pypy.js extends Mochikit's motto ("Makes JavaScript suck 
-less"), by "Makes JavaScript suck less, by not using it".
+There are some facilities for testing your Python code (about to be translated
+to a JavaScript) on top of Python. For further details see `testing`_
 
 .. _`using`: using.html
+.. _`b'n'b demo`: http://play1.codespeak.net:7070
+.. _`testing`: testing.html
 
-What is it not?
----------------
-
-Pypy.js is definitely not a browser-abstract library (with exceptions to
-the semi-transparent AJAX calls, which are trying to be browser-independent).
-Pypy.js is trying to expose the browser API as it comes, with all shortcomings.
-If you need something like that you can expose any existing JS library
-(there is an example with a few mochikit calls in modules). But it seems evident
-that writing such a library on top of pypy.js sounds more interesting.
-
-Pypy.js is not a browser for python. Right now you cannot run your DOM-dependent
-code on top of CPython (and this is unlikely to change in a future, because
-we don't want to have just-another-browser-problem, do we?). Altough because
-RPython is just subset of python, nothing stops you from separating code
-DOM-dependent from other and running other part on top of CPython. Or, if you
-really want to, from writing DOM library in CPython itself (just a library, no
-mangling with compiler at all) which will allow you to run that code.

Modified: pypy/branch/ast-experiments/pypy/doc/news.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/news.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/news.txt	Mon Feb 26 08:45:45 2007
@@ -5,7 +5,7 @@
 nonsense, isn't it?  `more...`_
 
 .. _Python: http://www.python.org/doc/current/ref/ref.html
-.. _`more...`: http://codespeak.net/pypy/dist/pypy/doc/architecture.html#mission-statement 
+.. _`more...`: architecture.html#mission-statement 
 
 
 The following is a list of planned PyPy events, most of which 
@@ -15,6 +15,26 @@
 .. _`iCalendar format`: webcal://pypycal.sabi.net///calendars/PyPy.ics
 .. _eventhistory: eventhistory.html
 
+PyPy 0.99.0: optimizations, backends, new object spaces and more
+==================================================================
+
+We are proud to release PyPy 0.99.0, our fifth public release.  See
+the `release announcement <release-0.99.0.html>`__ to read about the
+many new features in this release.  See also our detailed instructions on
+how to `get started`_. *(February 17th, 2007)*
+
+.. _`get started`: getting-started.html
+
+
+py lib 0.9.0: py.test, distributed execution, greenlets and more
+==================================================================
+
+Our development support and testing library was publically released, see the 
+`0.9 release announcement <http://codespeak.net/py/dist/release-0.9.0.html>`__
+and its extensive `online documentation <http://codespeak.net/py/dist/>`__. 
+(February 15th, 2007)
+
+
 PyPy Trillke Sprints upcoming, 25-28th Feb and 1-5th March 2007
 ==================================================================
 

Modified: pypy/branch/ast-experiments/pypy/doc/object-optimizations.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/object-optimizations.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/object-optimizations.txt	Mon Feb 26 08:45:45 2007
@@ -31,6 +31,8 @@
 perform repeated string additions in a loop without using the
 ``"".join(list_of_strings)`` pattern.
 
+You can this feature enable with the :config:`objspace.std.withstrjoin` option.
+
 string-slice objects
 --------------------
 
@@ -46,6 +48,8 @@
 string.  There is also a minimum number of characters below which being lazy
 is not saving any time over making the copy).
 
+You can this feature enable with the :config:`objspace.std.withstrslice` option.
+
 Integer optimizations
 =====================
 
@@ -57,6 +61,7 @@
 time a new integer object is created it is checked whether the integer is small
 enough to be retrieved from the cache.
 
+You can enable this feature with the :config:`objspace.std.withsmallint` option.
 
 integers as tagged pointers
 ---------------------------
@@ -82,6 +87,8 @@
 the whole information in the string-keyed dictionary is copied over into another
 RPython-dictionary, where arbitrary Python objects can be used as keys.
 
+You can enable this feature with the :config:`objspace.std.withstrdict` option.
+
 multi-dicts
 -----------
 
@@ -98,6 +105,9 @@
 general representation that can store arbitrary keys). In addition there are
 more specialized dictionary implementations for various purposes (see below).
 
+You can enable this feature with the :config:`objspace.std.withmultidict`
+option.
+
 
 sharing dicts
 -------------
@@ -116,6 +126,9 @@
 dicts:
 the representation of the instance dict contains only a list of values.
 
+You can enable this feature with the :config:`objspace.std.withsharingdict`
+option.
+
 
 builtin-shadowing
 -----------------
@@ -140,6 +153,10 @@
 common case, the program didn't do any of these; the proper builtin can then
 be called without using any dictionary lookup at all.
 
+You can enable this feature with the
+:config:`objspace.opcodes.CALL_LIKELY_BUILTIN` option.
+
+
 List optimizations
 ==================
 
@@ -155,6 +172,8 @@
 created. This gives the memory and speed behaviour of ``xrange`` and the generality
 of use of ``range``, and makes ``xrange`` essentially useless.
 
+You can enable this feature with the :config:`objspace.std.withrangelist`
+option.
 
 multi-lists
 -----------
@@ -167,6 +186,9 @@
 implement the same optimization is that range lists came earlier and that
 multi-lists are not tested that much so far).
 
+You can enable this feature with the :config:`objspace.std.withmultilist`
+option.
+
 
 fast list slicing
 ------------------
@@ -178,6 +200,8 @@
 list slice is only created lazily, that is when either the original list or
 the sliced list is mutated.
 
+You can enable this feature with the :config:`objspace.std.withfastslice`
+option.
 
 .. _`Neal Norwitz on pypy-dev`: http://codespeak.net/pipermail/pypy-dev/2005q4/002538.html
 
@@ -199,6 +223,9 @@
 shadowing the class attribute. If we know that there is no shadowing (since
 instance dict tells us that) we can save this lookup on the instance dictionary.
 
+You can enable this feature with the :config:`objspace.std.withshadowtracking`
+option.
+
 
 Method caching
 --------------
@@ -212,3 +239,6 @@
 lookup happens (this version is incremented every time the type or one of its
 base classes is changed). On subsequent lookups the cached version can be used,
 as long as the instance did not shadow any of its classes attributes.
+
+You can enable this feature with the :config:`objspace.std.withmethodcache`
+option.

Modified: pypy/branch/ast-experiments/pypy/doc/objspace-proxies.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/objspace-proxies.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/objspace-proxies.txt	Mon Feb 26 08:45:45 2007
@@ -32,6 +32,9 @@
   regular built-in objects (list objects, traceback objects, etc.), but
   completely under the control of the application.
 
+Which object space to use can be chosen with :config:`objspace.name` option.
+
+.. _`Object Space`: objspace.html
 
 .. _thunk:
 
@@ -120,7 +123,7 @@
 with no initial value at all.  It is possible to put a value into this
 object once, and only once, at any point in time.
 
-This is not entierely unrelated to a lazily-computed object, except that
+This is not entirely unrelated to a lazily-computed object, except that
 the object has no built-in knowledge about how it should compute itself.
 Trying to use such an object before it got a value results in a lock:
 the current thread is suspended, in the hope that another thread will
@@ -157,7 +160,7 @@
 other places merely pass it around, or do entirely unrelated things.
 
 Nevertheless, if a large application needs to be reviewed for security,
-it must be entierely carefully checked, because it is possible that a
+it must be entirely carefully checked, because it is possible that a
 bug at some apparently unrelated place could lead to a leak of sensitive
 information in a way that an external attacker could exploit.  For
 example, if any part of the application provides web services, an
@@ -451,15 +454,17 @@
 
 Among the unique features of PyPy, there is as well the possibility of
 having multiple implementations of builtin types. Multiple performance
-optimisations using this features are already implemented, some 
-hints are in the `Object Space`_ document.
+optimisations using this features are already implemented, see the document
+about `alternative object implementations`_.
 
 Transparent proxy are implementations of some (maybe all at some point)
 objects like functions, objects, lists etc. which forwards all
 operations performed on these object to app-level functions which have specific
 signatures.
 
-.. _`Object Space`: objspace.html#object-types
+To enable them, use the :config:`objspace.std.withtproxy` option.
+
+.. _`alternative object implementations`: object-optimizations.html
 
 Example:
 ---------
@@ -510,6 +515,18 @@
 does not show up at all (indeed the type is the only aspect of the instance that
 the controller cannot change).
 
+Provided API:
+-------------
+
+Transparent proxy provides two magic functions appearing in the pypymagic module.
+
+* `transparent_proxy` - a basic function to create proxy object.
+
+* `get_transparent_controller` - for some use-cases there is need to know
+  when an object is a transparent proxy. This function returns an original controller
+  (a callable) or None in case this is a normal Python object. This is
+  the only official way of distinguishing transparent objects from normal ones.
+
 Further points of interest:
 ---------------------------
 
@@ -541,8 +558,8 @@
 frames.
 
 .. _`standard object space`: objspace.html#the-standard-object-space
-.. _`proxy_helpers.py`: http://codespeak.net/svn/pypy/dist/pypy/objspace/std/proxy_helpers.py
-.. _`proxyobject.py`: http://codespeak.net/svn/pypy/dist/pypy/objspace/std/proxyobject.py
-.. _`transparent.py`: http://codespeak.net/svn/pypy/dist/pypy/objspace/std/transparent.py
+.. _`proxy_helpers.py`: ../../pypy/objspace/std/proxy_helpers.py
+.. _`proxyobject.py`: ../../pypy/objspace/std/proxyobject.py
+.. _`transparent.py`: ../../pypy/objspace/std/transparent.py
 
 .. include:: _ref.txt

Modified: pypy/branch/ast-experiments/pypy/doc/objspace.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/objspace.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/objspace.txt	Mon Feb 26 08:45:45 2007
@@ -58,6 +58,8 @@
 The sources of PyPy contain the various object spaces in the directory
 `objspace/`_.
 
+To choose which object space to use, use the :config:`objspace.name` option.
+
 .. _`application-level`: coding-guide.html#application-level
 .. _`interpreter-level`: coding-guide.html#interpreter-level
 .. _`in another document`: translation.html

Modified: pypy/branch/ast-experiments/pypy/doc/rctypes.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/rctypes.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/rctypes.txt	Mon Feb 26 08:45:45 2007
@@ -414,7 +414,7 @@
 * ``getitem()`` and ``setitem()`` - called when the RPython program uses
   the ``[ ]`` notation to index the full Python object
 
-If necessary, the controller can also choose to entierely override the
+If necessary, the controller can also choose to entirely override the
 default annotating and rtyping behavior and insert its own.  This is
 useful for cases where the method cannot be implemented in RPython,
 e.g. in the presence of a polymorphic operation that would cause the

Modified: pypy/branch/ast-experiments/pypy/doc/rlib.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/rlib.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/rlib.txt	Mon Feb 26 08:45:45 2007
@@ -139,7 +139,11 @@
 ===========
 
 The rsocket_ module contains an RPython implementation of the functionality of
-the socket standard library with a slightly different interface.
+the socket standard library with a slightly different interface.  The
+difficulty with the Python socket API is that addresses are not "well-typed"
+objects: dependending on the address family they are tuples, or strings, and
+so on, which is not suitable for RPython.  Instead, ``rsocket`` contains
+a hierarchy of Address classes, in a typical static-OO-programming style.
 
 .. _rsocket: ../../pypy/rlib/rsocket.py
 

Modified: pypy/branch/ast-experiments/pypy/doc/statistic/loc.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/statistic/loc.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/statistic/loc.txt	Mon Feb 26 08:45:45 2007
@@ -1,571 +1,1256 @@
 Lines of Code in the pypy subtree
 date, lines of code, lines of testcode
-2006/07/17, 243883, 61480
-2006/07/16, 243621, 61344
-2006/07/15, 243520, 61313
-2006/07/14, 243459, 61314
-2006/07/13, 243406, 61287
-2006/07/12, 243281, 61279
-2006/07/11, 242885, 60796
-2006/07/10, 242273, 60532
-2006/07/09, 242229, 60524
-2006/07/08, 241573, 60173
-2006/07/07, 239546, 59615
-2006/07/06, 238884, 59396
-2006/07/05, 238901, 59013
-2006/07/04, 238724, 59012
-2006/07/03, 238674, 59009
-2006/07/02, 238651, 59001
-2006/07/01, 238361, 58943
-2006/06/30, 238742, 58961
-2006/06/29, 238832, 58938
-2006/06/28, 238484, 58830
-2006/06/27, 238361, 58778
-2006/06/26, 238162, 58755
-2006/06/25, 237964, 58689
-2006/06/24, 237586, 58460
-2006/06/23, 237265, 58460
-2006/06/22, 237228, 58454
-2006/06/21, 236934, 58324
-2006/06/20, 237711, 58324
-2006/06/19, 237290, 58140
-2006/06/18, 237243, 57759
-2006/06/17, 237227, 57705
-2006/06/16, 237223, 57674
-2006/06/15, 237010, 57438
-2006/06/14, 236747, 57335
-2006/06/13, 236849, 57211
-2006/06/12, 237246, 57071
-2006/06/11, 236558, 56800
-2006/06/10, 236447, 56788
-2006/06/09, 236391, 56722
-2006/06/08, 237731, 58790
-2006/06/07, 237402, 58537
-2006/06/06, 236730, 58474
-2006/06/05, 236286, 58331
-2006/06/04, 236020, 58196
-2006/06/03, 236072, 57355
-2006/06/02, 235690, 57191
-2006/05/31, 235493, 57122
-2006/05/30, 235501, 57122
-2006/05/29, 204409, 57115
-2006/05/28, 203670, 55592
-2006/05/27, 203653, 55592
-2006/05/26, 203563, 55563
-2006/05/25, 203490, 55570
-2006/05/24, 203342, 55383
-2006/05/23, 199431, 55391
-2006/05/22, 199114, 55577
-2006/05/21, 199040, 55475
-2006/05/20, 198903, 55211
-2006/05/19, 197404, 55047
-2006/05/18, 197223, 54967
-2006/05/17, 197172, 55029
-2006/05/16, 196171, 54954
-2006/05/15, 195827, 54685
-2006/05/14, 195622, 54424
-2006/05/13, 196169, 54314
-2006/05/12, 195535, 54202
-2006/05/11, 195221, 54028
-2006/05/10, 194921, 53800
-2006/05/09, 194384, 53587
-2006/05/08, 194325, 53503
-2006/05/07, 194263, 53544
-2006/05/06, 194029, 53366
-2006/05/05, 193577, 53008
-2006/05/04, 193297, 52720
-2006/05/03, 193237, 52548
-2006/05/02, 192950, 52435
-2006/05/01, 192740, 52245
-2006/04/30, 192740, 52241
-2006/04/29, 192654, 52220
-2006/04/28, 192251, 51836
-2006/04/27, 191806, 51553
-2006/04/26, 191265, 51180
-2006/04/25, 191060, 50946
-2006/04/24, 190581, 50716
-2006/04/23, 190100, 50476
-2006/04/22, 189708, 50343
-2006/04/21, 189444, 50233
-2006/04/20, 189386, 50060
-2006/04/19, 188764, 50000
-2006/04/18, 188368, 49760
-2006/04/17, 188185, 49343
-2006/04/16, 188073, 49083
-2006/04/15, 187874, 49072
-2006/04/14, 187650, 48936
-2006/04/13, 187417, 48900
-2006/04/12, 187328, 48773
-2006/04/11, 187071, 48645
-2006/04/10, 186785, 48474
-2006/04/09, 186394, 48077
-2006/04/08, 178733, 47684
-2006/04/07, 178276, 47631
-2006/04/06, 177675, 47389
-2006/04/05, 178170, 47256
-2006/04/04, 176373, 47399
-2006/04/03, 175795, 47186
-2006/04/02, 175537, 47085
-2006/04/01, 175211, 46910
-2006/03/31, 174915, 46889
-2006/03/30, 174706, 46787
-2006/03/29, 174706, 46762
-2006/03/28, 174663, 46741
-2006/03/27, 174514, 46658
-2006/03/26, 174271, 46600
-2006/03/25, 174223, 46600
-2006/03/24, 174140, 46532
-2006/03/23, 173493, 46142
-2006/03/22, 172896, 45937
-2006/03/21, 172152, 45725
-2006/03/20, 171933, 45506
-2006/03/19, 171607, 45205
-2006/03/18, 171465, 45202
-2006/03/17, 171385, 45125
-2006/03/16, 171176, 44945
-2006/03/15, 170968, 44841
-2006/03/14, 170944, 44877
-2006/03/13, 170830, 44738
-2006/03/12, 170626, 44743
-2006/03/11, 170597, 44743
-2006/03/10, 170589, 44743
-2006/03/09, 170579, 44855
-2006/03/08, 170180, 44731
-2006/03/07, 170046, 44647
-2006/03/06, 170008, 44611
-2006/03/04, 169917, 44512
-2006/03/03, 169915, 44512
-2006/03/02, 169723, 44499
-2006/03/01, 169535, 44112
-2006/02/28, 169197, 43619
-2006/02/27, 169940, 43442
-2006/02/26, 169558, 43279
-2006/02/25, 169557, 43279
-2006/02/23, 169557, 43279
-2006/02/22, 169433, 43239
-2006/02/21, 169602, 43297
-2006/02/20, 169263, 43201
-2006/02/19, 168953, 43173
-2006/02/18, 168844, 43089
-2006/02/17, 168836, 43089
-2006/02/16, 168628, 42835
-2006/02/15, 168112, 42671
-2006/02/14, 168068, 42354
-2006/02/13, 167901, 42278
-2006/02/12, 167741, 41981
-2006/02/11, 167719, 41992
-2006/02/10, 167651, 41888
-2006/02/09, 167396, 41812
-2006/02/08, 167122, 41723
-2006/02/07, 166496, 41367
-2006/02/06, 166453, 41209
-2006/02/05, 166436, 41110
-2006/02/04, 166270, 40962
-2006/02/03, 166074, 40861
-2006/02/02, 165996, 40725
-2006/02/01, 165903, 40680
-2006/01/31, 165833, 40588
-2006/01/30, 165580, 40016
-2006/01/29, 165580, 40015
-2006/01/28, 165022, 39852
-2006/01/27, 165729, 39552
-2006/01/26, 164445, 39306
-2006/01/25, 163208, 38818
-2006/01/24, 162825, 38485
-2006/01/23, 162130, 38129
-2006/01/22, 161327, 37820
-2006/01/21, 161311, 37789
-2006/01/20, 161285, 37794
-2006/01/19, 161141, 37707
-2006/01/18, 160809, 37566
-2006/01/17, 160737, 37562
-2006/01/16, 160714, 37551
-2006/01/15, 160640, 37439
-2006/01/14, 160642, 37353
-2006/01/13, 160359, 37217
-2006/01/12, 160335, 37215
-2006/01/11, 160307, 37098
-2006/01/10, 160237, 37028
-2006/01/09, 159988, 36799
-2006/01/08, 159964, 36760
-2006/01/07, 159822, 36617
-2006/01/06, 159735, 36497
-2006/01/05, 159787, 36462
-2006/01/04, 159796, 36423
-2006/01/02, 159692, 36336
-2005/12/31, 159549, 36333
-2005/12/30, 159520, 36330
-2005/12/29, 159455, 36319
-2005/12/27, 159374, 36285
-2005/12/25, 159321, 36247
-2005/12/24, 159321, 36197
-2005/12/23, 159305, 36195
-2005/12/22, 159276, 36124
-2005/12/21, 159197, 36060
-2005/12/20, 159100, 36030
-2005/12/19, 159083, 36018
-2005/12/18, 159070, 35868
-2005/12/17, 158902, 35713
-2005/12/16, 158822, 35712
-2005/12/15, 158751, 35651
-2005/12/14, 158266, 35238
-2005/12/13, 158273, 35108
-2005/12/12, 157583, 35018
-2005/12/11, 157466, 35017
-2005/12/10, 157305, 34891
-2005/12/09, 156931, 34791
-2005/12/08, 156568, 33832
-2005/12/07, 154963, 33506
-2005/12/06, 154069, 33216
-2005/12/05, 154085, 33187
-2005/12/04, 154104, 33187
-2005/12/03, 153937, 33205
-2005/12/02, 153897, 33205
-2005/12/01, 153738, 33186
-2005/11/30, 153293, 33011
-2005/11/29, 153246, 33011
-2005/11/28, 153190, 33011
-2005/11/27, 152884, 32862
-2005/11/25, 152830, 32830
-2005/11/23, 152830, 32830
-2005/11/23, 152830, 32830
-2005/11/22, 152844, 32830
-2005/11/21, 152822, 32825
-2005/11/19, 152702, 32718
-2005/11/18, 152704, 32718
-2005/11/17, 152702, 32718
-2005/11/16, 152126, 32718
-2005/11/15, 152151, 32690
-2005/11/14, 152151, 32690
-2005/11/13, 152123, 32696
-2005/11/12, 152031, 32696
-2005/11/11, 152031, 32696
-2005/11/10, 151995, 32548
-2005/11/09, 152051, 32550
-2005/11/08, 152062, 32545
-2005/11/07, 152059, 32545
-2005/11/06, 152076, 32545
-2005/11/05, 152018, 32514
-2005/11/04, 151923, 32514
-2005/11/03, 151918, 32514
-2005/11/02, 151918, 32514
-2005/11/01, 151913, 32508
-2005/10/31, 151905, 32496
-2005/10/30, 151701, 32470
-2005/10/29, 151768, 32470
-2005/10/28, 151704, 32470
-2005/10/27, 151521, 32461
-2005/10/26, 156875, 32344
-2005/10/25, 156761, 31982
-2005/10/24, 156358, 31940
-2005/10/23, 156153, 31954
-2005/10/22, 156124, 31942
-2005/10/21, 156006, 31832
-2005/10/20, 155670, 31818
-2005/10/19, 155548, 31764
-2005/10/18, 155323, 31407
-2005/10/17, 155558, 31306
-2005/10/16, 155503, 31283
-2005/10/15, 155217, 31128
-2005/10/14, 154456, 30886
-2005/10/13, 153234, 30314
-2005/10/12, 153415, 30315
-2005/10/11, 152893, 30132
-2005/10/10, 152248, 29917
-2005/10/09, 150340, 28002
-2005/10/08, 150336, 28002
-2005/10/07, 150310, 27981
-2005/10/06, 150147, 27867
-2005/10/05, 161650, 28403
-2005/10/04, 161652, 28325
-2005/10/03, 161470, 28231
-2005/10/02, 161405, 28148
-2005/10/01, 161217, 28060
-2005/09/30, 161908, 28024
-2005/09/29, 161926, 27969
-2005/09/28, 161945, 27912
-2005/09/27, 161746, 27929
-2005/09/26, 161707, 27865
-2005/09/25, 161178, 27660
-2005/09/24, 161159, 27660
-2005/09/23, 161014, 27616
-2005/09/22, 160766, 27591
-2005/09/21, 160716, 27585
-2005/09/20, 160520, 27565
-2005/09/19, 160423, 27449
-2005/09/18, 160256, 27417
-2005/09/17, 160147, 27417
-2005/09/16, 160250, 27355
-2005/09/15, 160186, 27308
-2005/09/14, 160100, 27289
-2005/09/13, 160295, 27222
-2005/09/12, 159914, 27003
-2005/09/11, 159590, 26842
-2005/09/10, 159474, 26604
-2005/09/09, 159532, 26410
-2005/09/08, 159095, 26194
-2005/09/07, 159089, 26078
-2005/09/06, 158929, 26044
-2005/09/05, 153175, 25883
-2005/09/04, 152749, 25883
-2005/09/03, 152637, 25829
-2005/09/02, 152608, 25829
-2005/09/01, 152432, 25673
-2005/08/31, 152475, 25673
-2005/08/30, 152432, 25655
-2005/08/29, 152082, 25747
-2005/08/28, 151807, 25680
-2005/08/27, 151828, 25688
-2005/08/26, 151296, 25435
-2005/08/25, 150138, 25151
-2005/08/24, 150268, 24873
-2005/08/23, 149698, 24405
-2005/08/22, 149110, 24116
-2005/08/20, 148620, 23925
-2005/08/19, 148620, 23925
-2005/08/18, 147807, 23409
-2005/08/17, 147700, 23385
-2005/08/16, 147613, 23353
-2005/08/15, 147602, 23349
-2005/08/14, 147325, 23329
-2005/08/13, 147307, 23316
-2005/08/12, 147266, 23259
-2005/08/11, 146795, 23113
-2005/08/10, 146311, 22828
-2005/08/09, 145674, 21822
-2005/08/08, 145076, 21661
-2005/08/07, 144812, 21489
-2005/08/06, 144699, 21466
-2005/08/05, 144471, 21098
-2005/08/04, 144278, 20895
-2005/08/03, 143636, 20718
-2005/08/02, 141678, 19969
-2005/07/31, 140413, 19866
-2005/07/30, 140023, 19365
-2005/07/29, 139511, 19128
-2005/07/28, 139093, 18793
-2005/07/27, 135175, 18670
-2005/07/26, 134555, 18519
-2005/07/25, 133921, 18324
-2005/07/24, 133359, 18035
-2005/07/23, 133322, 18020
-2005/07/22, 133289, 18016
-2005/07/21, 133068, 17799
-2005/07/20, 132758, 17419
-2005/07/19, 132611, 17276
-2005/07/18, 135877, 17663
-2005/07/15, 135695, 17468
-2005/07/14, 135576, 17401
-2005/07/13, 135456, 17254
-2005/07/12, 134835, 17106
-2005/07/11, 134472, 16944
-2005/07/10, 134279, 16770
-2005/07/09, 134189, 16711
-2005/07/07, 134141, 16707
-2005/07/06, 133732, 16589
-2005/07/05, 132622, 16446
-2005/07/04, 127161, 16176
-2005/07/03, 126972, 16148
-2005/07/02, 114021, 15697
-2005/07/01, 114035, 15625
-2005/06/30, 113952, 15603
-2005/06/29, 113952, 15603
-2005/06/28, 113886, 15562
-2005/06/26, 113883, 15561
-2005/06/25, 113704, 15474
-2005/06/24, 113296, 15214
-2005/06/23, 114363, 15004
-2005/06/22, 113623, 14689
-2005/06/21, 113628, 14678
-2005/06/20, 113060, 14432
-2005/06/19, 112774, 14332
-2005/06/18, 112462, 14266
-2005/06/17, 111660, 14165
-2005/06/16, 111272, 13979
-2005/06/15, 111031, 13891
-2005/06/14, 111088, 13725
-2005/06/13, 112895, 13446
-2005/06/12, 112856, 13332
-2005/06/11, 112825, 13178
-2005/06/10, 112796, 13151
-2005/06/09, 112505, 13115
-2005/06/08, 113246, 12999
-2005/06/07, 104662, 12955
-2005/06/06, 104657, 12995
-2005/06/05, 103949, 12880
-2005/06/04, 102228, 13525
-2005/06/03, 101734, 13461
-2005/06/02, 101619, 13444
-2005/06/01, 101442, 13353
-2005/05/31, 100942, 13201
-2005/05/30, 100321, 13014
-2005/05/29, 100002, 12811
-2005/05/28, 99760, 12742
-2005/05/27, 99874, 12742
-2005/05/26, 99681, 12701
-2005/05/25, 99295, 12693
-2005/05/24, 99080, 12693
-2005/05/23, 98647, 12664
-2005/05/22, 73426, 12608
-2005/05/21, 73363, 12587
-2005/05/20, 71816, 12433
-2005/05/19, 71673, 12429
-2005/05/18, 79865, 12413
-2005/05/17, 66595, 13184
-2005/05/16, 66562, 13121
-2005/05/15, 66548, 13088
-2005/05/14, 64917, 12761
-2005/05/13, 64811, 12749
-2005/05/12, 64790, 12735
-2005/05/11, 64484, 12685
-2005/05/10, 64144, 12557
-2005/05/09, 63755, 12352
-2005/05/08, 63690, 12349
-2005/05/07, 63552, 12329
-2005/05/06, 63489, 12329
-2005/05/05, 63428, 12267
-2005/05/04, 63289, 12171
-2005/05/03, 63010, 12163
-2005/05/02, 62628, 12096
-2005/05/01, 62128, 11466
-2005/04/30, 63937, 16140
-2005/04/29, 63797, 15974
-2005/04/28, 61815, 15250
-2005/04/27, 61763, 15262
-2005/04/26, 60919, 15192
-2005/04/25, 60595, 15369
-2005/04/24, 58807, 14955
-2005/04/23, 58565, 14939
-2005/04/22, 58565, 14939
-2005/04/21, 58521, 14898
-2005/04/20, 58504, 14881
-2005/04/19, 59131, 14097
-2005/04/18, 59087, 14047
-2005/04/17, 59013, 14000
-2005/04/16, 59050, 13979
-2005/04/15, 58914, 13931
-2005/04/14, 58819, 13856
-2005/04/13, 58464, 13699
-2005/04/12, 58127, 13668
-2005/04/11, 57717, 13522
-2005/04/10, 57578, 13545
-2005/04/09, 57270, 13538
-2005/04/08, 57306, 13520
-2005/04/07, 56983, 13422
-2005/04/06, 56885, 13380
-2005/04/05, 56748, 13356
-2005/04/04, 56579, 13340
-2005/04/03, 56272, 13325
-2005/04/02, 56072, 13325
-2005/04/01, 55751, 13280
-2005/03/31, 54997, 13276
-2005/03/30, 54890, 13167
-2005/03/29, 54788, 13157
-2005/03/28, 54272, 13111
-2005/03/27, 54216, 13108
-2005/03/24, 54198, 13096
-2005/03/23, 54091, 13093
-2005/03/22, 54019, 15607
-2005/03/21, 50164, 15056
-2005/03/20, 50569, 15353
-2005/03/19, 48756, 11768
-2005/03/17, 48791, 11755
-2005/03/15, 48683, 11755
-2005/03/14, 48645, 11755
-2005/03/13, 48629, 11754
-2005/03/12, 48605, 11671
-2005/03/11, 48566, 11653
-2005/03/10, 48463, 11638
-2005/03/06, 47912, 11638
-2005/03/05, 47888, 11628
-2005/03/04, 47719, 11596
-2005/03/03, 47863, 11666
-2005/03/02, 47765, 11661
-2005/03/01, 47635, 11565
-2005/02/28, 47752, 11643
-2005/02/27, 47624, 11627
-2005/02/26, 47624, 11627
-2005/02/25, 47623, 11627
-2005/02/24, 47429, 11567
-2005/02/23, 47309, 11563
-2005/02/22, 47252, 11557
-2005/02/21, 47207, 11362
-2005/02/19, 47139, 11363
-2005/02/18, 46949, 11283
-2005/02/17, 46971, 11167
-2005/02/16, 46912, 11167
-2005/02/15, 46912, 11167
-2005/02/14, 46513, 11092
-2005/02/13, 46454, 11085
-2005/02/13, 46454, 11085
-2005/02/13, 46454, 11085
-2005/02/11, 43929, 11085
-2005/02/10, 43918, 11075
-2005/02/09, 37442, 11055
-2005/02/08, 37341, 11046
-2005/02/07, 37299, 11031
-2005/02/06, 37347, 11064
-2005/02/05, 36551, 10929
-2005/02/04, 36471, 10929
-2005/02/03, 37045, 10890
-2005/02/02, 36931, 10843
-2005/02/01, 36390, 10292
-2005/01/31, 35541, 10266
-2005/01/30, 35430, 10266
-2005/01/29, 35440, 10266
-2005/01/28, 35443, 9696
-2005/01/27, 31118, 9024
-2005/01/26, 33547, 9492
-2005/01/25, 33281, 9335
-2005/01/24, 32679, 8707
-2005/01/23, 32486, 8707
-2005/01/22, 32108, 8555
-2005/01/20, 32091, 8560
-2005/01/19, 32110, 8543
-2005/01/18, 32110, 8166
-2005/01/17, 32110, 8166
-2005/01/16, 32108, 8165
-2005/01/15, 32108, 8154
-2005/01/14, 32103, 8154
-2005/01/13, 32095, 8154
-2005/01/12, 32119, 8145
-2005/01/11, 30569, 8097
-2005/01/10, 30702, 8130
-2005/01/09, 30701, 8248
-2005/01/08, 30701, 8256
-2005/01/03, 30565, 8352
-2005/01/02, 30565, 8357
-2005/01/01, 30565, 8357
-2004/12/30, 30860, 8378
-2004/12/27, 30860, 8375
-2004/12/24, 30812, 8383
-2004/12/22, 30939, 8352
-2004/12/20, 30881, 8352
-2004/12/19, 30881, 8352
-2004/12/18, 30760, 8352
-2004/12/17, 30748, 8342
-2004/12/16, 30679, 8332
-2004/12/13, 30652, 8332
-2004/12/10, 30631, 8332
-2004/12/09, 30622, 8318
-2004/12/08, 30490, 8273
-2004/12/07, 30489, 8273
-2004/12/06, 30465, 8242
-2004/12/04, 30404, 8242
-2004/11/30, 30261, 8242
-2004/11/29, 30175, 8232
-2004/11/28, 30151, 8115
-2004/11/27, 30150, 8115
-2004/11/25, 30148, 8115
-2004/11/24, 30139, 8115
+2003-02-19, 1436, 0
+2003-02-20, 1603, 114
+2003-02-21, 2637, 401
+2003-02-22, 2921, 121
+2003-02-23, 3674, 969
+2003-02-24, 3674, 969
+2003-02-25, 3808, 998
+2003-02-26, 3808, 998
+2003-02-27, 3808, 998
+2003-02-28, 3847, 1054
+2003-03-01, 3854, 1056
+2003-03-03, 3865, 1114
+2003-03-04, 3865, 1116
+2003-03-18, 3865, 1116
+2003-04-06, 3865, 1116
+2003-04-11, 3865, 1116
+2003-04-18, 3892, 1221
+2003-04-19, 3943, 1273
+2003-05-22, 3943, 1273
+2003-05-25, 3943, 1273
+2003-05-26, 4239, 1414
+2003-05-27, 4714, 1668
+2003-05-28, 5603, 1847
+2003-05-29, 5735, 1883
+2003-05-30, 6515, 2380
+2003-05-31, 6927, 2393
+2003-06-01, 7144, 2396
+2003-06-02, 7152, 2400
+2003-06-05, 7195, 2400
+2003-06-06, 7212, 2400
+2003-06-07, 7215, 2400
+2003-06-08, 7228, 2390
+2003-06-09, 7230, 2390
+2003-06-13, 7356, 2387
+2003-06-14, 7436, 2387
+2003-06-15, 7436, 2387
+2003-06-16, 7558, 2411
+2003-06-17, 7568, 2411
+2003-06-18, 7708, 2465
+2003-06-19, 7796, 2460
+2003-06-20, 7794, 2467
+2003-06-21, 7823, 2479
+2003-06-22, 9536, 2608
+2003-06-23, 10196, 3153
+2003-06-24, 10675, 3428
+2003-06-28, 11165, 3571
+2003-06-29, 11173, 3579
+2003-06-30, 11173, 3579
+2003-07-01, 11336, 3597
+2003-07-02, 11344, 3597
+2003-07-03, 11344, 3597
+2003-07-04, 11344, 3597
+2003-07-06, 11354, 3597
+2003-07-07, 11354, 3597
+2003-07-08, 11544, 3621
+2003-07-10, 11544, 3621
+2003-07-12, 11544, 3621
+2003-07-13, 11544, 3621
+2003-07-14, 11617, 3625
+2003-07-15, 11617, 3625
+2003-07-16, 11617, 3625
+2003-07-17, 11617, 3625
+2003-07-18, 11617, 3625
+2003-07-19, 11617, 3625
+2003-07-24, 11617, 3625
+2003-07-26, 11617, 3625
+2003-07-27, 11617, 3625
+2003-07-28, 11617, 3625
+2003-07-29, 11617, 3625
+2003-07-30, 11617, 3625
+2003-07-31, 11617, 3625
+2003-08-01, 11617, 3625
+2003-08-02, 11617, 3625
+2003-08-06, 11617, 3625
+2003-08-07, 11617, 3625
+2003-08-09, 11617, 3625
+2003-08-10, 11617, 3625
+2003-08-17, 11617, 3625
+2003-08-24, 11617, 3625
+2003-08-25, 11617, 3625
+2003-09-02, 11617, 3625
+2003-09-07, 11617, 3625
+2003-09-08, 11617, 3625
+2003-09-09, 11617, 3625
+2003-09-10, 11617, 3625
+2003-09-12, 11617, 3625
+2003-09-13, 11617, 3625
+2003-09-14, 11617, 3625
+2003-09-15, 11617, 3625
+2003-09-16, 11617, 3625
+2003-09-17, 11617, 3625
+2003-09-18, 11954, 3536
+2003-09-19, 11976, 3541
+2003-09-20, 11976, 3541
+2003-09-21, 11976, 3541
+2003-09-22, 11976, 3541
+2003-09-23, 12024, 3671
+2003-09-25, 12024, 3671
+2003-09-26, 12024, 3671
+2003-09-28, 12024, 3671
+2003-09-29, 12024, 3677
+2003-09-30, 12393, 3760
+2003-10-01, 12900, 3965
+2003-10-02, 13241, 4310
+2003-10-03, 13241, 4310
+2003-10-04, 13310, 4356
+2003-10-05, 12443, 4223
+2003-10-06, 12415, 4223
+2003-10-07, 12415, 4223
+2003-10-08, 12417, 4223
+2003-10-09, 12417, 4223
+2003-10-10, 12875, 4431
+2003-10-11, 12884, 4452
+2003-10-12, 12970, 4492
+2003-10-13, 12984, 4492
+2003-10-14, 12984, 4492
+2003-10-15, 12974, 4492
+2003-10-16, 13051, 4492
+2003-10-17, 13094, 4521
+2003-10-18, 13131, 4561
+2003-10-20, 13131, 4561
+2003-10-21, 13131, 4561
+2003-10-23, 13147, 4570
+2003-10-24, 13268, 4413
+2003-10-25, 13276, 4416
+2003-10-26, 13372, 4409
+2003-10-27, 13641, 4403
+2003-10-28, 13699, 4409
+2003-10-29, 13850, 4419
+2003-10-30, 13848, 4431
+2003-10-31, 13854, 4431
+2003-11-03, 13704, 4437
+2003-11-04, 13704, 4437
+2003-11-05, 13711, 4437
+2003-11-10, 13711, 4437
+2003-11-11, 13872, 4634
+2003-11-13, 13872, 4634
+2003-11-14, 13872, 4634
+2003-11-17, 13872, 4634
+2003-11-18, 13850, 4682
+2003-11-19, 13954, 4508
+2003-11-20, 14086, 4555
+2003-11-21, 14226, 4565
+2003-11-22, 14231, 4565
+2003-11-24, 14170, 4620
+2003-11-25, 14170, 4620
+2003-11-26, 14120, 4624
+2003-11-27, 14543, 4673
+2003-11-28, 14546, 4673
+2003-11-29, 14546, 4673
+2003-11-30, 15350, 4695
+2003-12-01, 15350, 4695
+2003-12-02, 15350, 4695
+2003-12-03, 15350, 4695
+2003-12-04, 15350, 4695
+2003-12-08, 15350, 4695
+2003-12-09, 15352, 4695
+2003-12-10, 15352, 4695
+2003-12-11, 15352, 4695
+2003-12-12, 15352, 4695
+2003-12-13, 15352, 4695
+2003-12-15, 15474, 4695
+2003-12-16, 16321, 4701
+2003-12-17, 17469, 4878
+2003-12-18, 17793, 5121
+2003-12-19, 19327, 5002
+2003-12-20, 19795, 5058
+2003-12-21, 20048, 5121
+2003-12-22, 20062, 5145
+2003-12-23, 20118, 5156
+2003-12-24, 20232, 5178
+2003-12-27, 20232, 5178
+2003-12-28, 20232, 5178
+2003-12-29, 20232, 5178
+2003-12-31, 20232, 5178
+2004-01-01, 20404, 5292
+2004-01-02, 20418, 5292
+2004-01-05, 20418, 5292
+2004-01-06, 20283, 5284
+2004-01-07, 20283, 5284
+2004-01-08, 20284, 5284
+2004-01-09, 20351, 5284
+2004-01-10, 20351, 5284
+2004-01-11, 20350, 5284
+2004-01-12, 20356, 5284
+2004-01-13, 20356, 5284
+2004-01-14, 20356, 5284
+2004-01-15, 20356, 5284
+2004-01-16, 20356, 5284
+2004-01-17, 20356, 5284
+2004-01-18, 20356, 5284
+2004-01-19, 20360, 5284
+2004-01-20, 20360, 5284
+2004-01-21, 20360, 5284
+2004-01-22, 20360, 5284
+2004-01-23, 20360, 5284
+2004-01-26, 20360, 5284
+2004-01-27, 20360, 5284
+2004-01-28, 20360, 5284
+2004-01-29, 20360, 5284
+2004-01-30, 20360, 5284
+2004-02-02, 20360, 5284
+2004-02-03, 20360, 5284
+2004-02-04, 20360, 5284
+2004-02-05, 20360, 5284
+2004-02-07, 20360, 5284
+2004-02-08, 20360, 5284
+2004-02-09, 20360, 5284
+2004-02-10, 20360, 5284
+2004-02-11, 20360, 5284
+2004-02-12, 20380, 5284
+2004-02-13, 20380, 5284
+2004-02-14, 20380, 5284
+2004-02-15, 20380, 5284
+2004-02-16, 20372, 5284
+2004-02-19, 20442, 5289
+2004-02-20, 20442, 5289
+2004-02-21, 20442, 5289
+2004-02-23, 20442, 5289
+2004-02-24, 20442, 5289
+2004-02-25, 20442, 5289
+2004-02-26, 20442, 5289
+2004-02-27, 20442, 5289
+2004-02-28, 20442, 5289
+2004-02-29, 20442, 5289
+2004-03-01, 20442, 5289
+2004-03-02, 20442, 5289
+2004-03-03, 20442, 5289
+2004-03-04, 20442, 5289
+2004-03-05, 20442, 5289
+2004-03-06, 20442, 5289
+2004-03-07, 20442, 5289
+2004-03-08, 20442, 5289
+2004-03-09, 20442, 5289
+2004-03-10, 20442, 5289
+2004-03-11, 20442, 5289
+2004-03-12, 20442, 5289
+2004-03-13, 20442, 5289
+2004-03-14, 20442, 5289
+2004-03-16, 20442, 5289
+2004-03-17, 20442, 5289
+2004-03-18, 20442, 5289
+2004-03-19, 20442, 5289
+2004-03-21, 20442, 5289
+2004-03-22, 20442, 5289
+2004-03-23, 20442, 5289
+2004-03-24, 21127, 5289
+2004-03-25, 21128, 5289
+2004-03-26, 21128, 5289
+2004-03-28, 21128, 5289
+2004-03-29, 20587, 5289
+2004-03-30, 20587, 5289
+2004-03-31, 20587, 5289
+2004-04-01, 20587, 5289
+2004-04-02, 20587, 5289
+2004-04-03, 20587, 5289
+2004-04-04, 20587, 5289
+2004-04-05, 20587, 5289
+2004-04-06, 20587, 5289
+2004-04-07, 20587, 5289
+2004-04-08, 20587, 5289
+2004-04-09, 20587, 5289
+2004-04-10, 20587, 5289
+2004-04-11, 20587, 5289
+2004-04-13, 20587, 5289
+2004-04-14, 20587, 5289
+2004-04-15, 20587, 5289
+2004-04-16, 20587, 5289
+2004-04-17, 20587, 5289
+2004-04-18, 20587, 5289
+2004-04-19, 20587, 5289
+2004-04-20, 20587, 5289
+2004-04-21, 20587, 5289
+2004-04-22, 20587, 5289
+2004-04-23, 20587, 5289
+2004-04-24, 20587, 5289
+2004-04-25, 20587, 5289
+2004-04-26, 20587, 5289
+2004-04-27, 20587, 5289
+2004-04-28, 20587, 5289
+2004-04-29, 20587, 5289
+2004-04-30, 20587, 5289
+2004-05-01, 20587, 5289
+2004-05-02, 20587, 5289
+2004-05-03, 20587, 5289
+2004-05-04, 20587, 5289
+2004-05-05, 20587, 5289
+2004-05-06, 20587, 5289
+2004-05-07, 20890, 5143
+2004-05-08, 21079, 5148
+2004-05-09, 21165, 5166
+2004-05-10, 21150, 5166
+2004-05-11, 21150, 5166
+2004-05-12, 21508, 5171
+2004-05-13, 21508, 5171
+2004-05-14, 21508, 5171
+2004-05-15, 21508, 5171
+2004-05-16, 21508, 5171
+2004-05-17, 21508, 5171
+2004-05-18, 21508, 5171
+2004-05-19, 21508, 5171
+2004-05-20, 21508, 5171
+2004-05-21, 21508, 5171
+2004-05-22, 21537, 5199
+2004-05-23, 21537, 5199
+2004-05-24, 21537, 5199
+2004-05-25, 21537, 5199
+2004-05-26, 21537, 5199
+2004-05-27, 21537, 5199
+2004-05-28, 21673, 5214
+2004-05-29, 21673, 5215
+2004-05-30, 21673, 5215
+2004-05-31, 21673, 5215
+2004-06-01, 21848, 5308
+2004-06-02, 22297, 5451
+2004-06-03, 22297, 5474
+2004-06-04, 22310, 5491
+2004-06-05, 22551, 5508
+2004-06-06, 22480, 5496
+2004-06-07, 23177, 5557
+2004-06-08, 23177, 5557
+2004-06-09, 23177, 5557
+2004-06-10, 23181, 5554
+2004-06-11, 24001, 5609
+2004-06-12, 24124, 5618
+2004-06-13, 24341, 5677
+2004-06-15, 24370, 5691
+2004-06-16, 24078, 5704
+2004-06-17, 24218, 5720
+2004-06-18, 24217, 5723
+2004-06-19, 24217, 5723
+2004-06-20, 24217, 5723
+2004-06-21, 24217, 5723
+2004-06-22, 24607, 5723
+2004-06-23, 24607, 5723
+2004-06-24, 24609, 5723
+2004-06-25, 24740, 5751
+2004-06-26, 24865, 5810
+2004-06-27, 24939, 5906
+2004-06-28, 25972, 5974
+2004-06-29, 25986, 5984
+2004-06-30, 25841, 5986
+2004-07-01, 25840, 5986
+2004-07-02, 25937, 5986
+2004-07-03, 25738, 5986
+2004-07-04, 25475, 5986
+2004-07-05, 25475, 5986
+2004-07-06, 25264, 6712
+2004-07-07, 25259, 6780
+2004-07-08, 25259, 6780
+2004-07-09, 25258, 6780
+2004-07-10, 25262, 6799
+2004-07-11, 25262, 6799
+2004-07-12, 25266, 6802
+2004-07-13, 25161, 6825
+2004-07-14, 25161, 6834
+2004-07-15, 25172, 6846
+2004-07-16, 24911, 6757
+2004-07-17, 23902, 6689
+2004-07-21, 23902, 6689
+2004-07-22, 23941, 6690
+2004-07-23, 23971, 6680
+2004-07-24, 24148, 6687
+2004-07-25, 24200, 6687
+2004-07-26, 24354, 6717
+2004-07-27, 24354, 6717
+2004-07-28, 24527, 6755
+2004-07-29, 24527, 6755
+2004-07-30, 24527, 6755
+2004-07-31, 24527, 6755
+2004-08-01, 24527, 6755
+2004-08-02, 24527, 6755
+2004-08-03, 24527, 6755
+2004-08-04, 24527, 6755
+2004-08-05, 24527, 6755
+2004-08-06, 24527, 6755
+2004-08-07, 24527, 6755
+2004-08-08, 24527, 6755
+2004-08-09, 24527, 6755
+2004-08-10, 24527, 6755
+2004-08-11, 24527, 6755
+2004-08-12, 24527, 6755
+2004-08-13, 24527, 6758
+2004-08-14, 24796, 6758
+2004-08-15, 24803, 6758
+2004-08-16, 25070, 6758
+2004-08-17, 25079, 6758
+2004-08-18, 25122, 6758
+2004-08-19, 25122, 6758
+2004-08-20, 25122, 6758
+2004-08-21, 25122, 6758
+2004-08-22, 25122, 6758
+2004-08-23, 25122, 6758
+2004-08-24, 25426, 6758
+2004-08-25, 25426, 6758
+2004-08-26, 25426, 6758
+2004-08-27, 25426, 6758
+2004-08-30, 25426, 6758
+2004-08-31, 25426, 6758
+2004-09-01, 25426, 6758
+2004-09-02, 25426, 6758
+2004-09-03, 25426, 6758
+2004-09-04, 25426, 6758
+2004-09-06, 25426, 6758
+2004-09-07, 26640, 6881
+2004-09-08, 26640, 6881
+2004-09-09, 26840, 6882
+2004-09-10, 26934, 6882
+2004-09-11, 27425, 6889
+2004-09-12, 27401, 6889
+2004-09-13, 27401, 6889
+2004-09-14, 27401, 6889
+2004-09-15, 27401, 6889
+2004-09-16, 27401, 6889
+2004-09-17, 27401, 6889
+2004-09-18, 27401, 6889
+2004-09-19, 27401, 6889
+2004-09-20, 27401, 6889
+2004-09-21, 27401, 6889
+2004-09-22, 27720, 6889
+2004-09-23, 27720, 6889
+2004-09-24, 27720, 6889
+2004-09-25, 27855, 6909
+2004-09-26, 27855, 6909
+2004-09-27, 27855, 6909
+2004-09-28, 27855, 6909
+2004-09-29, 27855, 6909
+2004-09-30, 27855, 6909
+2004-10-01, 27855, 6909
+2004-10-02, 27855, 6909
+2004-10-03, 27855, 6909
+2004-10-04, 27855, 6909
+2004-10-05, 27855, 6909
+2004-10-06, 27855, 6909
+2004-10-07, 27855, 6909
+2004-10-08, 27855, 6909
+2004-10-09, 27855, 6909
+2004-10-10, 25999, 6909
+2004-10-11, 26069, 6913
+2004-10-13, 26069, 6913
+2004-10-14, 26069, 6913
+2004-10-15, 26129, 6917
+2004-10-16, 26129, 6917
+2004-10-17, 26129, 6917
+2004-10-18, 26129, 6917
+2004-10-19, 26147, 6917
+2004-10-20, 26147, 6917
+2004-10-21, 26147, 6917
+2004-10-22, 26147, 6917
+2004-10-23, 26147, 6917
+2004-10-24, 26147, 6917
+2004-10-25, 26147, 6917
+2004-10-26, 26147, 6917
+2004-10-27, 26147, 6917
+2004-10-28, 26147, 6917
+2004-10-29, 26147, 6917
+2004-10-30, 26147, 6917
+2004-10-31, 26147, 6917
+2004-11-01, 26147, 6917
+2004-11-02, 26147, 6917
+2004-11-03, 26147, 6917
+2004-11-04, 26147, 6917
+2004-11-05, 26147, 6917
+2004-11-06, 26147, 6917
+2004-11-08, 26147, 6917
+2004-11-09, 26147, 6917
+2004-11-10, 26147, 6917
+2004-11-11, 26160, 6917
+2004-11-12, 26170, 6917
+2004-11-14, 26169, 6917
+2004-11-15, 26168, 6917
+2004-11-16, 25751, 6829
+2004-11-17, 26131, 6844
+2004-11-18, 26504, 6927
+2004-11-19, 27590, 7162
+2004-11-20, 28246, 7206
+2004-11-21, 29449, 7880
+2004-11-22, 29516, 7927
 2004/11/23, 30041, 8108
-2004/11/22, 29505, 8005
-2004/11/21, 29516, 7927
-2004/11/20, 29449, 7880
-2004/11/19, 28244, 7206
-2004/11/18, 27590, 7162
-2004/11/17, 26504, 6927
-2004/11/16, 26131, 6829
-2004/11/15, 25751, 6829
-2004/11/12, 26169, 6917
-2004/11/11, 26170, 6917
+2004/11/24, 30139, 8115
+2004/11/25, 30148, 8115
+2004/11/27, 30150, 8115
+2004/11/28, 30151, 8115
+2004/11/29, 30175, 8232
+2004/11/30, 30261, 8242
+2004/12/04, 30404, 8242
+2004/12/06, 30465, 8242
+2004/12/07, 30489, 8273
+2004/12/08, 30490, 8273
+2004/12/09, 30622, 8318
+2004/12/10, 30631, 8332
+2004/12/13, 30652, 8332
+2004/12/16, 30679, 8332
+2004/12/17, 30748, 8342
+2004/12/18, 30760, 8352
+2004/12/19, 30881, 8352
+2004/12/20, 30881, 8352
+2004/12/22, 30939, 8352
+2004/12/24, 30812, 8383
+2004/12/27, 30860, 8375
+2004/12/30, 30860, 8378
+2005/01/01, 30565, 8357
+2005/01/02, 30565, 8357
+2005/01/03, 30565, 8352
+2005/01/08, 30701, 8256
+2005/01/09, 30701, 8248
+2005/01/10, 30702, 8130
+2005/01/11, 30569, 8097
+2005/01/12, 32119, 8145
+2005/01/13, 32095, 8154
+2005/01/14, 32103, 8154
+2005/01/15, 32108, 8154
+2005/01/16, 32108, 8165
+2005/01/17, 32110, 8166
+2005/01/18, 32110, 8166
+2005/01/19, 32110, 8543
+2005/01/20, 32091, 8560
+2005/01/22, 32108, 8555
+2005/01/23, 32486, 8707
+2005/01/24, 32679, 8707
+2005/01/25, 33281, 9335
+2005/01/26, 33547, 9492
+2005/01/27, 31118, 9024
+2005/01/28, 35443, 9696
+2005/01/29, 35440, 10266
+2005/01/30, 35430, 10266
+2005/01/31, 35541, 10266
+2005/02/01, 36390, 10292
+2005/02/02, 36931, 10843
+2005/02/03, 37045, 10890
+2005/02/04, 36471, 10929
+2005/02/05, 36551, 10929
+2005/02/06, 37347, 11064
+2005/02/07, 37299, 11031
+2005/02/08, 37341, 11046
+2005/02/09, 37442, 11055
+2005/02/10, 43918, 11075
+2005/02/11, 43929, 11085
+2005/02/13, 46454, 11085
+2005/02/13, 46454, 11085
+2005/02/13, 46454, 11085
+2005/02/14, 46513, 11092
+2005/02/15, 46912, 11167
+2005/02/16, 46912, 11167
+2005/02/17, 46971, 11167
+2005/02/18, 46949, 11283
+2005/02/19, 47139, 11363
+2005/02/21, 47207, 11362
+2005/02/22, 47252, 11557
+2005/02/23, 47309, 11563
+2005/02/24, 47429, 11567
+2005/02/25, 47623, 11627
+2005/02/26, 47624, 11627
+2005/02/27, 47624, 11627
+2005/02/28, 47752, 11643
+2005/03/01, 47635, 11565
+2005/03/02, 47765, 11661
+2005/03/03, 47863, 11666
+2005/03/04, 47719, 11596
+2005/03/05, 47888, 11628
+2005/03/06, 47912, 11638
+2005/03/10, 48463, 11638
+2005/03/11, 48566, 11653
+2005/03/12, 48605, 11671
+2005/03/13, 48629, 11754
+2005/03/14, 48645, 11755
+2005/03/15, 48683, 11755
+2005/03/17, 48791, 11755
+2005/03/19, 48756, 11768
+2005/03/20, 50569, 15353
+2005/03/21, 50164, 15056
+2005/03/22, 54019, 15607
+2005/03/23, 54091, 13093
+2005/03/24, 54198, 13096
+2005/03/27, 54216, 13108
+2005/03/28, 54272, 13111
+2005/03/29, 54788, 13157
+2005/03/30, 54890, 13167
+2005/03/31, 54997, 13276
+2005/04/01, 55751, 13280
+2005/04/02, 56072, 13325
+2005/04/03, 56272, 13325
+2005/04/04, 56579, 13340
+2005/04/05, 56748, 13356
+2005/04/06, 56885, 13380
+2005/04/07, 56983, 13422
+2005/04/08, 57306, 13520
+2005/04/09, 57270, 13538
+2005/04/10, 57578, 13545
+2005/04/11, 57717, 13522
+2005/04/12, 58127, 13668
+2005/04/13, 58464, 13699
+2005/04/14, 58819, 13856
+2005/04/15, 58914, 13931
+2005/04/16, 59050, 13979
+2005/04/17, 59013, 14000
+2005/04/18, 59087, 14047
+2005/04/19, 59131, 14097
+2005/04/20, 58504, 14881
+2005/04/21, 58521, 14898
+2005/04/22, 58565, 14939
+2005/04/23, 58565, 14939
+2005/04/24, 58807, 14955
+2005/04/25, 60595, 15369
+2005/04/26, 60919, 15192
+2005/04/27, 61763, 15262
+2005/04/28, 61815, 15250
+2005/04/29, 63797, 15974
+2005/04/30, 63937, 16140
+2005/05/01, 62128, 11466
+2005/05/02, 62628, 12096
+2005/05/03, 63010, 12163
+2005/05/04, 63289, 12171
+2005/05/05, 63428, 12267
+2005/05/06, 63489, 12329
+2005/05/07, 63552, 12329
+2005/05/08, 63690, 12349
+2005/05/09, 63755, 12352
+2005/05/10, 64144, 12557
+2005/05/11, 64484, 12685
+2005/05/12, 64790, 12735
+2005/05/13, 64811, 12749
+2005/05/14, 64917, 12761
+2005/05/15, 66548, 13088
+2005/05/16, 66562, 13121
+2005/05/17, 66595, 13184
+2005/05/18, 79865, 12413
+2005/05/19, 71673, 12429
+2005/05/20, 71816, 12433
+2005/05/21, 73363, 12587
+2005/05/22, 73426, 12608
+2005/05/23, 98647, 12664
+2005/05/24, 99080, 12693
+2005/05/25, 99295, 12693
+2005/05/26, 99681, 12701
+2005/05/27, 99874, 12742
+2005/05/28, 99760, 12742
+2005/05/29, 100002, 12811
+2005/05/30, 100321, 13014
+2005/05/31, 100942, 13201
+2005/06/01, 101442, 13353
+2005/06/02, 101619, 13444
+2005/06/03, 101734, 13461
+2005/06/04, 102228, 13525
+2005/06/05, 103949, 12880
+2005/06/06, 104657, 12995
+2005/06/07, 104662, 12955
+2005/06/08, 113246, 12999
+2005/06/09, 112505, 13115
+2005/06/10, 112796, 13151
+2005/06/11, 112825, 13178
+2005/06/12, 112856, 13332
+2005/06/13, 112895, 13446
+2005/06/14, 111088, 13725
+2005/06/15, 111031, 13891
+2005/06/16, 111272, 13979
+2005/06/17, 111660, 14165
+2005/06/18, 112462, 14266
+2005/06/19, 112774, 14332
+2005/06/20, 113060, 14432
+2005/06/21, 113628, 14678
+2005/06/22, 113623, 14689
+2005/06/23, 114363, 15004
+2005/06/24, 113296, 15214
+2005/06/25, 113704, 15474
+2005/06/26, 113883, 15561
+2005/06/28, 113886, 15562
+2005/06/29, 113952, 15603
+2005/06/30, 113952, 15603
+2005/07/01, 114035, 15625
+2005/07/02, 114021, 15697
+2005/07/03, 126972, 16148
+2005/07/04, 127161, 16176
+2005/07/05, 132622, 16446
+2005/07/06, 133732, 16589
+2005/07/07, 134141, 16707
+2005/07/09, 134189, 16711
+2005/07/10, 134279, 16770
+2005/07/11, 134472, 16944
+2005/07/12, 134835, 17106
+2005/07/13, 135456, 17254
+2005/07/14, 135576, 17401
+2005/07/15, 135695, 17468
+2005/07/18, 135877, 17663
+2005/07/19, 132611, 17276
+2005/07/20, 132758, 17419
+2005/07/21, 133068, 17799
+2005/07/22, 133289, 18016
+2005/07/23, 133322, 18020
+2005/07/24, 133359, 18035
+2005/07/25, 133921, 18324
+2005/07/26, 134555, 18519
+2005/07/27, 135175, 18670
+2005/07/28, 139093, 18793
+2005/07/29, 139511, 19128
+2005/07/30, 140023, 19365
+2005/07/31, 140413, 19866
+2005/08/02, 141678, 19969
+2005/08/03, 143636, 20718
+2005/08/04, 144278, 20895
+2005/08/05, 144471, 21098
+2005/08/06, 144699, 21466
+2005/08/07, 144812, 21489
+2005/08/08, 145076, 21661
+2005/08/09, 145674, 21822
+2005/08/10, 146311, 22828
+2005/08/11, 146795, 23113
+2005/08/12, 147266, 23259
+2005/08/13, 147307, 23316
+2005/08/14, 147325, 23329
+2005/08/15, 147602, 23349
+2005/08/16, 147613, 23353
+2005/08/17, 147700, 23385
+2005/08/18, 147807, 23409
+2005/08/19, 148620, 23925
+2005/08/20, 148620, 23925
+2005/08/22, 149110, 24116
+2005/08/23, 149698, 24405
+2005/08/24, 150268, 24873
+2005/08/25, 150138, 25151
+2005/08/26, 151296, 25435
+2005/08/27, 151828, 25688
+2005/08/28, 151807, 25680
+2005/08/29, 152082, 25747
+2005/08/30, 152432, 25655
+2005/08/31, 152475, 25673
+2005/09/01, 152432, 25673
+2005/09/02, 152608, 25829
+2005/09/03, 152637, 25829
+2005/09/04, 152749, 25883
+2005/09/05, 153175, 25883
+2005/09/06, 158929, 26044
+2005/09/07, 159089, 26078
+2005/09/08, 159095, 26194
+2005/09/09, 159532, 26410
+2005/09/10, 159474, 26604
+2005/09/11, 159590, 26842
+2005/09/12, 159914, 27003
+2005/09/13, 160295, 27222
+2005/09/14, 160100, 27289
+2005/09/15, 160186, 27308
+2005/09/16, 160250, 27355
+2005/09/17, 160147, 27417
+2005/09/18, 160256, 27417
+2005/09/19, 160423, 27449
+2005/09/20, 160520, 27565
+2005/09/21, 160716, 27585
+2005/09/22, 160766, 27591
+2005/09/23, 161014, 27616
+2005/09/24, 161159, 27660
+2005/09/25, 161178, 27660
+2005/09/26, 161707, 27865
+2005/09/27, 161746, 27929
+2005/09/28, 161945, 27912
+2005/09/29, 161926, 27969
+2005/09/30, 161908, 28024
+2005/10/01, 161217, 28060
+2005/10/02, 161405, 28148
+2005/10/03, 161470, 28231
+2005/10/04, 161652, 28325
+2005/10/05, 161650, 28403
+2005/10/06, 150147, 27867
+2005/10/07, 150310, 27981
+2005/10/08, 150336, 28002
+2005/10/09, 150340, 28002
+2005/10/10, 152248, 29917
+2005/10/11, 152893, 30132
+2005/10/12, 153415, 30315
+2005/10/13, 153234, 30314
+2005/10/14, 154456, 30886
+2005/10/15, 155217, 31128
+2005/10/16, 155503, 31283
+2005/10/17, 155558, 31306
+2005/10/18, 155323, 31407
+2005/10/19, 155548, 31764
+2005/10/20, 155670, 31818
+2005/10/21, 156006, 31832
+2005/10/22, 156124, 31942
+2005/10/23, 156153, 31954
+2005/10/24, 156358, 31940
+2005/10/25, 156761, 31982
+2005/10/26, 156875, 32344
+2005/10/27, 151521, 32461
+2005/10/28, 151704, 32470
+2005/10/29, 151768, 32470
+2005/10/30, 151701, 32470
+2005/10/31, 151905, 32496
+2005/11/01, 151913, 32508
+2005/11/02, 151918, 32514
+2005/11/03, 151918, 32514
+2005/11/04, 151923, 32514
+2005/11/05, 152018, 32514
+2005/11/06, 152076, 32545
+2005/11/07, 152059, 32545
+2005/11/08, 152062, 32545
+2005/11/09, 152051, 32550
+2005/11/10, 151995, 32548
+2005/11/11, 152031, 32696
+2005/11/12, 152031, 32696
+2005/11/13, 152123, 32696
+2005/11/14, 152151, 32690
+2005/11/15, 152151, 32690
+2005/11/16, 152126, 32718
+2005/11/17, 152702, 32718
+2005/11/18, 152704, 32718
+2005/11/19, 152702, 32718
+2005/11/21, 152822, 32825
+2005/11/22, 152844, 32830
+2005/11/23, 152830, 32830
+2005/11/23, 152830, 32830
+2005/11/25, 152830, 32830
+2005/11/27, 152884, 32862
+2005/11/28, 153190, 33011
+2005/11/29, 153246, 33011
+2005/11/30, 153293, 33011
+2005/12/01, 153738, 33186
+2005/12/02, 153897, 33205
+2005/12/03, 153937, 33205
+2005/12/04, 154104, 33187
+2005/12/05, 154085, 33187
+2005/12/06, 154069, 33216
+2005/12/07, 154963, 33506
+2005/12/08, 156568, 33832
+2005/12/09, 156931, 34791
+2005/12/10, 157305, 34891
+2005/12/11, 157466, 35017
+2005/12/12, 157583, 35018
+2005/12/13, 158273, 35108
+2005/12/14, 158266, 35238
+2005/12/15, 158751, 35651
+2005/12/16, 158822, 35712
+2005/12/17, 158902, 35713
+2005/12/18, 159070, 35868
+2005/12/19, 159083, 36018
+2005/12/20, 159100, 36030
+2005/12/21, 159197, 36060
+2005/12/22, 159276, 36124
+2005/12/23, 159305, 36195
+2005/12/24, 159321, 36197
+2005/12/25, 159321, 36247
+2005/12/27, 159374, 36285
+2005/12/29, 159455, 36319
+2005/12/30, 159520, 36330
+2005/12/31, 159549, 36333
+2006/01/02, 159692, 36336
+2006/01/04, 159796, 36423
+2006/01/05, 159787, 36462
+2006/01/06, 159735, 36497
+2006/01/07, 159822, 36617
+2006/01/08, 159964, 36760
+2006/01/09, 159988, 36799
+2006/01/10, 160237, 37028
+2006/01/11, 160307, 37098
+2006/01/12, 160335, 37215
+2006/01/13, 160359, 37217
+2006/01/14, 160642, 37353
+2006/01/15, 160640, 37439
+2006/01/16, 160714, 37551
+2006/01/17, 160737, 37562
+2006/01/18, 160809, 37566
+2006/01/19, 161141, 37707
+2006/01/20, 161285, 37794
+2006/01/21, 161311, 37789
+2006/01/22, 161327, 37820
+2006/01/23, 162130, 38129
+2006/01/24, 162825, 38485
+2006/01/25, 163208, 38818
+2006/01/26, 164445, 39306
+2006/01/27, 165729, 39552
+2006/01/28, 165022, 39852
+2006/01/29, 165580, 40015
+2006/01/30, 165580, 40016
+2006/01/31, 165833, 40588
+2006/02/01, 165903, 40680
+2006/02/02, 165996, 40725
+2006/02/03, 166074, 40861
+2006/02/04, 166270, 40962
+2006/02/05, 166436, 41110
+2006/02/06, 166453, 41209
+2006/02/07, 166496, 41367
+2006/02/08, 167122, 41723
+2006/02/09, 167396, 41812
+2006/02/10, 167651, 41888
+2006/02/11, 167719, 41992
+2006/02/12, 167741, 41981
+2006/02/13, 167901, 42278
+2006/02/14, 168068, 42354
+2006/02/15, 168112, 42671
+2006/02/16, 168628, 42835
+2006/02/17, 168836, 43089
+2006/02/18, 168844, 43089
+2006/02/19, 168953, 43173
+2006/02/20, 169263, 43201
+2006/02/21, 169602, 43297
+2006/02/22, 169433, 43239
+2006/02/23, 169557, 43279
+2006/02/25, 169557, 43279
+2006/02/26, 169558, 43279
+2006/02/27, 169940, 43442
+2006/02/28, 169197, 43619
+2006/03/01, 169535, 44112
+2006/03/02, 169723, 44499
+2006/03/03, 169915, 44512
+2006/03/04, 169917, 44512
+2006/03/06, 170008, 44611
+2006/03/07, 170046, 44647
+2006/03/08, 170180, 44731
+2006/03/09, 170579, 44855
+2006/03/10, 170589, 44743
+2006/03/11, 170597, 44743
+2006/03/12, 170626, 44743
+2006/03/13, 170830, 44738
+2006/03/14, 170944, 44877
+2006/03/15, 170968, 44841
+2006/03/16, 171176, 44945
+2006/03/17, 171385, 45125
+2006/03/18, 171465, 45202
+2006/03/19, 171607, 45205
+2006/03/20, 171933, 45506
+2006/03/21, 172152, 45725
+2006/03/22, 172896, 45937
+2006/03/23, 173493, 46142
+2006/03/24, 174140, 46532
+2006/03/25, 174223, 46600
+2006/03/26, 174271, 46600
+2006/03/27, 174514, 46658
+2006/03/28, 174663, 46741
+2006/03/29, 174706, 46762
+2006/03/30, 174706, 46787
+2006/03/31, 174915, 46889
+2006/04/01, 175211, 46910
+2006/04/02, 175537, 47085
+2006/04/03, 175795, 47186
+2006/04/04, 176373, 47399
+2006/04/05, 178170, 47256
+2006/04/06, 177675, 47389
+2006/04/07, 178276, 47631
+2006/04/08, 178733, 47684
+2006/04/09, 186394, 48077
+2006/04/10, 186785, 48474
+2006/04/11, 187071, 48645
+2006/04/12, 187328, 48773
+2006/04/13, 187417, 48900
+2006/04/14, 187650, 48936
+2006/04/15, 187874, 49072
+2006/04/16, 188073, 49083
+2006/04/17, 188185, 49343
+2006/04/18, 188368, 49760
+2006/04/19, 188764, 50000
+2006/04/20, 189386, 50060
+2006/04/21, 189444, 50233
+2006/04/22, 189708, 50343
+2006/04/23, 190100, 50476
+2006/04/24, 190581, 50716
+2006/04/25, 191060, 50946
+2006/04/26, 191265, 51180
+2006/04/27, 191806, 51553
+2006/04/28, 192251, 51836
+2006/04/29, 192654, 52220
+2006/04/30, 192740, 52241
+2006/05/01, 192740, 52245
+2006/05/02, 192950, 52435
+2006/05/03, 193237, 52548
+2006/05/04, 193297, 52720
+2006/05/05, 193577, 53008
+2006/05/06, 194029, 53366
+2006/05/07, 194263, 53544
+2006/05/08, 194325, 53503
+2006/05/09, 194384, 53587
+2006/05/10, 194921, 53800
+2006/05/11, 195221, 54028
+2006/05/12, 195535, 54202
+2006/05/13, 196169, 54314
+2006/05/14, 195622, 54424
+2006/05/15, 195827, 54685
+2006/05/16, 196171, 54954
+2006/05/17, 197172, 55029
+2006/05/18, 197223, 54967
+2006/05/19, 197404, 55047
+2006/05/20, 198903, 55211
+2006/05/21, 199040, 55475
+2006/05/22, 199114, 55577
+2006/05/23, 199431, 55391
+2006/05/24, 203342, 55383
+2006/05/25, 203490, 55570
+2006/05/26, 203563, 55563
+2006/05/27, 203653, 55592
+2006/05/28, 203670, 55592
+2006/05/29, 204409, 57115
+2006/05/30, 235501, 57122
+2006/05/31, 235493, 57122
+2006/06/02, 235690, 57191
+2006/06/03, 236072, 57355
+2006/06/04, 236020, 58196
+2006/06/05, 236286, 58331
+2006/06/06, 236730, 58474
+2006/06/07, 237402, 58537
+2006/06/08, 237731, 58790
+2006/06/09, 236391, 56722
+2006/06/10, 236447, 56788
+2006/06/11, 236558, 56800
+2006/06/12, 237246, 57071
+2006/06/13, 236849, 57211
+2006/06/14, 236747, 57335
+2006/06/15, 237010, 57438
+2006/06/16, 237223, 57674
+2006/06/17, 237227, 57705
+2006/06/18, 237243, 57759
+2006/06/19, 237290, 58140
+2006/06/20, 237711, 58324
+2006/06/21, 236934, 58324
+2006/06/22, 237228, 58454
+2006/06/23, 237265, 58460
+2006/06/24, 237586, 58460
+2006/06/25, 237964, 58689
+2006/06/26, 238162, 58755
+2006/06/27, 238361, 58778
+2006/06/28, 238484, 58830
+2006/06/29, 238832, 58938
+2006/06/30, 238742, 58961
+2006/07/01, 238361, 58943
+2006/07/02, 238651, 59001
+2006/07/03, 238674, 59009
+2006/07/04, 238724, 59012
+2006/07/05, 238901, 59013
+2006/07/06, 238884, 59396
+2006/07/07, 239546, 59615
+2006/07/08, 241573, 60173
+2006/07/09, 242229, 60524
+2006/07/10, 242273, 60532
+2006/07/11, 242885, 60796
+2006/07/12, 243281, 61279
+2006/07/13, 243406, 61287
+2006/07/14, 243459, 61314
+2006/07/15, 243520, 61313
+2006/07/16, 243621, 61344
+2006/07/17, 243883, 61480
+2006-07-17, 243621, 61344
+2006-07-18, 243886, 61525
+2006-07-19, 244520, 61568
+2006-07-20, 244866, 61922
+2006-07-21, 244969, 61966
+2006-07-22, 245046, 62020
+2006-07-23, 245229, 62043
+2006-07-24, 245421, 62142
+2006-07-25, 245618, 62211
+2006-07-26, 245251, 62324
+2006-07-27, 245921, 62650
+2006-07-28, 246016, 62694
+2006-07-29, 249837, 62836
+2006-07-30, 249901, 62893
+2006-07-31, 249933, 62894
+2006-08-01, 250022, 62941
+2006-08-02, 250276, 63020
+2006-08-03, 248113, 62052
+2006-08-04, 248192, 62110
+2006-08-05, 249951, 62532
+2006-08-06, 250333, 62659
+2006-08-07, 250401, 62670
+2006-08-08, 252585, 63100
+2006-08-09, 252849, 63027
+2006-08-10, 253370, 63137
+2006-08-11, 253464, 63219
+2006-08-12, 253592, 63309
+2006-08-13, 253597, 63309
+2006-08-14, 253600, 63309
+2006-08-15, 253707, 63375
+2006-08-16, 254098, 63549
+2006-08-17, 254591, 63698
+2006-08-18, 254640, 63783
+2006-08-19, 254723, 63783
+2006-08-20, 254707, 63789
+2006-08-21, 254932, 64065
+2006-08-22, 254820, 63836
+2006-08-23, 255008, 63958
+2006-08-24, 255255, 64074
+2006-08-25, 255383, 64175
+2006-08-26, 255553, 64197
+2006-08-27, 255283, 64604
+2006-08-28, 255368, 64660
+2006-08-29, 255368, 64660
+2006-08-30, 256002, 64772
+2006-08-31, 255939, 64828
+2006-09-01, 256059, 64897
+2006-09-02, 256072, 64896
+2006-09-03, 256651, 65050
+2006-09-04, 256654, 65213
+2006-09-05, 256678, 65296
+2006-09-06, 256933, 65562
+2006-09-07, 257168, 65707
+2006-09-08, 257380, 65826
+2006-09-09, 257996, 66107
+2006-09-10, 258138, 66194
+2006-09-11, 258419, 66313
+2006-09-12, 258503, 66321
+2006-09-13, 258624, 66365
+2006-09-14, 258625, 66401
+2006-09-15, 258783, 66509
+2006-09-16, 258785, 66512
+2006-09-17, 258806, 66519
+2006-09-18, 258424, 66766
+2006-09-19, 258438, 66797
+2006-09-20, 258438, 66797
+2006-09-21, 258436, 66851
+2006-09-22, 258059, 67034
+2006-09-23, 258667, 67089
+2006-09-24, 258792, 67181
+2006-09-25, 258793, 67181
+2006-09-26, 258797, 67221
+2006-09-27, 258858, 67228
+2006-09-28, 259082, 67296
+2006-09-29, 258980, 67013
+2006-09-30, 258822, 67973
+2006-10-01, 258935, 68062
+2006-10-02, 259055, 68084
+2006-10-03, 259204, 68209
+2006-10-04, 296696, 68497
+2006-10-05, 298069, 68956
+2006-10-06, 298223, 69071
+2006-10-07, 298327, 69155
+2006-10-08, 298428, 69175
+2006-10-09, 298430, 69177
+2006-10-10, 297621, 69224
+2006-10-11, 296425, 68673
+2006-10-12, 294584, 68892
+2006-10-13, 294744, 68942
+2006-10-14, 295543, 68963
+2006-10-15, 295543, 68963
+2006-10-16, 295732, 68963
+2006-10-17, 295851, 69007
+2006-10-18, 296612, 69393
+2006-10-19, 296832, 69369
+2006-10-20, 297146, 69404
+2006-10-21, 297332, 69565
+2006-10-22, 298113, 69570
+2006-10-23, 298120, 69570
+2006-10-24, 298222, 69603
+2006-10-25, 298556, 69777
+2006-10-26, 298706, 69813
+2006-10-27, 298766, 70013
+2006-10-28, 298359, 69758
+2006-10-29, 298359, 69758
+2006-10-30, 298357, 69735
+2006-10-31, 299054, 69842
+2006-11-01, 300281, 69956
+2006-11-02, 300230, 69927
+2006-11-03, 300443, 70008
+2006-11-04, 300886, 70417
+2006-11-05, 301166, 70513
+2006-11-06, 301201, 70616
+2006-11-07, 300495, 69816
+2006-11-08, 300804, 70084
+2006-11-09, 300878, 70257
+2006-11-10, 301106, 70340
+2006-11-11, 301302, 70392
+2006-11-12, 301728, 70598
+2006-11-13, 314202, 72483
+2006-11-14, 314394, 72265
+2006-11-15, 314736, 72346
+2006-11-16, 315160, 72531
+2006-11-17, 315070, 72670
+2006-11-18, 315097, 72705
+2006-11-19, 315261, 72795
+2006-11-20, 315333, 72837
+2006-11-21, 315777, 72949
+2006-11-22, 316130, 73006
+2006-11-23, 316162, 73035
+2006-11-24, 316338, 73248
+2006-11-25, 316378, 73355
+2006-11-26, 316415, 73366
+2006-11-27, 316532, 73366
+2006-11-28, 318388, 73700
+2006-11-29, 318515, 73704
+2006-11-30, 318645, 73752
+2006-12-01, 318816, 73833
+2006-12-02, 318840, 73899
+2006-12-03, 318845, 73899
+2006-12-04, 318930, 73941
+2006-12-05, 319614, 73996
+2006-12-06, 319623, 74108
+2006-12-07, 319828, 74140
+2006-12-08, 320019, 74173
+2006-12-09, 320215, 74192
+2006-12-10, 320927, 74430
+2006-12-11, 320937, 74505
+2006-12-12, 321194, 74652
+2006-12-13, 321238, 74723
+2006-12-14, 321114, 74849
+2006-12-15, 321900, 75884
+2006-12-16, 322135, 76292
+2006-12-17, 322261, 76341
+2006-12-18, 322384, 76348
+2006-12-19, 322382, 76315
+2006-12-20, 322718, 76471
+2006-12-21, 322961, 76259
+2006-12-22, 323044, 76354
+2006-12-23, 323068, 76392
+2006-12-24, 323117, 76424
+2006-12-25, 323123, 76420
+2006-12-26, 323108, 76427
+2006-12-27, 321740, 76431
+2006-12-28, 321872, 76671
+2006-12-29, 322115, 76909
+2006-12-30, 322246, 76916
+2006-12-31, 322288, 77018
+2007-01-01, 322277, 77019
+2007-01-02, 322403, 77007
+2007-01-03, 322478, 77390
+2007-01-04, 322672, 77448
+2007-01-05, 322736, 77448
+2007-01-06, 322746, 77448
+2007-01-07, 322751, 77449
+2007-01-08, 322751, 77449
+2007-01-09, 323243, 77508
+2007-01-10, 323870, 77955
+2007-01-11, 324115, 78315
+2007-01-12, 324587, 78684
+2007-01-13, 325435, 79072
+2007-01-14, 325840, 79048
+2007-01-15, 327282, 79265
+2007-01-16, 327409, 79308
+2007-01-17, 327661, 79392
+2007-01-18, 327683, 79412
+2007-01-19, 327710, 79413
+2007-01-20, 327918, 79523
+2007-01-21, 328238, 79543
+2007-01-22, 328265, 79543
+2007-01-23, 328471, 79704
+2007-01-24, 328920, 79596
+2007-01-25, 329021, 79667
+2007-01-26, 329599, 79832
+2007-01-27, 329913, 80096
+2007-01-28, 329973, 80135
+2007-01-29, 330044, 80152
+2007-01-30, 330947, 80359
+2007-01-31, 331201, 80459
+2007-02-01, 331558, 80704
+2007-02-02, 331301, 80417
+2007-02-03, 331338, 80446
+2007-02-04, 331374, 80467
+2007-02-05, 331386, 80467
+2007-02-06, 332398, 80586
+2007-02-07, 332416, 80605
+2007-02-08, 332417, 80637
+2007-02-09, 332470, 80667
+2007-02-10, 332813, 80738
+2007-02-11, 332829, 80737
+2007-02-12, 333328, 80848
+2007-02-13, 333567, 81010
+2007-02-14, 333735, 81254
+2007-02-15, 334047, 81257
+2007-02-16, 333963, 81385
+2007-02-17, 335704, 81385
+2007-02-18, 335734, 81378

Modified: pypy/branch/ast-experiments/pypy/doc/statistic/number_files.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/statistic/number_files.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/statistic/number_files.txt	Mon Feb 26 08:45:45 2007
@@ -1,570 +1,1253 @@
 Number of files in the pypy subtree
 date,  number of files,  number of testfiles
-2006/07/17, 1044, 408
-2006/07/16, 1043, 408
-2006/07/15, 1042, 407
-2006/07/14, 1041, 407
-2006/07/13, 1040, 407
-2006/07/12, 1039, 407
-2006/07/11, 1036, 406
-2006/07/10, 1038, 403
-2006/07/09, 1038, 403
-2006/07/08, 1036, 402
-2006/07/07, 1031, 393
-2006/07/06, 1020, 386
-2006/07/05, 1016, 384
-2006/07/04, 1015, 384
-2006/07/03, 1015, 384
-2006/07/02, 1015, 384
-2006/07/01, 1012, 384
-2006/06/30, 1012, 384
-2006/06/29, 1019, 384
-2006/06/28, 1018, 381
-2006/06/27, 1017, 381
-2006/06/26, 1017, 381
-2006/06/25, 1016, 380
-2006/06/24, 1013, 378
-2006/06/23, 1011, 378
-2006/06/22, 1011, 378
-2006/06/21, 1003, 377
-2006/06/20, 1007, 377
-2006/06/19, 1007, 377
-2006/06/18, 1007, 377
-2006/06/17, 1007, 377
-2006/06/16, 1007, 377
-2006/06/15, 1006, 375
-2006/06/14, 1005, 371
-2006/06/13, 1004, 371
-2006/06/12, 1010, 371
-2006/06/11, 1005, 369
-2006/06/10, 1004, 369
-2006/06/09, 1004, 369
-2006/06/08, 1021, 386
-2006/06/07, 1019, 385
-2006/06/06, 1010, 384
-2006/06/05, 1003, 381
-2006/06/04, 998, 379
-2006/06/03, 990, 374
-2006/06/02, 988, 374
-2006/05/31, 982, 372
-2006/05/30, 982, 372
-2006/05/29, 981, 372
-2006/05/28, 977, 362
-2006/05/27, 977, 362
-2006/05/26, 976, 362
-2006/05/25, 976, 361
-2006/05/24, 976, 361
-2006/05/23, 975, 359
-2006/05/22, 974, 359
-2006/05/21, 974, 359
-2006/05/20, 972, 358
-2006/05/19, 961, 357
-2006/05/18, 960, 356
-2006/05/17, 962, 357
-2006/05/16, 952, 357
-2006/05/15, 952, 357
-2006/05/14, 952, 356
-2006/05/13, 957, 356
-2006/05/12, 957, 356
-2006/05/11, 955, 355
-2006/05/10, 955, 355
-2006/05/09, 950, 354
-2006/05/08, 949, 353
-2006/05/07, 950, 353
-2006/05/06, 950, 353
-2006/05/05, 949, 351
-2006/05/04, 948, 351
-2006/05/03, 949, 350
-2006/05/02, 949, 349
-2006/05/01, 948, 347
-2006/04/30, 948, 347
-2006/04/29, 946, 347
-2006/04/28, 945, 345
-2006/04/27, 943, 342
-2006/04/26, 943, 339
-2006/04/25, 940, 338
-2006/04/24, 935, 336
-2006/04/23, 930, 333
-2006/04/22, 927, 328
-2006/04/21, 924, 326
-2006/04/20, 919, 325
-2006/04/19, 910, 323
-2006/04/18, 900, 321
-2006/04/17, 900, 320
-2006/04/16, 897, 319
-2006/04/15, 896, 318
-2006/04/14, 887, 316
-2006/04/13, 884, 316
-2006/04/12, 880, 315
-2006/04/11, 878, 313
-2006/04/10, 878, 312
-2006/04/09, 875, 309
-2006/04/08, 854, 308
-2006/04/07, 852, 308
-2006/04/06, 848, 305
-2006/04/05, 853, 305
-2006/04/04, 846, 305
-2006/04/03, 842, 305
-2006/04/02, 840, 304
-2006/04/01, 829, 302
-2006/03/31, 821, 301
-2006/03/30, 820, 300
-2006/03/29, 820, 300
-2006/03/28, 818, 300
-2006/03/27, 815, 299
-2006/03/26, 814, 299
-2006/03/25, 813, 299
-2006/03/24, 813, 297
-2006/03/23, 809, 295
-2006/03/22, 806, 294
-2006/03/21, 792, 292
-2006/03/20, 792, 292
-2006/03/19, 788, 291
-2006/03/18, 786, 291
-2006/03/17, 786, 291
-2006/03/16, 785, 290
-2006/03/15, 784, 290
-2006/03/14, 784, 289
-2006/03/13, 784, 289
-2006/03/12, 781, 288
-2006/03/11, 781, 288
-2006/03/10, 781, 288
-2006/03/09, 781, 288
-2006/03/08, 778, 287
-2006/03/07, 777, 287
-2006/03/06, 777, 287
-2006/03/04, 776, 287
-2006/03/03, 776, 287
-2006/03/02, 776, 287
-2006/03/01, 775, 287
-2006/02/28, 766, 284
-2006/02/27, 764, 283
-2006/02/26, 762, 282
-2006/02/25, 762, 282
-2006/02/23, 762, 282
-2006/02/22, 761, 281
-2006/02/21, 761, 281
-2006/02/20, 760, 279
-2006/02/19, 760, 279
-2006/02/18, 759, 279
-2006/02/17, 759, 279
-2006/02/16, 759, 278
-2006/02/15, 756, 276
-2006/02/14, 756, 275
-2006/02/13, 755, 275
-2006/02/12, 755, 275
-2006/02/11, 754, 275
-2006/02/10, 754, 275
-2006/02/09, 754, 275
-2006/02/08, 753, 275
-2006/02/07, 749, 274
-2006/02/06, 749, 271
-2006/02/05, 749, 270
-2006/02/04, 749, 270
-2006/02/03, 747, 269
-2006/02/02, 747, 268
-2006/02/01, 746, 268
-2006/01/31, 746, 268
-2006/01/30, 745, 265
-2006/01/29, 745, 265
-2006/01/28, 744, 265
-2006/01/27, 746, 266
-2006/01/26, 735, 264
-2006/01/25, 731, 261
-2006/01/24, 725, 257
-2006/01/23, 721, 255
-2006/01/22, 715, 253
-2006/01/21, 715, 253
-2006/01/20, 715, 253
-2006/01/19, 714, 252
-2006/01/18, 713, 251
-2006/01/17, 713, 251
-2006/01/16, 713, 251
-2006/01/15, 713, 251
-2006/01/14, 713, 250
-2006/01/13, 712, 249
-2006/01/12, 712, 249
-2006/01/11, 712, 249
-2006/01/10, 712, 249
-2006/01/09, 711, 248
-2006/01/08, 711, 248
-2006/01/07, 711, 248
-2006/01/06, 711, 247
-2006/01/05, 710, 247
-2006/01/04, 710, 247
-2006/01/02, 710, 247
-2005/12/31, 708, 247
-2005/12/30, 708, 247
-2005/12/29, 706, 247
-2005/12/27, 704, 246
-2005/12/25, 704, 246
-2005/12/24, 704, 246
-2005/12/23, 704, 246
-2005/12/22, 704, 245
-2005/12/21, 704, 245
-2005/12/20, 704, 243
-2005/12/19, 704, 243
-2005/12/18, 704, 243
-2005/12/17, 704, 243
-2005/12/16, 703, 243
-2005/12/15, 703, 243
-2005/12/14, 700, 240
-2005/12/13, 700, 239
-2005/12/12, 699, 239
-2005/12/11, 699, 239
-2005/12/10, 698, 240
-2005/12/09, 698, 240
-2005/12/08, 694, 237
-2005/12/07, 694, 235
-2005/12/06, 690, 233
-2005/12/05, 690, 233
-2005/12/04, 690, 233
-2005/12/03, 690, 233
-2005/12/02, 690, 233
-2005/12/01, 689, 232
-2005/11/30, 687, 233
-2005/11/29, 686, 233
-2005/11/28, 685, 233
-2005/11/27, 683, 232
-2005/11/25, 683, 232
-2005/11/23, 683, 232
-2005/11/22, 683, 232
-2005/11/21, 683, 232
-2005/11/19, 683, 232
-2005/11/18, 683, 232
-2005/11/17, 683, 232
-2005/11/16, 682, 232
-2005/11/15, 683, 232
-2005/11/14, 683, 232
-2005/11/13, 683, 232
-2005/11/12, 683, 232
-2005/11/11, 683, 232
-2005/11/10, 683, 231
-2005/11/09, 681, 231
-2005/11/08, 681, 231
-2005/11/07, 681, 231
-2005/11/06, 681, 231
-2005/11/05, 681, 231
-2005/11/04, 681, 231
-2005/11/03, 681, 231
-2005/11/02, 681, 231
-2005/11/01, 681, 231
-2005/10/31, 681, 231
-2005/10/30, 681, 231
-2005/10/29, 684, 231
-2005/10/28, 684, 231
-2005/10/27, 684, 230
-2005/10/26, 697, 230
-2005/10/25, 697, 229
-2005/10/24, 698, 229
-2005/10/23, 698, 230
-2005/10/22, 698, 230
-2005/10/21, 698, 230
-2005/10/20, 696, 230
-2005/10/19, 696, 230
-2005/10/18, 695, 229
-2005/10/17, 693, 228
-2005/10/16, 693, 228
-2005/10/15, 688, 226
-2005/10/14, 681, 224
-2005/10/13, 662, 217
-2005/10/12, 663, 217
-2005/10/11, 657, 216
-2005/10/10, 652, 216
-2005/10/09, 629, 201
-2005/10/08, 629, 201
-2005/10/07, 629, 201
-2005/10/06, 629, 200
-2005/10/05, 648, 202
-2005/10/04, 650, 202
-2005/10/03, 648, 201
-2005/10/02, 647, 201
-2005/10/01, 643, 199
-2005/09/30, 644, 200
-2005/09/29, 645, 199
-2005/09/28, 645, 199
-2005/09/27, 645, 200
-2005/09/26, 641, 199
-2005/09/25, 638, 195
-2005/09/24, 638, 195
-2005/09/23, 638, 196
-2005/09/22, 637, 196
-2005/09/21, 636, 196
-2005/09/20, 635, 196
-2005/09/19, 635, 196
-2005/09/18, 632, 196
-2005/09/17, 631, 196
-2005/09/16, 631, 196
-2005/09/15, 631, 196
-2005/09/14, 629, 196
-2005/09/13, 629, 196
-2005/09/12, 623, 192
-2005/09/11, 623, 192
-2005/09/10, 623, 192
-2005/09/09, 625, 192
-2005/09/08, 622, 191
-2005/09/07, 647, 191
-2005/09/06, 646, 191
-2005/09/05, 631, 191
-2005/09/04, 630, 191
-2005/09/03, 630, 191
-2005/09/02, 630, 191
-2005/09/01, 630, 190
-2005/08/31, 630, 190
-2005/08/30, 630, 190
-2005/08/29, 630, 190
-2005/08/28, 630, 190
-2005/08/27, 630, 190
-2005/08/26, 626, 188
-2005/08/25, 625, 187
-2005/08/24, 633, 187
-2005/08/23, 630, 185
-2005/08/22, 626, 182
-2005/08/20, 623, 181
-2005/08/19, 623, 181
-2005/08/18, 608, 176
-2005/08/17, 607, 176
-2005/08/16, 607, 176
-2005/08/15, 606, 175
-2005/08/14, 605, 175
-2005/08/13, 605, 175
-2005/08/12, 605, 175
-2005/08/11, 605, 175
-2005/08/10, 601, 173
-2005/08/09, 596, 171
-2005/08/08, 594, 171
-2005/08/07, 591, 169
-2005/08/06, 590, 169
-2005/08/05, 589, 168
-2005/08/04, 588, 167
-2005/08/03, 583, 167
-2005/08/02, 574, 165
-2005/07/31, 573, 164
-2005/07/30, 571, 161
-2005/07/29, 565, 157
-2005/07/28, 557, 156
-2005/07/27, 544, 155
-2005/07/26, 541, 154
-2005/07/25, 534, 154
-2005/07/24, 527, 149
-2005/07/23, 527, 149
-2005/07/22, 527, 149
-2005/07/21, 527, 148
-2005/07/20, 526, 144
-2005/07/19, 523, 144
-2005/07/18, 541, 149
-2005/07/15, 538, 148
-2005/07/14, 537, 148
-2005/07/13, 536, 148
-2005/07/12, 536, 148
-2005/07/11, 535, 148
-2005/07/10, 535, 148
-2005/07/09, 531, 147
-2005/07/07, 531, 147
-2005/07/06, 528, 143
-2005/07/05, 524, 141
-2005/07/04, 507, 141
-2005/07/03, 507, 141
-2005/07/02, 472, 138
-2005/07/01, 472, 137
-2005/06/30, 471, 137
-2005/06/29, 471, 137
-2005/06/28, 470, 137
-2005/06/26, 470, 137
-2005/06/25, 470, 137
-2005/06/24, 469, 136
-2005/06/23, 473, 135
-2005/06/22, 472, 134
-2005/06/21, 472, 134
-2005/06/20, 470, 134
-2005/06/19, 468, 133
-2005/06/18, 466, 131
-2005/06/17, 455, 130
-2005/06/16, 455, 130
-2005/06/15, 456, 130
-2005/06/14, 457, 130
-2005/06/13, 474, 127
-2005/06/12, 474, 126
-2005/06/11, 473, 126
-2005/06/10, 473, 125
-2005/06/09, 472, 124
-2005/06/08, 471, 125
-2005/06/07, 469, 124
-2005/06/06, 469, 124
-2005/06/05, 462, 122
-2005/06/04, 459, 123
-2005/06/03, 458, 122
-2005/06/02, 458, 122
-2005/06/01, 457, 121
-2005/05/31, 457, 120
-2005/05/30, 454, 118
-2005/05/29, 453, 114
-2005/05/28, 452, 114
-2005/05/27, 452, 114
-2005/05/26, 448, 114
-2005/05/25, 448, 114
-2005/05/24, 446, 114
-2005/05/23, 440, 113
-2005/05/22, 434, 113
-2005/05/21, 436, 113
-2005/05/20, 425, 112
-2005/05/19, 425, 112
-2005/05/18, 426, 112
-2005/05/17, 385, 115
-2005/05/16, 385, 115
-2005/05/15, 386, 115
-2005/05/14, 375, 114
-2005/05/13, 375, 114
-2005/05/12, 374, 113
-2005/05/11, 372, 111
-2005/05/10, 371, 110
-2005/05/09, 368, 108
-2005/05/08, 367, 108
-2005/05/07, 367, 107
-2005/05/06, 367, 107
-2005/05/05, 367, 107
-2005/05/04, 366, 106
-2005/05/03, 366, 106
-2005/05/02, 364, 105
-2005/05/01, 357, 104
-2005/04/30, 368, 113
-2005/04/29, 368, 112
-2005/04/28, 365, 110
-2005/04/27, 365, 110
-2005/04/26, 363, 110
-2005/04/25, 342, 129
-2005/04/24, 327, 104
-2005/04/23, 325, 104
-2005/04/22, 325, 104
-2005/04/21, 325, 104
-2005/04/20, 325, 103
-2005/04/19, 326, 101
-2005/04/18, 326, 101
-2005/04/17, 326, 101
-2005/04/16, 323, 100
-2005/04/15, 322, 100
-2005/04/14, 321, 100
-2005/04/13, 317, 97
-2005/04/12, 316, 97
-2005/04/11, 313, 96
-2005/04/10, 311, 97
-2005/04/09, 310, 97
-2005/04/08, 310, 97
-2005/04/07, 310, 97
-2005/04/06, 310, 97
-2005/04/05, 310, 97
-2005/04/04, 310, 97
-2005/04/03, 309, 97
-2005/04/02, 305, 97
-2005/04/01, 297, 97
-2005/03/31, 291, 97
-2005/03/30, 290, 97
-2005/03/29, 290, 97
-2005/03/28, 289, 96
-2005/03/27, 289, 96
-2005/03/24, 289, 96
-2005/03/23, 289, 96
-2005/03/22, 288, 97
-2005/03/21, 276, 95
-2005/03/20, 272, 94
-2005/03/19, 267, 90
-2005/03/17, 266, 90
-2005/03/15, 265, 90
-2005/03/14, 265, 90
-2005/03/13, 265, 90
-2005/03/12, 265, 90
-2005/03/11, 265, 90
-2005/03/10, 265, 90
-2005/03/06, 264, 90
-2005/03/05, 264, 90
-2005/03/04, 264, 90
-2005/03/03, 264, 90
-2005/03/02, 264, 90
-2005/03/01, 263, 90
-2005/02/28, 263, 90
-2005/02/27, 262, 90
-2005/02/26, 262, 90
-2005/02/25, 262, 90
-2005/02/24, 261, 89
-2005/02/23, 259, 89
-2005/02/22, 259, 89
-2005/02/21, 259, 88
-2005/02/19, 259, 88
-2005/02/18, 244, 88
-2005/02/17, 244, 87
-2005/02/16, 244, 87
-2005/02/15, 244, 87
-2005/02/14, 243, 87
-2005/02/13, 243, 87
-2005/02/13, 243, 87
-2005/02/13, 243, 87
-2005/02/11, 242, 87
-2005/02/10, 242, 86
-2005/02/09, 240, 85
-2005/02/08, 240, 85
-2005/02/07, 240, 85
-2005/02/06, 239, 85
-2005/02/05, 231, 84
-2005/02/04, 231, 84
-2005/02/03, 232, 83
-2005/02/02, 232, 83
-2005/02/01, 231, 82
-2005/01/31, 228, 82
-2005/01/30, 228, 82
-2005/01/29, 228, 82
-2005/01/28, 232, 80
-2005/01/27, 211, 79
-2005/01/26, 225, 80
-2005/01/25, 225, 80
-2005/01/24, 224, 78
-2005/01/23, 224, 78
-2005/01/22, 224, 78
-2005/01/20, 224, 78
-2005/01/19, 224, 78
-2005/01/18, 224, 77
-2005/01/17, 224, 77
-2005/01/16, 224, 77
-2005/01/15, 224, 77
-2005/01/14, 224, 77
-2005/01/13, 224, 77
-2005/01/12, 224, 77
-2005/01/11, 218, 76
-2005/01/10, 218, 76
-2005/01/09, 218, 76
-2005/01/08, 218, 76
-2005/01/03, 218, 76
-2005/01/02, 218, 76
-2005/01/01, 218, 76
-2004/12/30, 218, 76
-2004/12/27, 218, 76
-2004/12/24, 218, 76
-2004/12/22, 218, 75
-2004/12/20, 218, 75
-2004/12/19, 218, 75
-2004/12/18, 217, 75
-2004/12/17, 217, 75
-2004/12/16, 217, 74
-2004/12/13, 216, 74
-2004/12/10, 216, 74
-2004/12/09, 216, 74
-2004/12/08, 216, 74
-2004/12/07, 216, 74
-2004/12/06, 216, 73
-2004/12/04, 216, 73
-2004/11/30, 214, 73
-2004/11/29, 213, 73
-2004/11/28, 213, 72
-2004/11/27, 213, 72
-2004/11/25, 213, 72
-2004/11/24, 213, 72
-2004/11/23, 211, 72
-2004/11/22, 210, 71
-2004/11/21, 210, 71
-2004/11/20, 210, 71
-2004/11/19, 208, 69
-2004/11/18, 208, 69
-2004/11/17, 204, 67
-2004/11/16, 201, 66
-2004/11/15, 203, 67
+2003-02-19, 8, 0
+2003-02-20, 10, 1
+2003-02-21, 29, 5
+2003-02-22, 30, 4
+2003-02-23, 49, 12
+2003-02-24, 49, 12
+2003-02-25, 48, 12
+2003-02-26, 48, 12
+2003-02-27, 48, 12
+2003-02-28, 48, 12
+2003-03-01, 48, 12
+2003-03-03, 48, 13
+2003-03-04, 48, 13
+2003-03-18, 48, 13
+2003-04-06, 48, 13
+2003-04-11, 48, 13
+2003-04-18, 48, 14
+2003-04-19, 48, 15
+2003-05-22, 48, 15
+2003-05-25, 48, 15
+2003-05-26, 52, 19
+2003-05-27, 59, 26
+2003-05-28, 70, 27
+2003-05-29, 71, 26
+2003-05-30, 75, 37
+2003-05-31, 87, 37
+2003-06-01, 92, 37
+2003-06-02, 92, 37
+2003-06-05, 92, 37
+2003-06-06, 93, 37
+2003-06-07, 93, 37
+2003-06-08, 92, 37
+2003-06-09, 92, 37
+2003-06-13, 92, 37
+2003-06-14, 93, 37
+2003-06-15, 93, 37
+2003-06-16, 94, 37
+2003-06-17, 94, 37
+2003-06-18, 94, 37
+2003-06-19, 92, 37
+2003-06-20, 92, 37
+2003-06-21, 92, 37
+2003-06-22, 98, 40
+2003-06-23, 102, 42
+2003-06-24, 103, 43
+2003-06-28, 104, 43
+2003-06-29, 104, 43
+2003-06-30, 104, 43
+2003-07-01, 104, 43
+2003-07-02, 104, 43
+2003-07-03, 104, 43
+2003-07-04, 104, 43
+2003-07-06, 104, 43
+2003-07-07, 104, 43
+2003-07-08, 106, 43
+2003-07-10, 106, 43
+2003-07-12, 106, 43
+2003-07-13, 106, 43
+2003-07-14, 106, 43
+2003-07-15, 106, 43
+2003-07-16, 106, 43
+2003-07-17, 106, 43
+2003-07-18, 106, 43
+2003-07-19, 106, 43
+2003-07-24, 106, 43
+2003-07-26, 106, 43
+2003-07-27, 106, 43
+2003-07-28, 106, 43
+2003-07-29, 106, 43
+2003-07-30, 106, 43
+2003-07-31, 106, 43
+2003-08-01, 106, 43
+2003-08-02, 106, 43
+2003-08-06, 106, 43
+2003-08-07, 106, 43
+2003-08-09, 106, 43
+2003-08-10, 106, 43
+2003-08-17, 106, 43
+2003-08-24, 106, 43
+2003-08-25, 106, 43
+2003-09-02, 106, 43
+2003-09-07, 106, 43
+2003-09-08, 106, 43
+2003-09-09, 106, 43
+2003-09-10, 106, 43
+2003-09-12, 106, 43
+2003-09-13, 106, 43
+2003-09-14, 106, 43
+2003-09-15, 106, 43
+2003-09-16, 106, 43
+2003-09-17, 106, 43
+2003-09-18, 108, 42
+2003-09-19, 108, 42
+2003-09-20, 108, 42
+2003-09-21, 108, 42
+2003-09-22, 108, 42
+2003-09-23, 108, 46
+2003-09-25, 108, 46
+2003-09-26, 108, 46
+2003-09-28, 108, 46
+2003-09-29, 108, 46
+2003-09-30, 118, 48
+2003-10-01, 121, 49
+2003-10-02, 124, 53
+2003-10-03, 124, 53
+2003-10-04, 124, 53
+2003-10-05, 118, 52
+2003-10-06, 118, 52
+2003-10-07, 118, 52
+2003-10-08, 118, 52
+2003-10-09, 118, 52
+2003-10-10, 122, 53
+2003-10-11, 123, 54
+2003-10-12, 123, 54
+2003-10-13, 123, 54
+2003-10-14, 123, 54
+2003-10-15, 123, 54
+2003-10-16, 124, 54
+2003-10-17, 125, 54
+2003-10-18, 126, 54
+2003-10-20, 126, 54
+2003-10-21, 126, 54
+2003-10-23, 126, 54
+2003-10-24, 127, 54
+2003-10-25, 127, 54
+2003-10-26, 130, 54
+2003-10-27, 131, 53
+2003-10-28, 131, 53
+2003-10-29, 131, 53
+2003-10-30, 131, 53
+2003-10-31, 131, 53
+2003-11-03, 130, 53
+2003-11-04, 130, 53
+2003-11-05, 130, 53
+2003-11-10, 130, 53
+2003-11-11, 131, 54
+2003-11-13, 131, 54
+2003-11-14, 131, 54
+2003-11-17, 131, 54
+2003-11-18, 131, 55
+2003-11-19, 131, 54
+2003-11-20, 131, 54
+2003-11-21, 131, 54
+2003-11-22, 131, 54
+2003-11-24, 130, 55
+2003-11-25, 130, 55
+2003-11-26, 129, 55
+2003-11-27, 133, 55
+2003-11-28, 133, 55
+2003-11-29, 133, 55
+2003-11-30, 140, 55
+2003-12-01, 140, 55
+2003-12-02, 140, 55
+2003-12-03, 140, 55
+2003-12-04, 140, 55
+2003-12-08, 140, 55
+2003-12-09, 140, 55
+2003-12-10, 140, 55
+2003-12-11, 140, 55
+2003-12-12, 140, 55
+2003-12-13, 140, 55
+2003-12-15, 140, 55
+2003-12-16, 145, 55
+2003-12-17, 147, 56
+2003-12-18, 149, 57
+2003-12-19, 156, 57
+2003-12-20, 159, 58
+2003-12-21, 161, 58
+2003-12-22, 161, 58
+2003-12-23, 161, 58
+2003-12-24, 162, 58
+2003-12-27, 162, 58
+2003-12-28, 162, 58
+2003-12-29, 162, 58
+2003-12-31, 162, 58
+2004-01-01, 165, 59
+2004-01-02, 165, 59
+2004-01-05, 165, 59
+2004-01-06, 160, 59
+2004-01-07, 160, 59
+2004-01-08, 160, 59
+2004-01-09, 161, 59
+2004-01-10, 161, 59
+2004-01-11, 161, 59
+2004-01-12, 161, 59
+2004-01-13, 161, 59
+2004-01-14, 161, 59
+2004-01-15, 161, 59
+2004-01-16, 161, 59
+2004-01-17, 161, 59
+2004-01-18, 161, 59
+2004-01-19, 161, 59
+2004-01-20, 161, 59
+2004-01-21, 161, 59
+2004-01-22, 161, 59
+2004-01-23, 161, 59
+2004-01-26, 161, 59
+2004-01-27, 161, 59
+2004-01-28, 161, 59
+2004-01-29, 161, 59
+2004-01-30, 161, 59
+2004-02-02, 161, 59
+2004-02-03, 161, 59
+2004-02-04, 161, 59
+2004-02-05, 161, 59
+2004-02-07, 161, 59
+2004-02-08, 161, 59
+2004-02-09, 161, 59
+2004-02-10, 161, 59
+2004-02-11, 161, 59
+2004-02-12, 161, 59
+2004-02-13, 161, 59
+2004-02-14, 161, 59
+2004-02-15, 161, 59
+2004-02-16, 161, 59
+2004-02-19, 161, 59
+2004-02-20, 161, 59
+2004-02-21, 161, 59
+2004-02-23, 161, 59
+2004-02-24, 161, 59
+2004-02-25, 161, 59
+2004-02-26, 161, 59
+2004-02-27, 161, 59
+2004-02-28, 161, 59
+2004-02-29, 161, 59
+2004-03-01, 161, 59
+2004-03-02, 161, 59
+2004-03-03, 161, 59
+2004-03-04, 161, 59
+2004-03-05, 161, 59
+2004-03-06, 161, 59
+2004-03-07, 161, 59
+2004-03-08, 161, 59
+2004-03-09, 161, 59
+2004-03-10, 161, 59
+2004-03-11, 161, 59
+2004-03-12, 161, 59
+2004-03-13, 161, 59
+2004-03-14, 161, 59
+2004-03-16, 161, 59
+2004-03-17, 161, 59
+2004-03-18, 161, 59
+2004-03-19, 161, 59
+2004-03-21, 161, 59
+2004-03-22, 161, 59
+2004-03-23, 161, 59
+2004-03-24, 162, 59
+2004-03-25, 162, 59
+2004-03-26, 162, 59
+2004-03-28, 162, 59
+2004-03-29, 161, 59
+2004-03-30, 161, 59
+2004-03-31, 161, 59
+2004-04-01, 161, 59
+2004-04-02, 161, 59
+2004-04-03, 161, 59
+2004-04-04, 161, 59
+2004-04-05, 161, 59
+2004-04-06, 161, 59
+2004-04-07, 161, 59
+2004-04-08, 161, 59
+2004-04-09, 161, 59
+2004-04-10, 161, 59
+2004-04-11, 161, 59
+2004-04-13, 161, 59
+2004-04-14, 161, 59
+2004-04-15, 161, 59
+2004-04-16, 161, 59
+2004-04-17, 161, 59
+2004-04-18, 161, 59
+2004-04-19, 161, 59
+2004-04-20, 161, 59
+2004-04-21, 161, 59
+2004-04-22, 161, 59
+2004-04-23, 161, 59
+2004-04-24, 161, 59
+2004-04-25, 161, 59
+2004-04-26, 161, 59
+2004-04-27, 161, 59
+2004-04-28, 161, 59
+2004-04-29, 161, 59
+2004-04-30, 161, 59
+2004-05-01, 161, 59
+2004-05-02, 161, 59
+2004-05-03, 161, 59
+2004-05-04, 161, 59
+2004-05-05, 161, 59
+2004-05-06, 161, 59
+2004-05-07, 164, 59
+2004-05-08, 165, 59
+2004-05-09, 165, 59
+2004-05-10, 165, 59
+2004-05-11, 165, 59
+2004-05-12, 167, 59
+2004-05-13, 167, 59
+2004-05-14, 167, 59
+2004-05-15, 167, 59
+2004-05-16, 167, 59
+2004-05-17, 167, 59
+2004-05-18, 167, 59
+2004-05-19, 167, 59
+2004-05-20, 167, 59
+2004-05-21, 167, 59
+2004-05-22, 167, 59
+2004-05-23, 167, 59
+2004-05-24, 167, 59
+2004-05-25, 167, 59
+2004-05-26, 167, 59
+2004-05-27, 167, 59
+2004-05-28, 168, 59
+2004-05-29, 168, 59
+2004-05-30, 168, 59
+2004-05-31, 168, 59
+2004-06-01, 176, 61
+2004-06-02, 188, 63
+2004-06-03, 188, 63
+2004-06-04, 188, 63
+2004-06-05, 190, 63
+2004-06-06, 190, 63
+2004-06-07, 195, 64
+2004-06-08, 195, 64
+2004-06-09, 195, 64
+2004-06-10, 195, 64
+2004-06-11, 198, 64
+2004-06-12, 198, 64
+2004-06-13, 199, 64
+2004-06-15, 199, 64
+2004-06-16, 184, 65
+2004-06-17, 185, 64
+2004-06-18, 185, 64
+2004-06-19, 185, 64
+2004-06-20, 185, 64
+2004-06-21, 185, 64
+2004-06-22, 186, 64
+2004-06-23, 186, 64
+2004-06-24, 186, 64
+2004-06-25, 186, 64
+2004-06-26, 187, 64
+2004-06-27, 188, 65
+2004-06-28, 195, 67
+2004-06-29, 195, 67
+2004-06-30, 195, 67
+2004-07-01, 195, 67
+2004-07-02, 196, 67
+2004-07-03, 195, 67
+2004-07-04, 194, 67
+2004-07-05, 194, 67
+2004-07-06, 195, 69
+2004-07-07, 195, 69
+2004-07-08, 195, 69
+2004-07-09, 195, 69
+2004-07-10, 195, 69
+2004-07-11, 195, 69
+2004-07-12, 198, 69
+2004-07-13, 198, 69
+2004-07-14, 198, 69
+2004-07-15, 198, 69
+2004-07-16, 198, 68
+2004-07-17, 192, 66
+2004-07-21, 192, 66
+2004-07-22, 192, 66
+2004-07-23, 192, 66
+2004-07-24, 194, 66
+2004-07-25, 195, 66
+2004-07-26, 195, 66
+2004-07-27, 195, 66
+2004-07-28, 197, 67
+2004-07-29, 197, 67
+2004-07-30, 197, 67
+2004-07-31, 197, 67
+2004-08-01, 197, 67
+2004-08-02, 197, 67
+2004-08-03, 197, 67
+2004-08-04, 197, 67
+2004-08-05, 197, 67
+2004-08-06, 197, 67
+2004-08-07, 197, 67
+2004-08-08, 197, 67
+2004-08-09, 197, 67
+2004-08-10, 197, 67
+2004-08-11, 197, 67
+2004-08-12, 197, 67
+2004-08-13, 197, 67
+2004-08-14, 198, 67
+2004-08-15, 198, 67
+2004-08-16, 199, 67
+2004-08-17, 199, 67
+2004-08-18, 199, 67
+2004-08-19, 199, 67
+2004-08-20, 199, 67
+2004-08-21, 199, 67
+2004-08-22, 199, 67
+2004-08-23, 199, 67
+2004-08-24, 200, 67
+2004-08-25, 200, 67
+2004-08-26, 200, 67
+2004-08-27, 200, 67
+2004-08-30, 200, 67
+2004-08-31, 200, 67
+2004-09-01, 200, 67
+2004-09-02, 200, 67
+2004-09-03, 200, 67
+2004-09-04, 200, 67
+2004-09-06, 200, 67
+2004-09-07, 205, 68
+2004-09-08, 205, 68
+2004-09-09, 206, 68
+2004-09-10, 207, 68
+2004-09-11, 207, 68
+2004-09-12, 207, 68
+2004-09-13, 207, 68
+2004-09-14, 207, 68
+2004-09-15, 207, 68
+2004-09-16, 207, 68
+2004-09-17, 207, 68
+2004-09-18, 207, 68
+2004-09-19, 207, 68
+2004-09-20, 207, 68
+2004-09-21, 207, 68
+2004-09-22, 207, 68
+2004-09-23, 207, 68
+2004-09-24, 207, 68
+2004-09-25, 207, 68
+2004-09-26, 207, 68
+2004-09-27, 207, 68
+2004-09-28, 207, 68
+2004-09-29, 207, 68
+2004-09-30, 207, 68
+2004-10-01, 207, 68
+2004-10-02, 207, 68
+2004-10-03, 207, 68
+2004-10-04, 207, 68
+2004-10-05, 207, 68
+2004-10-06, 207, 68
+2004-10-07, 207, 68
+2004-10-08, 207, 68
+2004-10-09, 207, 68
+2004-10-10, 202, 68
+2004-10-11, 202, 68
+2004-10-13, 202, 68
+2004-10-14, 202, 68
+2004-10-15, 202, 68
+2004-10-16, 202, 68
+2004-10-17, 202, 68
+2004-10-18, 202, 68
+2004-10-19, 202, 68
+2004-10-20, 202, 68
+2004-10-21, 202, 68
+2004-10-22, 202, 68
+2004-10-23, 202, 68
+2004-10-24, 202, 68
+2004-10-25, 202, 68
+2004-10-26, 202, 68
+2004-10-27, 202, 68
+2004-10-28, 202, 68
+2004-10-29, 202, 68
+2004-10-30, 202, 68
+2004-10-31, 202, 68
+2004-11-01, 202, 68
+2004-11-02, 202, 68
+2004-11-03, 202, 68
+2004-11-04, 202, 68
+2004-11-05, 202, 68
+2004-11-06, 202, 68
+2004-11-08, 202, 68
+2004-11-09, 202, 68
+2004-11-10, 202, 68
+2004-11-11, 202, 68
 2004/11/12, 202, 68
-2004/11/11, 202, 68
+2004/11/15, 203, 67
+2004/11/16, 201, 66
+2004/11/17, 204, 67
+2004/11/18, 208, 69
+2004/11/19, 208, 69
+2004/11/20, 210, 71
+2004/11/21, 210, 71
+2004/11/22, 210, 71
+2004/11/23, 211, 72
+2004/11/24, 213, 72
+2004/11/25, 213, 72
+2004/11/27, 213, 72
+2004/11/28, 213, 72
+2004/11/29, 213, 73
+2004/11/30, 214, 73
+2004/12/04, 216, 73
+2004/12/06, 216, 73
+2004/12/07, 216, 74
+2004/12/08, 216, 74
+2004/12/09, 216, 74
+2004/12/10, 216, 74
+2004/12/13, 216, 74
+2004/12/16, 217, 74
+2004/12/17, 217, 75
+2004/12/18, 217, 75
+2004/12/19, 218, 75
+2004/12/20, 218, 75
+2004/12/22, 218, 75
+2004/12/24, 218, 76
+2004/12/27, 218, 76
+2004/12/30, 218, 76
+2005/01/01, 218, 76
+2005/01/02, 218, 76
+2005/01/03, 218, 76
+2005/01/08, 218, 76
+2005/01/09, 218, 76
+2005/01/10, 218, 76
+2005/01/11, 218, 76
+2005/01/12, 224, 77
+2005/01/13, 224, 77
+2005/01/14, 224, 77
+2005/01/15, 224, 77
+2005/01/16, 224, 77
+2005/01/17, 224, 77
+2005/01/18, 224, 77
+2005/01/19, 224, 78
+2005/01/20, 224, 78
+2005/01/22, 224, 78
+2005/01/23, 224, 78
+2005/01/24, 224, 78
+2005/01/25, 225, 80
+2005/01/26, 225, 80
+2005/01/27, 211, 79
+2005/01/28, 232, 80
+2005/01/29, 228, 82
+2005/01/30, 228, 82
+2005/01/31, 228, 82
+2005/02/01, 231, 82
+2005/02/02, 232, 83
+2005/02/03, 232, 83
+2005/02/04, 231, 84
+2005/02/05, 231, 84
+2005/02/06, 239, 85
+2005/02/07, 240, 85
+2005/02/08, 240, 85
+2005/02/09, 240, 85
+2005/02/10, 242, 86
+2005/02/11, 242, 87
+2005/02/13, 243, 87
+2005/02/13, 243, 87
+2005/02/13, 243, 87
+2005/02/14, 243, 87
+2005/02/15, 244, 87
+2005/02/16, 244, 87
+2005/02/17, 244, 87
+2005/02/18, 244, 88
+2005/02/19, 259, 88
+2005/02/21, 259, 88
+2005/02/22, 259, 89
+2005/02/23, 259, 89
+2005/02/24, 261, 89
+2005/02/25, 262, 90
+2005/02/26, 262, 90
+2005/02/27, 262, 90
+2005/02/28, 263, 90
+2005/03/01, 263, 90
+2005/03/02, 264, 90
+2005/03/03, 264, 90
+2005/03/04, 264, 90
+2005/03/05, 264, 90
+2005/03/06, 264, 90
+2005/03/10, 265, 90
+2005/03/11, 265, 90
+2005/03/12, 265, 90
+2005/03/13, 265, 90
+2005/03/14, 265, 90
+2005/03/15, 265, 90
+2005/03/17, 266, 90
+2005/03/19, 267, 90
+2005/03/20, 272, 94
+2005/03/21, 276, 95
+2005/03/22, 288, 97
+2005/03/23, 289, 96
+2005/03/24, 289, 96
+2005/03/27, 289, 96
+2005/03/28, 289, 96
+2005/03/29, 290, 97
+2005/03/30, 290, 97
+2005/03/31, 291, 97
+2005/04/01, 297, 97
+2005/04/02, 305, 97
+2005/04/03, 309, 97
+2005/04/04, 310, 97
+2005/04/05, 310, 97
+2005/04/06, 310, 97
+2005/04/07, 310, 97
+2005/04/08, 310, 97
+2005/04/09, 310, 97
+2005/04/10, 311, 97
+2005/04/11, 313, 96
+2005/04/12, 316, 97
+2005/04/13, 317, 97
+2005/04/14, 321, 100
+2005/04/15, 322, 100
+2005/04/16, 323, 100
+2005/04/17, 326, 101
+2005/04/18, 326, 101
+2005/04/19, 326, 101
+2005/04/20, 325, 103
+2005/04/21, 325, 104
+2005/04/22, 325, 104
+2005/04/23, 325, 104
+2005/04/24, 327, 104
+2005/04/25, 342, 129
+2005/04/26, 363, 110
+2005/04/27, 365, 110
+2005/04/28, 365, 110
+2005/04/29, 368, 112
+2005/04/30, 368, 113
+2005/05/01, 357, 104
+2005/05/02, 364, 105
+2005/05/03, 366, 106
+2005/05/04, 366, 106
+2005/05/05, 367, 107
+2005/05/06, 367, 107
+2005/05/07, 367, 107
+2005/05/08, 367, 108
+2005/05/09, 368, 108
+2005/05/10, 371, 110
+2005/05/11, 372, 111
+2005/05/12, 374, 113
+2005/05/13, 375, 114
+2005/05/14, 375, 114
+2005/05/15, 386, 115
+2005/05/16, 385, 115
+2005/05/17, 385, 115
+2005/05/18, 426, 112
+2005/05/19, 425, 112
+2005/05/20, 425, 112
+2005/05/21, 436, 113
+2005/05/22, 434, 113
+2005/05/23, 440, 113
+2005/05/24, 446, 114
+2005/05/25, 448, 114
+2005/05/26, 448, 114
+2005/05/27, 452, 114
+2005/05/28, 452, 114
+2005/05/29, 453, 114
+2005/05/30, 454, 118
+2005/05/31, 457, 120
+2005/06/01, 457, 121
+2005/06/02, 458, 122
+2005/06/03, 458, 122
+2005/06/04, 459, 123
+2005/06/05, 462, 122
+2005/06/06, 469, 124
+2005/06/07, 469, 124
+2005/06/08, 471, 125
+2005/06/09, 472, 124
+2005/06/10, 473, 125
+2005/06/11, 473, 126
+2005/06/12, 474, 126
+2005/06/13, 474, 127
+2005/06/14, 457, 130
+2005/06/15, 456, 130
+2005/06/16, 455, 130
+2005/06/17, 455, 130
+2005/06/18, 466, 131
+2005/06/19, 468, 133
+2005/06/20, 470, 134
+2005/06/21, 472, 134
+2005/06/22, 472, 134
+2005/06/23, 473, 135
+2005/06/24, 469, 136
+2005/06/25, 470, 137
+2005/06/26, 470, 137
+2005/06/28, 470, 137
+2005/06/29, 471, 137
+2005/06/30, 471, 137
+2005/07/01, 472, 137
+2005/07/02, 472, 138
+2005/07/03, 507, 141
+2005/07/04, 507, 141
+2005/07/05, 524, 141
+2005/07/06, 528, 143
+2005/07/07, 531, 147
+2005/07/09, 531, 147
+2005/07/10, 535, 148
+2005/07/11, 535, 148
+2005/07/12, 536, 148
+2005/07/13, 536, 148
+2005/07/14, 537, 148
+2005/07/15, 538, 148
+2005/07/18, 541, 149
+2005/07/19, 523, 144
+2005/07/20, 526, 144
+2005/07/21, 527, 148
+2005/07/22, 527, 149
+2005/07/23, 527, 149
+2005/07/24, 527, 149
+2005/07/25, 534, 154
+2005/07/26, 541, 154
+2005/07/27, 544, 155
+2005/07/28, 557, 156
+2005/07/29, 565, 157
+2005/07/30, 571, 161
+2005/07/31, 573, 164
+2005/08/02, 574, 165
+2005/08/03, 583, 167
+2005/08/04, 588, 167
+2005/08/05, 589, 168
+2005/08/06, 590, 169
+2005/08/07, 591, 169
+2005/08/08, 594, 171
+2005/08/09, 596, 171
+2005/08/10, 601, 173
+2005/08/11, 605, 175
+2005/08/12, 605, 175
+2005/08/13, 605, 175
+2005/08/14, 605, 175
+2005/08/15, 606, 175
+2005/08/16, 607, 176
+2005/08/17, 607, 176
+2005/08/18, 608, 176
+2005/08/19, 623, 181
+2005/08/20, 623, 181
+2005/08/22, 626, 182
+2005/08/23, 630, 185
+2005/08/24, 633, 187
+2005/08/25, 625, 187
+2005/08/26, 626, 188
+2005/08/27, 630, 190
+2005/08/28, 630, 190
+2005/08/29, 630, 190
+2005/08/30, 630, 190
+2005/08/31, 630, 190
+2005/09/01, 630, 190
+2005/09/02, 630, 191
+2005/09/03, 630, 191
+2005/09/04, 630, 191
+2005/09/05, 631, 191
+2005/09/06, 646, 191
+2005/09/07, 647, 191
+2005/09/08, 622, 191
+2005/09/09, 625, 192
+2005/09/10, 623, 192
+2005/09/11, 623, 192
+2005/09/12, 623, 192
+2005/09/13, 629, 196
+2005/09/14, 629, 196
+2005/09/15, 631, 196
+2005/09/16, 631, 196
+2005/09/17, 631, 196
+2005/09/18, 632, 196
+2005/09/19, 635, 196
+2005/09/20, 635, 196
+2005/09/21, 636, 196
+2005/09/22, 637, 196
+2005/09/23, 638, 196
+2005/09/24, 638, 195
+2005/09/25, 638, 195
+2005/09/26, 641, 199
+2005/09/27, 645, 200
+2005/09/28, 645, 199
+2005/09/29, 645, 199
+2005/09/30, 644, 200
+2005/10/01, 643, 199
+2005/10/02, 647, 201
+2005/10/03, 648, 201
+2005/10/04, 650, 202
+2005/10/05, 648, 202
+2005/10/06, 629, 200
+2005/10/07, 629, 201
+2005/10/08, 629, 201
+2005/10/09, 629, 201
+2005/10/10, 652, 216
+2005/10/11, 657, 216
+2005/10/12, 663, 217
+2005/10/13, 662, 217
+2005/10/14, 681, 224
+2005/10/15, 688, 226
+2005/10/16, 693, 228
+2005/10/17, 693, 228
+2005/10/18, 695, 229
+2005/10/19, 696, 230
+2005/10/20, 696, 230
+2005/10/21, 698, 230
+2005/10/22, 698, 230
+2005/10/23, 698, 230
+2005/10/24, 698, 229
+2005/10/25, 697, 229
+2005/10/26, 697, 230
+2005/10/27, 684, 230
+2005/10/28, 684, 231
+2005/10/29, 684, 231
+2005/10/30, 681, 231
+2005/10/31, 681, 231
+2005/11/01, 681, 231
+2005/11/02, 681, 231
+2005/11/03, 681, 231
+2005/11/04, 681, 231
+2005/11/05, 681, 231
+2005/11/06, 681, 231
+2005/11/07, 681, 231
+2005/11/08, 681, 231
+2005/11/09, 681, 231
+2005/11/10, 683, 231
+2005/11/11, 683, 232
+2005/11/12, 683, 232
+2005/11/13, 683, 232
+2005/11/14, 683, 232
+2005/11/15, 683, 232
+2005/11/16, 682, 232
+2005/11/17, 683, 232
+2005/11/18, 683, 232
+2005/11/19, 683, 232
+2005/11/21, 683, 232
+2005/11/22, 683, 232
+2005/11/23, 683, 232
+2005/11/25, 683, 232
+2005/11/27, 683, 232
+2005/11/28, 685, 233
+2005/11/29, 686, 233
+2005/11/30, 687, 233
+2005/12/01, 689, 232
+2005/12/02, 690, 233
+2005/12/03, 690, 233
+2005/12/04, 690, 233
+2005/12/05, 690, 233
+2005/12/06, 690, 233
+2005/12/07, 694, 235
+2005/12/08, 694, 237
+2005/12/09, 698, 240
+2005/12/10, 698, 240
+2005/12/11, 699, 239
+2005/12/12, 699, 239
+2005/12/13, 700, 239
+2005/12/14, 700, 240
+2005/12/15, 703, 243
+2005/12/16, 703, 243
+2005/12/17, 704, 243
+2005/12/18, 704, 243
+2005/12/19, 704, 243
+2005/12/20, 704, 243
+2005/12/21, 704, 245
+2005/12/22, 704, 245
+2005/12/23, 704, 246
+2005/12/24, 704, 246
+2005/12/25, 704, 246
+2005/12/27, 704, 246
+2005/12/29, 706, 247
+2005/12/30, 708, 247
+2005/12/31, 708, 247
+2006/01/02, 710, 247
+2006/01/04, 710, 247
+2006/01/05, 710, 247
+2006/01/06, 711, 247
+2006/01/07, 711, 248
+2006/01/08, 711, 248
+2006/01/09, 711, 248
+2006/01/10, 712, 249
+2006/01/11, 712, 249
+2006/01/12, 712, 249
+2006/01/13, 712, 249
+2006/01/14, 713, 250
+2006/01/15, 713, 251
+2006/01/16, 713, 251
+2006/01/17, 713, 251
+2006/01/18, 713, 251
+2006/01/19, 714, 252
+2006/01/20, 715, 253
+2006/01/21, 715, 253
+2006/01/22, 715, 253
+2006/01/23, 721, 255
+2006/01/24, 725, 257
+2006/01/25, 731, 261
+2006/01/26, 735, 264
+2006/01/27, 746, 266
+2006/01/28, 744, 265
+2006/01/29, 745, 265
+2006/01/30, 745, 265
+2006/01/31, 746, 268
+2006/02/01, 746, 268
+2006/02/02, 747, 268
+2006/02/03, 747, 269
+2006/02/04, 749, 270
+2006/02/05, 749, 270
+2006/02/06, 749, 271
+2006/02/07, 749, 274
+2006/02/08, 753, 275
+2006/02/09, 754, 275
+2006/02/10, 754, 275
+2006/02/11, 754, 275
+2006/02/12, 755, 275
+2006/02/13, 755, 275
+2006/02/14, 756, 275
+2006/02/15, 756, 276
+2006/02/16, 759, 278
+2006/02/17, 759, 279
+2006/02/18, 759, 279
+2006/02/19, 760, 279
+2006/02/20, 760, 279
+2006/02/21, 761, 281
+2006/02/22, 761, 281
+2006/02/23, 762, 282
+2006/02/25, 762, 282
+2006/02/26, 762, 282
+2006/02/27, 764, 283
+2006/02/28, 766, 284
+2006/03/01, 775, 287
+2006/03/02, 776, 287
+2006/03/03, 776, 287
+2006/03/04, 776, 287
+2006/03/06, 777, 287
+2006/03/07, 777, 287
+2006/03/08, 778, 287
+2006/03/09, 781, 288
+2006/03/10, 781, 288
+2006/03/11, 781, 288
+2006/03/12, 781, 288
+2006/03/13, 784, 289
+2006/03/14, 784, 289
+2006/03/15, 784, 290
+2006/03/16, 785, 290
+2006/03/17, 786, 291
+2006/03/18, 786, 291
+2006/03/19, 788, 291
+2006/03/20, 792, 292
+2006/03/21, 792, 292
+2006/03/22, 806, 294
+2006/03/23, 809, 295
+2006/03/24, 813, 297
+2006/03/25, 813, 299
+2006/03/26, 814, 299
+2006/03/27, 815, 299
+2006/03/28, 818, 300
+2006/03/29, 820, 300
+2006/03/30, 820, 300
+2006/03/31, 821, 301
+2006/04/01, 829, 302
+2006/04/02, 840, 304
+2006/04/03, 842, 305
+2006/04/04, 846, 305
+2006/04/05, 853, 305
+2006/04/06, 848, 305
+2006/04/07, 852, 308
+2006/04/08, 854, 308
+2006/04/09, 875, 309
+2006/04/10, 878, 312
+2006/04/11, 878, 313
+2006/04/12, 880, 315
+2006/04/13, 884, 316
+2006/04/14, 887, 316
+2006/04/15, 896, 318
+2006/04/16, 897, 319
+2006/04/17, 900, 320
+2006/04/18, 900, 321
+2006/04/19, 910, 323
+2006/04/20, 919, 325
+2006/04/21, 924, 326
+2006/04/22, 927, 328
+2006/04/23, 930, 333
+2006/04/24, 935, 336
+2006/04/25, 940, 338
+2006/04/26, 943, 339
+2006/04/27, 943, 342
+2006/04/28, 945, 345
+2006/04/29, 946, 347
+2006/04/30, 948, 347
+2006/05/01, 948, 347
+2006/05/02, 949, 349
+2006/05/03, 949, 350
+2006/05/04, 948, 351
+2006/05/05, 949, 351
+2006/05/06, 950, 353
+2006/05/07, 950, 353
+2006/05/08, 949, 353
+2006/05/09, 950, 354
+2006/05/10, 955, 355
+2006/05/11, 955, 355
+2006/05/12, 957, 356
+2006/05/13, 957, 356
+2006/05/14, 952, 356
+2006/05/15, 952, 357
+2006/05/16, 952, 357
+2006/05/17, 962, 357
+2006/05/18, 960, 356
+2006/05/19, 961, 357
+2006/05/20, 972, 358
+2006/05/21, 974, 359
+2006/05/22, 974, 359
+2006/05/23, 975, 359
+2006/05/24, 976, 361
+2006/05/25, 976, 361
+2006/05/26, 976, 362
+2006/05/27, 977, 362
+2006/05/28, 977, 362
+2006/05/29, 981, 372
+2006/05/30, 982, 372
+2006/05/31, 982, 372
+2006/06/02, 988, 374
+2006/06/03, 990, 374
+2006/06/04, 998, 379
+2006/06/05, 1003, 381
+2006/06/06, 1010, 384
+2006/06/07, 1019, 385
+2006/06/08, 1021, 386
+2006/06/09, 1004, 369
+2006/06/10, 1004, 369
+2006/06/11, 1005, 369
+2006/06/12, 1010, 371
+2006/06/13, 1004, 371
+2006/06/14, 1005, 371
+2006/06/15, 1006, 375
+2006/06/16, 1007, 377
+2006/06/17, 1007, 377
+2006/06/18, 1007, 377
+2006/06/19, 1007, 377
+2006/06/20, 1007, 377
+2006/06/21, 1003, 377
+2006/06/22, 1011, 378
+2006/06/23, 1011, 378
+2006/06/24, 1013, 378
+2006/06/25, 1016, 380
+2006/06/26, 1017, 381
+2006/06/27, 1017, 381
+2006/06/28, 1018, 381
+2006/06/29, 1019, 384
+2006/06/30, 1012, 384
+2006/07/01, 1012, 384
+2006/07/02, 1015, 384
+2006/07/03, 1015, 384
+2006/07/04, 1015, 384
+2006/07/05, 1016, 384
+2006/07/06, 1020, 386
+2006/07/07, 1031, 393
+2006/07/08, 1036, 402
+2006/07/09, 1038, 403
+2006/07/10, 1038, 403
+2006/07/11, 1036, 406
+2006/07/12, 1039, 407
+2006/07/13, 1040, 407
+2006/07/14, 1041, 407
+2006/07/15, 1042, 407
+2006/07/16, 1043, 408
+2006/07/17, 1044, 408
+2006-07-18, 1044, 408
+2006-07-19, 1044, 408
+2006-07-20, 1043, 409
+2006-07-21, 1045, 409
+2006-07-22, 1045, 409
+2006-07-23, 1045, 409
+2006-07-24, 1046, 409
+2006-07-25, 1046, 410
+2006-07-26, 1046, 410
+2006-07-27, 1063, 415
+2006-07-28, 1065, 415
+2006-07-29, 1068, 416
+2006-07-30, 1068, 416
+2006-07-31, 1068, 416
+2006-08-01, 1071, 416
+2006-08-02, 1073, 416
+2006-08-03, 1061, 412
+2006-08-04, 1062, 413
+2006-08-05, 1067, 414
+2006-08-06, 1067, 414
+2006-08-07, 1067, 414
+2006-08-08, 1080, 418
+2006-08-09, 1081, 420
+2006-08-10, 1085, 421
+2006-08-11, 1087, 423
+2006-08-12, 1088, 423
+2006-08-13, 1088, 423
+2006-08-14, 1088, 423
+2006-08-15, 1088, 423
+2006-08-16, 1089, 424
+2006-08-17, 1091, 424
+2006-08-18, 1091, 424
+2006-08-19, 1091, 424
+2006-08-20, 1091, 424
+2006-08-21, 1091, 424
+2006-08-22, 1091, 424
+2006-08-23, 1092, 425
+2006-08-24, 1096, 425
+2006-08-25, 1097, 426
+2006-08-26, 1102, 426
+2006-08-27, 1107, 427
+2006-08-28, 1108, 427
+2006-08-29, 1108, 427
+2006-08-30, 1109, 427
+2006-08-31, 1109, 431
+2006-09-01, 1113, 432
+2006-09-02, 1113, 432
+2006-09-03, 1116, 433
+2006-09-04, 1118, 435
+2006-09-05, 1118, 435
+2006-09-06, 1119, 436
+2006-09-07, 1119, 437
+2006-09-08, 1119, 438
+2006-09-09, 1121, 441
+2006-09-10, 1121, 441
+2006-09-11, 1122, 442
+2006-09-12, 1122, 442
+2006-09-13, 1122, 444
+2006-09-14, 1122, 444
+2006-09-15, 1123, 445
+2006-09-16, 1123, 445
+2006-09-17, 1123, 445
+2006-09-18, 1124, 447
+2006-09-19, 1124, 447
+2006-09-20, 1124, 447
+2006-09-21, 1124, 447
+2006-09-22, 1123, 447
+2006-09-23, 1124, 448
+2006-09-24, 1124, 448
+2006-09-25, 1124, 448
+2006-09-26, 1124, 448
+2006-09-27, 1124, 448
+2006-09-28, 1124, 448
+2006-09-29, 1119, 448
+2006-09-30, 1117, 448
+2006-10-01, 1117, 448
+2006-10-02, 1118, 448
+2006-10-03, 1118, 448
+2006-10-04, 1121, 449
+2006-10-05, 1128, 456
+2006-10-06, 1130, 456
+2006-10-07, 1130, 456
+2006-10-08, 1130, 456
+2006-10-09, 1130, 456
+2006-10-10, 1132, 462
+2006-10-11, 1124, 457
+2006-10-12, 1129, 458
+2006-10-13, 1129, 458
+2006-10-14, 1134, 458
+2006-10-15, 1134, 458
+2006-10-16, 1138, 458
+2006-10-17, 1139, 459
+2006-10-18, 1143, 457
+2006-10-19, 1145, 457
+2006-10-20, 1146, 458
+2006-10-21, 1146, 458
+2006-10-22, 1150, 459
+2006-10-23, 1150, 459
+2006-10-24, 1151, 459
+2006-10-25, 1151, 460
+2006-10-26, 1151, 461
+2006-10-27, 1151, 461
+2006-10-28, 1150, 460
+2006-10-29, 1150, 460
+2006-10-30, 1150, 460
+2006-10-31, 1162, 463
+2006-11-01, 1168, 466
+2006-11-02, 1167, 464
+2006-11-03, 1171, 466
+2006-11-04, 1171, 467
+2006-11-05, 1175, 467
+2006-11-06, 1175, 472
+2006-11-07, 1172, 470
+2006-11-08, 1174, 472
+2006-11-09, 1175, 473
+2006-11-10, 1175, 473
+2006-11-11, 1174, 473
+2006-11-12, 1178, 473
+2006-11-13, 1219, 488
+2006-11-14, 1220, 488
+2006-11-15, 1221, 489
+2006-11-16, 1221, 490
+2006-11-17, 1221, 490
+2006-11-18, 1221, 490
+2006-11-19, 1223, 491
+2006-11-20, 1225, 492
+2006-11-21, 1226, 493
+2006-11-22, 1226, 493
+2006-11-23, 1226, 493
+2006-11-24, 1229, 494
+2006-11-25, 1229, 494
+2006-11-26, 1229, 494
+2006-11-27, 1230, 494
+2006-11-28, 1230, 495
+2006-11-29, 1232, 495
+2006-11-30, 1233, 495
+2006-12-01, 1235, 495
+2006-12-02, 1235, 495
+2006-12-03, 1235, 495
+2006-12-04, 1235, 495
+2006-12-05, 1245, 500
+2006-12-06, 1246, 501
+2006-12-07, 1246, 501
+2006-12-08, 1246, 501
+2006-12-09, 1247, 501
+2006-12-10, 1254, 501
+2006-12-11, 1254, 506
+2006-12-12, 1254, 506
+2006-12-13, 1254, 506
+2006-12-14, 1258, 507
+2006-12-15, 1265, 512
+2006-12-16, 1267, 514
+2006-12-17, 1268, 514
+2006-12-18, 1268, 514
+2006-12-19, 1268, 513
+2006-12-20, 1268, 513
+2006-12-21, 1271, 512
+2006-12-22, 1271, 513
+2006-12-23, 1271, 513
+2006-12-24, 1271, 513
+2006-12-25, 1271, 513
+2006-12-26, 1270, 513
+2006-12-27, 1269, 513
+2006-12-28, 1271, 513
+2006-12-29, 1272, 514
+2006-12-30, 1273, 514
+2006-12-31, 1273, 514
+2007-01-01, 1273, 514
+2007-01-02, 1276, 513
+2007-01-03, 1277, 515
+2007-01-04, 1276, 515
+2007-01-05, 1278, 515
+2007-01-06, 1278, 515
+2007-01-07, 1278, 515
+2007-01-08, 1278, 515
+2007-01-09, 1283, 516
+2007-01-10, 1283, 517
+2007-01-11, 1284, 522
+2007-01-12, 1285, 525
+2007-01-13, 1292, 531
+2007-01-14, 1292, 531
+2007-01-15, 1296, 533
+2007-01-16, 1300, 533
+2007-01-17, 1301, 533
+2007-01-18, 1301, 533
+2007-01-19, 1301, 533
+2007-01-20, 1301, 533
+2007-01-21, 1301, 533
+2007-01-22, 1301, 533
+2007-01-23, 1303, 534
+2007-01-24, 1308, 535
+2007-01-25, 1309, 535
+2007-01-26, 1311, 535
+2007-01-27, 1315, 538
+2007-01-28, 1316, 538
+2007-01-29, 1316, 538
+2007-01-30, 1318, 539
+2007-01-31, 1318, 540
+2007-02-01, 1319, 541
+2007-02-02, 1315, 538
+2007-02-03, 1315, 538
+2007-02-04, 1318, 538
+2007-02-05, 1318, 538
+2007-02-06, 1320, 539
+2007-02-07, 1320, 539
+2007-02-08, 1320, 539
+2007-02-09, 1320, 539
+2007-02-10, 1321, 540
+2007-02-11, 1321, 540
+2007-02-12, 1329, 540
+2007-02-13, 1333, 542
+2007-02-14, 1336, 544
+2007-02-15, 1341, 544
+2007-02-16, 1332, 546
+2007-02-17, 1350, 546
+2007-02-18, 1350, 546

Modified: pypy/branch/ast-experiments/pypy/doc/statistic/post.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/statistic/post.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/statistic/post.txt	Mon Feb 26 08:45:45 2007
@@ -42,3 +42,10 @@
 2006-4,138,961
 2006-5,67,609
 2006-6,38,757
+2006-7, 111, 687
+2006-8, 60, 506
+2006-9, 11, 436
+2006-10, 27, 521
+2006-11, 32, 659
+2006-12, 57, 514
+2007-1, 37, 742

Modified: pypy/branch/ast-experiments/pypy/doc/statistic/release_dates.csv
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/statistic/release_dates.csv	(original)
+++ pypy/branch/ast-experiments/pypy/doc/statistic/release_dates.csv	Mon Feb 26 08:45:45 2007
@@ -5,3 +5,5 @@
 2005-08-28,"PyPy 0.7.0"
 2005-11-03,"PyPy 0.8.0"
 2006-06-25,"PyPy 0.9.0"
+2006-06-25,"PyPy 0.9.0"
+2007-02-17,"PyPy 0.99.0"

Modified: pypy/branch/ast-experiments/pypy/doc/statistic/sprint_dates.csv
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/statistic/sprint_dates.csv	(original)
+++ pypy/branch/ast-experiments/pypy/doc/statistic/sprint_dates.csv	Mon Feb 26 08:45:45 2007
@@ -20,3 +20,7 @@
 "Japan",2006-04-23,2006-04-29
 "Duesseldorf",2006-06-02,2006-06-09
 "Europython/Genf",2006-07-06,2006-07-09
+"Limerick",2006-08-21,2006-08-27
+"Duesseldorf",2006-10-30,2006-11-05
+"Leysin",2007-01-08,2007-01-14
+"Hildesheim",2007-03-01,2007-03-05

Modified: pypy/branch/ast-experiments/pypy/doc/statistic/statistic_irc_log.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/statistic/statistic_irc_log.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/statistic/statistic_irc_log.txt	Mon Feb 26 08:45:45 2007
@@ -510,3 +510,221 @@
 2006-07-15, 180, 16
 2006-07-16, 175, 14
 2006-07-17, 526, 20
+2006-07-18, 421, 19
+2006-07-19, 607, 20
+2006-07-20, 575, 38
+2006-07-21, 369, 31
+2006-07-22, 293, 13
+2006-07-23, 449, 18
+2006-07-24, 1042, 23
+2006-07-25, 749, 25
+2006-07-26, 348, 22
+2006-07-27, 938, 22
+2006-07-28, 660, 19
+2006-07-29, 350, 19
+2006-07-30, 773, 12
+2006-07-31, 266, 18
+2006-08-01, 561, 26
+2006-08-02, 438, 20
+2006-08-03, 562, 22
+2006-08-04, 431, 20
+2006-08-05, 57, 13
+2006-08-06, 182, 19
+2006-08-07, 719, 22
+2006-08-08, 321, 21
+2006-08-09, 328, 15
+2006-08-10, 153, 23
+2006-08-11, 374, 14
+2006-08-12, 213, 16
+2006-08-13, 43, 9
+2006-08-14, 296, 15
+2006-08-15, 301, 19
+2006-08-16, 278, 18
+2006-08-17, 120, 19
+2006-08-18, 74, 23
+2006-08-19, 0, 9
+2006-08-20, 116, 13
+2006-08-21, 130, 23
+2006-08-22, 84, 21
+2006-08-23, 85, 22
+2006-08-24, 138, 21
+2006-08-25, 44, 23
+2006-08-26, 130, 16
+2006-08-27, 97, 21
+2006-08-28, 101, 35
+2006-08-29, 806, 23
+2006-08-30, 596, 26
+2006-08-31, 537, 24
+2006-09-01, 102, 17
+2006-09-02, 162, 15
+2006-09-03, 15, 10
+2006-09-04, 179, 22
+2006-09-05, 169, 16
+2006-09-06, 422, 22
+2006-09-07, 564, 27
+2006-09-08, 157, 19
+2006-09-09, 198, 11
+2006-09-10, 206, 10
+2006-09-11, 294, 21
+2006-09-12, 310, 21
+2006-09-13, 290, 19
+2006-09-14, 313, 26
+2006-09-15, 340, 25
+2006-09-16, 342, 20
+2006-09-17, 398, 16
+2006-09-18, 411, 19
+2006-09-19, 178, 23
+2006-09-20, 471, 18
+2006-09-21, 164, 23
+2006-09-22, 217, 22
+2006-09-23, 220, 11
+2006-09-24, 126, 8
+2006-09-25, 346, 20
+2006-09-26, 117, 17
+2006-09-27, 298, 22
+2006-09-28, 722, 24
+2006-09-29, 515, 26
+2006-09-30, 106, 21
+2006-10-01, 145, 18
+2006-10-02, 564, 18
+2006-10-03, 466, 32
+2006-10-04, 873, 31
+2006-10-05, 709, 28
+2006-10-06, 600, 23
+2006-10-07, 86, 16
+2006-10-08, 278, 15
+2006-10-09, 659, 29
+2006-10-10, 945, 24
+2006-10-11, 966, 20
+2006-10-12, 887, 26
+2006-10-13, 249, 24
+2006-10-14, 10, 15
+2006-10-15, 34, 19
+2006-10-16, 709, 23
+2006-10-17, 410, 23
+2006-10-18, 501, 25
+2006-10-19, 552, 29
+2006-10-20, 109, 18
+2006-10-21, 380, 14
+2006-10-22, 66, 13
+2006-10-23, 133, 17
+2006-10-24, 162, 15
+2006-10-25, 84, 14
+2006-10-26, 149, 13
+2006-10-27, 359, 13
+2006-10-28, 252, 18
+2006-10-29, 170, 18
+2006-10-30, 62, 20
+2006-10-31, 286, 23
+2006-11-01, 188, 20
+2006-11-02, 291, 35
+2006-11-03, 212, 19
+2006-11-04, 166, 24
+2006-11-05, 131, 24
+2006-11-06, 405, 24
+2006-11-07, 802, 30
+2006-11-08, 1229, 26
+2006-11-09, 1277, 27
+2006-11-10, 331, 24
+2006-11-11, 450, 19
+2006-11-12, 330, 17
+2006-11-13, 781, 18
+2006-11-14, 535, 25
+2006-11-15, 574, 17
+2006-11-16, 340, 19
+2006-11-17, 522, 20
+2006-11-18, 114, 14
+2006-11-19, 238, 16
+2006-11-20, 211, 25
+2006-11-21, 475, 26
+2006-11-22, 173, 16
+2006-11-23, 513, 24
+2006-11-24, 683, 20
+2006-11-25, 151, 15
+2006-11-26, 196, 30
+2006-11-27, 370, 22
+2006-11-28, 336, 22
+2006-11-29, 379, 28
+2006-11-30, 727, 24
+2006-12-01, 628, 19
+2006-12-02, 204, 12
+2006-12-03, 437, 14
+2006-12-04, 491, 25
+2006-12-05, 361, 22
+2006-12-06, 410, 25
+2006-12-07, 536, 23
+2006-12-08, 255, 22
+2006-12-09, 151, 41
+2006-12-10, 52, 12
+2006-12-11, 704, 32
+2006-12-12, 472, 25
+2006-12-13, 521, 29
+2006-12-14, 201, 23
+2006-12-15, 538, 27
+2006-12-16, 282, 18
+2006-12-17, 111, 14
+2006-12-18, 177, 18
+2006-12-19, 381, 20
+2006-12-20, 399, 25
+2006-12-21, 397, 26
+2006-12-22, 240, 41
+2006-12-23, 15, 16
+2006-12-24, 15, 10
+2006-12-25, 82, 10
+2006-12-26, 3, 12
+2006-12-27, 256, 18
+2006-12-28, 220, 19
+2006-12-29, 103, 16
+2006-12-30, 285, 12
+2006-12-31, 548, 17
+2007-01-01, 544, 14
+2007-01-02, 263, 15
+2007-01-03, 631, 18
+2007-01-04, 297, 12
+2007-01-05, 392, 17
+2007-01-06, 103, 14
+2007-01-07, 53, 12
+2007-01-08, 232, 28
+2007-01-09, 98, 32
+2007-01-10, 183, 27
+2007-01-11, 162, 27
+2007-01-12, 694, 24
+2007-01-13, 246, 24
+2007-01-14, 81, 26
+2007-01-15, 327, 27
+2007-01-16, 799, 22
+2007-01-17, 222, 22
+2007-01-18, 158, 23
+2007-01-19, 819, 27
+2007-01-20, 226, 18
+2007-01-21, 117, 17
+2007-01-22, 490, 27
+2007-01-23, 279, 27
+2007-01-24, 374, 21
+2007-01-25, 449, 20
+2007-01-26, 321, 18
+2007-01-27, 156, 13
+2007-01-28, 376, 14
+2007-01-29, 427, 21
+2007-01-30, 715, 22
+2007-01-31, 624, 30
+2007-02-01, 446, 20
+2007-02-02, 248, 25
+2007-02-03, 437, 16
+2007-02-04, 256, 19
+2007-02-05, 473, 19
+2007-02-06, 198, 16
+2007-02-07, 439, 35
+2007-02-08, 472, 17
+2007-02-09, 803, 24
+2007-02-10, 274, 23
+2007-02-11, 622, 18
+2007-02-12, 786, 23
+2007-02-13, 1172, 25
+2007-02-14, 1101, 28
+2007-02-15, 1236, 23
+2007-02-16, 793, 23
+2007-02-17, 1399, 22
+2007-02-18, 636, 18
+2007-02-19, 761, 28
+2007-02-20, 414, 23

Modified: pypy/branch/ast-experiments/pypy/doc/statistic/subscribers.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/statistic/subscribers.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/statistic/subscribers.txt	Mon Feb 26 08:45:45 2007
@@ -929,3 +929,169 @@
 2006/07/14, 310, 56
 2006/07/15, 310, 56
 2006/07/16, 310, 56
+2006-07-17, 293, 55
+2006-07-19, 293, 55
+2006-07-20, 294, 56
+2006-07-21, 294, 56
+2006-07-23, 294, 56
+2006-07-24, 295, 56
+2006-07-25, 293, 56
+2006-07-26, 292, 56
+2006-07-27, 290, 56
+2006-07-30, 290, 56
+2006-07-31, 290, 56
+2006-08-01, 291, 56
+2006-08-02, 290, 56
+2006-08-03, 290, 56
+2006-08-04, 290, 56
+2006-08-05, 290, 56
+2006-08-07, 290, 56
+2006-08-09, 290, 56
+2006-08-10, 290, 56
+2006-08-11, 291, 56
+2006-08-12, 291, 56
+2006-08-15, 291, 56
+2006-08-16, 291, 56
+2006-08-17, 292, 56
+2006-08-19, 293, 56
+2006-08-21, 294, 56
+2006-08-22, 293, 56
+2006-08-23, 293, 56
+2006-08-24, 293, 56
+2006-08-25, 296, 58
+2006-08-26, 297, 57
+2006-08-29, 297, 57
+2006-08-30, 297, 57
+2006-08-31, 297, 57
+2006-09-01, 297, 57
+2006-09-02, 297, 57
+2006-09-03, 297, 57
+2006-09-05, 297, 57
+2006-09-06, 297, 57
+2006-09-07, 297, 57
+2006-09-08, 297, 58
+2006-09-11, 298, 58
+2006-09-12, 298, 58
+2006-09-13, 298, 58
+2006-09-14, 301, 58
+2006-09-15, 301, 58
+2006-09-16, 302, 58
+2006-09-17, 303, 58
+2006-09-18, 303, 58
+2006-09-19, 304, 58
+2006-09-20, 305, 58
+2006-09-22, 305, 58
+2006-09-23, 306, 58
+2006-09-25, 306, 58
+2006-09-26, 306, 58
+2006-09-27, 306, 58
+2006-09-28, 306, 58
+2006-09-29, 307, 58
+2006-09-30, 308, 58
+2006-10-01, 308, 58
+2006-10-02, 308, 58
+2006-10-03, 309, 58
+2006-10-04, 309, 57
+2006-10-05, 310, 57
+2006-10-06, 312, 57
+2006-10-07, 312, 57
+2006-10-10, 313, 57
+2006-10-11, 313, 57
+2006-10-12, 313, 57
+2006-10-13, 313, 57
+2006-10-14, 313, 57
+2006-10-16, 315, 57
+2006-10-17, 316, 57
+2006-10-18, 316, 57
+2006-10-19, 316, 57
+2006-10-20, 316, 57
+2006-10-21, 316, 57
+2006-10-23, 316, 57
+2006-10-24, 317, 57
+2006-10-25, 317, 57
+2006-10-26, 317, 57
+2006-10-28, 317, 57
+2006-10-29, 317, 57
+2006-10-30, 318, 57
+2006-10-31, 317, 57
+2006-11-02, 318, 57
+2006-11-03, 318, 57
+2006-11-04, 318, 57
+2006-11-06, 318, 56
+2006-11-07, 318, 56
+2006-11-08, 318, 56
+2006-11-09, 319, 56
+2006-11-10, 319, 56
+2006-11-11, 319, 56
+2006-11-13, 320, 56
+2006-11-14, 320, 56
+2006-11-15, 320, 56
+2006-11-16, 321, 56
+2006-11-17, 320, 56
+2006-11-21, 320, 56
+2006-11-22, 321, 56
+2006-11-24, 320, 56
+2006-11-25, 322, 56
+2006-11-27, 322, 56
+2006-11-28, 323, 56
+2006-11-29, 322, 56
+2006-11-30, 322, 56
+2006-12-01, 322, 55
+2006-12-04, 322, 55
+2006-12-05, 323, 55
+2006-12-06, 322, 55
+2006-12-08, 323, 55
+2006-12-10, 323, 55
+2006-12-11, 323, 55
+2006-12-14, 323, 55
+2006-12-19, 323, 55
+2006-12-21, 323, 55
+2006-12-24, 323, 55
+2006-12-27, 323, 55
+2006-12-28, 323, 55
+2006-12-29, 324, 55
+2006-12-30, 324, 55
+2006-12-31, 323, 55
+2007-01-02, 322, 55
+2007-01-03, 322, 55
+2007-01-04, 322, 55
+2007-01-05, 322, 55
+2007-01-07, 322, 55
+2007-01-08, 321, 55
+2007-01-09, 322, 55
+2007-01-11, 322, 55
+2007-01-12, 322, 55
+2007-01-14, 322, 55
+2007-01-15, 322, 55
+2007-01-16, 323, 55
+2007-01-18, 324, 55
+2007-01-19, 324, 55
+2007-01-22, 324, 55
+2007-01-23, 324, 56
+2007-01-24, 324, 56
+2007-01-25, 324, 56
+2007-01-26, 323, 56
+2007-01-27, 322, 56
+2007-01-28, 322, 56
+2007-01-29, 322, 56
+2007-01-30, 322, 55
+2007-01-31, 321, 55
+2007-02-01, 321, 55
+2007-02-02, 321, 55
+2007-02-03, 321, 55
+2007-02-04, 321, 55
+2007-02-05, 320, 55
+2007-02-06, 320, 55
+2007-02-07, 321, 55
+2007-02-08, 321, 55
+2007-02-09, 322, 55
+2007-02-10, 322, 55
+2007-02-11, 322, 55
+2007-02-12, 322, 55
+2007-02-13, 322, 55
+2007-02-14, 322, 55
+2007-02-15, 322, 55
+2007-02-16, 323, 55
+2007-02-17, 324, 56
+2007-02-18, 323, 56
+2007-02-19, 324, 56

Modified: pypy/branch/ast-experiments/pypy/doc/tool/makecontributor.py
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/tool/makecontributor.py	(original)
+++ pypy/branch/ast-experiments/pypy/doc/tool/makecontributor.py	Mon Feb 26 08:45:45 2007
@@ -25,9 +25,15 @@
 
 import uconf # http://codespeak.net/svn/uconf/dist/uconf 
 
+# Authors that don't want to be listed
+excluded = set("anna gintas ignas".split())
+cutoff = 5 # cutoff for authors in the LICENSE file
+mark = False
 for author, count in items: 
-    #user = uconf.system.User(author)
-    #realname = user.realname 
-    #print "%5d" % count, "   ", realname, "<%s>" % email 
-    print count, "   ", author 
-
+    user = uconf.system.User(author)
+    realname = user.realname.strip()
+    if not mark and count < cutoff:
+        mark = True
+        print '-'*60
+    print "   ", realname
+    #print count, "   ", author 

Modified: pypy/branch/ast-experiments/pypy/doc/translation.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/translation.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/translation.txt	Mon Feb 26 08:45:45 2007
@@ -91,18 +91,18 @@
 stages.
 
 .. _`SSA`: http://en.wikipedia.org/wiki/Static_single_assignment_form
-.. _`translator.py`: http://codespeak.net/pypy/dist/pypy/translator/translator.py
+.. _`translator.py`: ../../pypy/translator/translator.py
 .. _`play around`: getting-started.html#trying-out-the-translator
 .. _`Flow Object Space`: objspace.html#the-flow-object-space
 .. _`control flow graph`: objspace.html#the-flow-model
-.. _`Common Lisp`: http://codespeak.net/pypy/dist/pypy/translator/lisp/
-.. _Pyrex: http://codespeak.net/pypy/dist/pypy/translator/pyrex/
-.. _JavaScript: http://codespeak.net/pypy/dist/pypy/translator/js/
-.. _Squeak: http://codespeak.net/pypy/dist/pypy/translator/squeak/
-.. _CLI: http://codespeak.net/pypy/dist/pypy/translator/cli/
+.. _`Common Lisp`: ../../pypy/translator/lisp/
+.. _Pyrex: ../../pypy/translator/pyrex/
+.. _JavaScript: ../../pypy/translator/js/
+.. _Squeak: ../../pypy/translator/squeak/
+.. _CLI: ../../pypy/translator/cli/
 .. _graph: image/translation.pdf
 .. _`interactive interface`: getting-started.html#try-out-the-translator
-.. _`translatorshell.py`: http://codespeak.net/pypy/dist/pypy/bin/translatorshell.py
+.. _`translatorshell.py`: ../../pypy/bin/translatorshell.py
 
 .. _`flow model`:
 
@@ -537,6 +537,7 @@
 "explodes" objects and thus saves one allocation in this simple (but quite
 common) situation.
 
+
 Escape Analysis and Stack Allocation
 ++++++++++++++++++++++++++++++++++++
 
@@ -570,13 +571,16 @@
 likely. Also objects that have a finalizer cannot be allocated on the stack,
 since the finalizer might resurrect the object.
 
-The resulting performance improvements by this optimization were quite
-poor. We think that this is due to the fact that the Boehm garbage
+The resulting performance improvements by this optimization were not as big
+we hoped. We think that this is due to the fact that the Boehm garbage
 collector becomes slower when the stack is bigger, thus compensating
 any speed improvement achieved by having faster allocation. We did not
 implement stack allocation with any of the other GCs that PyPy can
 use.
 
+Enable this optimization with :config:`translation.backendopt.heap2stack`.
+
+
 The Stackless Transform
 -----------------------
 
@@ -587,6 +591,8 @@
 implement `coroutines, greenlets and tasklets`_ as an application
 level feature for the Standard Interpreter.
 
+Enable the stackless transformation with :config:`translation.stackless`.
+
 .. _`coroutines, greenlets and tasklets`: stackless.html
 
 .. _`preparing the graphs for source generation`:
@@ -643,9 +649,12 @@
 on flexibility and robustness, not performance.
 
 For a quite detailed description of how memory management and garbage collection
-are performed in PyPy, see the `EU report`_ about this topic (section 4.2).
+are performed in PyPy, see the `Technical report`_ about this topic (section 4.2).
 
-.. _`EU report`: http://codespeak.net/pypy/extradoc/eu-report/D07.1_Massive_Parallelism_and_Translation_Aspects-2006-12-15.pdf
+You can choose which garbage collection strategy to use with
+:config:`translation.gc`.
+
+.. _`Technical report`: http://codespeak.net/pypy/extradoc/eu-report/D07.1_Massive_Parallelism_and_Translation_Aspects-2006-12-15.pdf
 
 .. _C:
 .. _GenC:
@@ -689,6 +698,8 @@
 
 .. _LLVM:
 
+Use the :config:`translation.backend` option to choose which backend to use.
+
 The LLVM Back-End
 -----------------
 
@@ -731,7 +742,7 @@
 
 The Object-Oriented backends target platforms that are less C-like and support
 classes, instance etc. If such a platform is targetted, the `OO type system` is
-used while rtyping. Of the OO backends, currently only genclr can translate the
+used while rtyping. Of the OO backends, currently only gencli can translate the
 full PyPy, but the Java backend is getting close.
 
 .. _`oo type system`: rtyper.html#oo-type
@@ -848,6 +859,13 @@
 External Function Calls
 =======================
 
+*Warning* This approach while is still used at the moment by PyPy to
+expose native operations (like ``os.read``, ``os.write``) is going to be
+phased out. It has shown to be too cumbersome in practice. An approach
+based on `rctypes`_ should replace it.
+
+.. _rctypes: rctypes.html
+
 There are some functions that we don't want to implement in Python for various
 reasons (e.g. if they need to make calls into the OS). These can be
 implemented by writing backend code by hand that either implements the

Modified: pypy/branch/ast-experiments/pypy/doc/video-index.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/video-index.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/video-index.txt	Mon Feb 26 08:45:45 2007
@@ -43,8 +43,8 @@
 If you need another license, don't hesitate to contact us. 
 
 
-Trailer: PyPy at the PyCon
---------------------------
+Trailer: PyPy at the PyCon 2006
+-------------------------------
 
 130mb: http://codespeak.net/download/pypy/video/pycon-trailer.avi.torrent
 
@@ -57,7 +57,7 @@
    :alt: Trailer PyPy at PyCon
    :align: left
 
-This trailer shows the PyPy team at the PyCon, a behind-the-scenes at sprints, talks and everywhere else.
+This trailer shows the PyPy team at the PyCon 2006, a behind-the-scenes at sprints, talks and everywhere else.
 
 PAL, 9 min, DivX AVI
 
@@ -75,7 +75,7 @@
    :alt: Interview with Tim Peters
    :align: left
 
-Interview with CPython core developer Tim Peters at this years PyCon, Dallas, US.  2.3.2006
+Interview with CPython core developer Tim Peters at PyCon 2006, Dallas, US. (2006-03-02)
 
 PAL, 23 min, DivX AVI
 
@@ -95,7 +95,7 @@
    :alt: Interview with Bob Ippolito
    :align: left
 
-What do you think about PyPy? Interview with American software developer Bob Ippolito at this years PyCon, Dallas, US.  1.3.2006
+What do you think about PyPy? Interview with American software developer Bob Ippolito at tPyCon 2006, Dallas, US. (2006-03-01)
 
 PAL 8 min, DivX AVI
 
@@ -112,10 +112,10 @@
 
 .. image:: image/introductory-talk-pycon.jpg
    :scale: 100
-   :alt: Introductory talk at PyCon
+   :alt: Introductory talk at PyCon 2006
    :align: left
 
-This introductory talk is given by core developers Michael Hudson and Christian Tismer at the PyCon, Dallas, US. 26.2.2006
+This introductory talk is given by core developers Michael Hudson and Christian Tismer at PyCon 2006, Dallas, US. (2006-02-26)
 
 PAL, 28 min, divx AVI
 
@@ -138,7 +138,7 @@
    :alt: Agile talk
    :align: left
 
-Core developer Holger Krekel and project manager Beatrice During are giving a talk on the agile open source methods used in the PyPy project at the PyCon, Dallas, US. 26.2.2006
+Core developer Holger Krekel and project manager Beatrice During are giving a talk on the agile open source methods used in the PyPy project at PyCon 2006, Dallas, US. (2006-02-26)
 
 PAL, 26 min, divx AVI
 
@@ -161,7 +161,7 @@
    :alt: Architecture session
    :align: left
 
-This architecture session is given by core developers Holger Krekel and Armin Rigo at the PyCon, Dallas, US. 26.2.2006
+This architecture session is given by core developers Holger Krekel and Armin Rigo at PyCon 2006, Dallas, US. (2006-02-26)
 
 PAL, 48 min, divx AVI
 
@@ -184,7 +184,7 @@
    :alt: Sprint Tutorial
    :align: left
 
-Sprint tutorial by core developer Michael Hudson at the PyCon sprint, Dallas, US.  27.2.2006
+Sprint tutorial by core developer Michael Hudson at PyCon 2006, Dallas, US. (2006-02-27)
 
 PAL, 44 min, divx AVI
 

Modified: pypy/branch/ast-experiments/pypy/doc/windows.txt
==============================================================================
--- pypy/branch/ast-experiments/pypy/doc/windows.txt	(original)
+++ pypy/branch/ast-experiments/pypy/doc/windows.txt	Mon Feb 26 08:45:45 2007
@@ -112,6 +112,6 @@
 
 
 .. _`Boehm collector suite`: http://www.hpl.hp.com/personal/Hans_Boehm/gc/gc_source/gc.tar.gz
-.. _gc_patch_windows.py:    http://codespeak.net/pypy/dist/pypy/translator/goal/win32/gc_patch_windows.py
+.. _gc_patch_windows.py:    ../../pypy/translator/goal/win32/gc_patch_windows.py
 
 .. _`gc-windows.zip`: http://codespeak.net/~antocuni/gc-windows.zip

Modified: pypy/branch/ast-experiments/pypy/jit/codegen/llvm/rgenop.py
==============================================================================
--- pypy/branch/ast-experiments/pypy/jit/codegen/llvm/rgenop.py	(original)
+++ pypy/branch/ast-experiments/pypy/jit/codegen/llvm/rgenop.py	Mon Feb 26 08:45:45 2007
@@ -729,6 +729,7 @@
             try:
                 funcsig = self.rgenop.funcsig[gv_fnptr.get_integer_value()]
             except KeyError:
+                funcsig = 'TODO: funcsig here'
                 py.test.skip('call an address directly not supported yet')
         args_gv2 = []
         for v in args_gv:

Modified: pypy/branch/ast-experiments/pypy/lang/automata/test/test_dfa.py
==============================================================================
--- pypy/branch/ast-experiments/pypy/lang/automata/test/test_dfa.py	(original)
+++ pypy/branch/ast-experiments/pypy/lang/automata/test/test_dfa.py	Mon Feb 26 08:45:45 2007
@@ -2,13 +2,6 @@
 from pypy import conftest
 
 from pypy.rpython.test.test_llinterp import interpret
-from pypy.translator.translator import graphof
-from pypy.jit.timeshifter.test.test_timeshift import hannotate
-from pypy.jit.timeshifter.hrtyper import HintRTyper
-from pypy.jit.timeshifter.test.test_timeshift import P_NOVIRTUAL
-from pypy.rpython.llinterp import LLInterpreter
-from pypy.objspace.flow.model import checkgraph
-from pypy.rlib.objectmodel import hint
 
 from pypy.lang.automata.dfa import *
 

Modified: pypy/branch/ast-experiments/pypy/lang/js/driver.py
==============================================================================
--- pypy/branch/ast-experiments/pypy/lang/js/driver.py	(original)
+++ pypy/branch/ast-experiments/pypy/lang/js/driver.py	Mon Feb 26 08:45:45 2007
@@ -5,6 +5,7 @@
 import py
 import os
 import sys
+from subprocess import *
 
 pwd = path.local(__file__)
 shell = pwd.dirpath('test', 'ecma', 'shell.js')
@@ -22,10 +23,12 @@
 results = open('results.txt', 'w')
 for f in pwd.dirpath('test', 'ecma').visit(filter):
     print f.basename
-    stdout = os.popen('./js_interactive.py -n -f %s -f %s'%(shell.strpath,f.strpath), 'r')
+    cmd = './js_interactive.py -n -f %s -f %s'%(shell, f)
+    p = Popen(cmd, shell=True, stdout=PIPE)
+    
     passed = 0
     total = 0
-    for line in stdout.readlines():
+    for line in p.stdout.readlines():
         if "PASSED!" in line:
             passed += 1
             total += 1
@@ -34,6 +37,3 @@
         
     results.write('%s passed %s of %s tests\n'%(f.basename, passed, total))
     results.flush()
-
-            
-            

Modified: pypy/branch/ast-experiments/pypy/lang/js/interpreter.py
==============================================================================
--- pypy/branch/ast-experiments/pypy/lang/js/interpreter.py	(original)
+++ pypy/branch/ast-experiments/pypy/lang/js/interpreter.py	Mon Feb 26 08:45:45 2007
@@ -62,6 +62,7 @@
 class UnaryOp(Expression):
     def from_tree(self, t):
         self.expr = get_obj(t, '0')
+        self.postfix = bool(get_string(t, 'postfix'))
 
 class BinaryOp(Expression):
     def from_tree(self, t):
@@ -79,6 +80,17 @@
     def decision(self, ctx, op1, op2):
         raise NotImplementedError
 
+class BinaryBitwiseOp(BinaryOp):
+    def eval(self, ctx):
+        s5 = self.left.eval(ctx).GetValue().ToInt32()
+        s6 = self.right.eval(ctx).GetValue().ToInt32()
+        if DEBUG:
+            print "bitwisecomp, op1 and op2 ", s2, s4
+        return self.decision(ctx, s5, s6)
+    
+    def decision(self, ctx, op1, op2):
+        raise NotImplementedError
+
 class BinaryLogicOp(BinaryOp):
     pass
 
@@ -150,7 +162,7 @@
 class Interpreter(object):
     """Creates a js interpreter"""
     def __init__(self):
-        w_Global = W_Object()
+        w_Global = W_Object(Class="global")
         ctx = global_context(w_Global)
 
         w_ObjPrototype = W_Object(Prototype=None, Class='Object')
@@ -174,6 +186,8 @@
         w_Global.Put('Math', w_math)
         w_math.Put('abs', W_Builtin(absjs, Class='function'))
         w_math.Put('floor', W_Builtin(floorjs, Class='function'))
+        w_math.Put('E', W_Number(math.e))
+        w_math.Put('PI', W_Number(math.pi))
         
         w_Global.Put('String', W_Builtin(stringjs, Class='String'))
         
@@ -234,15 +248,27 @@
         v3 = self.right.eval(ctx).GetValue()
         op = self.value
         if op == "=":
-            v1.PutValue(v3, ctx)
+            val = v3
         elif op == "*":
-            v1.PutValue(Mult().mathop(ctx, v1.GetValue(), v3), ctx)
+            val = Mult().mathop(ctx, v1.GetValue(), v3)
         elif op == "+":
-            v1.PutValue(Plus().mathop(ctx, v1.GetValue(), v3), ctx)
+            val = Plus().mathop(ctx, v1.GetValue(), v3)
+        elif op == "/":
+            val = Div().mathop(ctx, v1.GetValue(), v3)
+        elif op == "%":
+            val = Mod().mathop(ctx, v1.GetValue(), v3)
+        elif op == "&":
+            val = BitwiseAnd().mathop(ctx, v1.GetValue(), v3)
+        elif op == "|":
+            val = BitwiseOR().mathop(ctx, v1.GetValue(), v3)
+        elif op == "^":
+            val = BitwiseXOR().mathop(ctx, v1.GetValue(), v3)
         else:
             print op
             raise NotImplementedError()
-        return v3
+        
+        v1.PutValue(val, ctx)
+        return val
 
 class Block(Statement):
     opcode = 'BLOCK'
@@ -262,6 +288,32 @@
             else:
                 raise e
 
+class BitwiseAnd(BinaryBitwiseOp):
+    opcode = 'BITWISE_AND'
+    
+    def decision(self, ctx, op1, op2):
+        return W_Number(op1&op2)
+
+class BitwiseNot(UnaryOp):
+    opcode = 'BITWISE_NOT'
+
+    def eval(self, ctx):
+        op1 = self.expr.eval(ctx).GetValue().ToInt32()
+        return W_Number(~op1)
+
+
+class BitwiseOR(BinaryBitwiseOp):
+    opcode = 'BITWISE_OR'
+    
+    def decision(self, ctx, op1, op2):
+        return W_Number(op1|op2)
+
+class BitwiseXOR(BinaryBitwiseOp):
+    opcode = 'BITWISE_XOR'
+    
+    def decision(self, ctx, op1, op2):
+        return W_Number(op1^op2)
+
 class Unconditional(Statement):
     def from_tree(self, t):
         pieces = get_string(t, 'target').split(',')
@@ -511,6 +563,17 @@
         name = op1.ToString()
         return W_Boolean(op2.HasProperty(name))
 
+class Delete(UnaryOp):
+    opcode = 'DELETE'
+    
+    def eval(self, ctx):
+        r1 = self.expr.eval(ctx)
+        if not isinstance(r1, W_Reference):
+            return W_Boolean(True)
+        r3 = r1.GetBase()
+        r4 = r1.GetPropertyName()
+        return W_Boolean(r3.Delete(r4))
+
 class Increment(UnaryOp):
     opcode = 'INCREMENT'
         
@@ -520,7 +583,26 @@
         x = val.ToNumber()
         resl = Plus().mathop(ctx, W_Number(x), W_Number(1))
         thing.PutValue(resl, ctx)
-        return val
+        if self.postfix:
+            return val
+        else:
+            return resl
+        
+
+class Decrement(UnaryOp):
+    opcode = 'DECREMENT'
+        
+    def eval(self, ctx):
+        thing = self.expr.eval(ctx)
+        val = thing.GetValue()
+        x = val.ToNumber()
+        resl = Plus().mathop(ctx, W_Number(x), W_Number(-1))
+        thing.PutValue(resl, ctx)
+        if self.postfix:
+            return val
+        else:
+            return resl
+
 
 class Index(BinaryOp):
     opcode = 'INDEX'
@@ -807,14 +889,22 @@
         self.expr.eval(ctx)
         return w_Undefined
 
-class While(Statement):
-    opcode = 'WHILE'
-    
+class WhileBase(Statement):
     def from_tree(self, t):
         self.condition = get_obj(t, 'condition')
         self.body = get_obj(t, 'body')
 
+class Do(WhileBase):
+    opcode = 'DO'
+    
     def execute(self, ctx):
+        try:
+            self.body.execute(ctx)
+        except ExecutionReturned, e:
+            if e.type == 'break':
+                return
+            elif e.type == 'continue':
+                pass
         while self.condition.eval(ctx).ToBoolean():
             try:
                 self.body.execute(ctx)
@@ -823,7 +913,44 @@
                     break
                 elif e.type == 'continue':
                     continue
+    
+class While(WhileBase):
+    opcode = 'WHILE'
+    
+    def execute(self, ctx):
+        while self.condition.eval(ctx).ToBoolean():
+            try:
+                self.body.execute(ctx)
+            except ExecutionReturned, e:
+                if e.type == 'break':
+                    break
+                elif e.type == 'continue':
+                    continue
+
+class ForIn(Statement):
+    opcode = 'FOR_IN'
+    
+    def from_tree(self, t):
+        self.object = get_obj(t, 'object')
+        self.body = get_obj(t, 'body')
+        self.iterator = get_obj(t, 'iterator')
 
+    def execute(self, ctx):
+        obj = self.object.eval(ctx).GetValue().ToObject()
+        for prop in obj.propdict.values():
+            if prop.de:
+                continue
+            iterator = self.iterator.eval(ctx)
+            print prop.name
+            iterator.PutValue(prop.value, ctx)
+            try:
+                result = self.body.execute(ctx)
+            except ExecutionReturned, e:
+                if e.type == 'break':
+                    break
+                elif e.type == 'continue':
+                    continue
+    
 class For(Statement):
     opcode = 'FOR'
 
@@ -926,3 +1053,16 @@
     else:
         raise NotImplementedError("Dont know how to handle %s" % opcode)
 
+def wrap_arguments(pyargs):
+    "receives a list of arguments and wrap then in their js equivalents"
+    res = []
+    for arg in pyargs:
+        if isinstance(arg, W_Root):
+            res.append(arg)
+        elif isinstance(arg, str):
+            res.append(W_String(arg))
+        elif isinstance(arg, int) or isinstance(arg, float) or isinstance(arg, long):
+            res.append(W_Number(arg))
+        elif isinstance(arg, bool):
+            res.append(W_Boolean(arg))
+    return res
\ No newline at end of file

Modified: pypy/branch/ast-experiments/pypy/lang/js/js_interactive.py
==============================================================================
--- pypy/branch/ast-experiments/pypy/lang/js/js_interactive.py	(original)
+++ pypy/branch/ast-experiments/pypy/lang/js/js_interactive.py	Mon Feb 26 08:45:45 2007
@@ -156,4 +156,6 @@
             print res        
 
 if __name__ == "__main__":
+    import py
+    py.test.config.parse([])
     sys.exit(main())

Modified: pypy/branch/ast-experiments/pypy/lang/js/jsobj.py
==============================================================================
--- pypy/branch/ast-experiments/pypy/lang/js/jsobj.py	(original)
+++ pypy/branch/ast-experiments/pypy/lang/js/jsobj.py	Mon Feb 26 08:45:45 2007
@@ -5,18 +5,20 @@
 class SeePage(NotImplementedError):
     pass
 
-class ExecutionReturned(Exception):
+class JsBaseExcept(Exception): pass
+
+class ExecutionReturned(JsBaseExcept):
     def __init__(self, type='normal', value=None, identifier=None):
         self.type = type
         self.value = value
         self.identifier = identifier
 
-class ThrowException(Exception):
+class ThrowException(JsBaseExcept):
     def __init__(self, exception):
         self.exception = exception
         self.args = self.exception
 
-class JsTypeError(Exception):
+class JsTypeError(JsBaseExcept):
     pass
 
 Infinity = 1e300 * 1e300
@@ -59,6 +61,9 @@
     def ToNumber(self):
         return NaN
     
+    def ToInt32(self):
+        return 0
+    
     def Get(self, P):
         raise NotImplementedError
     
@@ -122,7 +127,7 @@
                  Value=w_Undefined, callfunc=None):
         self.propdict = {}
         self.propdict['prototype'] = Property('prototype', w_Undefined,
-                                              dd=True)
+                                              dd=True, de=True)
         self.Prototype = Prototype
         self.Class = Class
         self.callfunc = callfunc
@@ -189,7 +194,7 @@
         if self.Prototype is None: return False
         return self.Prototype.HasProperty(P) 
     
-    def Delete(P):
+    def Delete(self, P):
         if P in self.propdict:
             if self.propdict[P].dd: return False
             del self.propdict[P]
@@ -237,7 +242,7 @@
                  Value=w_Undefined, callfunc=None):
         W_PrimitiveObject.__init__(self, ctx, Prototype,
                                    Class, Value, callfunc)
-        self.propdict['toString'] = Property('toString', W_Builtin(str_builtin))
+        self.propdict['toString'] = Property('toString', W_Builtin(str_builtin), de=True)
 
 
 class W_Builtin(W_PrimitiveObject):
@@ -281,13 +286,13 @@
                  Value=w_Undefined, callfunc=None):
         W_PrimitiveObject.__init__(self, ctx, Prototype, Class, Value, callfunc)
         toString = W_Builtin(array_str_builtin)
-        self.Put('toString', toString)
+        self.Put('toString', toString, de=True)
         self.Put('length', W_Number(0))
         self.array = []
         self.set_builtin_call(arraycallbi)
-    
-    
-    def Put(self, P, V):
+
+    def Put(self, P, V, dd=False,
+            ro=False, de=False, it=False):
         try:
             x = int(P)
             # print "puting", V, 'in', x
@@ -299,11 +304,7 @@
             self.array[x]= V
                     
         except ValueError:
-            if not self.CanPut(P): return
-            if P in self.propdict:
-                self.propdict[P].value = V
-            else:
-                self.propdict[P] = Property(P, V)
+            super(W_Array, self).Put(P, V, dd, ro, de, it)
 
     def Get(self, P):
         try:
@@ -393,6 +394,9 @@
 
     def type(self):
         return 'number'
+    
+    def ToInt32(self):
+        return int(self.floatval)
 
 class W_List(W_Root):
     def __init__(self, list_w):
@@ -493,6 +497,7 @@
         if self.base is None:
             base = ctx.scope[-1]
         base.Put(self.property_name, w)
+        return w
 
     def GetBase(self):
         return self.base

Modified: pypy/branch/ast-experiments/pypy/lang/js/test/ecma/shell.js
==============================================================================
--- pypy/branch/ast-experiments/pypy/lang/js/test/ecma/shell.js	(original)
+++ pypy/branch/ast-experiments/pypy/lang/js/test/ecma/shell.js	Mon Feb 26 08:45:45 2007
@@ -50,7 +50,7 @@
 var PASSED = " PASSED!"
 var FAILED = " FAILED! expected: ";
 
-var DEBUG = false;
+var DEBUG = true;
 
 var DESCRIPTION;
 var EXPECTED;
@@ -124,23 +124,23 @@
 }
 
 function test() {
-  for ( tc=0; tc < testcases.length; tc++ ) {
-    // temporary hack to work around some unknown issue in 1.7
-    try
-    {
-    testcases[tc].passed = writeTestCaseResult(
-      testcases[tc].expect,
-      testcases[tc].actual,
-      testcases[tc].description +" = "+ testcases[tc].actual );
-    testcases[tc].reason += ( testcases[tc].passed ) ? "" : "wrong value ";
-    }
-    catch(e)
-    {
-      print('test(): empty testcase for tc = ' + tc + ' ' + e);
-    }
-  }
-  stopTest();
-  return ( testcases );
+  // for ( tc=0; tc < testcases.length; tc++ ) {
+  //    // temporary hack to work around some unknown issue in 1.7
+  //    try
+  //    {
+  //    testcases[tc].passed = writeTestCaseResult(
+  //      testcases[tc].expect,
+  //      testcases[tc].actual,
+  //      testcases[tc].description +" = "+ testcases[tc].actual );
+  //    testcases[tc].reason += ( testcases[tc].passed ) ? "" : "wrong value ";
+  //    }
+  //    catch(e)
+  //    {
+  //      print('test(): empty testcase for tc = ' + tc + ' ' + e);
+  //    }
+  //  }
+  //  stopTest();
+    return testcases.length
 }
 
 /*
@@ -193,6 +193,16 @@
  * document.write.
  */
 
+function run_test(tc) {
+    // try {
+        getTestCaseResult(testcases[tc].expect, testcases[tc].actual)
+        testcases[tc].reason += ( testcases[tc].passed ) ? "" : "wrong value ";
+        return testcases[tc].passed? 1:0;
+    // }
+    // catch(e) {
+    //     return -1;
+    // }
+}
 function writeTestCaseResult( expect, actual, string ) {
   var passed = getTestCaseResult( expect, actual );
   writeFormattedResult( expect, actual, string, passed );

Modified: pypy/branch/ast-experiments/pypy/lang/js/test/test_interp.py
==============================================================================
--- pypy/branch/ast-experiments/pypy/lang/js/test/test_interp.py	(original)
+++ pypy/branch/ast-experiments/pypy/lang/js/test/test_interp.py	Mon Feb 26 08:45:45 2007
@@ -454,3 +454,19 @@
     
     def test_unary_plus(self):
         self.assert_prints("print(+1)", ['1'])
+
+    def test_delete(self):
+        self.assert_prints("""
+        var x = {}
+        x.y = 1;
+        delete x.y
+        print(x.y)
+        """, ['undefined'])
+
+    def test_forin(self):
+        self.assert_prints("""
+        var x = {a:5}
+        for(y in x){
+            print(y)
+        }
+        """, ['5',])

Modified: pypy/branch/ast-experiments/pypy/lib/distributed/__init__.py
==============================================================================
--- pypy/branch/ast-experiments/pypy/lib/distributed/__init__.py	(original)
+++ pypy/branch/ast-experiments/pypy/lib/distributed/__init__.py	Mon Feb 26 08:45:45 2007
@@ -1,2 +1,6 @@
 
-from protocol import RemoteProtocol, test_env, remote_loop
+try:
+    from protocol import RemoteProtocol, test_env, remote_loop
+except ImportError:
+    # UGH. This is needed for tests
+    pass

Modified: pypy/branch/ast-experiments/pypy/lib/distributed/objkeeper.py
==============================================================================
--- pypy/branch/ast-experiments/pypy/lib/distributed/objkeeper.py	(original)
+++ pypy/branch/ast-experiments/pypy/lib/distributed/objkeeper.py	Mon Feb 26 08:45:45 2007
@@ -26,8 +26,6 @@
         return len(self.exported_objects) - 1
     
     def ignore(self, key, value):
-        #key not in ('__dict__', '__weakref__', '__class__', '__new__',
-        #        '__base__', '__flags__', '__mro__', '__bases__')]
         if key in ('__dict__', '__weakref__', '__class__', '__new__'):
             return True
         if isinstance(value, GetSetDescriptor):
@@ -39,8 +37,6 @@
             return self.exported_types[tp]
         except KeyError:
             print "Registering type %s as %s" % (tp, self.exported_types_id)
-            if str(tp).find('getset') != -1:
-                import pdb;pdb.set_trace()
             self.exported_types[tp] = self.exported_types_id
             tp_id = self.exported_types_id
             self.exported_types_id += 1
@@ -60,14 +56,11 @@
         if '__doc__' in _dict:
             d['__doc__'] = protocol.unwrap(_dict['__doc__'])
         tp = type(_name, (object,), d)
+        # Make sure we cannot instantiate the remote type
         self.remote_types[type_id] = tp
         for key, value in _dict.items():
             if key != '__doc__':
-                try:
-                    setattr(tp, key, protocol.unwrap(value))
-                except TypeError:
-                    # XXX this stays here for debugging reasons
-                    import pdb;pdb.set_trace()
+                setattr(tp, key, protocol.unwrap(value))
                     
     def get_type(self, id):
         return self.remote_types[id]

Modified: pypy/branch/ast-experiments/pypy/lib/distributed/protocol.py
==============================================================================
--- pypy/branch/ast-experiments/pypy/lib/distributed/protocol.py	(original)
+++ pypy/branch/ast-experiments/pypy/lib/distributed/protocol.py	Mon Feb 26 08:45:45 2007
@@ -39,7 +39,7 @@
     from pypymagic import transparent_proxy as proxy
     from pypymagic import get_transparent_controller
 except ImportError:
-    raise ImportError("Cannot work without transparent proxy functional")
+    raise ImportError("Cannot work without transparent proxy functionality")
 
 from distributed.objkeeper import ObjKeeper
 import sys
@@ -49,9 +49,11 @@
 """
 TODO list:
 
-1. Add some garbage collection
-2. Add caching of objects that are presented (even on name level)
-3. Add exceptions, frames and error handling
+1. Garbage collection - we would like probably to use weakrefs, but
+   since they're not perfectly working in pypy, let's leave it alone for now
+2. Some error handling - exceptions are working, there are still some
+   applications where it all explodes.
+3. Support inheritance and recursive types
 """
 
 from pypymagic import pypy_repr

Modified: pypy/branch/ast-experiments/pypy/lib/distributed/test/test_distributed.py
==============================================================================
--- pypy/branch/ast-experiments/pypy/lib/distributed/test/test_distributed.py	(original)
+++ pypy/branch/ast-experiments/pypy/lib/distributed/test/test_distributed.py	Mon Feb 26 08:45:45 2007
@@ -197,3 +197,14 @@
             #assert tb.tb_next is None
         else:
             raise AssertionError("Did not raise")
+
+    def test_instantiate_remote_type(self):
+        skip("Land of infinite recursion")
+        from distributed import test_env
+
+        class C:
+            pass
+
+        protocol = test_env({'C':C})
+        xC = protocol.get_remote('C')
+        xC()

Modified: pypy/branch/ast-experiments/pypy/lib/pyontology/pyontology.py
==============================================================================
--- pypy/branch/ast-experiments/pypy/lib/pyontology/pyontology.py	(original)
+++ pypy/branch/ast-experiments/pypy/lib/pyontology/pyontology.py	Mon Feb 26 08:45:45 2007
@@ -1,10 +1,15 @@
-import autopath
-from rdflib import Graph, URIRef, BNode, Literal as rdflib_literal
-from logilab.constraint import  Repository
-from logilab.constraint.fd import  FiniteDomain as fd
+#import autopath
+try:
+    from cslib import Repository
+    from cslib.fd import  FiniteDomain as fd
+    print 'using pypy.lib.cslib'
+except ImportError: 
+    print 'using logilab.constraint'
+    from logilab.constraint import  Repository
+    from logilab.constraint.fd import  FiniteDomain as fd
 from logilab.constraint.propagation import AbstractDomain, AbstractConstraint,\
-       ConsistencyFailure
-from pypy.lib.pyontology.sparql_grammar import SPARQLGrammar as SP
+     ConsistencyFailure
+from pyontology.sparql_grammar import SPARQLGrammar as SP # name clash ?
 from constraint_classes import *
 Solver = MySolver
 Expression = MyExpression
@@ -16,6 +21,9 @@
 py.log.setconsumer("Pyontology", None)
 #py.log.setconsumer("Pyontology", ansi_log)
 
+from rdflib import Graph, URIRef, BNode, Literal as rdflib_literal
+
+
 namespaces = {
     'rdf' : 'http://www.w3.org/1999/02/22-rdf-syntax-ns',
     'rdfs' : 'http://www.w3.org/2000/01/rdf-schema',

Modified: pypy/branch/ast-experiments/pypy/lib/pyontology/test/test_ontology.py
==============================================================================
--- pypy/branch/ast-experiments/pypy/lib/pyontology/test/test_ontology.py	(original)
+++ pypy/branch/ast-experiments/pypy/lib/pyontology/test/test_ontology.py	Mon Feb 26 08:45:45 2007
@@ -1,747 +1,803 @@
 # tests for the Ontology class
+import autopath
 import py
+from pypy.conftest import gettestobjspace
 
 try:
-    import logilab.constraint
+    #import logilab.constraint
     import rdflib
 except ImportError:
     import py 
-    py.test.skip("Logilab.constraint and/or rdflib not installed")
+    py.test.skip("rdflib not installed")
 
-from pypy.lib.pyontology.pyontology import * # Ontology, ClassDomain, SubClassConstraint 
+#from pypy.lib.pyontology.pyontology import * # Ontology, ClassDomain, SubClassConstraint 
 from rdflib import Graph, URIRef, BNode
 
 UR = URIRef
-def rdf_list(ont, name, data):
-    owllist = URIRef(name)
-    obj = URIRef(namespaces['rdf']+'#List')
-    ont.type(owllist, obj)
-    own =owllist
-    for i,dat in enumerate(data[:-1]):
-        next = BNode( name + str(i))
-        next,i,dat,own
-        ont.first(own, dat)
-        ont.type(next, obj)
-        ont.rest(own,  next)
-        own = next
-    ont.first(own, data[-1])
-    ont.rest(own,  URIRef(namespaces['rdf']+'#nil'))
-    return owllist
-
-def test_equivalentProperty_inconst():
-    O = Ontology()
-    O.add_file("testinconst.rdf")
-    O.attach_fd()
-    raises(ConsistencyFailure, O.consistency)
-
-def test_XMLSchema_string():
-    O = Ontology()
-    a = URIRef(u'A')
-    p = URIRef(u'P')
-    prop = URIRef(namespaces['rdf']+'#Property')
-    xml_string_uri = URIRef(namespaces['xmlschema']+"#string")
-    O.type(p, prop)
-    O.consider_triple((a, p, rdflib_literal("ddd", datatype=xml_string_uri)))
-    O.range(p, xml_string_uri) 
-    O.consistency()
-
-def test_XMLSchema_string_fail():
-#    py.test.skip("WIP")
-    O = Ontology()
-    a = URIRef(u'A')
-    p = URIRef(u'P')
-    prop = URIRef(namespaces['rdf']+'#Property')
-    xml_string_uri = URIRef(namespaces['xmlschema']+"#string")
-    xml_int_uri= URIRef(namespaces['xmlschema']+"#integer")
-    O.type(p, prop)
-    O.consider_triple((a, p, rdflib_literal(2, datatype = xml_int_uri)))
-    O.range(p, xml_string_uri)
-    raises(ConsistencyFailure, O.consistency)
- 
-def test_makevar():
-    O = Ontology()
-    var = URIRef(u'http://www.w3.org/2002/03owlt/unionOf/premises004#A-and-B')
-    name = O.make_var(ClassDomain, var)
-    cod = name+' = 1'
-    exec cod
-    assert O.make_var(None, var) in locals() 
-    assert isinstance(O.variables[name], ClassDomain)
-
-def test_subClassof():
-    O = Ontology()
-    a = URIRef(u'A')
-    b = URIRef(u'B')
-    c = URIRef(u'C')
-    O.subClassOf(b, a)
-    O.subClassOf(c, b)
-    obj = URIRef(namespaces['owl']+'#Class')
-    O.type(a,obj)
-    O.consistency()
-    O.subClassOf(c, a)
-    O.consistency()
-
-def test_subClassof2():
-    O = Ontology()
-    a = URIRef(u'A')
-    b = URIRef(u'B')
-    c = URIRef(u'C')
-    d = URIRef(u'D')
-    O.subClassOf(b, a)
-    O.subClassOf(c, b)
-    obj = URIRef(namespaces['owl']+'#Class')
-    O.type(a,obj)
-    O.type(d,c)
-    O.consistency()
-    d_indi = O.mangle_name(d)
-    assert Individual(d_indi, d) in O.variables[O.mangle_name(a)].getValues()
-    O.subClassOf(c, a)
-    O.consistency()
-
-def test_addvalue():
-    O = Ontology()
-    a = O.make_var(Property, URIRef('a'))
-    O.variables[a].addValue('key', 42)
-    assert ('key', 42) in O.variables[a]
-    O.variables[a].addValue('key', 43)
-    assert list(O.variables[a].getValues()) == [('key', 42), ('key', 43)]
-
-def no_test_ClassDomain():
-    a = ClassDomain()
-    cls =  1
-    b = ClassDomain('B',[],[a])
-    assert b in b
-    assert a in b
-
-def test_subClassconstraint():
-    a = ClassDomain('A')
-    b = ClassDomain('B')
-    c = ClassDomain('C')
-    con = SubClassConstraint('b','a')
-    con2 = SubClassConstraint('c','b')
-    indi = URIRef('indi')
-    c.setValues([Individual('indi_',indi)])
-    con.narrow({'a': a, 'b': b, 'c': c}) 
-    con2.narrow({'a': a, 'b': b, 'c': c})
-    con.narrow({'a': a, 'b': b, 'c': c}) 
-    assert Individual('indi_', indi) in a
-
-def test_subClassconstraintMulti():
-    a = ClassDomain('A')
-    b = ClassDomain('B')
-    c = ClassDomain('C')
-    indi = URIRef('indi')
-    c.setValues([Individual('indi_',indi)])
-    con = SubClassConstraint('c','a')
-    con2 = SubClassConstraint('c','b')
-    con.narrow({'a': a, 'b': b, 'c': c}) 
-    con2.narrow({'a': a, 'b': b, 'c': c})
-    assert Individual('indi_', indi) in a
-    assert Individual('indi_', indi) in b
-
-def test_subClassconstraintMulti2():
-    a = ClassDomain('A')
-    b = ClassDomain('B')
-    c = ClassDomain('C')
-    indi = URIRef('indi')
-    c.setValues([Individual('indi_',indi)])
-    con = SubClassConstraint('c','a')
-    con2 = SubClassConstraint('c','b')
-    con3 = SubClassConstraint('a','c')
-    con.narrow({'a': a, 'b': b, 'c': c}) 
-    con2.narrow({'a': a, 'b': b, 'c': c})
-    con3.narrow({'a': a, 'b': b, 'c': c})
-    assert Individual('indi_', indi) in a
-    assert Individual('indi_', indi) in b
-    assert Individual('indi_', indi) in c
-
-def test_equivalentClass():
-    O = Ontology()
-    a = O.make_var(ClassDomain,URIRef('A'))
-    b = O.make_var(ClassDomain,URIRef('B'))
-    c = O.make_var(ClassDomain,URIRef('C'))
-    O.equivalentClass(c, a)
-    O.equivalentClass(c, b)
-    A = O.make_var(ClassDomain, a)
-    B = O.make_var(ClassDomain, b)
-    assert O.variables[A].values == O.variables[B].values
-
-def test_type():
-    sub = URIRef('a')
-    pred = URIRef('type')
-    obj = URIRef('o')
-    O = Ontology()
-    O.make_var(ClassDomain, obj)
-    O.type(sub, obj)
-    O.type(obj, namespaces['owl']+"#Class")
-    
-    assert list(O.variables[O.make_var(None, obj)].getValues())[0].__class__  == Individual 
-
-# test for multiple types
-# test for type hierarchy
-
-def test_ObjectProperty():
-    sub = URIRef('a')
-    obj = URIRef(namespaces['owl']+'#ObjectProperty')
-    O = Ontology()
-    O.type(sub, obj)
-    assert O.variables[O.make_var(None, sub)].__class__  == ObjectProperty
-
-def test_range():
-    O = Ontology()
-    sub = URIRef('a')
-    obj = URIRef('b')
-    O.variables['b_'] = ClassDomain(values=[1,2,3,4])
-    O.range(sub, obj)
-    sub = URIRef('a')
-    pred = URIRef('type')
-    obj = URIRef(namespaces['owl']+'#ObjectProperty')
-    O.type(sub, obj)
-    #assert len(O.constraints) == 1
-    O.constraints[0].narrow(O.variables)
-
-def test_merge():
-    O = Ontology()
-    sub = URIRef('a')
-    obj = URIRef('b')
-    O.variables['b_'] = ClassDomain(values=[1,2,3,4])
-    O.range(sub, obj)
-    obj = URIRef('c')
-    O.variables['c_'] = ClassDomain(values=[3,4,5,6])
-    O.range(sub, obj)
-    sub = URIRef('a')
-    pred = URIRef('type')
-    obj = URIRef(namespaces['owl']+'#ObjectProperty')
-    O.type(sub, obj)
-    #assert len(O.constraints) == 2
-    O.consistency()
-
-def test_domain():
-    O = Ontology()
-    sub = URIRef('a')
-    obj = URIRef('b')
-    O.variables['b_'] = ClassDomain('b')
-    O.domain(sub, obj)
-    sub = URIRef('a')
-    pred = URIRef('type')
-    obj = URIRef(namespaces['owl']+'#ObjectProperty')
-    O.type(sub, obj)
-    #assert len(O.constraints) == 1
-    O.constraints[0].narrow(O.variables)
-
-def test_domain_merge():
-    O = Ontology()
-    sub = URIRef('a')
-    obj = URIRef('b')
-    O.variables['b_'] = ClassDomain('b')
-    O.domain(sub, obj)
-    obj = URIRef('c')
-    O.variables['c_'] = ClassDomain('c')
-    O.domain(sub, obj)
-    obj = URIRef(namespaces['owl']+'#ObjectProperty')
-    O.type(sub, obj)
-    
-    #assert len(O.constraints) == 2
-    for con in O.constraints:
-        con.narrow(O.variables)
-    assert O.variables['a_'].size() == 0 
-
-def test_subproperty():
-    O = Ontology()
-    sub = URIRef('a')
-    obj = URIRef(namespaces['owl']+'#ObjectProperty')
-    O.type(sub, obj)
-    b = URIRef('b')
-    O.type(b, obj)
-    O.variables['a_'].setValues([('individ_',42)])
-    O.subPropertyOf(sub, b)
-    O.consistency()
-    for val in O.variables['a_'].getValues():
-        assert  val in O.variables['b_']
-
-def test_functionalproperty():
-    
-    O = Ontology()
-    #Make functional property
-    sub = URIRef('p')
-    obj = URIRef(namespaces['owl']+'#FunctionalProperty')
-    O.type(sub, obj)
-    #Make class
-    sub = URIRef('c')
-    obj = URIRef(namespaces['owl']+'#Class')
-    O.type(sub, obj)
-    #Make individual with a value of the property
-    sub = URIRef('individ')
-    obj = URIRef('c')
-    O.type(sub, obj)
-    O.variables['p_'].setValues([('individ',42)])
-    #add another valueof the property
-    O.variables['p_'].addValue('individ',43)
-    py.test.raises(ConsistencyFailure, O.consistency )
-    #check that consistency raises
-
-def test_inversefunctionalproperty():
-    
-    O = Ontology()
-    #Make functional property
-    sub = URIRef('p')
-    obj = URIRef(namespaces['owl']+'#InverseFunctionalProperty')
-    O.type(sub, obj)
-    #Make class
-    sub = URIRef('c')
-    obj = URIRef(namespaces['owl']+'#Class')
-    O.type(sub, obj)
-    #Make individual with a value of the property
-    sub = URIRef('individ')
-    obj = URIRef('c')
-    O.type(sub, obj)
-    O.variables['p_'].setValues([('individ_',42)])
-    #assert len(O.constraints) == 2
-    #add another individual with the same value for the property
-    sub = URIRef('individ2')
-    obj = URIRef('c')
-    O.type(sub, obj)
-    py.test.raises(ConsistencyFailure, O.variables['p_'].setValues, [('individ_',42),('individ2_',42)])
-    
-def test_Transitiveproperty():
-    O = Ontology()
-    #Make functional property
-    subreg = URIRef('subRegionOf')
-    obj = URIRef(namespaces['owl']+'#TransitiveProperty')
-    O.type(subreg, obj)
-    #Make class
-    sub = URIRef('c')
-    obj = URIRef(namespaces['owl']+'#Class')
-    O.type(sub, obj)
-    #Make individual with a value of the property
-    it = URIRef('Italy')
-    obj = URIRef('c')
-    O.type(it, obj)
-    tus = URIRef('Tuscanny')
-    O.type(tus, obj)
-    chi = URIRef('Chianti')
-    O.type(chi, obj)
-#    O.variables['subRegionOf_'].setValues([('Italy_','Tuscanny_'),('Tuscanny_','Chianti_')])
-    O.consider_triple((tus, subreg, it))
-    O.consider_triple((chi, subreg, tus))
-    O.consistency()
-    assert Individual('Italy_', it) in O.variables['subRegionOf_'].getValuesPrKey(Individual('Chianti',chi))
-    
-def test_symmetricproperty():    
-    O = Ontology()
-    #Make functional property
-    sub = URIRef('friend')
-    obj = URIRef(namespaces['owl']+'#SymmetricProperty')
-    O.type(sub, obj)
-    assert O.variables[O.make_var(None, sub)].__class__.__name__=='SymmetricProperty'
-    #Make class
-    sub = URIRef('c')
-    obj = URIRef(namespaces['owl']+'#Class')
-    O.type(sub, obj)
-    #Make individual with a value of the property
-    sub = URIRef('Bob')
-    obj = URIRef('c')
-    O.type(sub, obj)
-    sub = URIRef('Alice')
-    O.type(sub, obj)
-    O.variables['friend_'].setValues([('Bob_','Alice_')])
-    O.consistency()
-    assert ('Alice_', 'Bob_') in O.variables['friend_']
-
-def test_inverseof():
-    O = Ontology()
-    own = URIRef('owner')
-    obj = URIRef(namespaces['owl']+'#ObjectProperty')
-    O.type(own, obj)
-    owned = URIRef('ownedby')
-    obj = URIRef(namespaces['owl']+'#ObjectProperty')
-    O.type(owned, obj)
-    #Make class
-    sub = URIRef('c')
-    obj = URIRef(namespaces['owl']+'#Class')
-    O.type(sub, obj)
-    #Make individual with a property value
-    sub = URIRef('Bob')
-    obj = URIRef('c')
-    O.type(sub, obj)
-    sub = URIRef('Fiat')
-    obj = URIRef('car')
-    O.type(sub, obj)
-    O.variables['owner_'].setValues([('Bob_','Fiat_')])
-    O.inverseOf(own, owned)
-    O.consistency()
-    assert ('Fiat_','Bob_') in O.variables['ownedby_']
-    
-def test_hasvalue():
-  #  py.test.skip("")
-    O = Ontology()
-    cls = URIRef('class')
-    obj = URIRef(namespaces['owl']+'#Thing')
-    O.type(cls, obj)
-    restrict = BNode('anon1')
-    obj = URIRef(namespaces['owl']+'#Restriction')
-    O.type(restrict, obj)
-    p = URIRef('p')
-    obj = URIRef(namespaces['owl']+'#ObjectProperty')
-    O.type(p, obj)
-    O.consider_triple((cls, p, 2))
-    O.onProperty(restrict,p)
-    O.consider_triple((cls, p, 1))
-    O.hasValue(restrict, 2)
-#    O.type(2, URIRef(namespaces['owl']+'#Thing'))
-#    O.type(1, URIRef(namespaces['owl']+'#Thing'))
-    
-    cls2 = URIRef('class2')
-    obj = URIRef(namespaces['owl']+'#Thing')
-    O.type(cls2, obj)
-    O.subClassOf(cls2,restrict)
-    O.variables[O.make_var(None, cls2)].finish(O.variables, O.constraints) 
-    O.consistency()
-    assert cls in O.variables[O.make_var(None, cls2)]
-#    py.test.raises(ConsistencyFailure, O.consistency)
-
-def test_List():
-    py.test.skip("Need to be rewritten using RDF-XML")
-    O = Ontology()
-    own = URIRef('favlist')
-    obj = URIRef(namespaces['rdf']+'#List')
-    O.type(own, obj)
-    O.first(own, 0)
-    O.rest(own,  URIRef('1'))
-    O.first( URIRef('1'), 1)
-    O.rest( URIRef('1'),  URIRef('2'))
-    O.first( URIRef('2'), 2)
-    O.rest( URIRef('2'),  URIRef(namespaces['rdf']+'#nil'))
-    O.flatten_rdf_list(own)
-    O.consistency()
-    assert list(O.rep._domains['favlist_'].getValues()) == [0,1,2]
-
-def test_oneofclassenumeration():
-    O = Ontology()
-    restrict = BNode('anon')
-    own = [UR('first'), UR('second'), UR('third')]
-    O.oneOf(restrict, own)
-    O.type(restrict, UR(namespaces['owl']+'#Class'))
-    O.consistency()
-    assert O.rep._domains[restrict].size()== 3
-    assert set(O.rep._domains[restrict].getValues()) == set(own)
-
-def test_unification_of_two_oneofclassenumeration():
-    O = Ontology()
-    restrict = BNode('anon')
-    own = [UR('first'), UR('second'), UR('third')]
-    for i in own:
-        O.type(i,UR(namespaces['owl']+'#Thing'))
-    O.oneOf(restrict, own)
-    restrict1 = BNode('anon1')
-    own = [UR('second'), UR('third'), UR('first')]
-    O.oneOf(restrict1, own)
-    O.type(UR('test'), UR(namespaces['owl']+'#Thing'))
-    O.type(UR('test'), restrict)
-    O.type(UR('test'), restrict1)
-    O.consistency()
-    assert O.rep._domains[restrict].size() == 3
-    assert set(O.rep._domains[restrict].getValues()) == set(own)
-
-
-def test_oneofdatarange():
-    O = Ontology()
-    restrict = BNode('anon')
-    own = ['1','2','3'] 
-    O.oneOf(restrict, own)
-    O.type(restrict, UR(namespaces['owl']+'#DataRange'))
-    O.consistency()
-    assert O.rep._domains[restrict].size() == 3
-    assert set(O.rep._domains[restrict].getValues()) == set(own)
-
-def test_somevaluesfrom_datarange():
-    py.test.skip("reconsider if the test is correct - make it simpler")
-    O = Ontology()
-    datarange = BNode('anon')
-    own =  ['1','2','3']
-    O.oneOf(datarange, own)
-    O.type(datarange, namespaces['owl']+'#DataRange')
-    restrict = BNode('anon1')
-    obj = URIRef(namespaces['owl']+'#Restriction')
-    O.type(restrict, obj)
-    p = URIRef('p')
-    obj = URIRef(namespaces['owl']+'#ObjectProperty')
-    O.type(p, obj)
-    cls = URIRef('class')
-    obj = URIRef(namespaces['owl']+'#Class')
-    O.type(cls, obj)
-    O.variables['p_'].setValues([(cls,'1')])
-    O.onProperty(restrict,p)
-    O.someValuesFrom(restrict, datarange)
-    O.subClassOf(cls,restrict)
-    O.consistency()
-    assert cls in O.variables[O.make_var(None, cls)]
-
-def test_allvaluesfrom_datarange():
-    py.test.skip("")
-    O = Ontology()
-    datarange = BNode('anon')
-    own = ['1','2','3']
-    O.oneOf(datarange, own)
-    O.type(datarange, namespaces['owl']+'#DataRange')
-    restrict = BNode('anon1')
-    obj = URIRef(namespaces['owl']+'#Restriction')
-    O.type(restrict, obj)
-    p = URIRef('p')
-    obj = URIRef(namespaces['owl']+'#ObjectProperty')
-    O.type(p, obj)
-    cls = URIRef('class')
-    O.variables['p_'].setValues([(cls,'1'),(cls,'2'),(cls,'3')])
-    obj = URIRef(namespaces['owl']+'#Class')
-    O.type(cls, obj)
-    O.onProperty(restrict,p)
-    O.allValuesFrom(restrict, datarange)
-    O.subClassOf(cls,restrict)
-    assert cls in O.variables[O.make_var(None, cls)]
-
-def test_unionof():
-    #py.test.skip("Rewrite the test")
-    O = Ontology()
-    cls = BNode('anon')
-    own1 = BNode('liist1')
-    own2 = BNode('liist2')
-    list1 =  ['1', '2', '3'] 
-    list2 =  ['3', '4', '5'] 
-    own = [own1, own2] 
-    O.oneOf( own1, list1)
-    O.oneOf( own2, list2)
-    O.unionOf(cls, own)
-    O.type(cls, namespaces['owl']+'#Class')
-    O.consistency()
-    res = list(O.rep._domains[cls].getValues())
-    res.sort()
-    assert set(res) == set([Individual(x,x) for x in ['1', '2', '3', '4', '5']])
-
-def test_intersectionof():
-    py.test.skip("Rewrite the test")
-    O = Ontology()
-    cls = BNode('anon')
-    O.intersectionOf(cls, [['1','2','3'],['3','4','5']])
-    O.type(cls, namespaces['owl']+'#Class')
-    O.consistency()
-    assert list(O.rep._domains[cls].getValues()) == ['3']
-
-def test_differentfrom():
-    O = Ontology()
-    cls = BNode('anon')
-    own1 = BNode('liist1')
-    own2 = BNode('liist2')
-    O.differentFrom(cls, own1)
-    O.differentFrom(own1, own2)
-    O.differentFrom(cls, own2)
-    O.differentFrom(own2,cls)
-    O.type(cls, UR(namespaces['owl']+'#Thing'))
-    O.type(own1, UR(namespaces['owl']+'#Thing'))
-    O.type(own2, UR(namespaces['owl']+'#Thing'))
-    O.consistency()
-    #assert len(O.rep._constraints) == 4
-
-def test_differentfromconsistency():
-    O = Ontology()
-    cls = BNode('anon')
-    O.differentFrom(cls, cls)
-    O.type(cls, UR(namespaces['owl']+'#Thing'))
-    py.test.raises(ConsistencyFailure, O.consistency)
-
-def test_sameas():
-    O = Ontology()
-    cls = BNode('anon')
-    own1 = BNode('liist1')
-    own2 = BNode('liist2')
-    O.sameAs(cls, own1)
-    O.sameAs(own1, own2)
-    O.sameAs(cls, own2)
-    O.type(cls, UR(namespaces['owl']+'#Thing'))
-    O.type(own1, UR(namespaces['owl']+'#Thing'))
-    O.type(own2, UR(namespaces['owl']+'#Thing'))
-    sub = URIRef('a')
-    obj = URIRef(namespaces['owl']+'#ObjectProperty')
-    O.type(sub, obj)
-    O.variables[O.make_var(None,sub)].setValues([(cls,'1')])
-    O.consistency()
-    assert ('liist1','1') in O.rep._domains[O.make_var(None,sub)]
-
-def test_sameasconsistency():
-    O = Ontology()
-    cls = BNode('anon')
-    own1 = BNode('liist1')
-    O.sameAs(cls, own1)
-    O.type(cls, UR(namespaces['owl']+'#Thing'))
-    O.type(own1, UR(namespaces['owl']+'#Thing'))
-    sub = URIRef('a')
-    obj = URIRef(namespaces['owl']+'#ObjectProperty')
-    O.type(sub, obj)
-    O.variables[O.make_var(None,sub)].setValues([(cls,'1'), (own1,'2')])
-    py.test.raises(ConsistencyFailure, O.consistency)
-
-
-def test_terminology_cardinality():
-    # Modeled after one of the standard tests (approved/maxCardinality)
-    # 'cls' by subclassing two maxCardinality restrictions becomes the set of
-    # individuals satisfying both restriction, ie having exactly 2 values of
-    # predicate p
-    cls = URIRef('cls')
-    O = Ontology()
-    O.add((cls, UR(namespaces['rdf']+'#type'), UR(namespaces['owl']+'#Class')))
-    p = O.make_var(Property,URIRef('p'))
-    p = URIRef('p')
-    O.add((p, UR(namespaces['rdf']+'#type'), UR(namespaces['owl']+'#ObjectProperty')))
-
-    restr = BNode('anon')
-    O.add((restr, UR(namespaces['rdf']+'#type'), UR(namespaces['owl']+'#Restriction') ))
-    O.add((restr, UR(namespaces['owl']+'#onProperty'), p ))
-    O.add((cls, UR(namespaces['rdfs']+'#subClassOf'),restr ))
-    O.add((restr, UR(namespaces['owl']+'#maxCardinality'), 2 ))
-
-    restr2 = BNode('anon2')
-    O.add((restr2, UR(namespaces['rdf']+'#type'), UR(namespaces['owl']+'#Restriction') ))
-    O.add((restr2, UR(namespaces['owl']+'#onProperty'), p ))
-    O.add((cls, UR(namespaces['rdfs']+'#subClassOf'),restr2 ))
-    O.add((restr2, UR(namespaces['owl']+'#minCardinality'), 3 ))
-    O.attach_fd()
-    for var in O.variables.values():
-        var.finish(O.variables, O.constraints)
-    py.test.raises(ConsistencyFailure, O.consistency)
-
-def test_terminology_subclassof_cardinality():
-    cls = URIRef('cls')
-    cls2 = URIRef('cls2')
-    O = Ontology()
-    O.add((cls, UR(namespaces['rdfs']+'#type'), UR(namespaces['owl']+'#Class')))
-    O.add((cls2, UR(namespaces['rdfs']+'#type'), UR(namespaces['owl']+'#Class')))
-    p = O.make_var(Property,URIRef('p'))
-    p = URIRef('p')
-    O.add((p, UR(namespaces['rdfs']+'#type'), UR(namespaces['owl']+'#ObjectProperty')))
-
-    restr = BNode('anon')
-    O.add((restr, UR(namespaces['rdfs']+'#type'), UR(namespaces['owl']+'#Restriction')))
-    O.add((restr, UR(namespaces['rdfs']+'#onProperty'), p ))
-    O.add((cls, UR(namespaces['rdfs']+'#subClassOf'),restr ))
-    O.add((restr, UR(namespaces['rdfs']+'#maxCardinality'), 2 ))
-
-    restr2 = BNode('anon2')
-    O.add((restr2, UR(namespaces['rdfs']+'#type'), UR(namespaces['owl']+'#Restriction')))
-    O.add((restr2, UR(namespaces['rdfs']+'#onProperty'), p ))
-    O.add((cls, UR(namespaces['rdfs']+'#subClassOf'),restr2 ))
-    O.add((restr2, UR(namespaces['rdfs']+'#minCardinality'), 3 ))
-    O.add((cls2, UR(namespaces['rdfs']+'#subClassOf'), cls ))
-    O.attach_fd()
-    for var in O.variables.values():
-        var.finish(O.variables, O.constraints)
-    py.test.raises(ConsistencyFailure, O.consistency)
-    
-def test_add_file():
-    O = Ontology()
-    O.add_file('premises001.rdf')
-    trip = list(O.graph.triples((None,)*3))
-#    O.attach_fd()
-    ll = len(O.variables)
-    l = len(trip)
-    O.add_file('conclusions001.rdf')
-    O.attach_fd()
-    lll = len(O.variables)
-    assert len(list(O.graph.triples((None,)*3))) > l
-
-def test_more_cardinality():
-    O = Ontology()
-    O.add_file('premises003.rdf')
-    trip = list(O.graph.triples((None,)*3))
- #   O.attach_fd()
-    ll = len(O.variables)
-    l = len(trip)
-    O.add_file('conclusions003.rdf')
-    O.attach_fd()
-    O.consistency()
-    lll = len(O.variables)
-    assert len(list(O.graph.triples((None,)*3))) > l
-
-def test_import():
-    O = Ontology()
-    s = URIRef('s')
-    O.imports(s,URIRef('http://www.w3.org/2002/03owlt/imports/support001-A'))
-
-def test_complementof():
-    O = Ontology()
-    a_cls = URIRef('a')
-    b_cls = URIRef('b')
-    O.type(a_cls, URIRef(namespaces['owl']+'#Class'))
-    O.type(b_cls, URIRef(namespaces['owl']+'#Class'))
-    O.oneOf(a_cls, [URIRef('i1'), URIRef('i2'), URIRef('i3'), URIRef('i4')])
-    for i in ['i1', 'i2', 'i3', 'i4']: 
-        O.type(URIRef(i), URIRef(namespaces['owl']+'#Thing'))
-    O.type(URIRef('i5'), URIRef(namespaces['owl']+'#Thing'))
-    O.complementOf(b_cls, a_cls)
-    O.consistency()
-    assert list(O.variables[O.make_var(None, b_cls)].getValues()) == ['i5']
-
-def test_complementof_raise():
-    O = Ontology()
-    a_cls = URIRef('a')
-    b_cls = URIRef('b')
-    O.type(a_cls, URIRef(namespaces['owl']+'#Class'))
-    O.type(b_cls, URIRef(namespaces['owl']+'#Class'))
-    O.oneOf(a_cls, [URIRef('i1'), URIRef('i2'), URIRef('i3'), URIRef('i4')])
-    for i in ['i1', 'i2', 'i3', 'i4']: 
-        O.type(URIRef(i), URIRef(namespaces['owl']+'#Thing'))
-    O.type(URIRef('i5'), URIRef(namespaces['owl']+'#Thing'))
-    O.type(URIRef('i4'), b_cls)
-    O.type(URIRef('i4'), a_cls)
-    O.complementOf(b_cls, a_cls)
-    # The above ontology states that 'b' is complement of 'a'. But that leads
-    # to an inconsistency as 'i4' is of type 'a' and 'b'
-    raises(ConsistencyFailure, O.consistency)
-
-def test_class_promotion():
-    O = Ontology()
-    a_cls = URIRef('a')
-    O.type(a_cls, URIRef(namespaces['owl']+'#Class'))
-
-    assert isinstance(O.variables['a_'], ClassDomain)   
-    O.type(a_cls, URIRef(namespaces['owl']+'#Restriction'))
-    assert isinstance(O.variables['a_'], Restriction)   
-
-def test_class_demotion():
-    O = Ontology()
-    a_cls = URIRef('a')
-    O.type(a_cls, URIRef(namespaces['owl']+'#Restriction'))
-    O.variables[O.make_var(None, a_cls)].property = "SomeProp"
-    assert isinstance(O.variables['a_'], Restriction)   
-
-    O.type(a_cls, URIRef(namespaces['owl']+'#Class'))
-
-    assert isinstance(O.variables['a_'], Restriction)   
-    assert O.variables[O.make_var(None, a_cls)].property == "SomeProp"
-
-def test_property_to_objectproperty():
-    O = Ontology()
-    a_cls = URIRef('a')
-    O.type(a_cls, URIRef(namespaces['rdf']+'#Property'))
-    assert isinstance(O.variables['a_'], Property)      
-    O.type(a_cls, URIRef(namespaces['owl']+'#ObjectProperty'))
-    assert isinstance(O.variables['a_'], Property)      
-
-    O.type(a_cls, URIRef(namespaces['rdf']+'#Property'))
-
-    assert isinstance(O.variables['a_'], ObjectProperty)        
-
-def test_individual():
-    # test comparison (unknown, equal, different)
-    O = Ontology()
-    first = URIRef('first')
-    second = URIRef('second')
-    O.type(first, URIRef(namespaces['owl']+'#Thing'))
-    assert isinstance(list(O.variables['owl_Thing'].getValues())[0], Individual)
-
-def test_recording_of_properties():
-    O = Ontology()
-    first = URIRef('first')
-    second = URIRef('second')
-#    O.type(first, URIRef(namespaces['owl']+'#SymmetricProperty'))
-    O.consider_triple((first, URIRef(namespaces['rdf']+'#type'), URIRef(namespaces['owl']+'#SymmetricProperty')))
-    assert isinstance(O.variables['first_'], SymmetricProperty)
-    assert 'first_' in O.variables['owl_ObjectProperty'] #.getValues()
-    assert 'first_' in O.variables['rdf_Property'] # .getValues()
+
+class TestAppOntology:
+
+    def setup_class(cls):
+        space = gettestobjspace(usemodules=('_cslib',))
+        cls.space = space
+
+    def rdf_list(self, ont, name, data):
+        owllist = URIRef(name)
+        obj = URIRef(namespaces['rdf']+'#List')
+        ont.type(owllist, obj)
+        own =owllist
+        for i,dat in enumerate(data[:-1]):
+            next = BNode( name + str(i))
+            next,i,dat,own
+            ont.first(own, dat)
+            ont.type(next, obj)
+            ont.rest(own,  next)
+            own = next
+        ont.first(own, data[-1])
+        ont.rest(own,  URIRef(namespaces['rdf']+'#nil'))
+        return owllist
+
+    def test_equivalentProperty_inconst(self):
+        from pypy.lib.pyontology.pyontology import *
+        O = Ontology()
+        O.add_file("testinconst.rdf")
+        O.attach_fd()
+        raises(ConsistencyFailure, O.consistency)
+
+    def test_XMLSchema_string(self):
+        from pypy.lib.pyontology.pyontology import *
+        O = Ontology()
+        a = URIRef(u'A')
+        p = URIRef(u'P')
+        prop = URIRef(namespaces['rdf']+'#Property')
+        xml_string_uri = URIRef(namespaces['xmlschema']+"#string")
+        O.type(p, prop)
+        O.consider_triple((a, p, rdflib_literal("ddd", datatype=xml_string_uri)))
+        O.range(p, xml_string_uri) 
+        O.consistency()
+
+    def test_XMLSchema_string_fail(self):
+    #    py.test.skip("WIP")
+        from pypy.lib.pyontology.pyontology import *
+        O = Ontology()
+        a = URIRef(u'A')
+        p = URIRef(u'P')
+        prop = URIRef(namespaces['rdf']+'#Property')
+        xml_string_uri = URIRef(namespaces['xmlschema']+"#string")
+        xml_int_uri= URIRef(namespaces['xmlschema']+"#integer")
+        O.type(p, prop)
+        O.consider_triple((a, p, rdflib_literal(2, datatype = xml_int_uri)))
+        O.range(p, xml_string_uri)
+        raises(ConsistencyFailure, O.consistency)
+
+    def test_makevar(self):
+        from pypy.lib.pyontology.pyontology import *
+        O = Ontology()
+        var = URIRef(u'http://www.w3.org/2002/03owlt/unionOf/premises004#A-and-B')
+        name = O.make_var(ClassDomain, var)
+        cod = name+' = 1'
+        exec cod
+        assert O.make_var(None, var) in locals() 
+        assert isinstance(O.variables[name], ClassDomain)
+
+    def test_subClassof(self):
+        from pypy.lib.pyontology.pyontology import *
+        O = Ontology()
+        a = URIRef(u'A')
+        b = URIRef(u'B')
+        c = URIRef(u'C')
+        O.subClassOf(b, a)
+        O.subClassOf(c, b)
+        obj = URIRef(namespaces['owl']+'#Class')
+        O.type(a,obj)
+        O.consistency()
+        O.subClassOf(c, a)
+        O.consistency()
+
+    def test_subClassof2(self):
+        from pypy.lib.pyontology.pyontology import *
+        O = Ontology()
+        a = URIRef(u'A')
+        b = URIRef(u'B')
+        c = URIRef(u'C')
+        d = URIRef(u'D')
+        O.subClassOf(b, a)
+        O.subClassOf(c, b)
+        obj = URIRef(namespaces['owl']+'#Class')
+        O.type(a,obj)
+        O.type(d,c)
+        O.consistency()
+        d_indi = O.mangle_name(d)
+        assert Individual(d_indi, d) in O.variables[O.mangle_name(a)].getValues()
+        O.subClassOf(c, a)
+        O.consistency()
+
+    def test_addvalue(self):
+        from pypy.lib.pyontology.pyontology import *
+        O = Ontology()
+        a = O.make_var(Property, URIRef('a'))
+        O.variables[a].addValue('key', 42)
+        assert ('key', 42) in O.variables[a]
+        O.variables[a].addValue('key', 43)
+        assert list(O.variables[a].getValues()) == [('key', 42), ('key', 43)]
+
+    def no_test_ClassDomain(self):
+        from pypy.lib.pyontology.pyontology import *
+        a = ClassDomain()
+        cls =  1
+        b = ClassDomain('B',[],[a])
+        assert b in b
+        assert a in b
+
+    def test_subClassconstraint(self):
+        from pypy.lib.pyontology.pyontology import *
+        a = ClassDomain('A')
+        b = ClassDomain('B')
+        c = ClassDomain('C')
+        con = SubClassConstraint('b','a')
+        con2 = SubClassConstraint('c','b')
+        indi = URIRef('indi')
+        c.setValues([Individual('indi_',indi)])
+        con.narrow({'a': a, 'b': b, 'c': c}) 
+        con2.narrow({'a': a, 'b': b, 'c': c})
+        con.narrow({'a': a, 'b': b, 'c': c}) 
+        assert Individual('indi_', indi) in a
+
+    def test_subClassconstraintMulti(self):
+        from pypy.lib.pyontology.pyontology import *
+        a = ClassDomain('A')
+        b = ClassDomain('B')
+        c = ClassDomain('C')
+        indi = URIRef('indi')
+        c.setValues([Individual('indi_',indi)])
+        con = SubClassConstraint('c','a')
+        con2 = SubClassConstraint('c','b')
+        con.narrow({'a': a, 'b': b, 'c': c}) 
+        con2.narrow({'a': a, 'b': b, 'c': c})
+        assert Individual('indi_', indi) in a
+        assert Individual('indi_', indi) in b
+
+    def test_subClassconstraintMulti2(self):
+        from pypy.lib.pyontology.pyontology import *
+        a = ClassDomain('A')
+        b = ClassDomain('B')
+        c = ClassDomain('C')
+        indi = URIRef('indi')
+        c.setValues([Individual('indi_',indi)])
+        con = SubClassConstraint('c','a')
+        con2 = SubClassConstraint('c','b')
+        con3 = SubClassConstraint('a','c')
+        con.narrow({'a': a, 'b': b, 'c': c}) 
+        con2.narrow({'a': a, 'b': b, 'c': c})
+        con3.narrow({'a': a, 'b': b, 'c': c})
+        assert Individual('indi_', indi) in a
+        assert Individual('indi_', indi) in b
+        assert Individual('indi_', indi) in c
+
+    def test_equivalentClass(self):
+        from pypy.lib.pyontology.pyontology import *
+        O = Ontology()
+        a = O.make_var(ClassDomain,URIRef('A'))
+        b = O.make_var(ClassDomain,URIRef('B'))
+        c = O.make_var(ClassDomain,URIRef('C'))
+        O.equivalentClass(c, a)
+        O.equivalentClass(c, b)
+        A = O.make_var(ClassDomain, a)
+        B = O.make_var(ClassDomain, b)
+        assert O.variables[A].values == O.variables[B].values
+
+    def test_type(self):
+        from pypy.lib.pyontology.pyontology import *
+        sub = URIRef('a')
+        pred = URIRef('type')
+        obj = URIRef('o')
+        O = Ontology()
+        O.make_var(ClassDomain, obj)
+        O.type(sub, obj)
+        O.type(obj, namespaces['owl']+"#Class")
+
+        assert list(O.variables[O.make_var(None, obj)].getValues())[0].__class__  == Individual 
+
+    # test for multiple types
+    # test for type hierarchy
+
+    def test_ObjectProperty(self):
+        from pypy.lib.pyontology.pyontology import *
+        sub = URIRef('a')
+        obj = URIRef(namespaces['owl']+'#ObjectProperty')
+        O = Ontology()
+        O.type(sub, obj)
+        assert O.variables[O.make_var(None, sub)].__class__  == ObjectProperty
+
+    def test_range(self):
+        from pypy.lib.pyontology.pyontology import *
+        O = Ontology()
+        sub = URIRef('a')
+        obj = URIRef('b')
+        O.variables['b_'] = ClassDomain(values=[1,2,3,4])
+        O.range(sub, obj)
+        sub = URIRef('a')
+        pred = URIRef('type')
+        obj = URIRef(namespaces['owl']+'#ObjectProperty')
+        O.type(sub, obj)
+        #assert len(O.constraints) == 1
+        O.constraints[0].narrow(O.variables)
+
+    def test_merge(self):
+        from pypy.lib.pyontology.pyontology import *
+        O = Ontology()
+        sub = URIRef('a')
+        obj = URIRef('b')
+        O.variables['b_'] = ClassDomain(values=[1,2,3,4])
+        O.range(sub, obj)
+        obj = URIRef('c')
+        O.variables['c_'] = ClassDomain(values=[3,4,5,6])
+        O.range(sub, obj)
+        sub = URIRef('a')
+        pred = URIRef('type')
+        obj = URIRef(namespaces['owl']+'#ObjectProperty')
+        O.type(sub, obj)
+        #assert len(O.constraints) == 2
+        O.consistency()
+
+    def test_domain(self):
+        from pypy.lib.pyontology.pyontology import *
+        O = Ontology()
+        sub = URIRef('a')
+        obj = URIRef('b')
+        O.variables['b_'] = ClassDomain('b')
+        O.domain(sub, obj)
+        sub = URIRef('a')
+        pred = URIRef('type')
+        obj = URIRef(namespaces['owl']+'#ObjectProperty')
+        O.type(sub, obj)
+        #assert len(O.constraints) == 1
+        O.constraints[0].narrow(O.variables)
+
+    def test_domain_merge(self):
+        from pypy.lib.pyontology.pyontology import *
+        O = Ontology()
+        sub = URIRef('a')
+        obj = URIRef('b')
+        O.variables['b_'] = ClassDomain('b')
+        O.domain(sub, obj)
+        obj = URIRef('c')
+        O.variables['c_'] = ClassDomain('c')
+        O.domain(sub, obj)
+        obj = URIRef(namespaces['owl']+'#ObjectProperty')
+        O.type(sub, obj)
+
+        #assert len(O.constraints) == 2
+        for con in O.constraints:
+            con.narrow(O.variables)
+        assert O.variables['a_'].size() == 0 
+
+    def test_subproperty(self):
+        from pypy.lib.pyontology.pyontology import *
+        O = Ontology()
+        sub = URIRef('a')
+        obj = URIRef(namespaces['owl']+'#ObjectProperty')
+        O.type(sub, obj)
+        b = URIRef('b')
+        O.type(b, obj)
+        O.variables['a_'].setValues([('individ_',42)])
+        O.subPropertyOf(sub, b)
+        O.consistency()
+        for val in O.variables['a_'].getValues():
+            assert  val in O.variables['b_']
+
+    def test_functionalproperty(self):
+        from pypy.lib.pyontology.pyontology import *
+        O = Ontology()
+        #Make functional property
+        sub = URIRef('p')
+        obj = URIRef(namespaces['owl']+'#FunctionalProperty')
+        O.type(sub, obj)
+        #Make class
+        sub = URIRef('c')
+        obj = URIRef(namespaces['owl']+'#Class')
+        O.type(sub, obj)
+        #Make individual with a value of the property
+        sub = URIRef('individ')
+        obj = URIRef('c')
+        O.type(sub, obj)
+        O.variables['p_'].setValues([('individ',42)])
+        #add another valueof the property
+        O.variables['p_'].addValue('individ',43)
+        py.test.raises(ConsistencyFailure, O.consistency )
+        #check that consistency raises
+
+    def test_inversefunctionalproperty(self):
+        from pypy.lib.pyontology.pyontology import *
+        O = Ontology()
+        #Make functional property
+        sub = URIRef('p')
+        obj = URIRef(namespaces['owl']+'#InverseFunctionalProperty')
+        O.type(sub, obj)
+        #Make class
+        sub = URIRef('c')
+        obj = URIRef(namespaces['owl']+'#Class')
+        O.type(sub, obj)
+        #Make individual with a value of the property
+        sub = URIRef('individ')
+        obj = URIRef('c')
+        O.type(sub, obj)
+        O.variables['p_'].setValues([('individ_',42)])
+        #assert len(O.constraints) == 2
+        #add another individual with the same value for the property
+        sub = URIRef('individ2')
+        obj = URIRef('c')
+        O.type(sub, obj)
+        py.test.raises(ConsistencyFailure, O.variables['p_'].setValues, [('individ_',42),('individ2_',42)])
+
+    def test_Transitiveproperty(self):
+        from pypy.lib.pyontology.pyontology import *
+        O = Ontology()
+        #Make functional property
+        subreg = URIRef('subRegionOf')
+        obj = URIRef(namespaces['owl']+'#TransitiveProperty')
+        O.type(subreg, obj)
+        #Make class
+        sub = URIRef('c')
+        obj = URIRef(namespaces['owl']+'#Class')
+        O.type(sub, obj)
+        #Make individual with a value of the property
+        it = URIRef('Italy')
+        obj = URIRef('c')
+        O.type(it, obj)
+        tus = URIRef('Tuscanny')
+        O.type(tus, obj)
+        chi = URIRef('Chianti')
+        O.type(chi, obj)
+    #    O.variables['subRegionOf_'].setValues([('Italy_','Tuscanny_'),('Tuscanny_','Chianti_')])
+        O.consider_triple((tus, subreg, it))
+        O.consider_triple((chi, subreg, tus))
+        O.consistency()
+        assert Individual('Italy_', it) in O.variables['subRegionOf_'].getValuesPrKey(Individual('Chianti',chi))
+
+    def test_symmetricproperty(self):    
+        from pypy.lib.pyontology.pyontology import *
+        O = Ontology()
+        #Make functional property
+        sub = URIRef('friend')
+        obj = URIRef(namespaces['owl']+'#SymmetricProperty')
+        O.type(sub, obj)
+        assert O.variables[O.make_var(None, sub)].__class__.__name__=='SymmetricProperty'
+        #Make class
+        sub = URIRef('c')
+        obj = URIRef(namespaces['owl']+'#Class')
+        O.type(sub, obj)
+        #Make individual with a value of the property
+        sub = URIRef('Bob')
+        obj = URIRef('c')
+        O.type(sub, obj)
+        sub = URIRef('Alice')
+        O.type(sub, obj)
+        O.variables['friend_'].setValues([('Bob_','Alice_')])
+        O.consistency()
+        assert ('Alice_', 'Bob_') in O.variables['friend_']
+
+    def test_inverseof(self):
+        from pypy.lib.pyontology.pyontology import *
+        O = Ontology()
+        own = URIRef('owner')
+        obj = URIRef(namespaces['owl']+'#ObjectProperty')
+        O.type(own, obj)
+        owned = URIRef('ownedby')
+        obj = URIRef(namespaces['owl']+'#ObjectProperty')
+        O.type(owned, obj)
+        #Make class
+        sub = URIRef('c')
+        obj = URIRef(namespaces['owl']+'#Class')
+        O.type(sub, obj)
+        #Make individual with a property value
+        sub = URIRef('Bob')
+        obj = URIRef('c')
+        O.type(sub, obj)
+        sub = URIRef('Fiat')
+        obj = URIRef('car')
+        O.type(sub, obj)
+        O.variables['owner_'].setValues([('Bob_','Fiat_')])
+        O.inverseOf(own, owned)
+        O.consistency()
+        assert ('Fiat_','Bob_') in O.variables['ownedby_']
+
+    def test_hasvalue(self):
+      #  py.test.skip("")
+        from pypy.lib.pyontology.pyontology import *
+        O = Ontology()
+        cls = URIRef('class')
+        obj = URIRef(namespaces['owl']+'#Thing')
+        O.type(cls, obj)
+        restrict = BNode('anon1')
+        obj = URIRef(namespaces['owl']+'#Restriction')
+        O.type(restrict, obj)
+        p = URIRef('p')
+        obj = URIRef(namespaces['owl']+'#ObjectProperty')
+        O.type(p, obj)
+        O.consider_triple((cls, p, 2))
+        O.onProperty(restrict,p)
+        O.consider_triple((cls, p, 1))
+        O.hasValue(restrict, 2)
+    #    O.type(2, URIRef(namespaces['owl']+'#Thing'))
+    #    O.type(1, URIRef(namespaces['owl']+'#Thing'))
+
+        cls2 = URIRef('class2')
+        obj = URIRef(namespaces['owl']+'#Thing')
+        O.type(cls2, obj)
+        O.subClassOf(cls2,restrict)
+        O.variables[O.make_var(None, cls2)].finish(O.variables, O.constraints) 
+        O.consistency()
+        assert cls in O.variables[O.make_var(None, cls2)]
+    #    py.test.raises(ConsistencyFailure, O.consistency)
+
+    def test_List(self):
+        py.test.skip("Need to be rewritten using RDF-XML")
+        from pypy.lib.pyontology.pyontology import *
+        O = Ontology()
+        own = URIRef('favlist')
+        obj = URIRef(namespaces['rdf']+'#List')
+        O.type(own, obj)
+        O.first(own, 0)
+        O.rest(own,  URIRef('1'))
+        O.first( URIRef('1'), 1)
+        O.rest( URIRef('1'),  URIRef('2'))
+        O.first( URIRef('2'), 2)
+        O.rest( URIRef('2'),  URIRef(namespaces['rdf']+'#nil'))
+        O.flatten_rdf_list(own)
+        O.consistency()
+        assert list(O.rep._domains['favlist_'].getValues()) == [0,1,2]
+
+    def test_oneofclassenumeration(self):
+        from pypy.lib.pyontology.pyontology import *
+        O = Ontology()
+        restrict = BNode('anon')
+        own = [UR('first'), UR('second'), UR('third')]
+        O.oneOf(restrict, own)
+        O.type(restrict, UR(namespaces['owl']+'#Class'))
+        O.consistency()
+        assert O.rep._domains[restrict].size()== 3
+        assert set(O.rep._domains[restrict].getValues()) == set(own)
+
+    def test_unification_of_two_oneofclassenumeration(self):
+        from pypy.lib.pyontology.pyontology import *
+        O = Ontology()
+        restrict = BNode('anon')
+        own = [UR('first'), UR('second'), UR('third')]
+        for i in own:
+            O.type(i,UR(namespaces['owl']+'#Thing'))
+        O.oneOf(restrict, own)
+        restrict1 = BNode('anon1')
+        own = [UR('second'), UR('third'), UR('first')]
+        O.oneOf(restrict1, own)
+        O.type(UR('test'), UR(namespaces['owl']+'#Thing'))
+        O.type(UR('test'), restrict)
+        O.type(UR('test'), restrict1)
+        O.consistency()
+        assert O.rep._domains[restrict].size() == 3
+        assert set(O.rep._domains[restrict].getValues()) == set(own)
+
+
+    def test_oneofdatarange(self):
+        from pypy.lib.pyontology.pyontology import *
+        O = Ontology()
+        restrict = BNode('anon')
+        own = ['1','2','3'] 
+        O.oneOf(restrict, own)
+        O.type(restrict, UR(namespaces['owl']+'#DataRange'))
+        O.consistency()
+        assert O.rep._domains[restrict].size() == 3
+        assert set(O.rep._domains[restrict].getValues()) == set(own)
+
+    def test_somevaluesfrom_datarange(self):
+        py.test.skip("reconsider if the test is correct - make it simpler")
+        from pypy.lib.pyontology.pyontology import *
+        O = Ontology()
+        datarange = BNode('anon')
+        own =  ['1','2','3']
+        O.oneOf(datarange, own)
+        O.type(datarange, namespaces['owl']+'#DataRange')
+        restrict = BNode('anon1')
+        obj = URIRef(namespaces['owl']+'#Restriction')
+        O.type(restrict, obj)
+        p = URIRef('p')
+        obj = URIRef(namespaces['owl']+'#ObjectProperty')
+        O.type(p, obj)
+        cls = URIRef('class')
+        obj = URIRef(namespaces['owl']+'#Class')
+        O.type(cls, obj)
+        O.variables['p_'].setValues([(cls,'1')])
+        O.onProperty(restrict,p)
+        O.someValuesFrom(restrict, datarange)
+        O.subClassOf(cls,restrict)
+        O.consistency()
+        assert cls in O.variables[O.make_var(None, cls)]
+
+    def test_allvaluesfrom_datarange(self):
+        py.test.skip("")
+        from pypy.lib.pyontology.pyontology import *
+        O = Ontology()
+        datarange = BNode('anon')
+        own = ['1','2','3']
+        O.oneOf(datarange, own)
+        O.type(datarange, namespaces['owl']+'#DataRange')
+        restrict = BNode('anon1')
+        obj = URIRef(namespaces['owl']+'#Restriction')
+        O.type(restrict, obj)
+        p = URIRef('p')
+        obj = URIRef(namespaces['owl']+'#ObjectProperty')
+        O.type(p, obj)
+        cls = URIRef('class')
+        O.variables['p_'].setValues([(cls,'1'),(cls,'2'),(cls,'3')])
+        obj = URIRef(namespaces['owl']+'#Class')
+        O.type(cls, obj)
+        O.onProperty(restrict,p)
+        O.allValuesFrom(restrict, datarange)
+        O.subClassOf(cls,restrict)
+        assert cls in O.variables[O.make_var(None, cls)]
+
+    def test_unionof(self):
+        #py.test.skip("Rewrite the test")
+        from pypy.lib.pyontology.pyontology import *
+        O = Ontology()
+        cls = BNode('anon')
+        own1 = BNode('liist1')
+        own2 = BNode('liist2')
+        list1 =  ['1', '2', '3'] 
+        list2 =  ['3', '4', '5'] 
+        own = [own1, own2] 
+        O.oneOf( own1, list1)
+        O.oneOf( own2, list2)
+        O.unionOf(cls, own)
+        O.type(cls, namespaces['owl']+'#Class')
+        O.consistency()
+        res = list(O.rep._domains[cls].getValues())
+        res.sort()
+        assert set(res) == set([Individual(x,x) for x in ['1', '2', '3', '4', '5']])
+
+    def test_intersectionof(self):
+        py.test.skip("Rewrite the test")
+        from pypy.lib.pyontology.pyontology import *
+        O = Ontology()
+        cls = BNode('anon')
+        O.intersectionOf(cls, [['1','2','3'],['3','4','5']])
+        O.type(cls, namespaces['owl']+'#Class')
+        O.consistency()
+        assert list(O.rep._domains[cls].getValues()) == ['3']
+
+    def test_differentfrom(self):
+        from pypy.lib.pyontology.pyontology import *
+        O = Ontology()
+        cls = BNode('anon')
+        own1 = BNode('liist1')
+        own2 = BNode('liist2')
+        O.differentFrom(cls, own1)
+        O.differentFrom(own1, own2)
+        O.differentFrom(cls, own2)
+        O.differentFrom(own2,cls)
+        O.type(cls, UR(namespaces['owl']+'#Thing'))
+        O.type(own1, UR(namespaces['owl']+'#Thing'))
+        O.type(own2, UR(namespaces['owl']+'#Thing'))
+        O.consistency()
+        #assert len(O.rep._constraints) == 4
+
+    def test_differentfromconsistency(self):
+        from pypy.lib.pyontology.pyontology import *
+        O = Ontology()
+        cls = BNode('anon')
+        O.differentFrom(cls, cls)
+        O.type(cls, UR(namespaces['owl']+'#Thing'))
+        py.test.raises(ConsistencyFailure, O.consistency)
+
+    def test_sameas(self):
+        from pypy.lib.pyontology.pyontology import *
+        O = Ontology()
+        cls = BNode('anon')
+        own1 = BNode('liist1')
+        own2 = BNode('liist2')
+        O.sameAs(cls, own1)
+        O.sameAs(own1, own2)
+        O.sameAs(cls, own2)
+        O.type(cls, UR(namespaces['owl']+'#Thing'))
+        O.type(own1, UR(namespaces['owl']+'#Thing'))
+        O.type(own2, UR(namespaces['owl']+'#Thing'))
+        sub = URIRef('a')
+        obj = URIRef(namespaces['owl']+'#ObjectProperty')
+        O.type(sub, obj)
+        O.variables[O.make_var(None,sub)].setValues([(cls,'1')])
+        O.consistency()
+        assert ('liist1','1') in O.rep._domains[O.make_var(None,sub)]
+
+    def test_sameasconsistency(self):
+        from pypy.lib.pyontology.pyontology import *
+        O = Ontology()
+        cls = BNode('anon')
+        own1 = BNode('liist1')
+        O.sameAs(cls, own1)
+        O.type(cls, UR(namespaces['owl']+'#Thing'))
+        O.type(own1, UR(namespaces['owl']+'#Thing'))
+        sub = URIRef('a')
+        obj = URIRef(namespaces['owl']+'#ObjectProperty')
+        O.type(sub, obj)
+        O.variables[O.make_var(None,sub)].setValues([(cls,'1'), (own1,'2')])
+        py.test.raises(ConsistencyFailure, O.consistency)
+
+
+    def test_terminology_cardinality(self):
+        # Modeled after one of the standard tests (approved/maxCardinality)
+        # 'cls' by subclassing two maxCardinality restrictions becomes the set of
+        # individuals satisfying both restriction, ie having exactly 2 values of
+        # predicate p
+        from pypy.lib.pyontology.pyontology import *
+        cls = URIRef('cls')
+        O = Ontology()
+        O.add((cls, UR(namespaces['rdf']+'#type'), UR(namespaces['owl']+'#Class')))
+        p = O.make_var(Property,URIRef('p'))
+        p = URIRef('p')
+        O.add((p, UR(namespaces['rdf']+'#type'), UR(namespaces['owl']+'#ObjectProperty')))
+
+        restr = BNode('anon')
+        O.add((restr, UR(namespaces['rdf']+'#type'), UR(namespaces['owl']+'#Restriction') ))
+        O.add((restr, UR(namespaces['owl']+'#onProperty'), p ))
+        O.add((cls, UR(namespaces['rdfs']+'#subClassOf'),restr ))
+        O.add((restr, UR(namespaces['owl']+'#maxCardinality'), 2 ))
+
+        restr2 = BNode('anon2')
+        O.add((restr2, UR(namespaces['rdf']+'#type'), UR(namespaces['owl']+'#Restriction') ))
+        O.add((restr2, UR(namespaces['owl']+'#onProperty'), p ))
+        O.add((cls, UR(namespaces['rdfs']+'#subClassOf'),restr2 ))
+        O.add((restr2, UR(namespaces['owl']+'#minCardinality'), 3 ))
+        O.attach_fd()
+        for var in O.variables.values():
+            var.finish(O.variables, O.constraints)
+        py.test.raises(ConsistencyFailure, O.consistency)
+
+    def test_terminology_subclassof_cardinality(self):
+        from pypy.lib.pyontology.pyontology import *
+        cls = URIRef('cls')
+        cls2 = URIRef('cls2')
+        O = Ontology()
+        O.add((cls, UR(namespaces['rdfs']+'#type'), UR(namespaces['owl']+'#Class')))
+        O.add((cls2, UR(namespaces['rdfs']+'#type'), UR(namespaces['owl']+'#Class')))
+        p = O.make_var(Property,URIRef('p'))
+        p = URIRef('p')
+        O.add((p, UR(namespaces['rdfs']+'#type'), UR(namespaces['owl']+'#ObjectProperty')))
+
+        restr = BNode('anon')
+        O.add((restr, UR(namespaces['rdfs']+'#type'), UR(namespaces['owl']+'#Restriction')))
+        O.add((restr, UR(namespaces['rdfs']+'#onProperty'), p ))
+        O.add((cls, UR(namespaces['rdfs']+'#subClassOf'),restr ))
+        O.add((restr, UR(namespaces['rdfs']+'#maxCardinality'), 2 ))
+
+        restr2 = BNode('anon2')
+        O.add((restr2, UR(namespaces['rdfs']+'#type'), UR(namespaces['owl']+'#Restriction')))
+        O.add((restr2, UR(namespaces['rdfs']+'#onProperty'), p ))
+        O.add((cls, UR(namespaces['rdfs']+'#subClassOf'),restr2 ))
+        O.add((restr2, UR(namespaces['rdfs']+'#minCardinality'), 3 ))
+        O.add((cls2, UR(namespaces['rdfs']+'#subClassOf'), cls ))
+        O.attach_fd()
+        for var in O.variables.values():
+            var.finish(O.variables, O.constraints)
+        py.test.raises(ConsistencyFailure, O.consistency)
+
+    def test_add_file(self):
+        from pypy.lib.pyontology.pyontology import *
+        O = Ontology()
+        O.add_file('premises001.rdf')
+        trip = list(O.graph.triples((None,)*3))
+    #    O.attach_fd()
+        ll = len(O.variables)
+        l = len(trip)
+        O.add_file('conclusions001.rdf')
+        O.attach_fd()
+        lll = len(O.variables)
+        assert len(list(O.graph.triples((None,)*3))) > l
+
+    def test_more_cardinality(self):
+        from pypy.lib.pyontology.pyontology import *
+        O = Ontology()
+        O.add_file('premises003.rdf')
+        trip = list(O.graph.triples((None,)*3))
+     #   O.attach_fd()
+        ll = len(O.variables)
+        l = len(trip)
+        O.add_file('conclusions003.rdf')
+        O.attach_fd()
+        O.consistency()
+        lll = len(O.variables)
+        assert len(list(O.graph.triples((None,)*3))) > l
+
+    def test_import(self):
+        from pypy.lib.pyontology.pyontology import *
+        O = Ontology()
+        s = URIRef('s')
+        O.imports(s,URIRef('http://www.w3.org/2002/03owlt/imports/support001-A'))
+
+    def test_complementof(self):
+        from pypy.lib.pyontology.pyontology import *
+        O = Ontology()
+        a_cls = URIRef('a')
+        b_cls = URIRef('b')
+        O.type(a_cls, URIRef(namespaces['owl']+'#Class'))
+        O.type(b_cls, URIRef(namespaces['owl']+'#Class'))
+        O.oneOf(a_cls, [URIRef('i1'), URIRef('i2'), URIRef('i3'), URIRef('i4')])
+        for i in ['i1', 'i2', 'i3', 'i4']: 
+            O.type(URIRef(i), URIRef(namespaces['owl']+'#Thing'))
+        O.type(URIRef('i5'), URIRef(namespaces['owl']+'#Thing'))
+        O.complementOf(b_cls, a_cls)
+        O.consistency()
+        assert list(O.variables[O.make_var(None, b_cls)].getValues()) == ['i5']
+
+    def test_complementof_raise(self):
+        from pypy.lib.pyontology.pyontology import *
+        O = Ontology()
+        a_cls = URIRef('a')
+        b_cls = URIRef('b')
+        O.type(a_cls, URIRef(namespaces['owl']+'#Class'))
+        O.type(b_cls, URIRef(namespaces['owl']+'#Class'))
+        O.oneOf(a_cls, [URIRef('i1'), URIRef('i2'), URIRef('i3'), URIRef('i4')])
+        for i in ['i1', 'i2', 'i3', 'i4']: 
+            O.type(URIRef(i), URIRef(namespaces['owl']+'#Thing'))
+        O.type(URIRef('i5'), URIRef(namespaces['owl']+'#Thing'))
+        O.type(URIRef('i4'), b_cls)
+        O.type(URIRef('i4'), a_cls)
+        O.complementOf(b_cls, a_cls)
+        # The above ontology states that 'b' is complement of 'a'. But that leads
+        # to an inconsistency as 'i4' is of type 'a' and 'b'
+        raises(ConsistencyFailure, O.consistency)
+
+    def test_class_promotion(self):
+        from pypy.lib.pyontology.pyontology import *
+        O = Ontology()
+        a_cls = URIRef('a')
+        O.type(a_cls, URIRef(namespaces['owl']+'#Class'))
+
+        assert isinstance(O.variables['a_'], ClassDomain)   
+        O.type(a_cls, URIRef(namespaces['owl']+'#Restriction'))
+        assert isinstance(O.variables['a_'], Restriction)   
+
+    def test_class_demotion(self):
+        from pypy.lib.pyontology.pyontology import *
+        O = Ontology()
+        a_cls = URIRef('a')
+        O.type(a_cls, URIRef(namespaces['owl']+'#Restriction'))
+        O.variables[O.make_var(None, a_cls)].property = "SomeProp"
+        assert isinstance(O.variables['a_'], Restriction)   
+
+        O.type(a_cls, URIRef(namespaces['owl']+'#Class'))
+
+        assert isinstance(O.variables['a_'], Restriction)   
+        assert O.variables[O.make_var(None, a_cls)].property == "SomeProp"
+
+    def test_property_to_objectproperty(self):
+        from pypy.lib.pyontology.pyontology import *
+        O = Ontology()
+        a_cls = URIRef('a')
+        O.type(a_cls, URIRef(namespaces['rdf']+'#Property'))
+        assert isinstance(O.variables['a_'], Property)      
+        O.type(a_cls, URIRef(namespaces['owl']+'#ObjectProperty'))
+        assert isinstance(O.variables['a_'], Property)      
+
+        O.type(a_cls, URIRef(namespaces['rdf']+'#Property'))
+
+        assert isinstance(O.variables['a_'], ObjectProperty)        
+
+    def test_individual(self):
+        # test comparison (unknown, equal, different)
+        from pypy.lib.pyontology.pyontology import *
+        O = Ontology()
+        first = URIRef('first')
+        second = URIRef('second')
+        O.type(first, URIRef(namespaces['owl']+'#Thing'))
+        assert isinstance(list(O.variables['owl_Thing'].getValues())[0], Individual)
+
+    def test_recording_of_properties(self):
+        from pypy.lib.pyontology.pyontology import *
+        O = Ontology()
+        first = URIRef('first')
+        second = URIRef('second')
+    #    O.type(first, URIRef(namespaces['owl']+'#SymmetricProperty'))
+        O.consider_triple((first, URIRef(namespaces['rdf']+'#type'), URIRef(namespaces['owl']+'#SymmetricProperty')))
+        assert isinstance(O.variables['first_'], SymmetricProperty)
+        assert 'first_' in O.variables['owl_ObjectProperty'] #.getValues()
+        assert 'first_' in O.variables['rdf_Property'] # .getValues()

Modified: pypy/branch/ast-experiments/pypy/module/_stackless/interp_greenlet.py
==============================================================================
--- pypy/branch/ast-experiments/pypy/module/_stackless/interp_greenlet.py	(original)
+++ pypy/branch/ast-experiments/pypy/module/_stackless/interp_greenlet.py	Mon Feb 26 08:45:45 2007
@@ -73,16 +73,12 @@
     _get_state = staticmethod(_get_state)
 
     def hello(self):
-        print "hello  ", id(self), self.subctx.framestack.items
-        print syncstate.things_to_do, syncstate.temp_exc
         ec = self.space.getexecutioncontext()
         self.subctx.enter(ec)
 
     def goodbye(self):
         ec = self.space.getexecutioncontext()
         self.subctx.leave(ec)
-        print "goodbye", id(self), self.subctx.framestack.items
-        print syncstate.things_to_do, syncstate.temp_exc
 
     def w_getcurrent(space):
         return space.wrap(AppGreenlet._get_state(space).current)

Modified: pypy/branch/ast-experiments/pypy/module/crypt/interp_crypt.py
==============================================================================
--- pypy/branch/ast-experiments/pypy/module/crypt/interp_crypt.py	(original)
+++ pypy/branch/ast-experiments/pypy/module/crypt/interp_crypt.py	Mon Feb 26 08:45:45 2007
@@ -8,10 +8,16 @@
 
 class CConfig:
     _includes_ = ('unistd.h',)
-    cryptlib = ctypes_platform.Library('crypt')
+    if sys.platform != 'darwin':
+        cryptlib = ctypes_platform.Library('crypt')
 
 globals().update(ctypes_platform.configure(CConfig))
 
+if sys.platform == 'darwin':
+    dllname = find_library('c')
+    assert dllname is not None
+    cryptlib = cdll.LoadLibrary(dllname)
+
 c_crypt = cryptlib.crypt 
 c_crypt.argtypes = [c_char_p, c_char_p]
 c_crypt.restype = c_char_p 

Modified: pypy/branch/ast-experiments/pypy/module/sys/version.py
==============================================================================
--- pypy/branch/ast-experiments/pypy/module/sys/version.py	(original)
+++ pypy/branch/ast-experiments/pypy/module/sys/version.py	Mon Feb 26 08:45:45 2007
@@ -8,10 +8,12 @@
 CPYTHON_VERSION            = (2, 4, 1, "alpha", 42)
 CPYTHON_API_VERSION        = 1012
 
-PYPY_VERSION               = (0, 9, 0, "alpha", '?')
+PYPY_VERSION               = (0, 99, 0, "alpha", '?')
 # the last item is replaced by the svn revision ^^^
 
-SVN_URL = "$HeadURL: http://codespeak.net/svn/pypy/dist/pypy/module/sys/version.py $"[10:-28]
+SVN_URL = "$HeadURL$"[10:-28]
+
+REV = "$LastChangedRevision$"[22:-2]
 
 
 # ____________________________________________________________
@@ -62,7 +64,7 @@
     "Return the last-changed svn revision number."
     # NB. we hack the number directly out of the .svn directory to avoid
     # to depend on an external 'svn' executable in the path.
-    rev = 0
+    rev = int(REV)
     try:
         f = open(os.path.join(autopath.pypydir, '.svn', 'format'), 'r')
         format = int(f.readline().strip())

Modified: pypy/branch/ast-experiments/pypy/objspace/std/stringobject.py
==============================================================================
--- pypy/branch/ast-experiments/pypy/objspace/std/stringobject.py	(original)
+++ pypy/branch/ast-experiments/pypy/objspace/std/stringobject.py	Mon Feb 26 08:45:45 2007
@@ -647,7 +647,6 @@
         # cannot return w_self, in case it is a subclass of str
         return space.wrap(input)
 
-    result = []
     buf = [' '] * width
     if len(input) > 0 and (input[0] == '+' or input[0] == '-'):
         buf[0] = input[0]

Modified: pypy/branch/ast-experiments/pypy/objspace/taint.py
==============================================================================
--- pypy/branch/ast-experiments/pypy/objspace/taint.py	(original)
+++ pypy/branch/ast-experiments/pypy/objspace/taint.py	Mon Feb 26 08:45:45 2007
@@ -129,7 +129,7 @@
     unwrap_spec=[gateway.ObjSpace, gateway.W_Root, 'args_w'])
 
 def taint_atomic(space, w_callable):
-    meth = Method(space, space.wrap(app_taint_atomic_function),
+    meth = Method(space, space.w_fn_taint_atomic_function,
                   w_callable, space.type(w_callable))
     return space.wrap(meth)
 app_taint_atomic = gateway.interp2app(taint_atomic)
@@ -194,6 +194,7 @@
                      self.wrap(app_is_tainted))
         self.setattr(w_pypymagic, self.wrap('untaint'),
                      self.wrap(app_untaint))
+        self.w_fn_taint_atomic_function = self.wrap(app_taint_atomic_function)
         self.setattr(w_pypymagic, self.wrap('taint_atomic'),
                      self.wrap(app_taint_atomic))
         self.setattr(w_pypymagic, self.wrap('TaintError'),

Modified: pypy/branch/ast-experiments/pypy/objspace/thunk.py
==============================================================================
--- pypy/branch/ast-experiments/pypy/objspace/thunk.py	(original)
+++ pypy/branch/ast-experiments/pypy/objspace/thunk.py	Mon Feb 26 08:45:45 2007
@@ -97,7 +97,7 @@
 app_become = gateway.interp2app(become)
 
 def lazy(space, w_callable):
-    meth = Method(space, space.wrap(app_thunk),
+    meth = Method(space, space.w_fn_thunk,
                   w_callable, space.type(w_callable))
     return space.wrap(meth)
 app_lazy = gateway.interp2app(lazy)
@@ -173,8 +173,9 @@
     space = std.Space(*args, **kwds)
     patch_space_in_place(space, 'thunk', proxymaker)
     w_pypymagic = space.getbuiltinmodule("pypymagic")
+    space.w_fn_thunk = space.wrap(app_thunk)
     space.setattr(w_pypymagic, space.wrap('thunk'),
-                  space.wrap(app_thunk))
+                  space.w_fn_thunk)
     space.setattr(w_pypymagic, space.wrap('is_thunk'),
                   space.wrap(app_is_thunk))
     space.setattr(w_pypymagic, space.wrap('become'),

Modified: pypy/branch/ast-experiments/pypy/rpython/extfunc.py
==============================================================================
--- pypy/branch/ast-experiments/pypy/rpython/extfunc.py	(original)
+++ pypy/branch/ast-experiments/pypy/rpython/extfunc.py	Mon Feb 26 08:45:45 2007
@@ -68,3 +68,11 @@
         FunEntry.__name__ = export_name
     else:
         FunEntry.__name__ = function.func_name
+
+def is_external(func):
+    if getattr(func.value._callable, 'suggested_primitive', False):
+        return True
+    if hasattr(func.value, '_entry'):
+        if isinstance(func.value._entry, ExtFuncEntry):
+            return True
+    return False

Modified: pypy/branch/ast-experiments/pypy/rpython/lltypesystem/lltype.py
==============================================================================
--- pypy/branch/ast-experiments/pypy/rpython/lltypesystem/lltype.py	(original)
+++ pypy/branch/ast-experiments/pypy/rpython/lltypesystem/lltype.py	Mon Feb 26 08:45:45 2007
@@ -643,6 +643,11 @@
             return Void   # maybe
         if tp is int:
             return Signed
+        if tp is long:
+            if -maxint-1 <= val <= maxint:
+                return Signed
+            else:
+                return SignedLongLong
         if tp is bool:
             return Bool
         if issubclass(tp, base_int):

Modified: pypy/branch/ast-experiments/pypy/rpython/memory/gctransform/framework.py
==============================================================================
--- pypy/branch/ast-experiments/pypy/rpython/memory/gctransform/framework.py	(original)
+++ pypy/branch/ast-experiments/pypy/rpython/memory/gctransform/framework.py	Mon Feb 26 08:45:45 2007
@@ -146,19 +146,36 @@
 
         self.frameworkgc_setup_ptr = getfn(frameworkgc_setup, [],
                                            annmodel.s_None)
-        if StackRootIterator.push_root is None:
-            self.push_root_ptr = None
-        else:
+        if StackRootIterator.need_root_stack:
+            self.pop_root_ptr = getfn(StackRootIterator.pop_root, [],
+                                      annmodel.s_None,
+                                      inline = True)
             self.push_root_ptr = getfn(StackRootIterator.push_root,
                                        [annmodel.SomeAddress()],
                                        annmodel.s_None,
                                        inline = True)
-        if StackRootIterator.pop_root is None:
-            self.pop_root_ptr = None
+            self.incr_stack_ptr = getfn(StackRootIterator.incr_stack,
+                                       [annmodel.SomeInteger()],
+                                       annmodel.SomeAddress(),
+                                       inline = True)
+            self.decr_stack_ptr = getfn(StackRootIterator.decr_stack,
+                                       [annmodel.SomeInteger()],
+                                       annmodel.s_None,
+                                       inline = True)
+            self.save_addr_ptr = getfn(StackRootIterator.save_addr,
+                                       [annmodel.SomeAddress(),
+                                        annmodel.SomeInteger(),
+                                        annmodel.SomeAddress()],
+                                       annmodel.s_None,
+                                       inline = True)
         else:
-            self.pop_root_ptr = getfn(StackRootIterator.pop_root, [],
-                                      annmodel.s_None,
-                                      inline = True)
+            self.push_root_ptr = None
+            self.pop_root_ptr = None
+            self.incr_stack_ptr = None
+            self.decr_stack_ptr = None
+            self.save_addr_ptr = None
+            
+        
 
         classdef = bk.getuniqueclassdef(GCClass)
         s_gc = annmodel.SomeInstance(classdef)
@@ -243,6 +260,22 @@
                     i += 1
             setup_root_stack = staticmethod(setup_root_stack)
 
+            need_root_stack = True
+            
+            def incr_stack(n):
+                top = gcdata.root_stack_top
+                gcdata.root_stack_top = top + n*sizeofaddr
+                return top
+            incr_stack = staticmethod(incr_stack)
+            
+            def save_addr(top, k, addr):
+                top.address[k] = addr
+            save_addr = staticmethod(save_addr)
+            
+            def decr_stack(n):
+                gcdata.root_stack_top -= n*sizeofaddr
+            decr_stack = staticmethod(decr_stack)
+                
             def push_root(addr):
                 top = gcdata.root_stack_top
                 top.address[0] = addr
@@ -554,18 +587,24 @@
         if self.push_root_ptr is None:
             return
         livevars = [var for var in self.livevars if not var_ispyobj(var)]
-        for var in livevars:
+        c_len = rmodel.inputconst(lltype.Signed, len(livevars) )
+        base_addr = hop.genop("direct_call", [self.incr_stack_ptr, c_len ],
+                              resulttype=llmemory.Address)
+        for k,var in enumerate(livevars):
+            c_k = rmodel.inputconst(lltype.Signed, k)
             v_adr = gen_cast(hop.llops, llmemory.Address, var)
-            hop.genop("direct_call", [self.push_root_ptr, v_adr])
+            hop.genop("direct_call", [self.save_addr_ptr, base_addr, c_k, v_adr])
 
     def pop_roots(self, hop):
         if self.pop_root_ptr is None:
             return
         livevars = [var for var in self.livevars if not var_ispyobj(var)]
-        for var in livevars[::-1]:
-            # XXX specific to non-moving collectors
-            hop.genop("direct_call", [self.pop_root_ptr])
-            #hop.genop("gc_reload_possibly_moved", [var])
+        c_len = rmodel.inputconst(lltype.Signed, len(livevars) )
+        hop.genop("direct_call", [self.decr_stack_ptr, c_len ] )        
+##         for var in livevars[::-1]:
+##             # XXX specific to non-moving collectors
+##             hop.genop("direct_call", [self.pop_root_ptr])
+##             #hop.genop("gc_reload_possibly_moved", [var])
 
 # XXX copied and modified from lltypelayout.py
 def offsets_to_gc_pointers(TYPE):

Modified: pypy/branch/ast-experiments/pypy/rpython/memory/gctransform/stacklessframework.py
==============================================================================
--- pypy/branch/ast-experiments/pypy/rpython/memory/gctransform/stacklessframework.py	(original)
+++ pypy/branch/ast-experiments/pypy/rpython/memory/gctransform/stacklessframework.py	Mon Feb 26 08:45:45 2007
@@ -61,8 +61,7 @@
                 pass
             setup_root_stack = staticmethod(setup_root_stack)
 
-            push_root = None
-            pop_root = None
+            need_root_stack = False
 
             def __init__(self):
                 frame = llmemory.cast_ptr_to_adr(stack_capture())

Modified: pypy/branch/ast-experiments/pypy/rpython/rfloat.py
==============================================================================
--- pypy/branch/ast-experiments/pypy/rpython/rfloat.py	(original)
+++ pypy/branch/ast-experiments/pypy/rpython/rfloat.py	Mon Feb 26 08:45:45 2007
@@ -110,6 +110,10 @@
 
     def get_ll_eq_function(self):
         return None
+    get_ll_gt_function = get_ll_eq_function
+    get_ll_lt_function = get_ll_eq_function
+    get_ll_ge_function = get_ll_eq_function
+    get_ll_le_function = get_ll_eq_function
 
     def get_ll_hash_function(self):
         return ll_hash_float

Modified: pypy/branch/ast-experiments/pypy/rpython/rint.py
==============================================================================
--- pypy/branch/ast-experiments/pypy/rpython/rint.py	(original)
+++ pypy/branch/ast-experiments/pypy/rpython/rint.py	Mon Feb 26 08:45:45 2007
@@ -222,6 +222,13 @@
         raise TyperError("not an integer: %r" % (value,))
 
     def get_ll_eq_function(self):
+        return None
+    get_ll_gt_function = get_ll_eq_function
+    get_ll_lt_function = get_ll_eq_function
+    get_ll_ge_function = get_ll_eq_function
+    get_ll_le_function = get_ll_eq_function
+
+    def get_ll_ge_function(self):
         return None 
 
     def get_ll_hash_function(self):

Modified: pypy/branch/ast-experiments/pypy/rpython/rmodel.py
==============================================================================
--- pypy/branch/ast-experiments/pypy/rpython/rmodel.py	(original)
+++ pypy/branch/ast-experiments/pypy/rpython/rmodel.py	Mon Feb 26 08:45:45 2007
@@ -272,6 +272,9 @@
         v_iter, = hop.inputargs(self)
         return v_iter
 
+    def rtype_method_next(self, hop):
+        return self.rtype_next(hop)
+
 
 class __extend__(annmodel.SomeIterator):
     # NOTE: SomeIterator is for iterators over any container, not just list

Modified: pypy/branch/ast-experiments/pypy/rpython/rtuple.py
==============================================================================
--- pypy/branch/ast-experiments/pypy/rpython/rtuple.py	(original)
+++ pypy/branch/ast-experiments/pypy/rpython/rtuple.py	Mon Feb 26 08:45:45 2007
@@ -22,6 +22,7 @@
 
 
 _gen_eq_function_cache = {}
+_gen_cmp_function_cache = {}
 _gen_hash_function_cache = {}
 _gen_str_function_cache = {}
 
@@ -46,6 +47,49 @@
 
         _gen_eq_function_cache[key] = ll_eq
         return ll_eq
+import os
+def gen_cmp_function(items_r, op_funcs, eq_funcs, strict):
+    """generates <= and >= comparison ll_op for tuples
+    cmp_funcs is a tuple of (strict_comp, equality) functions
+    works for != with strict==True
+    """
+    cmp_funcs = zip(op_funcs,eq_funcs)
+    autounrolling_funclist = unrolling_iterable(enumerate(cmp_funcs))
+    key = tuple(cmp_funcs), strict
+    try:
+        return _gen_cmp_function_cache[key]
+    except KeyError:
+        def ll_cmp(t1, t2):
+            cmp_res = True
+            for i, (cmpfn, eqfn) in autounrolling_funclist:
+                attrname = 'item%d' % i
+                item1 = getattr(t1, attrname)
+                item2 = getattr(t2, attrname)
+                cmp_res = cmpfn(item1, item2)
+                if cmp_res:
+                    # a strict compare is true we shortcut
+                    return True
+                eq_res = eqfn(item1, item2)
+                if not eq_res:
+                    # not strict and not equal we fail
+                    return False
+            # Everything's equal here
+            if strict:
+                return False
+            else:
+                return True
+        _gen_cmp_function_cache[key] = ll_cmp
+        return ll_cmp
+
+def gen_gt_function(items_r, strict):
+    gt_funcs = [r_item.get_ll_gt_function() or operator.gt for r_item in items_r]
+    eq_funcs = [r_item.get_ll_eq_function() or operator.eq for r_item in items_r]
+    return gen_cmp_function( items_r, gt_funcs, eq_funcs, strict )
+
+def gen_lt_function(items_r, strict):
+    lt_funcs = [r_item.get_ll_lt_function() or operator.lt for r_item in items_r]
+    eq_funcs = [r_item.get_ll_eq_function() or operator.eq for r_item in items_r]
+    return gen_cmp_function( items_r, lt_funcs, eq_funcs, strict )
 
 def gen_hash_function(items_r):
     # based on CPython
@@ -166,8 +210,20 @@
     def get_ll_eq_function(self):
         return gen_eq_function(self.items_r)
 
+    def get_ll_ge_function(self):
+        return gen_gt_function(self.items_r, False)
+
+    def get_ll_gt_function(self):
+        return gen_gt_function(self.items_r, True)
+
+    def get_ll_le_function(self):
+        return gen_lt_function(self.items_r, False)
+
+    def get_ll_lt_function(self):
+        return gen_lt_function(self.items_r, True)
+
     def get_ll_hash_function(self):
-        return gen_hash_function(self.items_r)    
+        return gen_hash_function(self.items_r)
 
     ll_str = property(gen_str_function)
 
@@ -241,6 +297,30 @@
         ll_eq = r_tup1.get_ll_eq_function()
         return hop.gendirectcall(ll_eq, v_tuple1, v_tuple2)
 
+    def rtype_ge((r_tup1, r_tup2), hop):
+        # XXX assumes that r_tup2 is convertible to r_tup1
+        v_tuple1, v_tuple2 = hop.inputargs(r_tup1, r_tup1)
+        ll_ge = r_tup1.get_ll_ge_function()
+        return hop.gendirectcall(ll_ge, v_tuple1, v_tuple2)
+
+    def rtype_gt((r_tup1, r_tup2), hop):
+        # XXX assumes that r_tup2 is convertible to r_tup1
+        v_tuple1, v_tuple2 = hop.inputargs(r_tup1, r_tup1)
+        ll_gt = r_tup1.get_ll_gt_function()
+        return hop.gendirectcall(ll_gt, v_tuple1, v_tuple2)
+
+    def rtype_le((r_tup1, r_tup2), hop):
+        # XXX assumes that r_tup2 is convertible to r_tup1
+        v_tuple1, v_tuple2 = hop.inputargs(r_tup1, r_tup1)
+        ll_le = r_tup1.get_ll_le_function()
+        return hop.gendirectcall(ll_le, v_tuple1, v_tuple2)
+
+    def rtype_lt((r_tup1, r_tup2), hop):
+        # XXX assumes that r_tup2 is convertible to r_tup1
+        v_tuple1, v_tuple2 = hop.inputargs(r_tup1, r_tup1)
+        ll_lt = r_tup1.get_ll_lt_function()
+        return hop.gendirectcall(ll_lt, v_tuple1, v_tuple2)
+
     def rtype_ne(tup1tup2, hop):
         v_res = tup1tup2.rtype_eq(hop)
         return hop.genop('bool_not', [v_res], resulttype=Bool)

Modified: pypy/branch/ast-experiments/pypy/rpython/test/test_rlist.py
==============================================================================
--- pypy/branch/ast-experiments/pypy/rpython/test/test_rlist.py	(original)
+++ pypy/branch/ast-experiments/pypy/rpython/test/test_rlist.py	Mon Feb 26 08:45:45 2007
@@ -283,6 +283,35 @@
         res = self.interpret(dummyfn, [])
         assert res == 25
 
+    def test_iterate_next(self):
+        def dummyfn():
+            total = 0
+            it = iter([1, 3, 5, 7, 9])
+            while 1:
+                try:
+                    x = it.next()
+                except StopIteration:
+                    break
+                total += x
+            return total
+        res = self.interpret(dummyfn, [])
+        assert res == 25
+        def dummyfn():
+            total = 0
+            l = [1, 3, 5, 7]
+            l.append(9)
+            it = iter(l)
+            while 1:
+                try:
+                    x = it.next()
+                except StopIteration:
+                    break
+                total += x
+            return total
+        res = self.interpret(dummyfn, [])
+        assert res == 25
+
+
     def test_recursive(self):
         def dummyfn(N):
             l = []

Modified: pypy/branch/ast-experiments/pypy/rpython/test/test_rtuple.py
==============================================================================
--- pypy/branch/ast-experiments/pypy/rpython/test/test_rtuple.py	(original)
+++ pypy/branch/ast-experiments/pypy/rpython/test/test_rtuple.py	Mon Feb 26 08:45:45 2007
@@ -280,6 +280,51 @@
         res = self.interpret(f, [2])
         assert res is True
 
+    TUPLES = [
+        ((1,2),  (2,3),   -1),
+        ((1,2),  (1,3),   -1),
+        ((1,2),  (1,1),    1),
+        ((1,2),  (1,2),    0),
+        ((1.,2.),(2.,3.), -1),
+        ((1.,2.),(1.,3.), -1),
+        ((1.,2.),(1.,1.),  1),
+        ((1.,2.),(1.,2.),  0),
+        ((1,2.),(2,3.), -1),
+        ((1,2.),(1,3.), -1),
+        ((1,2.),(1,1.),  1),
+        ((1,2.),(1,2.),  0),
+##         ((1,"def"),(1,"abc"), -1),
+##         ((1.,"abc"),(1.,"abc"), 0),
+        ]
+
+    def test_tuple_comparison(self):
+        def f_lt( a, b, c, d ):
+            return (a,b) < (c,d)
+        def f_le( a, b, c, d ):
+            return (a,b) <= (c,d)
+        def f_gt( a, b, c, d ):
+            return (a,b) > (c,d)
+        def f_ge( a, b, c, d ):
+            return (a,b) >= (c,d)
+        def test_lt( a,b,c,d,resu ):
+            res = self.interpret(f_lt,[a,b,c,d])
+            assert res == (resu == -1), "Error (%s,%s)<(%s,%s) is %s(%s)" % (a,b,c,d,res,resu)
+        def test_le( a,b,c,d,resu ):
+            res = self.interpret(f_le,[a,b,c,d])
+            assert res == (resu <= 0), "Error (%s,%s)<=(%s,%s) is %s(%s)" % (a,b,c,d,res,resu)
+        def test_gt( a,b,c,d,resu ):
+            res = self.interpret(f_gt,[a,b,c,d])
+            assert res == ( resu == 1 ), "Error (%s,%s)>(%s,%s) is %s(%s)" % (a,b,c,d,res,resu)
+        def test_ge( a,b,c,d,resu ):
+            res = self.interpret(f_ge,[a,b,c,d])
+            assert res == ( resu >= 0 ), "Error (%s,%s)>=(%s,%s) is %s(%s)" % (a,b,c,d,res,resu)
+
+        for (a,b),(c,d),resu in self.TUPLES:
+            yield test_lt, a,b,c,d, resu
+            yield test_gt, a,b,c,d, resu
+            yield test_le, a,b,c,d, resu
+            yield test_ge, a,b,c,d, resu
+
     def test_tuple_hash(self):
         def f(n):
             return hash((n, 6)) == hash((3, n*2))

Modified: pypy/branch/ast-experiments/pypy/tool/build/build.py
==============================================================================
--- pypy/branch/ast-experiments/pypy/tool/build/build.py	(original)
+++ pypy/branch/ast-experiments/pypy/tool/build/build.py	Mon Feb 26 08:45:45 2007
@@ -167,3 +167,9 @@
         return (self.normalized_rev >= comparerev - self.revrange and
                 self.normalized_rev <= comparerev + self.revrange)
 
+    def __eq__(self, other):
+        return isinstance(other, self.__class__) and repr(self) == repr(other)
+
+    def __ne__(self, other):
+        return not self.__eq__(other)
+

Modified: pypy/branch/ast-experiments/pypy/tool/build/metaserver.py
==============================================================================
--- pypy/branch/ast-experiments/pypy/tool/build/metaserver.py	(original)
+++ pypy/branch/ast-experiments/pypy/tool/build/metaserver.py	Mon Feb 26 08:45:45 2007
@@ -169,6 +169,14 @@
         finally:
             self._queuelock.release()
 
+    def status(self):
+        # XXX temporary
+        in_progress = len([b for b in self._builders if b.busy_on])
+        return {'in_progress': in_progress,
+                'queued': len(self._queued),
+                'waiting': len(self._waiting),
+                'done': len(self._done)}
+
     def _cleanup_builders(self):
         self._queuelock.acquire()
         try:

Modified: pypy/branch/ast-experiments/pypy/tool/build/test/test_metaserver.py
==============================================================================
--- pypy/branch/ast-experiments/pypy/tool/build/test/test_metaserver.py	(original)
+++ pypy/branch/ast-experiments/pypy/tool/build/test/test_metaserver.py	Mon Feb 26 08:45:45 2007
@@ -157,3 +157,23 @@
     assert not bp1.check()
     assert bp2.check()
 
+def test_status():
+    return
+    temppath = py.test.ensuretemp('test_status')
+    config = Container(projectname='test', buildpath=temppath)
+    svr = metaserver.MetaServer(config, FakeChannel())
+    svr._done.append('y')
+    svr._done.append('z')
+    svr._queued.append('spam')
+    svr._queued.append('spam')
+    svr._queued.append('eggs')
+    bs = FakeBuildserver({})
+    bs.busy_on = 'foo'
+    svr._builders.append(bs)
+    assert svr.status() == {
+        'done': 2,
+        'queued': 3,
+        'waiting': 0,
+        'in_progress': 1,
+    }
+

Modified: pypy/branch/ast-experiments/pypy/tool/makerelease.py
==============================================================================
--- pypy/branch/ast-experiments/pypy/tool/makerelease.py	(original)
+++ pypy/branch/ast-experiments/pypy/tool/makerelease.py	Mon Feb 26 08:45:45 2007
@@ -1,15 +1,17 @@
 
-
+import autopath
 import py
 
 log = py.log.Producer("log")
 logexec = py.log.Producer("exec")
 
-BASEURL = "file:///svn/pypy/release/0.9.x"
+import os
+
+BASEURL = "file:///svn/pypy/release/0.99.x"
 DDIR = py.path.local('/www/codespeak.net/htdocs/download/pypy')
 
 def usage():
-    print "usage: %s versionbasename" %(py.std.sys.argv[0])
+    print "usage: %s [-tag .<micro>] versionbasename" %(py.std.sys.argv[0])
     raise SystemExit, 1
 
 def cexec(cmd): 
@@ -70,16 +72,46 @@
                             %(lineend, BASEURL, target))
     assert target.check(dir=1)
 
+def build_html(target):
+    docdir = target.join('pypy').join('doc')
+    old = docdir.chdir()
+    try:
+        # Generate the html files.
+        cmd = "python2.4 ../test_all.py"
+        logexec(cmd)
+        r = os.system(cmd)
+        if r:
+            raise SystemExit, -1
+        # Remove any .pyc files created in the process
+        target.chdir()
+        out = cexec("find . -name '*.pyc' -print0 | xargs -0 -r rm")
+    finally:
+        old.chdir()
+
 if __name__ == '__main__':
     argc = len(py.std.sys.argv)
     if argc <= 1:
         usage()
-    ver = py.std.sys.argv[1] 
+
+    j = 1
+    if py.std.sys.argv[1] == '-tag':
+        micro = py.std.sys.argv[2]
+        assert micro.startswith('.')
+        NEWURL = BASEURL.replace('.x', micro)
+        r = os.system("svn cp %s %s" % (BASEURL, NEWURL))
+        if r:
+            raise SystemExit, -1
+        BASEURL = NEWURL
+        j = 3
+        
+    ver = py.std.sys.argv[j]
+    assert ver.startswith('pypy-')
     tmpdir = py.path.local("/tmp/pypy-release")
 
     target = tmpdir.join(ver)
 
     forced_export(BASEURL, target, lineend="LF")
+    build_html(target)
     target_targz = maketargz(target)
     assert target_targz.check(file=1) 
     copydownload(target_targz)
@@ -89,6 +121,7 @@
     copydownload(target_tarbzip)
 
     forced_export(BASEURL, target, lineend="CRLF")
+    build_html(target)
     target_zip = makezip(target)
     assert target_zip.check(file=1) 
     copydownload(target_zip)

Modified: pypy/branch/ast-experiments/pypy/tool/option.py
==============================================================================
--- pypy/branch/ast-experiments/pypy/tool/option.py	(original)
+++ pypy/branch/ast-experiments/pypy/tool/option.py	Mon Feb 26 08:45:45 2007
@@ -5,13 +5,17 @@
 from pypy.config.config import Config, OptionDescription, to_optparse
 from py.compat import optparse
 
+extra_useage = """For detailed descriptions of all the options see
+http://codespeak.net/pypy/dist/pypy/doc/config/commandline.html"""
+
 def run_tb_server(option, opt, value, parser):
     from pypy.tool import tb_server
     tb_server.start()
 
 def get_standard_options():
     config = get_pypy_config()
-    parser = to_optparse(config, useoptions=["objspace.*"])
+    parser = to_optparse(config, useoptions=["objspace.*"],
+                         extra_useage=extra_useage)
     parser.add_option(
         '-H', action="callback",
         callback=run_tb_server,

Modified: pypy/branch/ast-experiments/pypy/tool/statistic_over_time.py
==============================================================================
--- pypy/branch/ast-experiments/pypy/tool/statistic_over_time.py	(original)
+++ pypy/branch/ast-experiments/pypy/tool/statistic_over_time.py	Mon Feb 26 08:45:45 2007
@@ -3,11 +3,6 @@
 import datetime
 import time
 
-try: 
-    path = py.path.svnwc(py.std.sys.argv[1])
-except IndexError: 
-    path = py.path.svnwc()
-
 URL = "http://codespeak.net/svn/pypy/dist"
 
 tempdir = py.path.svnwc(py.test.ensuretemp("pypy-dist"))

Modified: pypy/branch/ast-experiments/pypy/translator/c/src/signals.h
==============================================================================
--- pypy/branch/ast-experiments/pypy/translator/c/src/signals.h	(original)
+++ pypy/branch/ast-experiments/pypy/translator/c/src/signals.h	Mon Feb 26 08:45:45 2007
@@ -54,12 +54,30 @@
 
 void pypysig_ignore(int signum)
 {
+#ifdef SA_RESTART
+    /* assume sigaction exists */
+    struct sigaction context;
+    context.sa_handler = SIG_IGN;
+    sigemptyset(&context.sa_mask);
+    context.sa_flags = 0;
+    sigaction(signum, &context, NULL);
+#else
   signal(signum, SIG_IGN);
+#endif
 }
 
 void pypysig_default(int signum)
 {
+#ifdef SA_RESTART
+    /* assume sigaction exists */
+    struct sigaction context;
+    context.sa_handler = SIG_DFL;
+    sigemptyset(&context.sa_mask);
+    context.sa_flags = 0;
+    sigaction(signum, &context, NULL);
+#else
   signal(signum, SIG_DFL);
+#endif
 }
 
 static void signal_setflag_handler(int signum)
@@ -71,7 +89,16 @@
 
 void pypysig_setflag(int signum)
 {
+#ifdef SA_RESTART
+    /* assume sigaction exists */
+    struct sigaction context;
+    context.sa_handler = signal_setflag_handler;
+    sigemptyset(&context.sa_mask);
+    context.sa_flags = 0;
+    sigaction(signum, &context, NULL);
+#else
   signal(signum, signal_setflag_handler);
+#endif
 }
 
 int pypysig_poll(void)

Modified: pypy/branch/ast-experiments/pypy/translator/cli/test/runtest.py
==============================================================================
--- pypy/branch/ast-experiments/pypy/translator/cli/test/runtest.py	(original)
+++ pypy/branch/ast-experiments/pypy/translator/cli/test/runtest.py	Mon Feb 26 08:45:45 2007
@@ -251,9 +251,9 @@
         if self._func is fn and self._ann == ann:
             return self._cli_func
         else:
+            self._cli_func = compile_function(fn, ann)
             self._func = fn
             self._ann = ann
-            self._cli_func = compile_function(fn, ann)
             return self._cli_func
 
     def _skip_win(self, reason):

Modified: pypy/branch/ast-experiments/pypy/translator/goal/app_main.py
==============================================================================
--- pypy/branch/ast-experiments/pypy/translator/goal/app_main.py	(original)
+++ pypy/branch/ast-experiments/pypy/translator/goal/app_main.py	Mon Feb 26 08:45:45 2007
@@ -6,6 +6,7 @@
   -i           inspect interactively after running script
   -O           dummy optimization flag for compatibility with C Python
   -c CMD       program passed in as CMD (terminates option list)
+  -S           do not 'import site' on initialization
   -u           unbuffered binary stdout and stderr
   -h, --help   show this help message and exit
   --version    print the PyPy version
@@ -172,6 +173,7 @@
 
     go_interactive = False
     run_command = False
+    import_site = True
     i = 0
     while i < len(argv):
         arg = argv[i]
@@ -198,6 +200,8 @@
         elif arg == '-h' or arg == '--help':
             print_help()
             return 0
+        elif arg == '-S':
+            import_site = False
         elif arg == '--':
             i += 1
             break     # terminates option list
@@ -214,6 +218,13 @@
     mainmodule = type(sys)('__main__')
     sys.modules['__main__'] = mainmodule
 
+    if import_site:
+        try:
+            import site
+        except:
+            print >> sys.stderr, "import site' failed"
+
+
     # set up the Ctrl-C => KeyboardInterrupt signal handler, if the
     # signal module is available
     try:

Modified: pypy/branch/ast-experiments/pypy/translator/goal/bench-cronjob.py
==============================================================================
--- pypy/branch/ast-experiments/pypy/translator/goal/bench-cronjob.py	(original)
+++ pypy/branch/ast-experiments/pypy/translator/goal/bench-cronjob.py	Mon Feb 26 08:45:45 2007
@@ -169,18 +169,18 @@
 def main(backends=[]):
     if backends == []:  #_ prefix means target specific option, # prefix to outcomment
         backends = [backend.strip() for backend in """
-            llvm--_objspace-std-withstrdict
+            llvm--_objspace-std-withmultidict
             llvm--_objspace-opcodes-CALL_LIKELY_BUILTIN
             c
             c--gc=framework
-            c--thread--_objspace-std-withstrdict--profopt='-c "from richards import *;main(iterations=1)"'
+            c--thread--_objspace-std-withmultidict--profopt='-c "from richards import *;main(iterations=1)"'
             c--stackless
             c--stackless--profopt='-c "from richards import *;main(iterations=1)"'
-            c--stackless--_objspace-std-withstrdict--profopt='-c "from richards import *;main(iterations=1)"'
+            c--stackless--_objspace-std-withmultidict--profopt='-c "from richards import *;main(iterations=1)"'
             c--profopt='-c "from richards import *;main(iterations=1)"'
             c--profopt='-c "from richards import *;main(iterations=1)"'--_objspace-opcodes-CALL_LIKELY_BUILTIN
-            c--_objspace-std-withstrdict--profopt='-c "from richards import *;main(iterations=1)"'
-            c--gc=framework--_objspace-std-withstrdict--profopt='-c "from richards import *;main(iterations=1)"'
+            c--_objspace-std-withmultidict--profopt='-c "from richards import *;main(iterations=1)"'
+            c--gc=framework--_objspace-std-withmultidict--profopt='-c "from richards import *;main(iterations=1)"'
             cli
             """.split('\n') if backend.strip() and not backend.strip().startswith('#')]
     print time.ctime()

Modified: pypy/branch/ast-experiments/pypy/translator/goal/targetjsstandalone.py
==============================================================================
--- pypy/branch/ast-experiments/pypy/translator/goal/targetjsstandalone.py	(original)
+++ pypy/branch/ast-experiments/pypy/translator/goal/targetjsstandalone.py	Mon Feb 26 08:45:45 2007
@@ -4,7 +4,6 @@
 
 import sys
 from pypy.rlib.streamio import open_file_as_stream
-from pypy.lang.js.interpreter import Interpreter
 from pypy.lang.js.interpreter import *
 from pypy.lang.js.jsobj import ExecutionReturned
 

Modified: pypy/branch/ast-experiments/pypy/translator/goal/translate.py
==============================================================================
--- pypy/branch/ast-experiments/pypy/translator/goal/translate.py	(original)
+++ pypy/branch/ast-experiments/pypy/translator/goal/translate.py	Mon Feb 26 08:45:45 2007
@@ -166,6 +166,8 @@
         if 'print_help' in targetspec_dic:
             print "\n\nTarget specific help:\n\n"
             targetspec_dic['print_help'](config)
+        print "\n\nFor detailed descriptions of the command line options see"
+        print "http://codespeak.net/pypy/dist/pypy/doc/config/commandline.html"
         sys.exit(0)
     
     return targetspec_dic, translateconfig, config, args

Modified: pypy/branch/ast-experiments/pypy/translator/js/commproxy.py
==============================================================================
--- pypy/branch/ast-experiments/pypy/translator/js/commproxy.py	(original)
+++ pypy/branch/ast-experiments/pypy/translator/js/commproxy.py	Mon Feb 26 08:45:45 2007
@@ -14,17 +14,15 @@
     str = ""
     for(i in data) {
         if (data[i]) {
-            if (str.length == 0) {
-                str += "?";
-            } else {
+            if (str.length != 0) {
                 str += "&";
             }
-            str += i + "=" + data[i].toString();
+            str += escape(i) + "=" + escape(data[i].toString());
         }
     }
     //logDebug('%(call)s'+str);
     x.open("GET", '%(call)s' + str, true);
-    //x.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
+    x.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
     x.onreadystatechange = function () { %(real_callback)s(x, callback) };
     //x.setRequestHeader("Connection", "close");
     //x.send(data);
@@ -45,7 +43,7 @@
             } else {
                 str += "&";
             }
-            str += i + "=" + data[i].toString();
+            str += escape(i) + "=" + escape(data[i].toString());
         }
     }
     //logDebug('%(call)s'+str);
@@ -131,6 +129,8 @@
         METHOD_BODY = globals()[self.method + "_METHOD_BODY"]
         if USE_MOCHIKIT and self.use_xml:
             assert 0, "Cannot use mochikit and xml requests at the same time"
+        if USE_MOCHIKIT and self.method == "POST":
+            assert 0, "Cannot use mochikit with POST method"
         if USE_MOCHIKIT:
             ilasm.codegenerator.write(MOCHIKIT_BODY % {'class':self.name, 'method':url,\
                 'args':','.join(real_args), 'data':data, 'call':method_name})

Modified: pypy/branch/ast-experiments/pypy/translator/js/examples/bnb/bnb.py
==============================================================================
--- pypy/branch/ast-experiments/pypy/translator/js/examples/bnb/bnb.py	(original)
+++ pypy/branch/ast-experiments/pypy/translator/js/examples/bnb/bnb.py	Mon Feb 26 08:45:45 2007
@@ -73,13 +73,13 @@
     host = 'localhost'
     try:
         port = re.findall('value=".*"', urllib.urlopen('http://%s:8000' % host).read())[0]
+        port = int(port[7:-1])
     except IOError:
         log("ERROR: Can't connect to BnB server on %s:8000" % host)
-        sys.exit()
+#        sys.exit()
     except IndexError:
         log("ERROR: Connected to BnB server but unable to detect a running game")
-        sys.exit()
-    port = int(port[7:-1])
+#        sys.exit()
 
     #def _close(self, sessionid):
     #    if sessionid in self._serverMessage:

Modified: pypy/branch/ast-experiments/pypy/translator/js/examples/bnb/data/bnb.html
==============================================================================
--- pypy/branch/ast-experiments/pypy/translator/js/examples/bnb/data/bnb.html	(original)
+++ pypy/branch/ast-experiments/pypy/translator/js/examples/bnb/data/bnb.html	Mon Feb 26 08:45:45 2007
@@ -4,7 +4,7 @@
     <meta content="text/html; charset=UTF-8" http-equiv="content-type"/>
     <title>Bub'n'bros</title>
     <script type="text/javascript" src="source.js"></script>
-    <script src="MochiKit/MochiKit.js" type="text/javascript"></script>
+    <script src="http://mochikit.com/MochiKit/MochiKit.js" type="text/javascript"></script>
 </head>
 <body onload="bnb()">
 </body>

Modified: pypy/branch/ast-experiments/pypy/translator/js/examples/bnb/servermessage.py
==============================================================================
--- pypy/branch/ast-experiments/pypy/translator/js/examples/bnb/servermessage.py	(original)
+++ pypy/branch/ast-experiments/pypy/translator/js/examples/bnb/servermessage.py	Mon Feb 26 08:45:45 2007
@@ -1,5 +1,4 @@
 from msgstruct import *
-import PIL.Image
 from zlib import decompressobj, decompress
 from urllib import quote
 from os.path import exists
@@ -93,6 +92,7 @@
         return fn(bitmap_code, data_or_fileid, *rest)
 
     def def_bitmap1(self, bitmap_code, data, *rest):
+        import PIL.Image
         if len(rest) == 0:
             colorkey = None
         else:
@@ -163,6 +163,8 @@
                 fileid, position, size, gfx_bitmap_filename))
 
     def def_icon(self, bitmap_code, icon_code, x,y,w,h, *rest):
+        import PIL.Image
+
         #log('def_icon bitmap_code=%s, icon_code=%s, x=%s, y=%s, w=%s, h=%s, alpha=%s' %\
         #    (bitmap_code, icon_code, x,y,w,h, rest) #ignore alpha (bubbles)
 

Modified: pypy/branch/ast-experiments/pypy/translator/js/examples/data/index.html
==============================================================================
--- pypy/branch/ast-experiments/pypy/translator/js/examples/data/index.html	(original)
+++ pypy/branch/ast-experiments/pypy/translator/js/examples/data/index.html	Mon Feb 26 08:45:45 2007
@@ -6,19 +6,27 @@
   </style>
 </head>
 <body>
+  <p><b>Note: this demos are set up on the replicable xen instance, but
+  please do not vandalise the machine, otherwise we would be forced to
+  take it down</b></p>
   <h2 align="center">This site presents various demos and tutorials about pypy.js</h2>
   <div>
     <h3>Python console:</h3>
     <p>No more, no less
       <a href="console">Launch one for me</a>
-      <a href="source_link_here">Source</a>
     </p>
   </div>
   <div>
   <h3>Remote terminal:</h3>
-  <p>Fully ANSI-complaint remote terminal session:
-  <a href="javascript:launch_terminal()">Launch one for me</a>
-  <a href="source_link_here">Source</a>
+    <p>Fully ANSI-complaint remote terminal session:
+    <a href="http://play1.codespeak.net:8058/">Take a look</a>
+  </p>
+  <h3>Bub'n'Bros JavaScript version</h3>
+  <p>
+    This is a working b'n'b client. It's kind of slow (blame lousy browsers),
+    but usable. <b>WARNING! If you're using the firebug, please disable it,
+   it's a great tool, but chockes a bit on this demo</b><br/>
+   <a href="/bnb"/>Demo</a>
   </p>
   </div>
 </body>

Modified: pypy/branch/ast-experiments/pypy/translator/js/examples/over_client.py
==============================================================================
--- pypy/branch/ast-experiments/pypy/translator/js/examples/over_client.py	(original)
+++ pypy/branch/ast-experiments/pypy/translator/js/examples/over_client.py	Mon Feb 26 08:45:45 2007
@@ -11,3 +11,8 @@
 
 def launch_console():
     exported_methods.launch_console(callback)
+
+def bnb_redirect():
+    loc = dom.window.location
+    new_loc = loc.protocol + "//" + loc.hostname + ":7070"
+    loc.assign(new_loc)

Modified: pypy/branch/ast-experiments/pypy/translator/js/examples/overmind.py
==============================================================================
--- pypy/branch/ast-experiments/pypy/translator/js/examples/overmind.py	(original)
+++ pypy/branch/ast-experiments/pypy/translator/js/examples/overmind.py	Mon Feb 26 08:45:45 2007
@@ -14,11 +14,11 @@
 import os
 import py
 
-FUNCTION_LIST = ['launch_console']
+FUNCTION_LIST = ['launch_console', 'bnb_redirect']
 TIMEOUT = 300
 pids = []
 
-def launch_console_in_new_thread():
+def launch_console_in_new_prcess():
     from pypy.translator.js.examples import pythonconsole
     httpd = server.create_server(server_address=('', 0),
                         handler=pythonconsole.RequestHandler,
@@ -37,7 +37,7 @@
         if we want to make this multiplayer, we need additional locking
         XXX
         """
-        return launch_console_in_new_thread()
+        return launch_console_in_new_prcess()
 
 exported_methods = ExportedMethods()
 
@@ -49,6 +49,7 @@
     static_dir = str(py.path.local(__file__).dirpath().join("data"))
     index = server.Static()
     console = server.Static(os.path.join(static_dir, "launcher.html"))
+    terminal = server.Static(os.path.join(static_dir, "terminal.html"))
     exported_methods = exported_methods
 
     def source_js(self):
@@ -60,6 +61,17 @@
         return "text/javascript", source
     source_js.exposed = True
 
+    def bnb(self):
+        return '''
+        <html>
+           <head>
+              <script src="source.js"></script>
+           </head>
+           <body onload="bnb_redirect()">
+           </body>
+        </html>'''
+    bnb.exposed = True
+
 if __name__ == '__main__':
     try:
         addr = ('', 8008)

Modified: pypy/branch/ast-experiments/pypy/translator/js/examples/pythonconsole.py
==============================================================================
--- pypy/branch/ast-experiments/pypy/translator/js/examples/pythonconsole.py	(original)
+++ pypy/branch/ast-experiments/pypy/translator/js/examples/pythonconsole.py	Mon Feb 26 08:45:45 2007
@@ -17,7 +17,7 @@
 from pypy.translator.js import commproxy
 from pypy.rpython.extfunc import _callable
 
-from pypy.translator.js.demo.jsdemo import support
+from pypy.translator.js.lib import support
 from pypy.translator.js.lib import server
 
 commproxy.USE_MOCHIKIT = True
@@ -30,8 +30,8 @@
 <html>
 <head>
   <title>Example</title>
-  <script type="text/javascript" src="jssource"/>
-  <script src="MochiKit/MochiKit.js" type="text/javascript"/>
+  <script type="text/javascript" src="jssource"></script>
+  <script src="http://mochikit.com/MochiKit/MochiKit.js" type="text/javascript"></script>
 </head>
 <body onload="setup_page()">
 <h3>Console</h3>

Modified: pypy/branch/ast-experiments/pypy/translator/js/lib/support.py
==============================================================================
--- pypy/branch/ast-experiments/pypy/translator/js/lib/support.py	(original)
+++ pypy/branch/ast-experiments/pypy/translator/js/lib/support.py	Mon Feb 26 08:45:45 2007
@@ -23,3 +23,23 @@
         return func
 
     return decorator
+
+import sys, new
+from pypy.translator.js.main import rpython2javascript
+
+def js_source(functions, use_pdb=True):
+    mod = new.module('_js_src')
+    function_names = []
+    for func in functions:
+        name = func.__name__
+        if hasattr(mod, name):
+            raise ValueError("exported function name %r is duplicated"
+                             % (name,))
+        mod.__dict__[name] = func
+        function_names.append(name)
+    sys.modules['_js_src'] = mod
+    try:
+        return rpython2javascript(mod, function_names, use_pdb=use_pdb)
+    finally:
+        del sys.modules['_js_src']
+

Modified: pypy/branch/ast-experiments/pypy/translator/js/main.py
==============================================================================
--- pypy/branch/ast-experiments/pypy/translator/js/main.py	(original)
+++ pypy/branch/ast-experiments/pypy/translator/js/main.py	Mon Feb 26 08:45:45 2007
@@ -14,6 +14,7 @@
 from pypy.config.config import OptionDescription, BoolOption, StrOption
 from pypy.config.config import Config, to_optparse
 import py
+import sys
 
 js_optiondescr = OptionDescription("jscompile", "", [
     BoolOption("view", "View flow graphs",
@@ -44,16 +45,29 @@
         [:func_data.func_code.co_argcount])
 
 def rpython2javascript_main(argv, jsconfig):
-    if len(argv) < 2:
+    if len(argv) == 0:
         print "usage: module <function_names>"
-        import sys
         sys.exit(0)
     module_name = argv[0]
-    if module_name.endswith('.py'):
-        module_name = module_name[:-3]
-    function_names = argv[1:]
-    mod = __import__(module_name, None, None, ["Module"])
+    if not module_name.endswith('.py'):
+        module_name += ".py"
+    mod = py.path.local(module_name).pyimport()
+    if len(argv) == 1:
+        function_names = []
+        for function_name in dir(mod):
+            function = getattr(mod, function_name)
+            if callable(function) and getattr(function, '_client', False):
+                function_names.append( function_name )
+        if not function_names:
+            print "Cannot find any function with _client=True in %s"\
+                      % module_name
+            sys.exit(1)
+    else:
+        function_names = argv[1:]
     source = rpython2javascript(mod, function_names, jsconfig=jsconfig)
+    if not source:
+        print "Exiting, source not generated"
+        sys.exit(1)
     open(jsconfig.output, "w").write(source)
     print "Written file %s" % jsconfig.output
 

Modified: pypy/branch/ast-experiments/pypy/translator/js/modules/dom.py
==============================================================================
--- pypy/branch/ast-experiments/pypy/translator/js/modules/dom.py	(original)
+++ pypy/branch/ast-experiments/pypy/translator/js/modules/dom.py	Mon Feb 26 08:45:45 2007
@@ -715,12 +715,6 @@
     'shiftKey': bool,
 })
 
-# XXX: Right now this is only way to get it rendered
-setTimeout.suggested_primitive = True
-
-# the following code wraps minidom nodes with Node classes, and makes
-# sure all methods on the nodes return wrapped nodes
-
 class _FunctionWrapper(object):
     """makes sure function return values are wrapped if appropriate"""
     def __init__(self, callable):

Modified: pypy/branch/ast-experiments/pypy/translator/js/modules/mochikit.py
==============================================================================
--- pypy/branch/ast-experiments/pypy/translator/js/modules/mochikit.py	(original)
+++ pypy/branch/ast-experiments/pypy/translator/js/modules/mochikit.py	Mon Feb 26 08:45:45 2007
@@ -2,6 +2,8 @@
 """ mochikit wrappers
 """
 
+from pypy.rpython.extfunc import register_external
+
 def createLoggingPane(var):
     pass
 createLoggingPane.suggested_primitive = True
@@ -34,4 +36,5 @@
 
 def escapeHTML(data):
     return data
-escapeHTML.suggested_primitive = True
+register_external(escapeHTML, args=[str], result=str)
+

Modified: pypy/branch/ast-experiments/pypy/translator/js/test/test_main.py
==============================================================================
--- pypy/branch/ast-experiments/pypy/translator/js/test/test_main.py	(original)
+++ pypy/branch/ast-experiments/pypy/translator/js/test/test_main.py	Mon Feb 26 08:45:45 2007
@@ -2,15 +2,22 @@
 """ tests of rpython2javascript function
 """
 
-from pypy.translator.js.main import rpython2javascript
+from pypy.translator.js.main import rpython2javascript, rpython2javascript_main,\
+     js_optiondescr
 from pypy.translator.js import conftest
 from pypy.rpython.ootypesystem.bltregistry import BasicExternal, described
 import py
 import sys
+from pypy.tool.udir import udir
+from pypy.config.config import Config, to_optparse
+
 
 #if not conftest.option.browser:
 #    py.test.skip("Works only in browser (right now?)")
 
+def setup_module(mod):
+    mod.jsconfig = Config(js_optiondescr)
+
 class A(BasicExternal):
     def method(self, a={'a':'a'}):
         pass
@@ -31,3 +38,32 @@
 
 def test_module_none():
     assert rpython2javascript(None, "fff")
+
+class TestJsMain(object):
+    def _test_not_raises(self, mod_file, args_rest=[]):
+        try:
+            rpython2javascript_main([str(mod_file)] + args_rest,
+                                           jsconfig)
+        except SystemExit:
+            py.test.fail("Exited")
+
+    def _test_raises(self, mod_file, args_rest):
+        py.test.raises(SystemExit, rpython2javascript_main,
+            [str(mod_file)] + args_rest, jsconfig)
+
+    def test_main_one(self):
+        udir.ensure("js_one.py").write(py.code.Source("""
+        def f():
+            pass
+        f._client = True
+        """))
+        self._test_not_raises(udir.join("js_one.py"))
+
+    def test_main_two(self):
+        udir.ensure("js_two.py").write(py.code.Source("""
+        def f():
+            pass
+        """))
+        self._test_not_raises(udir.join("js_two.py"), ["f"])
+        self._test_raises(udir.join("js_two.py"), [])
+

Modified: pypy/branch/ast-experiments/pypy/translator/llvm/buildllvm.py
==============================================================================
--- pypy/branch/ast-experiments/pypy/translator/llvm/buildllvm.py	(original)
+++ pypy/branch/ast-experiments/pypy/translator/llvm/buildllvm.py	Mon Feb 26 08:45:45 2007
@@ -15,13 +15,23 @@
         return False 
     return True
 
-def _exe_version(exe):
-    v = os.popen(exe + ' -version 2>&1').read()
-    v = ''.join([c for c in v if c.isdigit()])
-    v = int(v) / 10.0
+def _exe_version(exe, cache={}):
+    try:
+        v =  cache[exe]
+    except KeyError:
+        v = os.popen(exe + ' -version 2>&1').read()
+        v = ''.join([c for c in v if c.isdigit()])
+        v = int(v) / 10.0
+        cache[exe] = v
     return v
 
-llvm_version = _exe_version('llvm-as')
+llvm_version = lambda: _exe_version('llvm-as')
+
+def postfix():
+    if llvm_version() >= 2.0:
+        return '.i32'
+    else:
+        return ''
 
 def _exe_version2(exe):
     v = os.popen(exe + ' --version 2>&1').read()
@@ -31,8 +41,8 @@
     v = float(major) + float(minor) / 10.0
     return v
 
-gcc_version = _exe_version2('gcc')
-llvm_gcc_version = _exe_version2('llvm-gcc')
+gcc_version = lambda: _exe_version2('gcc')
+llvm_gcc_version = lambda: _exe_version2('llvm-gcc')
 
 def optimizations(simple, use_gcc):
 
@@ -86,7 +96,7 @@
     # run llvm assembler and optimizer
     simple_optimizations = not optimize
     opts = optimizations(simple_optimizations, use_gcc)
-    if llvm_version < 2.0:
+    if llvm_version() < 2.0:
         cmds = ["llvm-as < %s.ll | opt %s -f -o %s.bc" % (b, opts, b)]
     else: #we generate 1.x .ll files, so upgrade these first
         cmds = ["llvm-upgrade < %s.ll | llvm-as | opt %s -f -o %s.bc" % (b, opts, b)]

Modified: pypy/branch/ast-experiments/pypy/translator/llvm/externs2ll.py
==============================================================================
--- pypy/branch/ast-experiments/pypy/translator/llvm/externs2ll.py	(original)
+++ pypy/branch/ast-experiments/pypy/translator/llvm/externs2ll.py	Mon Feb 26 08:45:45 2007
@@ -11,8 +11,6 @@
 
 from pypy.tool.udir import udir
 
-_llvm_gcc_version = None
-
 support_functions = [
     "%raisePyExc_IOError",
     "%raisePyExc_ValueError",
@@ -40,7 +38,7 @@
     plain = filename[:-2]
     includes = get_incdirs()
 
-    if llvm_gcc_version < 4.0:
+    if llvm_gcc_version() < 4.0:
         emit_llvm = ''
     else:
         emit_llvm = '-emit-llvm -O3'

Modified: pypy/branch/ast-experiments/pypy/translator/llvm/gc.py
==============================================================================
--- pypy/branch/ast-experiments/pypy/translator/llvm/gc.py	(original)
+++ pypy/branch/ast-experiments/pypy/translator/llvm/gc.py	Mon Feb 26 08:45:45 2007
@@ -5,11 +5,7 @@
 from pypy.translator.llvm.log import log
 log = log.gc
 
-from pypy.translator.llvm.buildllvm import llvm_version
-if llvm_version >= 2.0:
-    postfix = '.i32'
-else:
-    postfix = ''
+from pypy.translator.llvm.buildllvm import postfix
 
 def have_boehm():
     import distutils.sysconfig
@@ -157,7 +153,7 @@
 
         # malloc_size is unsigned right now
         codewriter.malloc(targetvar, "sbyte", size)
-        codewriter.call(None, 'void', '%llvm.memset' + postfix,
+        codewriter.call(None, 'void', '%llvm.memset' + postfix(),
                         ['sbyte*', 'ubyte', uword, uword],
                         [targetvar, 0, size, boundary_size],
                         cconv='ccc')               
@@ -210,7 +206,7 @@
         codewriter.call(targetvar, 'sbyte*', fnname, [word], [sizei])
 
         if atomic:
-            codewriter.call(None, 'void', '%llvm.memset' + postfix,
+            codewriter.call(None, 'void', '%llvm.memset' + postfix(),
                             ['sbyte*', 'ubyte', uword, uword],
                             [targetvar, 0, size, boundary_size],
                             cconv='ccc')        

Modified: pypy/branch/ast-experiments/pypy/translator/llvm/genllvm.py
==============================================================================
--- pypy/branch/ast-experiments/pypy/translator/llvm/genllvm.py	(original)
+++ pypy/branch/ast-experiments/pypy/translator/llvm/genllvm.py	Mon Feb 26 08:45:45 2007
@@ -18,7 +18,7 @@
 from pypy.translator.llvm.gc import GcPolicy
 from pypy.translator.llvm.log import log
 from pypy import conftest
-from pypy.translator.llvm.buildllvm import llvm_is_on_path
+from pypy.translator.llvm.buildllvm import llvm_is_on_path, postfix
 
 class GenLLVM(object):
     # see create_codewriter() below
@@ -119,6 +119,7 @@
     def _set_wordsize(self, s):
         s = s.replace('UWORD', self.db.get_machine_uword())
         s = s.replace( 'WORD', self.db.get_machine_word())
+        s = s.replace('POSTFIX', postfix())
         return s
 
     def write_headers(self, codewriter):

Modified: pypy/branch/ast-experiments/pypy/translator/llvm/module/support.py
==============================================================================
--- pypy/branch/ast-experiments/pypy/translator/llvm/module/support.py	(original)
+++ pypy/branch/ast-experiments/pypy/translator/llvm/module/support.py	Mon Feb 26 08:45:45 2007
@@ -1,8 +1,3 @@
-from pypy.translator.llvm.buildllvm import llvm_version
-if llvm_version >= 2.0:
-    postfix = '.i32'
-else:
-    postfix = ''
 
 extdeclarations = """
 %last_exception_type  = internal global %RPYTHON_EXCEPTION_VTABLE* null
@@ -12,7 +7,6 @@
 declare ccc void %llvm.memsetPOSTFIX(sbyte*, ubyte, UWORD, UWORD)
 declare ccc void %llvm.memcpyPOSTFIX(sbyte*, sbyte*, UWORD, UWORD)
 """
-extdeclarations = extdeclarations.replace('POSTFIX', postfix)
 
 extfunctions = """
 internal fastcc sbyte* %RPyString_AsString(%RPyString* %structstring) {
@@ -84,7 +78,6 @@
 }
 
 """
-extfunctions = extfunctions.replace('POSTFIX', postfix)
 
 from sys import maxint
 if maxint != 2**31-1:

Modified: pypy/branch/ast-experiments/pypy/translator/llvm/test/runtest.py
==============================================================================
--- pypy/branch/ast-experiments/pypy/translator/llvm/test/runtest.py	(original)
+++ pypy/branch/ast-experiments/pypy/translator/llvm/test/runtest.py	Mon Feb 26 08:45:45 2007
@@ -32,15 +32,17 @@
     if not llvm_is_on_path():
         py.test.skip("could not find one of llvm-as or llvm-gcc")
         return False
-    if llvm_version < MINIMUM_LLVM_VERSION:
+    llvm_ver = llvm_version()
+    if llvm_ver < MINIMUM_LLVM_VERSION:
         py.test.skip("llvm version not up-to-date (found "
-                     "%.1f, should be >= %.1f)" % (llvm_version, MINIMUM_LLVM_VERSION))
+                     "%.1f, should be >= %.1f)" % (llvm_ver, MINIMUM_LLVM_VERSION))
         return False
     return True
 
 def gcc3_test():
-    if int(gcc_version) != 3:
-        py.test.skip("test required gcc version 3 (found version %.1f)" % gcc_version)
+    gcc_ver = gcc_version()
+    if int(gcc_ver) != 3:
+        py.test.skip("test required gcc version 3 (found version %.1f)" % gcc_ver)
         return False
     return True
 

Modified: pypy/branch/ast-experiments/pypy/translator/oosupport/metavm.py
==============================================================================
--- pypy/branch/ast-experiments/pypy/translator/oosupport/metavm.py	(original)
+++ pypy/branch/ast-experiments/pypy/translator/oosupport/metavm.py	Mon Feb 26 08:45:45 2007
@@ -13,6 +13,7 @@
 
 from pypy.rpython.ootypesystem import ootype
 from pypy.rpython.ootypesystem.bltregistry import ExternalType
+from pypy.rpython.extfunc import ExtFuncEntry, is_external
 
 class Generator(object):
     
@@ -324,7 +325,8 @@
 class _CallDispatcher(_GeneralDispatcher):
     def render(self, generator, op):
         func = op.args[0]
-        if getattr(func.value._callable, 'suggested_primitive', False):
+        # XXX we need to sort out stuff here at some point
+        if is_external(func):
             func_name = func.value._name.split("__")[0]
             try:
                 return self.builtins.builtin_map[func_name](generator, op)



More information about the Pypy-commit mailing list