Full Code of ideawu/ssdb for AI

master f229ba277c7f cached
553 files
5.5 MB
1.5M tokens
4171 symbols
1 requests
Download .txt
Showing preview only (5,909K chars total). Download the full file or copy to clipboard to get everything.
Repository: ideawu/ssdb
Branch: master
Commit: f229ba277c7f
Files: 553
Total size: 5.5 MB

Directory structure:
gitextract_mk6jffsy/

├── .gitignore
├── ChangeLog
├── Dockerfile
├── LICENSE
├── Makefile
├── README.md
├── api/
│   ├── README.md
│   ├── cpp/
│   │   └── README.md
│   ├── cpy/
│   │   ├── SSDB.cpy
│   │   └── demo.cpy
│   ├── php/
│   │   ├── SSDB.php
│   │   ├── demo.php
│   │   └── perf.php
│   └── python/
│       ├── SSDB.py
│       └── demo.py
├── build.sh
├── deps/
│   ├── cpy/
│   │   ├── Eval.g
│   │   ├── Eval.py
│   │   ├── Expr.g
│   │   ├── ExprLexer.py
│   │   ├── ExprParser.py
│   │   ├── Makefile
│   │   ├── Readme.txt
│   │   ├── antlr3/
│   │   │   ├── __init__.py
│   │   │   ├── compat.py
│   │   │   ├── constants.py
│   │   │   ├── dfa.py
│   │   │   ├── dottreegen.py
│   │   │   ├── exceptions.py
│   │   │   ├── extras.py
│   │   │   ├── main.py
│   │   │   ├── recognizers.py
│   │   │   ├── streams.py
│   │   │   ├── tokens.py
│   │   │   ├── tree.py
│   │   │   └── treewizard.py
│   │   ├── cpy
│   │   ├── cpy.bat
│   │   ├── cpy.py
│   │   ├── engine.py
│   │   └── samples/
│   │       ├── class.cpy
│   │       ├── extends.cpy
│   │       ├── foreach.cpy
│   │       ├── function.cpy
│   │       ├── hello.cpy
│   │       ├── list.cpy
│   │       ├── object.cpy
│   │       ├── simple_client.cpy
│   │       ├── simple_server.cpy
│   │       ├── stdin.cpy
│   │       └── test.cpy
│   ├── jemalloc-4.1.0/
│   │   ├── .autom4te.cfg
│   │   ├── .gitattributes
│   │   ├── .gitignore
│   │   ├── COPYING
│   │   ├── ChangeLog
│   │   ├── INSTALL
│   │   ├── Makefile.in
│   │   ├── README
│   │   ├── autogen.sh
│   │   ├── bin/
│   │   │   ├── jemalloc-config.in
│   │   │   ├── jemalloc.sh.in
│   │   │   └── jeprof.in
│   │   ├── build-aux/
│   │   │   ├── config.guess
│   │   │   ├── config.sub
│   │   │   └── install-sh
│   │   ├── config.stamp.in
│   │   ├── configure.ac
│   │   ├── coverage.sh
│   │   ├── doc/
│   │   │   ├── html.xsl.in
│   │   │   ├── jemalloc.xml.in
│   │   │   ├── manpages.xsl.in
│   │   │   └── stylesheet.xsl
│   │   ├── include/
│   │   │   ├── jemalloc/
│   │   │   │   ├── internal/
│   │   │   │   │   ├── arena.h
│   │   │   │   │   ├── assert.h
│   │   │   │   │   ├── atomic.h
│   │   │   │   │   ├── base.h
│   │   │   │   │   ├── bitmap.h
│   │   │   │   │   ├── chunk.h
│   │   │   │   │   ├── chunk_dss.h
│   │   │   │   │   ├── chunk_mmap.h
│   │   │   │   │   ├── ckh.h
│   │   │   │   │   ├── ctl.h
│   │   │   │   │   ├── extent.h
│   │   │   │   │   ├── hash.h
│   │   │   │   │   ├── huge.h
│   │   │   │   │   ├── jemalloc_internal.h.in
│   │   │   │   │   ├── jemalloc_internal_decls.h
│   │   │   │   │   ├── jemalloc_internal_defs.h.in
│   │   │   │   │   ├── jemalloc_internal_macros.h
│   │   │   │   │   ├── mb.h
│   │   │   │   │   ├── mutex.h
│   │   │   │   │   ├── nstime.h
│   │   │   │   │   ├── pages.h
│   │   │   │   │   ├── private_namespace.sh
│   │   │   │   │   ├── private_symbols.txt
│   │   │   │   │   ├── private_unnamespace.sh
│   │   │   │   │   ├── prng.h
│   │   │   │   │   ├── prof.h
│   │   │   │   │   ├── public_namespace.sh
│   │   │   │   │   ├── public_unnamespace.sh
│   │   │   │   │   ├── ql.h
│   │   │   │   │   ├── qr.h
│   │   │   │   │   ├── quarantine.h
│   │   │   │   │   ├── rb.h
│   │   │   │   │   ├── rtree.h
│   │   │   │   │   ├── size_classes.sh
│   │   │   │   │   ├── smoothstep.h
│   │   │   │   │   ├── smoothstep.sh
│   │   │   │   │   ├── stats.h
│   │   │   │   │   ├── tcache.h
│   │   │   │   │   ├── ticker.h
│   │   │   │   │   ├── tsd.h
│   │   │   │   │   ├── util.h
│   │   │   │   │   └── valgrind.h
│   │   │   │   ├── jemalloc.sh
│   │   │   │   ├── jemalloc_defs.h.in
│   │   │   │   ├── jemalloc_macros.h.in
│   │   │   │   ├── jemalloc_mangle.sh
│   │   │   │   ├── jemalloc_protos.h.in
│   │   │   │   ├── jemalloc_rename.sh
│   │   │   │   └── jemalloc_typedefs.h.in
│   │   │   └── msvc_compat/
│   │   │       ├── C99/
│   │   │       │   ├── stdbool.h
│   │   │       │   └── stdint.h
│   │   │       ├── strings.h
│   │   │       └── windows_extra.h
│   │   ├── jemalloc.pc.in
│   │   ├── msvc/
│   │   │   ├── ReadMe.txt
│   │   │   ├── jemalloc_vc2015.sln
│   │   │   └── projects/
│   │   │       └── vc2015/
│   │   │           ├── jemalloc/
│   │   │           │   ├── jemalloc.vcxproj
│   │   │           │   └── jemalloc.vcxproj.filters
│   │   │           └── test_threads/
│   │   │               ├── test_threads.cpp
│   │   │               ├── test_threads.h
│   │   │               ├── test_threads.vcxproj
│   │   │               ├── test_threads.vcxproj.filters
│   │   │               └── test_threads_main.cpp
│   │   ├── src/
│   │   │   ├── arena.c
│   │   │   ├── atomic.c
│   │   │   ├── base.c
│   │   │   ├── bitmap.c
│   │   │   ├── chunk.c
│   │   │   ├── chunk_dss.c
│   │   │   ├── chunk_mmap.c
│   │   │   ├── ckh.c
│   │   │   ├── ctl.c
│   │   │   ├── extent.c
│   │   │   ├── hash.c
│   │   │   ├── huge.c
│   │   │   ├── jemalloc.c
│   │   │   ├── mb.c
│   │   │   ├── mutex.c
│   │   │   ├── nstime.c
│   │   │   ├── pages.c
│   │   │   ├── prng.c
│   │   │   ├── prof.c
│   │   │   ├── quarantine.c
│   │   │   ├── rtree.c
│   │   │   ├── stats.c
│   │   │   ├── tcache.c
│   │   │   ├── ticker.c
│   │   │   ├── tsd.c
│   │   │   ├── util.c
│   │   │   ├── valgrind.c
│   │   │   └── zone.c
│   │   └── test/
│   │       ├── include/
│   │       │   └── test/
│   │       │       ├── SFMT-alti.h
│   │       │       ├── SFMT-params.h
│   │       │       ├── SFMT-params11213.h
│   │       │       ├── SFMT-params1279.h
│   │       │       ├── SFMT-params132049.h
│   │       │       ├── SFMT-params19937.h
│   │       │       ├── SFMT-params216091.h
│   │       │       ├── SFMT-params2281.h
│   │       │       ├── SFMT-params4253.h
│   │       │       ├── SFMT-params44497.h
│   │       │       ├── SFMT-params607.h
│   │       │       ├── SFMT-params86243.h
│   │       │       ├── SFMT-sse2.h
│   │       │       ├── SFMT.h
│   │       │       ├── btalloc.h
│   │       │       ├── jemalloc_test.h.in
│   │       │       ├── jemalloc_test_defs.h.in
│   │       │       ├── math.h
│   │       │       ├── mq.h
│   │       │       ├── mtx.h
│   │       │       ├── test.h
│   │       │       ├── thd.h
│   │       │       └── timer.h
│   │       ├── integration/
│   │       │   ├── MALLOCX_ARENA.c
│   │       │   ├── aligned_alloc.c
│   │       │   ├── allocated.c
│   │       │   ├── chunk.c
│   │       │   ├── mallocx.c
│   │       │   ├── overflow.c
│   │       │   ├── posix_memalign.c
│   │       │   ├── rallocx.c
│   │       │   ├── sdallocx.c
│   │       │   ├── thread_arena.c
│   │       │   ├── thread_tcache_enabled.c
│   │       │   └── xallocx.c
│   │       ├── src/
│   │       │   ├── SFMT.c
│   │       │   ├── btalloc.c
│   │       │   ├── btalloc_0.c
│   │       │   ├── btalloc_1.c
│   │       │   ├── math.c
│   │       │   ├── mq.c
│   │       │   ├── mtx.c
│   │       │   ├── test.c
│   │       │   ├── thd.c
│   │       │   └── timer.c
│   │       ├── stress/
│   │       │   └── microbench.c
│   │       ├── test.sh.in
│   │       └── unit/
│   │           ├── SFMT.c
│   │           ├── atomic.c
│   │           ├── bitmap.c
│   │           ├── ckh.c
│   │           ├── decay.c
│   │           ├── hash.c
│   │           ├── junk.c
│   │           ├── junk_alloc.c
│   │           ├── junk_free.c
│   │           ├── lg_chunk.c
│   │           ├── mallctl.c
│   │           ├── math.c
│   │           ├── mq.c
│   │           ├── mtx.c
│   │           ├── nstime.c
│   │           ├── prng.c
│   │           ├── prof_accum.c
│   │           ├── prof_active.c
│   │           ├── prof_gdump.c
│   │           ├── prof_idump.c
│   │           ├── prof_reset.c
│   │           ├── prof_thread_name.c
│   │           ├── ql.c
│   │           ├── qr.c
│   │           ├── quarantine.c
│   │           ├── rb.c
│   │           ├── rtree.c
│   │           ├── run_quantize.c
│   │           ├── size_classes.c
│   │           ├── smoothstep.c
│   │           ├── stats.c
│   │           ├── ticker.c
│   │           ├── tsd.c
│   │           ├── util.c
│   │           └── zero.c
│   ├── leveldb-1.20/
│   │   ├── .gitignore
│   │   ├── .travis.yml
│   │   ├── AUTHORS
│   │   ├── CONTRIBUTING.md
│   │   ├── LICENSE
│   │   ├── Makefile
│   │   ├── Makefile.bk
│   │   ├── NEWS
│   │   ├── README.md
│   │   ├── TODO
│   │   ├── build_detect_platform
│   │   ├── build_detect_platform.bk
│   │   ├── db/
│   │   │   ├── autocompact_test.cc
│   │   │   ├── builder.cc
│   │   │   ├── builder.h
│   │   │   ├── c.cc
│   │   │   ├── c_test.c
│   │   │   ├── corruption_test.cc
│   │   │   ├── db_bench.cc
│   │   │   ├── db_impl.cc
│   │   │   ├── db_impl.cc.bk
│   │   │   ├── db_impl.h
│   │   │   ├── db_iter.cc
│   │   │   ├── db_iter.h
│   │   │   ├── db_test.cc
│   │   │   ├── dbformat.cc
│   │   │   ├── dbformat.h
│   │   │   ├── dbformat.h.bk
│   │   │   ├── dbformat_test.cc
│   │   │   ├── dumpfile.cc
│   │   │   ├── fault_injection_test.cc
│   │   │   ├── filename.cc
│   │   │   ├── filename.h
│   │   │   ├── filename_test.cc
│   │   │   ├── leveldbutil.cc
│   │   │   ├── log_format.h
│   │   │   ├── log_reader.cc
│   │   │   ├── log_reader.h
│   │   │   ├── log_test.cc
│   │   │   ├── log_writer.cc
│   │   │   ├── log_writer.h
│   │   │   ├── memtable.cc
│   │   │   ├── memtable.h
│   │   │   ├── recovery_test.cc
│   │   │   ├── repair.cc
│   │   │   ├── skiplist.h
│   │   │   ├── skiplist_test.cc
│   │   │   ├── snapshot.h
│   │   │   ├── table_cache.cc
│   │   │   ├── table_cache.h
│   │   │   ├── version_edit.cc
│   │   │   ├── version_edit.h
│   │   │   ├── version_edit_test.cc
│   │   │   ├── version_set.cc
│   │   │   ├── version_set.h
│   │   │   ├── version_set_test.cc
│   │   │   ├── write_batch.cc
│   │   │   ├── write_batch_internal.h
│   │   │   └── write_batch_test.cc
│   │   ├── doc/
│   │   │   ├── bench/
│   │   │   │   ├── db_bench_sqlite3.cc
│   │   │   │   └── db_bench_tree_db.cc
│   │   │   ├── benchmark.html
│   │   │   ├── impl.md
│   │   │   ├── index.md
│   │   │   ├── log_format.md
│   │   │   └── table_format.md
│   │   ├── helpers/
│   │   │   └── memenv/
│   │   │       ├── memenv.cc
│   │   │       ├── memenv.h
│   │   │       └── memenv_test.cc
│   │   ├── include/
│   │   │   └── leveldb/
│   │   │       ├── c.h
│   │   │       ├── cache.h
│   │   │       ├── comparator.h
│   │   │       ├── db.h
│   │   │       ├── dumpfile.h
│   │   │       ├── env.h
│   │   │       ├── filter_policy.h
│   │   │       ├── iterator.h
│   │   │       ├── iterator.h.bk
│   │   │       ├── options.h
│   │   │       ├── slice.h
│   │   │       ├── status.h
│   │   │       ├── table.h
│   │   │       ├── table_builder.h
│   │   │       └── write_batch.h
│   │   ├── issues/
│   │   │   ├── issue178_test.cc
│   │   │   └── issue200_test.cc
│   │   ├── port/
│   │   │   ├── README
│   │   │   ├── atomic_pointer.h
│   │   │   ├── port.h
│   │   │   ├── port_example.h
│   │   │   ├── port_posix.cc
│   │   │   ├── port_posix.h
│   │   │   ├── port_posix_sse.cc
│   │   │   ├── thread_annotations.h
│   │   │   └── win/
│   │   │       └── stdint.h
│   │   ├── table/
│   │   │   ├── block.cc
│   │   │   ├── block.h
│   │   │   ├── block_builder.cc
│   │   │   ├── block_builder.h
│   │   │   ├── filter_block.cc
│   │   │   ├── filter_block.h
│   │   │   ├── filter_block_test.cc
│   │   │   ├── format.cc
│   │   │   ├── format.h
│   │   │   ├── iterator.cc
│   │   │   ├── iterator_wrapper.h
│   │   │   ├── merger.cc
│   │   │   ├── merger.h
│   │   │   ├── table.cc
│   │   │   ├── table_builder.cc
│   │   │   ├── table_test.cc
│   │   │   ├── two_level_iterator.cc
│   │   │   └── two_level_iterator.h
│   │   └── util/
│   │       ├── arena.cc
│   │       ├── arena.h
│   │       ├── arena_test.cc
│   │       ├── bloom.cc
│   │       ├── bloom_test.cc
│   │       ├── cache.cc
│   │       ├── cache_test.cc
│   │       ├── coding.cc
│   │       ├── coding.h
│   │       ├── coding_test.cc
│   │       ├── comparator.cc
│   │       ├── crc32c.cc
│   │       ├── crc32c.h
│   │       ├── crc32c_test.cc
│   │       ├── env.cc
│   │       ├── env_posix.cc
│   │       ├── env_posix_test.cc
│   │       ├── env_posix_test_helper.h
│   │       ├── env_test.cc
│   │       ├── filter_policy.cc
│   │       ├── hash.cc
│   │       ├── hash.h
│   │       ├── hash_test.cc
│   │       ├── histogram.cc
│   │       ├── histogram.h
│   │       ├── logging.cc
│   │       ├── logging.h
│   │       ├── mutexlock.h
│   │       ├── options.cc
│   │       ├── posix_logger.h
│   │       ├── random.h
│   │       ├── status.cc
│   │       ├── testharness.cc
│   │       ├── testharness.h
│   │       ├── testutil.cc
│   │       └── testutil.h
│   └── snappy-1.1.0/
│       ├── .gitignore
│       ├── AUTHORS
│       ├── COPYING
│       ├── ChangeLog
│       ├── INSTALL
│       ├── Makefile-ios
│       ├── Makefile.am
│       ├── Makefile.in
│       ├── NEWS
│       ├── README
│       ├── aclocal.m4
│       ├── autogen.sh
│       ├── config.guess
│       ├── config.h.in
│       ├── config.sub
│       ├── configure
│       ├── configure.ac
│       ├── depcomp
│       ├── format_description.txt
│       ├── framing_format.txt
│       ├── install-sh
│       ├── ltmain.sh
│       ├── m4/
│       │   └── gtest.m4
│       ├── missing
│       ├── snappy-c.cc
│       ├── snappy-c.h
│       ├── snappy-internal.h
│       ├── snappy-sinksource.cc
│       ├── snappy-sinksource.h
│       ├── snappy-stubs-internal.cc
│       ├── snappy-stubs-internal.h
│       ├── snappy-stubs-public.h
│       ├── snappy-stubs-public.h.in
│       ├── snappy-test.cc
│       ├── snappy-test.h
│       ├── snappy.cc
│       ├── snappy.h
│       └── snappy_unittest.cc
├── docs/
│   └── README.md
├── src/
│   ├── Makefile
│   ├── backend_dump.cpp
│   ├── backend_dump.h
│   ├── backend_sync.cpp
│   ├── backend_sync.h
│   ├── client/
│   │   ├── Doxyfile
│   │   ├── Makefile
│   │   ├── README.md
│   │   ├── SSDB_client.h
│   │   ├── SSDB_impl.cpp
│   │   ├── SSDB_impl.h
│   │   ├── demo.cpp
│   │   └── hello-ssdb.cpp
│   ├── include.h
│   ├── net/
│   │   ├── .gitignore
│   │   ├── Makefile
│   │   ├── fde.cpp
│   │   ├── fde.h
│   │   ├── fde_epoll.cpp
│   │   ├── fde_select.cpp
│   │   ├── link.cpp
│   │   ├── link.h
│   │   ├── link_addr.cpp
│   │   ├── link_addr.h
│   │   ├── link_redis.cpp
│   │   ├── link_redis.h
│   │   ├── proc.cpp
│   │   ├── proc.h
│   │   ├── resp.cpp
│   │   ├── resp.h
│   │   ├── server.cpp
│   │   ├── server.h
│   │   ├── test.conf
│   │   ├── test.cpp
│   │   ├── test2.cpp
│   │   ├── worker.cpp
│   │   └── worker.h
│   ├── proc_hash.cpp
│   ├── proc_hash.h
│   ├── proc_kv.cpp
│   ├── proc_kv.h
│   ├── proc_queue.cpp
│   ├── proc_queue.h
│   ├── proc_sys.cpp
│   ├── proc_sys.h
│   ├── proc_zset.cpp
│   ├── proc_zset.h
│   ├── serv.cpp
│   ├── serv.h
│   ├── slave.cpp
│   ├── slave.h
│   ├── ssdb/
│   │   ├── Makefile
│   │   ├── Makefile-ios
│   │   ├── binlog.cpp
│   │   ├── binlog.h
│   │   ├── const.h
│   │   ├── iterator.cpp
│   │   ├── iterator.h
│   │   ├── options.cpp
│   │   ├── options.h
│   │   ├── ssdb.h
│   │   ├── ssdb_impl.cpp
│   │   ├── ssdb_impl.h
│   │   ├── t_hash.cpp
│   │   ├── t_hash.h
│   │   ├── t_kv.cpp
│   │   ├── t_kv.h
│   │   ├── t_queue.cpp
│   │   ├── t_queue.h
│   │   ├── t_zset.cpp
│   │   ├── t_zset.h
│   │   ├── test.cpp
│   │   ├── ttl.cpp
│   │   └── ttl.h
│   ├── util/
│   │   ├── Makefile
│   │   ├── Makefile-ios
│   │   ├── app.cpp
│   │   ├── app.h
│   │   ├── bytes.cpp
│   │   ├── bytes.h
│   │   ├── config.cpp
│   │   ├── config.h
│   │   ├── daemon.h
│   │   ├── file.h
│   │   ├── ip_filter.h
│   │   ├── line.h
│   │   ├── list.h
│   │   ├── log.cpp
│   │   ├── log.h
│   │   ├── sorted_set.cpp
│   │   ├── sorted_set.h
│   │   ├── string_util.h
│   │   ├── test_sorted_set.cpp
│   │   ├── test_thread.cpp
│   │   └── thread.h
│   └── version.h
├── ssdb.conf
├── ssdb_slave.conf
├── tools/
│   ├── Makefile
│   ├── leveldb-import.cpp
│   ├── redis-import.php
│   ├── ssdb-bench.cpp
│   ├── ssdb-cli
│   ├── ssdb-cli.bat
│   ├── ssdb-cli.cpy
│   ├── ssdb-dump.cpp
│   ├── ssdb-iterate.php
│   ├── ssdb-migrate.cpp
│   ├── ssdb-repair.cpp
│   ├── ssdb.sh
│   ├── ssdb_cli/
│   │   ├── cluster.cpy
│   │   ├── exporter.cpy
│   │   ├── flushdb.cpy
│   │   ├── importer.cpy
│   │   ├── nagios.cpy
│   │   └── util.cpy
│   ├── test_slow_client.php
│   └── unittest.php
└── version

================================================
FILE CONTENTS
================================================

================================================
FILE: .gitignore
================================================
ssdb-server*
ios
888*.conf
var888*
*.exe
*.o
*.a
*.out
*.class
tmp
.DS_Store
*.pyc
var/*
var_*
var_slave/*
dev_ssdb.conf*
dev_slave.conf
*.swp
*_cpy_*
*.dSYM*
ssdb-server
tools/ssdb-dump
tools/ssdb-bench
tools/ssdb-repair
tools/ssdb-migrate
tools/leveldb-import
_pack
build_config.mk
log.txt
repair.log
log_slave.txt
src/client/demo
src/client/hello-ssdb
api/cpp/SSDB_client.h
api/cpp/test
api/cpp/html
api/php/a.php
api/php/b.php
api/php/c.php
api/java/Test.java
src/util/test_sorted_set



================================================
FILE: ChangeLog
================================================
* 1.9.9
	* Bug fixeds:
		- Fix binlog resource leak bug(2020-09-25)
* 1.9.8
	* New features:
		- optimize hclear performance(2020-07-31)
		- ssdb-repair/ssdb-dump set leveldb.option.max_file_size to 32MB(2020-07-30)
		- Support multi auth password configs(2020-05-10)
		- Support IP v6(2020-02-15)
		- Add add_slave and del_slave command(2020-02-19)
	* Bug fixes:
		- Fix `hfix` bug(2020-08-10)
* 1.9.7
	* New features:
		- Support slaveof command(2018-04-27)
		- Add hfix command(2018-11-21)
	* Bug fixes:
		- Fix queue/list replication bug(2019-01-02)
		- Fix logrotate issue when log to stdout/stderr(2018-06-05)
		- Fix coredump on exit(2018-07-18)
		- Fix startup blocked by BinlogQueue::find_last()(2018-08-08)
* 1.9.6
	* New features:
		- ssdb-cli supports command history(2018-04-24)
		- Log slow query with WARN level(2017-11-08)
		- Upgrade leveldb to version 1.20, fix MANIFEST file too large issue(2017-09-25)
	* Incompatible changes:
		- The SSDB_KEY_LEN_MAX limit will be applied to KV, as described in docs(2017-11-08)
	* Bug fixes:
		- Fix Xcode 9, iOS SDK 11 compile issue(2017-11-20)
		- Fix Redis zrange, zrevrange, zremrangebyrank handle negative start/end bug(2017-12-05)
* 1.9.5
	* New features:
		- C++ SDK add disconnected() method(2017-08-29)
		- ssdb-cli supports -a option to connect with password(2017-07-19)
		- Add slaveof.recv_timeout configuration(2017-05-03)
	* Incompatible changes:
		- setbit/getbit will be compatible with Redis, from LSB 0 to MSB 0(2017-05-16)
	* Bug fixes:
		- Fix ssdb-cli escape bug(2017-08-24)
* 1.9.4
	* Incompatible changes:
		- Treat unsupported redis command's reply as REPLY_MULTI_BULK(2016-07-26)
		- Not writting pidfile when not running daemonized(2016-07-17)
	* New features:
		- Support readonly mode(2016-10-11)
		- Add OUT_OF_SYNC status, slave not flushdb when this status(2016-06-17)
		- Config default block_size as 32(2017-01-18)
	* Bug fixes:
		- Fix bug that busy expiration blocks setx request(2016-10-14)
		- Fix issues/1003, binlogs null pointer error caused by multi-threading during shutdown(2016-10-20)
		- Make RedisLink AUTH reply exactly as Redis(2017-01-17)
* 1.9.3
	* New features:
		- Do not allow slave request binlogs with seq greater than max_seq(2016-03-18)
		- CLI comands with nagios output format(2016-03-06)
		- User can input binary data via ssdb-cli(2016-02-24)
		- Add ip_filter relative commands(2016-02-17)
	* Bug fixes:
		- Report error when setting ttl(expire) fail(2016-04-25)
		- Fix ttl not be deleted when deleting the only one key with ttl in the db, issue#885(2016-03-02)
		- Fix bug when connecting to multi masters, the slave saves only one master's status(2016-03-01)
* 1.9.2
	* New features:
		- Binlog capacity can be set in config file(2016-01-14)
		- Provide zfix command to repair broken zset(2015-12-02)
		- Supports specifying slaveof.host in ssdb.conf(2015-11-23)
		- Do not allow flushdb when replication is in use(2015-11-16)
		- Provide server side flushdb(2015-09-17)
		- The slave will flush db when receive copy_begin(2015-07-28)
	* Incompatible changes:
		- Will not support db size for redis clients(2015-08-07)
	* Bug fixes:
		- Fix ttl not be deleted when deleting the only one key with ttl in the db, issue#885(2016-03-02)
		- Fix Logger bug on multi-threads, which halt the service for seconds(2016-01-25)
		- Fix bug when ssdb-cli is soft linked(2016-01-25)
		- Fix zclear infinite loop when data is broken(2015-12-02)
		- Fix setbit crash on very big offset(2015-11-17)
		- Fix Jedis zadd() score in scientific notation(2015-10-22)
* 1.9.1
	* Incompatible changes:
		- zrank/zrrank return not_found(prev is error) if member not exists(2015-07-16)
		- PHP API zrank/zrrank return null(prev is false) if member not exists(2015-07-16)
* 1.9.0
	* New features:
		- Update MAX_PACKET_SIZE to 128MB(2015-04-28)
		- Process most read commands in reader threads, not main thread(2015-04-28)
		- Add bitcount command, which is similar to Redis's bitcount(2015-04-15)
		- Add zpop_front, zpop_back command(2015-04-01)
		- Support static library build for iOS(2015-03-26)
		- Update options.max_open_files default value to 500(2015-03-15)
		- Add version command(2015-03-10)
		- Add rkeys command(2015-02-15)
	* Bug fixes:
		- Fix replication status display error(2015-04-09)
* 1.8.1
	* Bug fixes:
		- Fix ttl bug(https://github.com/ideawu/ssdb/issues/628)(2015-03-14)
* 1.8.0
	* New features:
		- Support SSDB style keys command through redis-cli(2014-12-08)
		- Replication supports AUTH(2014-12-01)
		- Sync qset operations(2014-11-05)
		- Add dbsize command(2014-11-02)
		- Include sync clients' stats in info(2014-11-02)
		- Refactor codes, separate into: libutil, libnet, libssdb(2014-11-02)
	* Bug fixes:
		- Fix bug when process dump and sync140 command with redis-cli(2015-01-27)
* 1.7.0.1
	* New features:
		- Sync qset operations(2014-11-05)
		- *incr commands return error if value cannot be converted to integer(2014-10-24)
		- Include replication/sync stats in info(2014-10-23)
		- Add set_key_range, get_key_range(for KV) command(2014-10-22)
		- Add qset/lset command(sync won't work), rewrite Response(2014-10-19)
* 1.7.0.0
	* New features:
		- export(ssdb-cli) command supports -i(interactive) option(2014-10-16)
		- ssdb-cli performance improved(2014-10-11)
		- Add export, import commands in ssdb-cli(2014-10-11)
		- Add qtrim_front, qtrim_back commands(2014-10-11)
		- ssdb-dump support auth(2014-10-10)
		- Add max_open_files config, default is 100(2014-10-08)
		- Add auth command(2014-09-20)
		- Enable qpop multi elements at a time(2014-09-16)
	* Incompatible changes:
		- Rewrite hexmem, this affects log messages(2014-10-10)
* 1.6.8.8
	* New features:
		- Add hrlist, zrlist, qrlist commands(2014-07-27)
		- Add string/bit operations: getbit, setbit, bitcount, strlen, substr(getrange)(2014-06-07)
		- Put multi_*get commands to execute in worker thread(2014-06-17)
	* Incompatible changes:
		- Delete expireation info when deleting key(2014-06-28)
		- Inlucde links, total_calls in info cmd's reply(2014-06-17)
		- Rename redis_getrange command to getrange(2014-07-27)
	* Bug fixes:
		- Fix ssdb-bench bug on del bench(2014-08-21)
		- Return entrire string when substr's params are ommitted(2014-07-27)
		- Fix key expiration/ttl bug(2014-07-02)
		- Fix zRangeByScore(redis) bug(2014-06-28)

* 1.6.8.7
	* New features:
		- Add string/bit operations: getbit, setbit, bitcount, strlen, substr(getrange)(2014-06-07)
		- Add expire command(2014-05-28)
		- Add ttl command(2014-05-26)
		- Add `flushdb list`(2014-05-22)
		- Support Android build
		- Add sync speed limit

* 1.6.8.6 (2014-03-29)
	* New features:
		- Reduce round trip time for single request(2014-04-04)
		- Add zcount, zsum, zavg, zRemRangeByScore, zRemRangeByRank commands(2014-04-06)
		- Update redis-import.php to use Redis SCAN command if available(2014-04-07)
		- qpush/qpush_* accept multiple values(2014-04-13)
		- Don't push all expiration keys in memory, use less memory(2014-05-03)
		- Provide an option to disable binlog(2014-05-03)
		- Add hgetall command(2014-05-03)
		- Fix memory issue on cache_size larger than 2048(2014-05-12);
	* Incompatible changes:
		- qpush returns the length of the queue/list after the push operations(2014-04-10)
		- zrscan returns keys with score equal to score_start if key_start is ommit, previously it only returns keys with scores less than score_start(2014-04-23)
	* Bug fixes:
		- Redesign network flow, support very large batch commands
		- Fix bug on ssdb-dump that lose data, print out error message(2014-04-05)

* 1.6.8.5 (2014-03-05)
	* New features:
		- Add qslice(lrange), qget(lindex, lget) commands.
		- Add getset, setnx commands.
	* Incompatible changes:
		- Queue/List data will be replicated(sync) to slaves.
	* Bug fixes:
		- Fix ssdb::Client::connect() possible memory leak
		- Fix ttl overflow bug
		- Fix nodejs api bug on binary data(2014-03-27)



================================================
FILE: Dockerfile
================================================
FROM ubuntu
MAINTAINER wendal "wendal1985@gmail.com"

# Set the env variable DEBIAN_FRONTEND to noninteractive
ENV DEBIAN_FRONTEND noninteractive

RUN apt-get update && \
  apt-get install -y python2.7 && \
  apt-get install -y --force-yes git make gcc g++ autoconf && apt-get clean && \
  git clone --depth 1 https://github.com/ideawu/ssdb.git ssdb && \
  cd ssdb && make && make install && cp ssdb-server /usr/bin && \
  apt-get remove -y --force-yes git make gcc g++ autoconf && \
  apt-get autoremove -y && \
  rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* && \
  cp ssdb.conf /etc && cd .. && yes | rm -r ssdb

RUN mkdir -p /var/lib/ssdb && \
  sed \
    -e 's@home.*@home /var/lib@' \
    -e 's/loglevel.*/loglevel info/' \
    -e 's@work_dir = .*@work_dir = /var/lib/ssdb@' \
    -e 's@pidfile = .*@pidfile = /run/ssdb.pid@' \
    -e 's@level:.*@level: info@' \
    -e 's@ip:.*@ip: 0.0.0.0@' \
    -i /etc/ssdb.conf


ENV TZ Asia/Shanghai
EXPOSE 8888
VOLUME /var/lib/ssdb
ENTRYPOINT /usr/bin/ssdb-server /etc/ssdb.conf


================================================
FILE: LICENSE
================================================
Copyright (c) 2013 SSDB Authors
All rights reserved.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.

2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.

3. Neither the name of the SSDB nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.


================================================
FILE: Makefile
================================================
PREFIX=/usr/local/ssdb

$(shell sh build.sh 1>&2)
include build_config.mk

all:
	mkdir -p var var_slave
	chmod u+x "${LEVELDB_PATH}/build_detect_platform"
	chmod u+x deps/cpy/cpy
	chmod u+x tools/ssdb-cli
	cd "${LEVELDB_PATH}"; ${MAKE}
	cd src/util; ${MAKE}
	cd src/net; ${MAKE}
	cd src/client; ${MAKE}
	cd src/ssdb; ${MAKE}
	cd src; ${MAKE}
	cd tools; ${MAKE}

.PHONY: ios
	
ios:
	cd "${LEVELDB_PATH}"; make clean; CXXFLAGS=-stdlib=libc++ ${MAKE} PLATFORM=IOS
	cd "${SNAPPY_PATH}"; make clean; make -f Makefile-ios
	mkdir -p ios
	mv ${LEVELDB_PATH}/out-ios-universal/libleveldb.a ios/libleveldb-ios.a
	mv ${SNAPPY_PATH}/libsnappy-ios.a ios/
	cd src/util; make clean; ${MAKE} -f Makefile-ios
	cd src/ssdb; make clean; ${MAKE} -f Makefile-ios

install:
	mkdir -p ${PREFIX}
	mkdir -p ${PREFIX}/_cpy_
	mkdir -p ${PREFIX}/deps
	mkdir -p ${PREFIX}/var
	mkdir -p ${PREFIX}/var_slave
	cp -f ssdb-server ssdb.conf ssdb_slave.conf ${PREFIX}
	cp -rf api ${PREFIX}
	cp -rf \
		tools/ssdb-bench \
		tools/ssdb-cli tools/ssdb_cli \
		tools/ssdb-cli.cpy tools/ssdb-dump \
		tools/ssdb-repair \
		${PREFIX}
	cp -rf deps/cpy ${PREFIX}/deps
	chmod 755 ${PREFIX}
	rm -f ${PREFIX}/Makefile

clean:
	rm -f *.exe.stackdump
	rm -rf api/cpy/_cpy_
	rm -f api/python/SSDB.pyc
	rm -rf db_test
	cd deps/cpy; ${MAKE} clean
	cd src/util; ${MAKE} clean
	cd src/ssdb; ${MAKE} clean
	cd src/net; ${MAKE} clean
	cd src; ${MAKE} clean
	cd tools; ${MAKE} clean

clean_all: clean
	cd "${LEVELDB_PATH}"; ${MAKE} clean
	rm -f ${JEMALLOC_PATH}/Makefile
	cd "${SNAPPY_PATH}"; ${MAKE} clean
	rm -f ${SNAPPY_PATH}/Makefile
	


================================================
FILE: README.md
================================================
# SSDB - A Redis compatible NoSQL database stored on disk

[![Author](https://img.shields.io/badge/author-@ideawu-blue.svg?style=flat)](http://www.ideawu.net/) [![Platform](https://img.shields.io/badge/platform-Linux,%20BSD,%20OS%20X,%20Windows-green.svg?style=flat)](https://github.com/ideawu/ssdb) [![NoSQL](https://img.shields.io/badge/db-NoSQL-pink.svg?tyle=flat)](https://github.com/ideawu/ssdb) [![License](https://img.shields.io/badge/license-New%20BSD-yellow.svg?style=flat)](LICENSE)


SSDB is a high performace key-value(key-string, key-zset, key-hashmap) NoSQL database, __an alternative to Redis__.

SSDB is stable, production-ready and is widely used by many Internet companies including QIHU 360.

## Features

* LevelDB client-server support, written in C/C++
* Designed to store collection data
* Persistent key-value, key-zset, key-map('hashmap'), key-list storage
* Redis clients are supported
* Client API supports including C++, PHP, Python, Cpy, Java, nodejs, Ruby, Go([see all](http://ssdb.io/docs/clients.html))
* Persistent queue service
* **Replication(master-slave), load balance**
* GUI administration tool([phpssdbadmin](https://github.com/ssdb/phpssdbadmin))
* Built-in CLI nagios self-checks

## PHP client API example

```php
<?php
require_once('SSDB.php');
$ssdb = new SimpleSSDB('127.0.0.1', 8888);
$resp = $ssdb->set('key', '123');
$resp = $ssdb->get('key');
echo $resp; // output: 123
```

[More...](http://ssdb.io/docs/php/)


## Who's using SSDB?

[SSDB users...](http://ssdb.io/docs/users.html)


## Documentation

* [View online](http://ssdb.io/docs/)
* [Contribute to SSDB documentation project](https://github.com/ideawu/ssdb-docs)

## Compile and Install

```sh
$ wget --no-check-certificate https://github.com/ideawu/ssdb/archive/master.zip
$ unzip master
$ cd ssdb-master
$ make
$ #optional, install ssdb in /usr/local/ssdb
$ sudo make install

# start master
$ ./ssdb-server ssdb.conf

# or start as daemon
$ ./ssdb-server -d ssdb.conf

# ssdb command line
$ ./tools/ssdb-cli -p 8888

# stop ssdb-server
$ ./ssdb-server ssdb.conf -s stop
 # for older version
$ kill `cat ./var/ssdb.pid`
```

See [Compile and Install wiki](http://ssdb.io/docs/install.html)

## Performance

### Typical performance

Total 1000 requests.

```
writeseq  :    0.546 ms/op      178.7 MB/s
writerand :    0.519 ms/op      188.1 MB/s
readseq   :    0.304 ms/op      321.6 MB/s
readrand  :    0.310 ms/op      315.0 MB/s
```

### SSDB vs Redis

![Benchmark vs Redis](http://ssdb.io/ssdb-vs-redis.png?github)

[View full SSDB vs Redis benchmark charts...](http://ssdb.io/)

### Concurrency benchmark

```
========== set ==========
qps: 44251, time: 0.226 s
========== get ==========
qps: 55541, time: 0.180 s
========== del ==========
qps: 46080, time: 0.217 s
========== hset ==========
qps: 42338, time: 0.236 s
========== hget ==========
qps: 55601, time: 0.180 s
========== hdel ==========
qps: 46529, time: 0.215 s
========== zset ==========
qps: 37381, time: 0.268 s
========== zget ==========
qps: 41455, time: 0.241 s
========== zdel ==========
qps: 38792, time: 0.258 s
```

Run on a 2013 MacBook Pro 13 inch with Retina display.

## Architecture

![ssdb architecture](http://ssdb.io/ssdb.png)

## Windows executable

Download ssdb-server.exe from here: https://github.com/ideawu/ssdb-bin


## SSDB library for iOS

	make ios
	# ls ios/
	include/ libleveldb-ios.a libsnappy-ios.a libssdb-ios.a libutil-ios.a

Drag the static libraies files into your iOS project. Then add `ios/include` to your iOS project's __Header Search Paths__, which is set in __Build Settings__.

## Links

* [Author's homepage](http://www.ideawu.com/blog/)
* [Cpy Scripting Language](https://github.com/ideawu/cpy)
* [Google LevelDB](https://code.google.com/p/leveldb/)
* [Lua ssdb client driver for the ngx_lua](https://github.com/LazyZhu/lua-resty-ssdb)
* [Yet another ssdb client for Python](https://github.com/ifduyue/pyssdb)
* [SSDB 中文文档](http://www.ideawu.net/blog/category/ssdb)

## Changes made to LevelDB

See [Changes-Made-to-LevelDB wiki](https://github.com/ideawu/ssdb/wiki/Changes-Made-to-LevelDB)

## LICENSE

SSDB is licensed under [New BSD License](http://opensource.org/licenses/BSD-3-Clause), a very flexible license to use.

## Authors

@ideawu(wuzuyang1@gmail.com)

## Thanks

* 刘建辉, liujianhui@gongchang.com
* wendal(陈镇铖), wendal1985@gmail.com, http://wendal.net 


================================================
FILE: api/README.md
================================================
See https://github.com/ssdb


================================================
FILE: api/cpp/README.md
================================================
Moved to src/client



================================================
FILE: api/cpy/SSDB.cpy
================================================
/**
 * Copyright (c) 2012, ideawu
 * All rights reserved.
 * @author: ideawu
 * @link: http://www.ideawu.com/
 *
 * SSDB Cpy client SDK.
 */

import socket;

class SSDB_Response{
	function init(code='', data_or_message=null){
		this.type = 'none';
		this.code = code;
		this.data = null;
		this.message = null;
		this.set(code, data_or_message);
	}
	
	function set(code, data_or_message=null){
		this.code = code;
		if(code == 'ok'){
			this.data = data_or_message;
		}else{
			if(isinstance(data_or_message, list)){
				if(len(data_or_message) > 0){
					this.message = data_or_message[0];
				}
			}else{
				this.message = data_or_message;
			}
		}
	}

	function __repr__(){
		return str(this.code) + ' ' + str(this.message) + ' ' + str(this.data);
	}

	function ok(){
		return this.code == 'ok';
	}

	function not_found(){
		return this.code == 'not_found';
	}
	
	function str_resp(resp){
		this.type = 'val';
		if(resp[0] == 'ok'){
			if(len(resp) == 2){
				this.set('ok', resp[1]);
			}else{
				this.set('server_error', 'Invalid response');
			}
		}else{
			this.set(resp[0], resp[1 .. ]);
		}
		return this;
	}
	
	function str_resp(resp){
		this.type = 'val';
		if(resp[0] == 'ok'){
			if(len(resp) == 2){
				this.set('ok', resp[1]);
			}else{
				this.set('server_error', 'Invalid response');
			}
		}else{
			this.set(resp[0], resp[1 .. ]);
		}
		return this;
	}
	
	function int_resp(resp){
		this.type = 'val';
		if(resp[0] == 'ok'){
			if(len(resp) == 2){
				try{
					val = int(resp[1]);
					this.set('ok', val);
				}catch(Exception e){
					this.set('server_error', 'Invalid response');
				}
			}else{
				this.set('server_error', 'Invalid response');
			}
		}else{
			this.set(resp[0], resp[1 .. ]);
		}
		return this;
	}
	
	function float_resp(resp){
		this.type = 'val';
		if(resp[0] == 'ok'){
			if(len(resp) == 2){
				try{
					val = float(resp[1]);
					this.set('ok', val);
				}catch(Exception e){
					this.set('server_error', 'Invalid response');
				}
			}else{
				this.set('server_error', 'Invalid response');
			}
		}else{
			this.set(resp[0], resp[1 .. ]);
		}
		return this;
	}
	
	function list_resp(resp){
		this.type = 'list';
		this.set(resp[0], resp[1 ..]);
		return this;
	}
	
	function int_map_resp(resp){
		this.type = 'map';
		if(resp[0] == 'ok'){
			if(len(resp) % 2 == 1){
				data = {'index':[], 'items':{}};
				for(i=1; i<len(resp); i+=2){
					k = resp[i];
					v = resp[i + 1];
					try{
						v = int(v);
					}catch(Exception e){
						v = -1;
					}
					data['index'].append(k);
					data['items'][k] = v;
				}
				this.set('ok', data);
			}else{
				this.set('server_error', 'Invalid response');
			}
		}else{
			this.set(resp[0], resp[1 .. ]);
		}
		return this;
	}
	
	function str_map_resp(resp){
		this.type = 'map';
		if(resp[0] == 'ok'){
			if(len(resp) % 2 == 1){
				data = {'index':[], 'items':{}};
				for(i=1; i<len(resp); i+=2){
					k = resp[i];
					v = resp[i + 1];
					data['index'].append(k);
					data['items'][k] = v;
				}
				this.set('ok', data);
			}else{
				this.set('server_error', 'Invalid response');
			}
		}else{
			this.set(resp[0], resp[1 .. ]);
		}
		return this;
	}
}

class SSDB{
	function init(host, port){
		this.recv_buf = '';
		this._closed = false;
		family = socket.AF_INET;
		if(host.find(':') != -1){
			family = socket.AF_INET6;
		}
		this.sock = socket.socket(family, socket.SOCK_STREAM);
		this.sock.connect(tuple([host, port]));
		this.sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1);
	}

	function close(){
		if(!this._closed){
			this.sock.close();
			this._closed = True;
		}
	}

	function closed(){
		return this._closed;
	}

	function request(cmd, params=null){        
		if(params == null){
			params = [];
		}
		params = [cmd] + params;
		this.send(params);

		resp = this.recv();
		if(resp == null){
			return new SSDB_Response('error', 'Unknown error');
		}
		if(len(resp) == 0){
			return new SSDB_Response('disconnected', 'Connection closed');
		}
		
		ret = new SSDB_Response();
		switch(cmd){
			case 'ping':
			case 'set':
			case 'del':
			case 'qset':
			case 'zset':
			case 'hset':
			case 'qpush':
			case 'qpush_front':
			case 'qpush_back':
			case 'zdel':
			case 'hdel':
			case 'multi_set':
			case 'multi_del':
			case 'multi_hset':
			case 'multi_hdel':
			case 'multi_zset':
			case 'multi_zdel':
				if(len(resp) > 1){
					return ret.int_resp(resp);
				}else{
					return new SSDB_Response(resp[0], null);
				}
				break;
			case 'version':
			case 'substr':
			case 'get':
			case 'getset':
			case 'hget':
			case 'qfront':
			case 'qback':
			case 'qget':
				return ret.str_resp(resp);
				break;
			case 'qpop':
			case 'qpop_front':
			case 'qpop_back':
				size = 1;
				try{
					size = int(params[2]);
				}catch(Exception e){
				}
				if(size == 1){
					return ret.str_resp(resp);
				}else{
					return ret.list_resp(resp);
				}
				break;
			case 'dbsize':
			case 'getbit':
			case 'setbit':
			case 'countbit':
			case 'bitcount':
			case 'strlen':
			case 'ttl':
			case 'expire':
			case 'setnx':
			case 'incr':
			case 'decr':
			case 'zincr':
			case 'zdecr':
			case 'hincr':
			case 'hdecr':
			case 'hsize':
			case 'zsize':
			case 'qsize':
			case 'zget':
			case 'zrank':
			case 'zrrank':
			case 'zsum':
			case 'zcount':
			case 'zremrangebyrank':
			case 'zremrangebyscore':
			case 'hclear':
			case 'zclear':
			case 'qclear':
			case 'qpush':
			case 'qpush_front':
			case 'qpush_back':
			case 'qtrim_front':
			case 'qtrim_back':
				return ret.int_resp(resp);
				break;
			case 'zavg':
				return ret.float_resp(resp);
				break;
			case 'keys':
			case 'rkeys':
			case 'zkeys':
			case 'zrkeys':
			case 'hkeys':
			case 'hrkeys':
			case 'list':
			case 'hlist':
			case 'hrlist':
			case 'zlist':
			case 'zrlist':
				return ret.list_resp(resp);
				break;
			case 'scan':
			case 'rscan':
			case 'hgetall':
			case 'hscan':
			case 'hrscan':
				return ret.str_map_resp(resp);
				break;
			case 'zscan':
			case 'zrscan':
			case 'zrange':
			case 'zrrange':
			case 'zpop_front':
			case 'zpop_back':
				return ret.int_map_resp(resp);
				break;
			case 'auth':
            case 'exists':
            case 'hexists':
            case 'zexists':
				return ret.int_resp(resp);
                break;
            case 'multi_exists':
            case 'multi_hexists':
            case 'multi_zexists':
				return ret.int_map_resp(resp);
				break;
			case 'multi_get':
			case 'multi_hget':
				return ret.str_map_resp(resp);
				break;
			case 'multi_hsize':
			case 'multi_zsize':
			case 'multi_zget':
				return ret.int_map_resp(resp);
				break;
			default:
				return ret.list_resp(resp);
				break;
		}
		return new SSDB_Response('error', 'Unknown error');
	}

	function send(data){
		ps = [];
		foreach(data as p){
			p = str(p);
			ps.append(str(len(p)));
			ps.append(p);
		}
		nl = '\n';
		s = nl.join(ps) + '\n\n';
		#print '> ' + repr(s);
		try{
			while(true){
				ret = this.sock.send(s);
				if(ret == 0){
					return -1;
				}
				s = s[ret .. ];
				if(len(s) == 0){
					break;
				}
			}
		}catch(socket.error e){
			return -1;
		}
		//except socket.error as (val, msg):
		return ret;
	}

	function net_read(){
		try{
			data = this.sock.recv(1024*8);
			#print '< ' + repr(data);
		}catch(Exception e){
			data = '';
		}
		if(data == ''){
			this.close();
			return 0;
		}
		this.recv_buf += data;
		return len(data);
	}

	function recv(){
		while(true){
			ret = this.parse();
			if(ret == null){
				if(this.net_read() == 0){
					return [];
				}
			}else{
				return ret;
			}
		}
	}

	function parse(){
		//if(len(this.recv_buf)){print 'recv_buf: ' + repr(this.recv_buf);}
		ret = [];
		spos = 0;
		epos = 0;
		while(true){
			spos = epos;
			epos = this.recv_buf.find('\n', spos);
			if(epos == -1){
				break;
			}
			epos += 1;
			line = this.recv_buf[spos .. epos];
			spos = epos;

			if(line.strip() == ''){ // head end
				if(len(ret) == 0){
					continue;
				}else{
					this.recv_buf = this.recv_buf[spos .. ];
					return ret;
				}
			}

			try{
				num = int(line);
			}catch(Exception e){
				// error
				return [];
			}
			epos = spos + num;
			if(epos > len(this.recv_buf)){
				break;
			}
			data = this.recv_buf[spos .. epos];
			ret.append(data);

			spos = epos;
			epos = this.recv_buf.find('\n', spos);
			if(epos == -1){
				break;
			}
			epos += 1;
		}

		return null;
	}
}


================================================
FILE: api/cpy/demo.cpy
================================================
/**
 * Copyright (c) 2012, ideawu
 * All rights reserved.
 * @author: ideawu
 * @link: http://www.ideawu.com/
 *
 * SSDB cpy API demo.
 */

import SSDB.SSDB;

try{
	ssdb = new SSDB('127.0.0.1', 8888);
}catch(Exception e){
	print e;
	sys.exit(0);
}

print(ssdb.request('set', ['test', '123']));
print(ssdb.request('get', ['test']));
print(ssdb.request('incr', ['test', '1']));
print(ssdb.request('decr', ['test', '1']));
print(ssdb.request('scan', ['a', 'z', 10]));
print(ssdb.request('rscan', ['z', 'a', 10]));
print(ssdb.request('keys', ['a', 'z', 10]));
print(ssdb.request('del', ['test']));
print(ssdb.request('get', ['test']));
print "\n";
print(ssdb.request('zset', ['test', 'a', 20]));
print(ssdb.request('zget', ['test', 'a']));
print(ssdb.request('zincr', ['test', 'a', 20]));
print(ssdb.request('zdecr', ['test', 'a', 20]));
print(ssdb.request('zscan', ['test', 'a', 0, 100, 10]));
print(ssdb.request('zrscan', ['test', 'a', 100, 0, 10]));
print(ssdb.request('zkeys', ['test', 'a', 0, 100, 10]));
print(ssdb.request('zdel', ['test', 'a']));
print(ssdb.request('zget', ['test', 'a']));
print "\n";
print(ssdb.request('hset', ['test', 'a', 20]));
print(ssdb.request('hget', ['test', 'a']));
print(ssdb.request('hincr', ['test', 'a', 20]));
print(ssdb.request('hdecr', ['test', 'a', 20]));
print(ssdb.request('hscan', ['test', '0', 'z', 10]));
print(ssdb.request('hrscan', ['test', 'z', '0', 10]));
print(ssdb.request('hkeys', ['test', '0', 'z', 10]));
print(ssdb.request('hdel', ['test', 'a']));
print(ssdb.request('hget', ['test', 'a']));
print "\n";


================================================
FILE: api/php/SSDB.php
================================================
<?php
/**
 * Copyright (c) 2012, ideawu
 * All rights reserved.
 * @author: ideawu
 * @link: http://www.ideawu.com/
 *
 * SSDB PHP client SDK.
 */

class SSDBException extends Exception
{
}

class SSDBTimeoutException extends SSDBException
{
}

/**
 * All methods(except *exists) returns false on error,
 * so one should use Identical(if($ret === false)) to test the return value.
 */
class SimpleSSDB extends SSDB
{
	function __construct($host, $port, $timeout_ms=2000){
		parent::__construct($host, $port, $timeout_ms);
		$this->easy();
	}
}

class SSDB_Response
{
	public $cmd;
	public $code;
	public $data = null;
	public $message;

	function __construct($code='ok', $data_or_message=null){
		$this->code = $code;
		if($code == 'ok'){
			$this->data = $data_or_message;
		}else{
			$this->message = $data_or_message;
		}
	}

	function __toString(){
		if($this->code == 'ok'){
			$s = $this->data === null? '' : json_encode($this->data);
		}else{
			$s = $this->message;
		}
		return sprintf('%-13s %12s %s', $this->cmd, $this->code, $s);
	}

	function ok(){
		return $this->code == 'ok';
	}

	function not_found(){
		return $this->code == 'not_found';
	}
}

// Depricated, use SimpleSSDB instead!
class SSDB
{
	private $debug = false;
	public $sock = null;
	private $_closed = false;
	private $recv_buf = '';
	private $_easy = false;
	public $last_resp = null;

	function __construct($host, $port, $timeout_ms=2000){
		$timeout_f = (float)$timeout_ms/1000;
		$this->sock = @stream_socket_client("[$host]:$port", $errno, $errstr, $timeout_f);
		if(!$this->sock){
			throw new SSDBException("$errno: $errstr");
		}
		$timeout_sec = intval($timeout_ms/1000);
		$timeout_usec = ($timeout_ms - $timeout_sec * 1000) * 1000;
		@stream_set_timeout($this->sock, $timeout_sec, $timeout_usec);
		if(function_exists('stream_set_chunk_size')){
			@stream_set_chunk_size($this->sock, 1024 * 1024);
		}
	}
	
	function set_timeout($timeout_ms){
		$timeout_sec = intval($timeout_ms/1000);
		$timeout_usec = ($timeout_ms - $timeout_sec * 1000) * 1000;
		@stream_set_timeout($this->sock, $timeout_sec, $timeout_usec);
	}
	
	/**
	 * After this method invoked with yesno=true, all requesting methods
	 * will not return a SSDB_Response object.
	 * And some certain methods like get/zget will return false
	 * when response is not ok(not_found, etc)
	 */
	function easy(){
		$this->_easy = true;
	}

	function close(){
		if(!$this->_closed){
			@fclose($this->sock);
			$this->_closed = true;
			$this->sock = null;
		}
	}

	function closed(){
		return $this->_closed;
	}

	private $batch_mode = false;
	private $batch_cmds = array();

	function batch(){
		$this->batch_mode = true;
		$this->batch_cmds = array();
		return $this;
	}

	function multi(){
		return $this->batch();
	}

	function exec(){
		$ret = array();
		foreach($this->batch_cmds as $op){
			list($cmd, $params) = $op;
			$this->send_req($cmd, $params);
		}
		foreach($this->batch_cmds as $op){
			list($cmd, $params) = $op;
			$resp = $this->recv_resp($cmd, $params);
			$resp = $this->check_easy_resp($cmd, $resp);
			$ret[] = $resp;
		}
		$this->batch_mode = false;
		$this->batch_cmds = array();
		return $ret;
	}
	
	function request(){
		$args = func_get_args();
		$cmd = array_shift($args);
		return $this->__call($cmd, $args);
	}
	
	private $async_auth_password = null;
	
	function auth($password){
		$this->async_auth_password = $password;
		return null;
	}

	function __call($cmd, $params=array()){
		$cmd = strtolower($cmd);
		if($this->async_auth_password !== null){
			$pass = $this->async_auth_password;
			$this->async_auth_password = null;
			$auth = $this->__call('auth', array($pass));
			if($auth !== true){
				throw new Exception("Authentication failed");
			}
		}

		if($this->batch_mode){
			$this->batch_cmds[] = array($cmd, $params);
			return $this;
		}

		try{
			if($this->send_req($cmd, $params) === false){
				$resp = new SSDB_Response('error', 'send error');
			}else{
				$resp = $this->recv_resp($cmd, $params);
			}
		}catch(SSDBException $e){
			if($this->_easy){
				throw $e;
			}else{
				$resp = new SSDB_Response('error', $e->getMessage());
			}
		}

		if($resp->code == 'noauth'){
			$msg = $resp->message;
			throw new Exception($msg);
		}
		
		$resp = $this->check_easy_resp($cmd, $resp);
		return $resp;
	}

	private function check_easy_resp($cmd, $resp){
		$this->last_resp = $resp;
		if($this->_easy){
			if($resp->not_found()){
				return NULL;
			}else if(!$resp->ok() && !is_array($resp->data)){
				return false;
			}else{
				return $resp->data;
			}
		}else{
			$resp->cmd = $cmd;
			return $resp;
		}
	}

	function multi_set($kvs=array()){
		$args = array();
		foreach($kvs as $k=>$v){
			$args[] = $k;
			$args[] = $v;
		}
		return $this->__call(__FUNCTION__, $args);
	}

	function multi_hset($name, $kvs=array()){
		$args = array($name);
		foreach($kvs as $k=>$v){
			$args[] = $k;
			$args[] = $v;
		}
		return $this->__call(__FUNCTION__, $args);
	}

	function multi_zset($name, $kvs=array()){
		$args = array($name);
		foreach($kvs as $k=>$v){
			$args[] = $k;
			$args[] = $v;
		}
		return $this->__call(__FUNCTION__, $args);
	}

	function incr($key, $val=1){
		$args = func_get_args();
		return $this->__call(__FUNCTION__, $args);
	}

	function decr($key, $val=1){
		$args = func_get_args();
		return $this->__call(__FUNCTION__, $args);
	}

	function zincr($name, $key, $score=1){
		$args = func_get_args();
		return $this->__call(__FUNCTION__, $args);
	}

	function zdecr($name, $key, $score=1){
		$args = func_get_args();
		return $this->__call(__FUNCTION__, $args);
	}

	function zadd($key, $score, $value){
		$args = array($key, $value, $score);
		return $this->__call('zset', $args);
	}

	function zRevRank($name, $key){
		$args = func_get_args();
		return $this->__call("zrrank", $args);
	}

	function zRevRange($name, $offset, $limit){
		$args = func_get_args();
		return $this->__call("zrrange", $args);
	}

	function hincr($name, $key, $val=1){
		$args = func_get_args();
		return $this->__call(__FUNCTION__, $args);
	}

	function hdecr($name, $key, $val=1){
		$args = func_get_args();
		return $this->__call(__FUNCTION__, $args);
	}

	private function send_req($cmd, $params){
		$req = array($cmd);
		foreach($params as $p){
			if(is_array($p)){
				$req = array_merge($req, $p);
			}else{
				$req[] = $p;
			}
		}
		return $this->send($req);
	}

	private function recv_resp($cmd, $params){
		$resp = $this->recv();
		if($resp === false){
			return new SSDB_Response('error', 'Unknown error');
		}else if(!$resp){
			return new SSDB_Response('disconnected', 'Connection closed');
		}
		if($resp[0] == 'noauth'){
			$errmsg = isset($resp[1])? $resp[1] : '';
			return new SSDB_Response($resp[0], $errmsg);
		}
		switch($cmd){
			case 'dbsize':
			case 'ping':
			case 'qset':
			case 'getbit':
			case 'setbit':
			case 'countbit':
			case 'strlen':
			case 'set':
			case 'setx':
			case 'setnx':
			case 'zset':
			case 'hset':
			case 'qpush':
			case 'qpush_front':
			case 'qpush_back':
			case 'qtrim_front':
			case 'qtrim_back':
			case 'del':
			case 'zdel':
			case 'hdel':
			case 'hsize':
			case 'zsize':
			case 'qsize':
			case 'hclear':
			case 'zclear':
			case 'qclear':
			case 'multi_set':
			case 'multi_del':
			case 'multi_hset':
			case 'multi_hdel':
			case 'multi_zset':
			case 'multi_zdel':
			case 'incr':
			case 'decr':
			case 'zincr':
			case 'zdecr':
			case 'hincr':
			case 'hdecr':
			case 'zget':
			case 'zrank':
			case 'zrrank':
			case 'zcount':
			case 'zsum':
			case 'zremrangebyrank':
			case 'zremrangebyscore':
			case 'ttl':
			case 'expire':
				if($resp[0] == 'ok'){
					$val = isset($resp[1])? intval($resp[1]) : 0;
					return new SSDB_Response($resp[0], $val);
				}else{
					$errmsg = isset($resp[1])? $resp[1] : '';
					return new SSDB_Response($resp[0], $errmsg);
				}
			case 'zavg':
				if($resp[0] == 'ok'){
					$val = isset($resp[1])? floatval($resp[1]) : (float)0;
					return new SSDB_Response($resp[0], $val);
				}else{
					$errmsg = isset($resp[1])? $resp[1] : '';
					return new SSDB_Response($resp[0], $errmsg);
				}
			case 'get':
			case 'substr':
			case 'getset':
			case 'hget':
			case 'qget':
			case 'qfront':
			case 'qback':
				if($resp[0] == 'ok'){
					if(count($resp) == 2){
						return new SSDB_Response('ok', $resp[1]);
					}else{
						return new SSDB_Response('server_error', 'Invalid response');
					}
				}else{
					$errmsg = isset($resp[1])? $resp[1] : '';
					return new SSDB_Response($resp[0], $errmsg);
				}
				break;
			case 'qpop':
			case 'qpop_front':
			case 'qpop_back':
				if($resp[0] == 'ok'){
					$size = 1;
					if(isset($params[1])){
						$size = intval($params[1]);
					}
					if($size <= 1){
						if(count($resp) == 2){
							return new SSDB_Response('ok', $resp[1]);
						}else{
							return new SSDB_Response('server_error', 'Invalid response');
						}
					}else{
						$data = array_slice($resp, 1);
						return new SSDB_Response('ok', $data);
					}
				}else{
					$errmsg = isset($resp[1])? $resp[1] : '';
					return new SSDB_Response($resp[0], $errmsg);
				}
				break;
			case 'keys':
			case 'zkeys':
			case 'hkeys':
			case 'hlist':
			case 'zlist':
			case 'qslice':
				if($resp[0] == 'ok'){
					$data = array();
					if($resp[0] == 'ok'){
						$data = array_slice($resp, 1);
					}
					return new SSDB_Response($resp[0], $data);
				}else{
					$errmsg = isset($resp[1])? $resp[1] : '';
					return new SSDB_Response($resp[0], $errmsg);
				}
			case 'auth':
			case 'exists':
			case 'hexists':
			case 'zexists':
				if($resp[0] == 'ok'){
					if(count($resp) == 2){
						return new SSDB_Response('ok', (bool)$resp[1]);
					}else{
						return new SSDB_Response('server_error', 'Invalid response');
					}
				}else{
					$errmsg = isset($resp[1])? $resp[1] : '';
					return new SSDB_Response($resp[0], $errmsg);
				}
				break;
			case 'multi_exists':
			case 'multi_hexists':
			case 'multi_zexists':
				if($resp[0] == 'ok'){
					if(count($resp) % 2 == 1){
						$data = array();
						for($i=1; $i<count($resp); $i+=2){
							$data[$resp[$i]] = (bool)$resp[$i + 1];
						}
						return new SSDB_Response('ok', $data);
					}else{
						return new SSDB_Response('server_error', 'Invalid response');
					}
				}else{
					$errmsg = isset($resp[1])? $resp[1] : '';
					return new SSDB_Response($resp[0], $errmsg);
				}
				break;
			case 'scan':
			case 'rscan':
			case 'zscan':
			case 'zrscan':
			case 'zrange':
			case 'zrrange':
			case 'hscan':
			case 'hrscan':
			case 'hgetall':
			case 'multi_hsize':
			case 'multi_zsize':
			case 'multi_get':
			case 'multi_hget':
			case 'multi_zget':
			case 'zpop_front':
			case 'zpop_back':
				if($resp[0] == 'ok'){
					if(count($resp) % 2 == 1){
						$data = array();
						for($i=1; $i<count($resp); $i+=2){
							if($cmd[0] == 'z'){
								$data[$resp[$i]] = intval($resp[$i + 1]);
							}else{
								$data[$resp[$i]] = $resp[$i + 1];
							}
						}
						return new SSDB_Response('ok', $data);
					}else{
						return new SSDB_Response('server_error', 'Invalid response');
					}
				}else{
					$errmsg = isset($resp[1])? $resp[1] : '';
					return new SSDB_Response($resp[0], $errmsg);
				}
				break;
			default:
				return new SSDB_Response($resp[0], array_slice($resp, 1));
		}
		return new SSDB_Response('error', 'Unknown command: $cmd');
	}

	function send($data){
		$ps = array();
		foreach($data as $p){
			$ps[] = strlen($p);
			$ps[] = $p;
		}
		$s = join("\n", $ps) . "\n\n";
		if($this->debug){
			echo '> ' . str_replace(array("\r", "\n"), array('\r', '\n'), $s) . "\n";
		}
		try{
			while(true){
				$ret = @fwrite($this->sock, $s);
				if($ret === false || $ret === 0){
					$this->close();
					throw new SSDBException('Connection lost');
				}
				$s = substr($s, $ret);
				if(strlen($s) == 0){
					break;
				}
				@fflush($this->sock);
			}
		}catch(Exception $e){
			$this->close();
			throw new SSDBException($e->getMessage());
		}
		return $ret;
	}

	function recv(){
		$this->step = self::STEP_SIZE;
		while(true){
			$ret = $this->parse();
			if($ret === null){
				try{
					$data = @fread($this->sock, 1024 * 1024);
					if($this->debug){
						echo '< ' . str_replace(array("\r", "\n"), array('\r', '\n'), $data) . "\n";
					}
				}catch(Exception $e){
					$data = '';
				}
				if($data === false || $data === ''){
					if(feof($this->sock)){
						$this->close();
						throw new SSDBException('Connection lost');
					}else{
						throw new SSDBTimeoutException('Connection timeout');
					}
				}
				$this->recv_buf .= $data;
#				echo "read " . strlen($data) . " total: " . strlen($this->recv_buf) . "\n";
			}else{
				return $ret;
			}
		}
	}

	const STEP_SIZE = 0;
	const STEP_DATA = 1;
	public $resp = array();
	public $step;
	public $block_size;

	private function parse(){
		$spos = 0;
		$epos = 0;
		$buf_size = strlen($this->recv_buf);
		// performance issue for large reponse
		//$this->recv_buf = ltrim($this->recv_buf);
		while(true){
			$spos = $epos;
			if($this->step === self::STEP_SIZE){
				$epos = strpos($this->recv_buf, "\n", $spos);
				if($epos === false){
					break;
				}
				$epos += 1;
				$line = substr($this->recv_buf, $spos, $epos - $spos);
				$spos = $epos;

				$line = trim($line);
				if(strlen($line) == 0){ // head end
					$this->recv_buf = substr($this->recv_buf, $spos);
					$ret = $this->resp;
					$this->resp = array();
					return $ret;
				}
				$this->block_size = intval($line);
				$this->step = self::STEP_DATA;
			}
			if($this->step === self::STEP_DATA){
				$epos = $spos + $this->block_size;
				if($epos <= $buf_size){
					$n = strpos($this->recv_buf, "\n", $epos);
					if($n !== false){
						$data = substr($this->recv_buf, $spos, $epos - $spos);
						$this->resp[] = $data;
						$epos = $n + 1;
						$this->step = self::STEP_SIZE;
						continue;
					}
				}
				break;
			}
		}

		// packet not ready
		if($spos > 0){
			$this->recv_buf = substr($this->recv_buf, $spos);
		}
		return null;
	}
}


================================================
FILE: api/php/demo.php
================================================
<?php
/**
 * Copyright (c) 2012, ideawu
 * All rights reserved.
 * @author: ideawu
 * @link: http://www.ideawu.com/
 *
 * SSDB PHP API demo.
 */

include(dirname(__FILE__) . '/SSDB.php');
$host = '127.0.0.1';
$port = 8888;


try{
	$ssdb = new SimpleSSDB($host, $port);
	//$ssdb->easy();
}catch(Exception $e){
	die(__LINE__ . ' ' . $e->getMessage());
}

var_dump($ssdb->set('test', time()));
var_dump($ssdb->set('test', time()));
echo $ssdb->get('test') . "\n";
var_dump($ssdb->del('test'));
var_dump($ssdb->del('test'));
var_dump($ssdb->get('test'));
echo "\n";

var_dump($ssdb->hset('test', 'b', time()));
var_dump($ssdb->hset('test', 'b', time()));
echo $ssdb->hget('test', 'b') . "\n";
var_dump($ssdb->hdel('test', 'b'));
var_dump($ssdb->hdel('test', 'b'));
var_dump($ssdb->hget('test', 'b'));
echo "\n";

var_dump($ssdb->zset('test', 'a', time()));
var_dump($ssdb->zset('test', 'a', time()));
echo $ssdb->zget('test', 'a') . "\n";
var_dump($ssdb->zdel('test', 'a'));
var_dump($ssdb->zdel('test', 'a'));
var_dump($ssdb->zget('test', 'a'));
echo "\n";

$ssdb->close();

die();

/* a simple bench mark */

$data = array();
for($i=0; $i<1000; $i++){
	$k = '' . mt_rand(0, 100000);
	$v = mt_rand(100000, 100000 * 10 - 1) . '';
	$data[$k] = $v;
}

speed();
try{
	$ssdb = new SSDB($host, $port);
}catch(Exception $e){
	die(__LINE__ . ' ' . $e->getMessage());
}
foreach($data as $k=>$v){
	$ret = $ssdb->set($k, $v);
	if($ret === false){
		echo "error\n";
		break;
	}
}
$ssdb->close();
speed('set speed: ', count($data));


speed();
try{
	$ssdb = new SSDB($host, $port);
}catch(Exception $e){
	die(__LINE__ . ' ' . $e->getMessage());
}
foreach($data as $k=>$v){
	$ret = $ssdb->get($k);
	if($ret === false){
		echo "error\n";
		break;
	}
}
$ssdb->close();
speed('get speed: ', count($data));



function speed($msg=null, $count=0){
	static $stime;
	if(!$msg && !$count){
		$stime = microtime(1);
	}else{
		$etime = microtime(1);
		$ts = ($etime - $stime == 0)? 1 : $etime - $stime;
		$speed = $count / floatval($ts);
		$speed = sprintf('%.2f', $speed);
		echo "$msg: " . $speed . "\n";

		$stime = $etime;
	}
}


================================================
FILE: api/php/perf.php
================================================
<?php
require_once("SSDB.php");
$ssdb = new SimpleSSDB('127.0.0.1', 8888);

$DATA_LEN = 100 * 1024;

$str = str_pad('', $DATA_LEN);
$resp = $ssdb->set('key', $str);


$keys = array(
		'seq' => array(),
		);
for($i=0; $i<1000; $i++){
	$key = sprintf('%010s', $i);
	$keys['seq'][] = $key;
}

$REQUESTS = 1000;
$stime = 0;
$etime = 0;


start();
foreach($keys['seq'] as $key){
	$resp = $ssdb->set($key, $str);
}
output('writeseq');

$ks = $keys['seq'];
shuffle($ks);
start();
foreach($ks as $key){
	$resp = $ssdb->set($key, $str);
}
output('writerand');

start();
foreach($keys['seq'] as $key){
	$resp = $ssdb->get($key);
	if(strlen($resp) != $DATA_LEN){
		echo "$key ERROR!\n";
		die();
	}
}
output('readseq');


$ks = $keys['seq'];
shuffle($ks);
start();
foreach($ks as $key){
	$resp = $ssdb->get($key);
	if(strlen($resp) != $DATA_LEN){
		echo "$key ERROR!\n";
		die();
	}
}
output('readrand');




function start(){
	global $stime, $etime, $DATA_LEN, $REQUESTS;
	$stime = microtime(1);
}

function output($op){
	global $stime, $etime, $DATA_LEN, $REQUESTS;
	$etime = microtime(1);
	$time_consumed = $etime - $stime;
	$tpr = $time_consumed/$REQUESTS * 1000;
	$sps = ($REQUESTS * $DATA_LEN)/$time_consumed/1024/1024;
	printf("%-10s: %8s ms/op %10.1f MB/s\n", $op, number_format($tpr, 3), $sps);// . "ms/op\n";
}



================================================
FILE: api/python/SSDB.py
================================================
# encoding=utf-8
# Generated by cpy
# 2020-02-15 18:42:38.728393
import os, sys
from sys import stdin, stdout

import socket
class SSDB_Response(object):
	pass


	def __init__(this, code='', data_or_message=None):
		pass
		this.type = 'none'
		this.code = code
		this.data = None
		this.message = None
		this.set(code, data_or_message)

	def set(this, code, data_or_message=None):
		pass
		this.code = code

		if code=='ok':
			pass
			this.data = data_or_message
		else:
			pass

			if isinstance(data_or_message, list):
				pass

				if len(data_or_message)>0:
					pass
					this.message = data_or_message[0]
			else:
				pass
				this.message = data_or_message

	def __repr__(this):
		pass
		return ((((str(this.code) + ' ') + str(this.message)) + ' ') + str(this.data))

	def ok(this):
		pass
		return this.code=='ok'

	def not_found(this):
		pass
		return this.code=='not_found'

	def str_resp(this, resp):
		pass
		this.type = 'val'

		if resp[0]=='ok':
			pass

			if len(resp)==2:
				pass
				this.set('ok', resp[1])
			else:
				pass
				this.set('server_error', 'Invalid response')
		else:
			pass
			this.set(resp[0], resp[1 : ])
		return this

	def str_resp(this, resp):
		pass
		this.type = 'val'

		if resp[0]=='ok':
			pass

			if len(resp)==2:
				pass
				this.set('ok', resp[1])
			else:
				pass
				this.set('server_error', 'Invalid response')
		else:
			pass
			this.set(resp[0], resp[1 : ])
		return this

	def int_resp(this, resp):
		pass
		this.type = 'val'

		if resp[0]=='ok':
			pass

			if len(resp)==2:
				pass
				try:
					pass
					val = int(resp[1])
					this.set('ok', val)
				except Exception , e:
					pass
					this.set('server_error', 'Invalid response')
			else:
				pass
				this.set('server_error', 'Invalid response')
		else:
			pass
			this.set(resp[0], resp[1 : ])
		return this

	def float_resp(this, resp):
		pass
		this.type = 'val'

		if resp[0]=='ok':
			pass

			if len(resp)==2:
				pass
				try:
					pass
					val = float(resp[1])
					this.set('ok', val)
				except Exception , e:
					pass
					this.set('server_error', 'Invalid response')
			else:
				pass
				this.set('server_error', 'Invalid response')
		else:
			pass
			this.set(resp[0], resp[1 : ])
		return this

	def list_resp(this, resp):
		pass
		this.type = 'list'
		this.set(resp[0], resp[1 : ])
		return this

	def int_map_resp(this, resp):
		pass
		this.type = 'map'

		if resp[0]=='ok':
			pass

			if len(resp) % 2==1:
				pass
				data = {'index': [],'items': {},}
				i = 1

				while i<len(resp):
					pass
					k = resp[i]
					v = resp[(i + 1)]
					try:
						pass
						v = int(v)
					except Exception , e:
						pass
						v = - (1)
					data['index'].append(k)
					data['items'][k] = v
					pass
					i += 2
				this.set('ok', data)
			else:
				pass
				this.set('server_error', 'Invalid response')
		else:
			pass
			this.set(resp[0], resp[1 : ])
		return this

	def str_map_resp(this, resp):
		pass
		this.type = 'map'

		if resp[0]=='ok':
			pass

			if len(resp) % 2==1:
				pass
				data = {'index': [],'items': {},}
				i = 1

				while i<len(resp):
					pass
					k = resp[i]
					v = resp[(i + 1)]
					data['index'].append(k)
					data['items'][k] = v
					pass
					i += 2
				this.set('ok', data)
			else:
				pass
				this.set('server_error', 'Invalid response')
		else:
			pass
			this.set(resp[0], resp[1 : ])
		return this

class SSDB(object):
	pass


	def __init__(this, host, port):
		pass
		this.recv_buf = ''
		this._closed = False
		family = socket.AF_INET

		if host.find(':')!=- (1):
			pass
			family = socket.AF_INET6
		this.sock = socket.socket(family, socket.SOCK_STREAM)
		this.sock.connect(tuple([host, port]))
		this.sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)

	def close(this):
		pass

		if not (this._closed):
			pass
			this.sock.close()
			this._closed = True

	def closed(this):
		pass
		return this._closed

	def request(this, cmd, params=None):
		pass

		if params==None:
			pass
			params = []
		params = ([cmd] + params)
		this.send(params)
		resp = this.recv()

		if resp==None:
			pass
			return SSDB_Response('error', 'Unknown error')

		if len(resp)==0:
			pass
			return SSDB_Response('disconnected', 'Connection closed')
		ret = SSDB_Response()

		# {{{ switch: cmd
		_continue_1 = False
		while True:
			if False or ((cmd) == 'ping') or ((cmd) == 'set') or ((cmd) == 'del') or ((cmd) == 'qset') or ((cmd) == 'zset') or ((cmd) == 'hset') or ((cmd) == 'qpush') or ((cmd) == 'qpush_front') or ((cmd) == 'qpush_back') or ((cmd) == 'zdel') or ((cmd) == 'hdel') or ((cmd) == 'multi_set') or ((cmd) == 'multi_del') or ((cmd) == 'multi_hset') or ((cmd) == 'multi_hdel') or ((cmd) == 'multi_zset') or ((cmd) == 'multi_zdel'):
				pass

				if len(resp)>1:
					pass
					return ret.int_resp(resp)
				else:
					pass
					return SSDB_Response(resp[0], None)
				break
			if False or ((cmd) == 'version') or ((cmd) == 'substr') or ((cmd) == 'get') or ((cmd) == 'getset') or ((cmd) == 'hget') or ((cmd) == 'qfront') or ((cmd) == 'qback') or ((cmd) == 'qget'):
				pass
				return ret.str_resp(resp)
				break
			if False or ((cmd) == 'qpop') or ((cmd) == 'qpop_front') or ((cmd) == 'qpop_back'):
				pass
				size = 1
				try:
					pass
					size = int(params[2])
				except Exception , e:
					pass

				if size==1:
					pass
					return ret.str_resp(resp)
				else:
					pass
					return ret.list_resp(resp)
				break
			if False or ((cmd) == 'dbsize') or ((cmd) == 'getbit') or ((cmd) == 'setbit') or ((cmd) == 'countbit') or ((cmd) == 'bitcount') or ((cmd) == 'strlen') or ((cmd) == 'ttl') or ((cmd) == 'expire') or ((cmd) == 'setnx') or ((cmd) == 'incr') or ((cmd) == 'decr') or ((cmd) == 'zincr') or ((cmd) == 'zdecr') or ((cmd) == 'hincr') or ((cmd) == 'hdecr') or ((cmd) == 'hsize') or ((cmd) == 'zsize') or ((cmd) == 'qsize') or ((cmd) == 'zget') or ((cmd) == 'zrank') or ((cmd) == 'zrrank') or ((cmd) == 'zsum') or ((cmd) == 'zcount') or ((cmd) == 'zremrangebyrank') or ((cmd) == 'zremrangebyscore') or ((cmd) == 'hclear') or ((cmd) == 'zclear') or ((cmd) == 'qclear') or ((cmd) == 'qpush') or ((cmd) == 'qpush_front') or ((cmd) == 'qpush_back') or ((cmd) == 'qtrim_front') or ((cmd) == 'qtrim_back'):
				pass
				return ret.int_resp(resp)
				break
			if False or ((cmd) == 'zavg'):
				pass
				return ret.float_resp(resp)
				break
			if False or ((cmd) == 'keys') or ((cmd) == 'rkeys') or ((cmd) == 'zkeys') or ((cmd) == 'zrkeys') or ((cmd) == 'hkeys') or ((cmd) == 'hrkeys') or ((cmd) == 'list') or ((cmd) == 'hlist') or ((cmd) == 'hrlist') or ((cmd) == 'zlist') or ((cmd) == 'zrlist'):
				pass
				return ret.list_resp(resp)
				break
			if False or ((cmd) == 'scan') or ((cmd) == 'rscan') or ((cmd) == 'hgetall') or ((cmd) == 'hscan') or ((cmd) == 'hrscan'):
				pass
				return ret.str_map_resp(resp)
				break
			if False or ((cmd) == 'zscan') or ((cmd) == 'zrscan') or ((cmd) == 'zrange') or ((cmd) == 'zrrange') or ((cmd) == 'zpop_front') or ((cmd) == 'zpop_back'):
				pass
				return ret.int_map_resp(resp)
				break
			if False or ((cmd) == 'auth') or ((cmd) == 'exists') or ((cmd) == 'hexists') or ((cmd) == 'zexists'):
				pass
				return ret.int_resp(resp)
				break
			if False or ((cmd) == 'multi_exists') or ((cmd) == 'multi_hexists') or ((cmd) == 'multi_zexists'):
				pass
				return ret.int_map_resp(resp)
				break
			if False or ((cmd) == 'multi_get') or ((cmd) == 'multi_hget'):
				pass
				return ret.str_map_resp(resp)
				break
			if False or ((cmd) == 'multi_hsize') or ((cmd) == 'multi_zsize') or ((cmd) == 'multi_zget'):
				pass
				return ret.int_map_resp(resp)
				break
			### default
			return ret.list_resp(resp)
			break
			break
			if _continue_1:
				continue
		# }}} switch

		return SSDB_Response('error', 'Unknown error')

	def send(this, data):
		pass
		ps = []

		_cpy_r_0 = _cpy_l_1 = data
		if type(_cpy_r_0).__name__ == 'dict': _cpy_b_3=True; _cpy_l_1=_cpy_r_0.iterkeys()
		else: _cpy_b_3=False;
		for _cpy_k_2 in _cpy_l_1:
			if _cpy_b_3: p=_cpy_r_0[_cpy_k_2]
			else: p=_cpy_k_2
			pass
			p = str(p)
			ps.append(str(len(p)))
			ps.append(p)
		nl = '\n'
		s = (nl.join(ps) + '\n\n')
		try:
			pass

			while True:
				pass
				ret = this.sock.send(s)

				if ret==0:
					pass
					return - (1)
				s = s[ret : ]

				if len(s)==0:
					pass
					break
		except socket.error , e:
			pass
			return - (1)
		return ret

	def net_read(this):
		pass
		try:
			pass
			data = this.sock.recv(1024 * 8)
		except Exception , e:
			pass
			data = ''

		if data=='':
			pass
			this.close()
			return 0
		this.recv_buf += data
		return len(data)

	def recv(this):
		pass

		while True:
			pass
			ret = this.parse()

			if ret==None:
				pass

				if this.net_read()==0:
					pass
					return []
			else:
				pass
				return ret

	def parse(this):
		pass
		ret = []
		spos = 0
		epos = 0

		while True:
			pass
			spos = epos
			epos = this.recv_buf.find('\n', spos)

			if epos==- (1):
				pass
				break
			epos += 1
			line = this.recv_buf[spos : epos]
			spos = epos

			if line.strip()=='':
				pass

				if len(ret)==0:
					pass
					continue
				else:
					pass
					this.recv_buf = this.recv_buf[spos : ]
					return ret
			try:
				pass
				num = int(line)
			except Exception , e:
				pass
				return []
			epos = (spos + num)

			if epos>len(this.recv_buf):
				pass
				break
			data = this.recv_buf[spos : epos]
			ret.append(data)
			spos = epos
			epos = this.recv_buf.find('\n', spos)

			if epos==- (1):
				pass
				break
			epos += 1
		return None



================================================
FILE: api/python/demo.py
================================================
# encoding=utf-8
# Generated by cpy
# 2013-01-26 21:04:47.984000
import os, sys
from sys import stdin, stdout

from SSDB import SSDB
try:
	pass
	ssdb = SSDB('127.0.0.1', 8888)
except Exception , e:
	pass
	print e
	sys.exit(0)
print ssdb.request('set', ['test', '123'])
print ssdb.request('get', ['test'])
print ssdb.request('incr', ['test', '1'])
print ssdb.request('decr', ['test', '1'])
print ssdb.request('scan', ['a', 'z', 10])
print ssdb.request('rscan', ['z', 'a', 10])
print ssdb.request('keys', ['a', 'z', 10])
print ssdb.request('del', ['test'])
print ssdb.request('get', ['test'])
print "\n"
print ssdb.request('zset', ['test', 'a', 20])
print ssdb.request('zget', ['test', 'a'])
print ssdb.request('zincr', ['test', 'a', 20])
print ssdb.request('zdecr', ['test', 'a', 20])
print ssdb.request('zscan', ['test', 'a', 0, 100, 10])
print ssdb.request('zrscan', ['test', 'a', 100, 0, 10])
print ssdb.request('zkeys', ['test', 'a', 0, 100, 10])
print ssdb.request('zdel', ['test', 'a'])
print ssdb.request('zget', ['test', 'a'])
print "\n"
print ssdb.request('hset', ['test', 'a', 20])
print ssdb.request('hget', ['test', 'a'])
print ssdb.request('hincr', ['test', 'a', 20])
print ssdb.request('hdecr', ['test', 'a', 20])
print ssdb.request('hscan', ['test', '0', 'z', 10])
print ssdb.request('hrscan', ['test', 'z', '0', 10])
print ssdb.request('hkeys', ['test', '0', 'z', 10])
print ssdb.request('hdel', ['test', 'a'])
print ssdb.request('hget', ['test', 'a'])
print "\n"


================================================
FILE: build.sh
================================================
#!/bin/sh
BASE_DIR=`pwd`
JEMALLOC_PATH="$BASE_DIR/deps/jemalloc-4.1.0"
LEVELDB_PATH="$BASE_DIR/deps/leveldb-1.20"
SNAPPY_PATH="$BASE_DIR/deps/snappy-1.1.0"

# dependency check
which autoconf > /dev/null 2>&1
if [ "$?" -ne 0 ]; then
	echo ""
	echo "ERROR! autoconf required! install autoconf first"
	echo ""
	exit 1
fi

if test -z "$TARGET_OS"; then
	TARGET_OS=`uname -s`
fi
if test -z "$MAKE"; then
	MAKE=make
fi
if test -z "$CC"; then
	CC=gcc
fi
if test -z "$CXX"; then
	CXX=g++
fi

case "$TARGET_OS" in
    Darwin)
        #PLATFORM_CLIBS="-pthread"
		#PLATFORM_CFLAGS=""
        ;;
    Linux)
        PLATFORM_CLIBS="-pthread -lrt"
        ;;
    OS_ANDROID_CROSSCOMPILE)
        PLATFORM_CLIBS="-pthread"
        SNAPPY_HOST="--host=i386-linux"
        ;;
    CYGWIN_*)
        PLATFORM_CLIBS="-lpthread"
        ;;
    SunOS)
        PLATFORM_CLIBS="-lpthread -lrt"
        ;;
    FreeBSD)
        PLATFORM_CLIBS="-lpthread"
		MAKE=gmake
        ;;
    NetBSD)
        PLATFORM_CLIBS="-lpthread -lgcc_s"
        ;;
    OpenBSD)
        PLATFORM_CLIBS="-pthread"
        ;;
    DragonFly)
        PLATFORM_CLIBS="-lpthread"
        ;;
    HP-UX)
        PLATFORM_CLIBS="-pthread"
        ;;
    *)
        echo "Unknown platform!" >&2
        exit 1
esac


DIR=`pwd`
cd $SNAPPY_PATH
if [ ! -f Makefile ]; then
	echo ""
	echo "##### building snappy... #####"
	./configure $SNAPPY_HOST
	# FUCK! snappy compilation doesn't work on some linux!
	find . | xargs touch
	make
	echo "##### building snappy finished #####"
	echo ""
fi
cd "$DIR"


case "$TARGET_OS" in
	CYGWIN*|FreeBSD|OS_ANDROID_CROSSCOMPILE)
		echo "not using jemalloc on $TARGET_OS"
	;;
	*)
		DIR=`pwd`
		cd $JEMALLOC_PATH
		if [ ! -f Makefile ]; then
			echo ""
			echo "##### building jemalloc... #####"
			sh ./autogen.sh
			./configure
			make
			echo "##### building jemalloc finished #####"
			echo ""
		fi
		cd "$DIR"
	;;
esac


rm -f src/version.h
echo "#ifndef SSDB_DEPS_H" >> src/version.h
echo "#ifndef SSDB_VERSION" >> src/version.h
echo "#define SSDB_VERSION \"`cat version`\"" >> src/version.h
echo "#endif" >> src/version.h
echo "#endif" >> src/version.h
case "$TARGET_OS" in
	CYGWIN*|FreeBSD)
	;;
	OS_ANDROID_CROSSCOMPILE)
        echo "#define OS_ANDROID 1" >> src/version.h
	;;
	*)
		echo "#ifndef IOS" >> src/version.h
		echo "#include <stdlib.h>" >> src/version.h
		echo "#include <jemalloc/jemalloc.h>" >> src/version.h
		echo "#endif" >> src/version.h
	;;
esac

rm -f build_config.mk
echo CC=$CC >> build_config.mk
echo CXX=$CXX >> build_config.mk
echo "MAKE=$MAKE" >> build_config.mk
echo "LEVELDB_PATH=$LEVELDB_PATH" >> build_config.mk
echo "JEMALLOC_PATH=$JEMALLOC_PATH" >> build_config.mk
echo "SNAPPY_PATH=$SNAPPY_PATH" >> build_config.mk

echo "CFLAGS=" >> build_config.mk
echo "CFLAGS = -DNDEBUG -D__STDC_FORMAT_MACROS -Wall -O2 -Wno-sign-compare" >> build_config.mk
echo "CFLAGS += ${PLATFORM_CFLAGS}" >> build_config.mk
echo "CFLAGS += -I \"$LEVELDB_PATH/include\"" >> build_config.mk

echo "CLIBS=" >> build_config.mk
echo "CLIBS += \"$LEVELDB_PATH/out-static/libleveldb.a\"" >> build_config.mk
echo "CLIBS += \"$SNAPPY_PATH/.libs/libsnappy.a\"" >> build_config.mk

case "$TARGET_OS" in
	CYGWIN*|FreeBSD|OS_ANDROID_CROSSCOMPILE)
	;;
	*)
		echo "CLIBS += \"$JEMALLOC_PATH/lib/libjemalloc.a\"" >> build_config.mk
		echo "CFLAGS += -I \"$JEMALLOC_PATH/include\"" >> build_config.mk
	;;
esac

echo "CLIBS += ${PLATFORM_CLIBS}" >> build_config.mk


if test -z "$TMPDIR"; then
    TMPDIR=/tmp
fi

g++ -x c++ - -o $TMPDIR/ssdb_build_test.$$ 2>/dev/null <<EOF
	#include <unordered_map>
	int main() {}
EOF
if [ "$?" = 0 ]; then
	echo "CFLAGS += -DNEW_MAC" >> build_config.mk
fi



================================================
FILE: deps/cpy/Eval.g
================================================
/********************************
 * Author: ideawu
 * Link: http://www.ideawu.net/
 ********************************/

tree grammar Eval;

options {
    language=Python;
    tokenVocab=Expr;
    ASTLabelType=CommonTree;
}

@header{
	from engine import CpyBuilder
}

@init{
}

prog[cpy]
	@init{
		self.cpy = cpy
	}
	@after{
		self.cpy.close()
	}
	: stmt*
	;

stmt
	: import_stmt
	| exec_stmt
	| print_stmt | printf_stmt
	| break_stmt
	| continue_stmt
	| return_stmt
	| if_stmt
	| while_stmt
	| do_while_stmt
	| switch_stmt
	| throw_stmt
	| try_stmt
	| func_decl
	| class_decl
	| for_stmt
	| foreach_stmt
	;

/***** statements *****/

block
	@init{
		self.cpy.block_enter()
	}
	@after{
		self.cpy.block_leave()
	}
	: ^(BLOCK stmt*)
	;

import_stmt
	: ^(IMPORT
		( a=module
			{self.cpy.op_import($a.text, None)}
		| b=module '.*'
			{self.cpy.op_import($b.text, '*')}
		)+
		)
	;

exec_stmt
	: ^(EXEC_STMT exec_list)
		{self.cpy.stmt($exec_list.text)}
	;
exec_expr returns[text]
	: member_expr
		{$text = $member_expr.text}
	| ^(ASSIGN member_expr op=('='|'+='|'-='|'*='|'/='|'%='|'&='|'^='|'|=') expr)
		{$text = self.cpy.op_assign($member_expr.text, $expr.text, $op.text)}
	| ^(POST_INC member_expr)
		{$text = self.cpy.op_inc($member_expr.text)}
	| ^(POST_DEC member_expr)
		{$text = self.cpy.op_dec($member_expr.text)}
	| ^(PRE_INC member_expr)
		{$text = self.cpy.op_inc($member_expr.text)}
	| ^(PRE_DEC member_expr)
		{$text = self.cpy.op_dec($member_expr.text)}
	;
exec_list returns[text]
	@init{ps = []}
	: ^(EXEC_LIST (exec_expr {ps.append($exec_expr.text)} ) +)
		{$text = ', '.join(ps)}
	;

printf_stmt
	: ^(PRINTF expr expr_list?)
		{self.cpy.op_printf($expr.text, $expr_list.text)}
	;
print_stmt
	: ^(PRINT expr_list)
		{self.cpy.op_print($expr_list.text)}
	//: ^(PRINT (expr {self.cpy.op_print($expr.text)} )+)
	//	{self.cpy.op_print_leave()}
	;

break_stmt
	: BREAK
		{self.cpy.op_break()}
	;
continue_stmt
	: CONTINUE
		{self.cpy.op_continue()}
	;
return_stmt
	: ^(RETURN expr?)
		{self.cpy.op_return($expr.text)}
	;


if_stmt
	@init{
		self.cpy.if_enter()
	}
	@after{
		self.cpy.if_leave()
	}
	: if_clause else_if_clause* else_clause?
	;
if_clause
	: ^(IF expr {self.cpy.op_if($expr.text)} block)
	;
else_if_clause
	: ^(ELSE_IF {self.cpy.op_else_if()} if_clause)
	;
else_clause
	: ^(ELSE {self.cpy.op_else()} block)
	;


while_stmt
	: ^(WHILE expr {self.cpy.op_while($expr.text)} block)
	;

do_while_stmt
	: ^(DO_WHILE {self.cpy.op_do_while_enter()}
		block
		expr {self.cpy.op_do_while_leave($expr.text)}
		)
	;


switch_stmt
	: ^(SWITCH expr {self.cpy.op_switch_enter($expr.text)} case_block)
		{self.cpy.op_switch_leave()}
	;
case_block
	: '{' (case_clause)+ (default_clause)? '}'
	;
case_clause
	@init{self.cpy.op_case_enter()}
	: ^(CASE case_test+ {self.cpy.op_case()} stmt* break_stmt)
		{self.cpy.op_case_leave()}
	;
case_test
	: ^(CASE expr)
		{self.cpy.op_case_test($expr.text)}
	;
default_clause
	@init{
		self.cpy.op_default_enter()
	}
	: ^(DEFAULT stmt*)
		{self.cpy.op_default_leave()}
	;


for_stmt
	: ^(FOR (a=exec_list {self.cpy.stmt($a.text)})?
		expr {self.cpy.op_while($expr.text)}
		block
		{self.cpy.block_enter()}
		(b=exec_list {self.cpy.stmt($b.text)})?
		{self.cpy.block_leave()}
		)
	;
// for in 是一种 trackback 结构, 而 foreach as 不是
foreach_stmt
	: ^(FOREACH expr
		( ^(EACH k=ID v=each_val)
			{self.cpy.op_foreach($expr.text, $k.text, $v.text)}
		| ^(EACH v=each_val)
			{self.cpy.op_foreach($expr.text, None, $v.text)}
		)
		block
		)
	;
each_val returns[text]
	@init{ps = []}
	: ^(EACH_VAL (ID {ps.append($ID.text)} )+)
		{$text = ','.join(ps)}
	;


throw_stmt
	: ^(THROW expr)
		{self.cpy.op_throw($expr.text)}
	;
try_stmt
	@init{self.cpy.op_try()}
	: ^(TRY block catch_clause+ finally_clause?)
	;
catch_clause
	: ^(CATCH module ID?
		{self.cpy.op_catch($module.text, $ID.text)}
		block)
	;
finally_clause
	@init{self.cpy.op_finally()}
	: ^(FINALLY block)
	;


func_decl
	: ^(FUNCTION ID params
		{self.cpy.op_function($ID.text, $params.text)}
		block
		)
	;
params returns[text]
	@init{ps = []}
	: ^(PARAMS (param_decl {ps.append($param_decl.text)} ) *)
		{$text = ', '.join(ps)}
	;
param_decl returns[text]
	: ID
		{$text = $ID.text}
		('=' atom
			{$text += ('=' + $atom.text)}
		)?
	;


class_decl
	@after{self.cpy.op_class_leave()}
	: ^(CLASS a=ID
			{self.cpy.op_class_enter($a.text, None)}
		class_element*)
	| ^(CLASS b=ID c=ID
			{self.cpy.op_class_enter($b.text, $c.text)}
		class_element*)
	;
class_element
	: var_def | constructor | func_decl
	;
var_def
	: ^(VAR ID expr?)
		{self.cpy.op_var_def(False, $ID.text, $expr.text)}
	| ^(VAR 'static' ID expr?)
		{self.cpy.op_var_def(True, $ID.text, $expr.text)}
	;
constructor
	: ^(CONSTRUCTOR params
		{self.cpy.op_construct($params.text)}
		block)
	;


/***** expressions *****/
module returns[text]
	@init{ps = []}
	: ^(MODULE (ID {ps.append($ID.text)} ) +)
		{$text = '.'.join(ps)}
	;

member_expr returns[text]
	@init{ps = []}
	: ^(MEMBER (primary {ps.append($primary.text)} ) +)
		{$text = '.'.join(ps)}
	;
primary returns[text]
	@init{a=''}
	: ID (index_expr{a += $index_expr.text})*
		call_expr?
		{
		b = $call_expr.text
		if b == None: b = ''
		$text = $ID.text + a + b
		}
	;
call_expr returns[text]
	: ^(CALL expr_list?)
		{
		s = $expr_list.text
		if s == None: s = ''
		$text = '(' + s + ')'
		}
	;
index_expr returns[text]
	: ^(INDEX expr)
		{$text = '[' + $expr.text + ']'}
	| ^(SLICE a=expr b=expr?)
		{
		s = $b.text
		if s == None: s = ''
		$text = '[\%s : \%s]' \%($a.text, s)
		}
	;


expr_list returns[text]
	@init{ps = []}
	: ^(EXPR_LIST (expr {ps.append($expr.text)} )+)
		{
		$text = ', '.join(ps)
		}
	;

expr returns[text]
	: a=relation_expr	{$text = $a.text}
	| a=logic_or_expr	{$text = $a.text}
	| a=logic_and_expr	{$text = $a.text}
	| a=bitwise_or_expr	{$text = $a.text}
	| a=bitwise_xor_expr	{$text = $a.text}
	| a=bitwise_and_expr	{$text = $a.text}
	| a=add_expr		{$text = $a.text}
	| a=mul_expr		{$text = $a.text}
	| a=not_expr		{$text = $a.text}
	| a=negative_expr	{$text = $a.text}
	| a=atom			{$text = $a.text}
	;
logic_or_expr returns[text]
	: ^('||' b=expr c=expr)
		{$text = '(' + $b.text + ' or ' + $c.text + ')'}
	;
logic_and_expr returns[text]
	: ^('&&' b=expr c=expr)
		{$text = $b.text + ' and ' + $c.text}
	;
bitwise_or_expr returns[text]
	: ^('|' b=expr c=expr)
		{$text = $b.text + ' | ' + $c.text}
	;
bitwise_xor_expr returns[text]
	: ^('^' b=expr c=expr)
		{$text = $b.text + ' ^ ' + $c.text}
	;
bitwise_and_expr returns[text]
	: ^('&' b=expr c=expr)
		{$text = $b.text + ' & ' + $c.text}
	;
relation_expr returns[text]
	: ^(op=('<'|'>'|'<='|'>='|'=='|'!=') b=expr c=expr)
		{$text = $b.text + $op.text + $c.text}
	;
add_expr returns[text]
	: ^(op=('+'|'-') b=expr c=expr)
		{$text = '(' + $b.text + ' ' + $op.text + ' ' + $c.text + ')'}
	;
mul_expr returns[text]
	: ^(op=('*'|'/'|'%') b=expr c=expr)
		{$text = $b.text + ' ' + $op.text + ' ' + $c.text}
	;
not_expr returns[text]
	: ^('!' a=expr)
		{$text = 'not (' + $a.text + ')'}
	;
negative_expr returns[text]
	: ^(NEGATIVE a=expr)
		{$text = '- (' + $a.text + ')'}
	;


sprintf returns[text]
	: ^(SPRINTF expr a=expr_list?)
		{
		s = $a.text
		if not s: s=''
		$text = $expr.text + '\%(' + s + ')'
		}
	;

new_clause returns[text]
	: ^(NEW module call_expr)
		{$text = $module.text + $call_expr.text}
	;

array_decl returns[text]
	: ^(ARRAY expr_list?)
		{
		s = $expr_list.text
		if s == None: s = ''
		$text = '[' + s + ']'
		}
	;
object_decl returns[text]
	@init{s = ''}
	: ^(OBJECT (property {s += $property.text} )*)
		{$text = '{' + s + '}'}
	;
property returns[text]
	: a=(ID | STRING | INT) ':' expr
		{$text = $a.text + ': ' + $expr.text + ','}
	;


atom returns[text]
	: a=literal		{$text = $a.text}
	| a=member_expr	{$text = $a.text}
	| a=new_clause	{$text = $a.text}
	| a=array_decl	{$text = $a.text}
	| a=object_decl	{$text = $a.text}
	| a=sprintf		{$text = $a.text}
	;
literal returns[text]
	: NULL {$text = 'None'}
	| BOOL {$text = $BOOL.text.capitalize()}
	| INT {$text = $INT.text}
	| FLOAT {$text = $FLOAT.text}
	| STRING {$text = $STRING.text}
	;


================================================
FILE: deps/cpy/Eval.py
================================================
# $ANTLR 3.4 Eval.g 2012-12-09 16:07:29

import sys
from antlr3 import *
from antlr3.tree import *

from antlr3.compat import set, frozenset

       
from engine import CpyBuilder



# for convenience in actions
HIDDEN = BaseRecognizer.HIDDEN

# token types
EOF=-1
T__68=68
T__69=69
T__70=70
T__71=71
T__72=72
T__73=73
T__74=74
T__75=75
T__76=76
T__77=77
T__78=78
T__79=79
T__80=80
T__81=81
T__82=82
T__83=83
T__84=84
T__85=85
T__86=86
T__87=87
T__88=88
T__89=89
T__90=90
T__91=91
T__92=92
T__93=93
T__94=94
T__95=95
T__96=96
T__97=97
T__98=98
T__99=99
T__100=100
T__101=101
T__102=102
T__103=103
T__104=104
T__105=105
T__106=106
T__107=107
T__108=108
T__109=109
T__110=110
T__111=111
T__112=112
T__113=113
T__114=114
T__115=115
T__116=116
T__117=117
T__118=118
T__119=119
T__120=120
T__121=121
T__122=122
T__123=123
T__124=124
T__125=125
T__126=126
T__127=127
T__128=128
T__129=129
T__130=130
T__131=131
T__132=132
T__133=133
T__134=134
T__135=135
T__136=136
ALPHA=4
ARRAY=5
ASSIGN=6
BLOCK=7
BOOL=8
BREAK=9
CALL=10
CASE=11
CATCH=12
CLASS=13
COMMENT=14
CONSTRUCTOR=15
CONTINUE=16
DEFAULT=17
DIGIT=18
DOUBLE_QUOTE_CHARS=19
DO_WHILE=20
EACH=21
EACH_VAL=22
ELSE=23
ELSE_IF=24
EMPTY_LINE=25
EXEC_LIST=26
EXEC_STMT=27
EXPR_LIST=28
FINALLY=29
FLOAT=30
FOR=31
FOREACH=32
FUNCTION=33
ID=34
ID_LIST=35
IF=36
IMPORT=37
INDEX=38
INT=39
LINECOMMENT=40
MEMBER=41
MODULE=42
NEGATIVE=43
NEW=44
NEWLINE=45
NOP=46
NULL=47
OBJECT=48
OP_ASSIGN=49
PARAMS=50
POST_DEC=51
POST_INC=52
PRE_DEC=53
PRE_INC=54
PRINT=55
PRINTF=56
RETURN=57
SINGLE_QUOTE_CHARS=58
SLICE=59
SPRINTF=60
STRING=61
SWITCH=62
THROW=63
TRY=64
VAR=65
WHILE=66
WS=67

# token names
tokenNames = [
    "<invalid>", "<EOR>", "<DOWN>", "<UP>",
    "ALPHA", "ARRAY", "ASSIGN", "BLOCK", "BOOL", "BREAK", "CALL", "CASE", 
    "CATCH", "CLASS", "COMMENT", "CONSTRUCTOR", "CONTINUE", "DEFAULT", "DIGIT", 
    "DOUBLE_QUOTE_CHARS", "DO_WHILE", "EACH", "EACH_VAL", "ELSE", "ELSE_IF", 
    "EMPTY_LINE", "EXEC_LIST", "EXEC_STMT", "EXPR_LIST", "FINALLY", "FLOAT", 
    "FOR", "FOREACH", "FUNCTION", "ID", "ID_LIST", "IF", "IMPORT", "INDEX", 
    "INT", "LINECOMMENT", "MEMBER", "MODULE", "NEGATIVE", "NEW", "NEWLINE", 
    "NOP", "NULL", "OBJECT", "OP_ASSIGN", "PARAMS", "POST_DEC", "POST_INC", 
    "PRE_DEC", "PRE_INC", "PRINT", "PRINTF", "RETURN", "SINGLE_QUOTE_CHARS", 
    "SLICE", "SPRINTF", "STRING", "SWITCH", "THROW", "TRY", "VAR", "WHILE", 
    "WS", "'!'", "'!='", "'%'", "'%='", "'&&'", "'&'", "'&='", "'('", "')'", 
    "'*'", "'*='", "'+'", "'++'", "'+='", "','", "'-'", "'--'", "'-='", 
    "'.'", "'.*'", "'..'", "'/'", "'/='", "':'", "';'", "'<'", "'<='", "'='", 
    "'=='", "'=>'", "'>'", "'>='", "'['", "']'", "'^'", "'^='", "'as'", 
    "'break'", "'case'", "'catch'", "'class'", "'continue'", "'default'", 
    "'do'", "'else'", "'extends'", "'finally'", "'for'", "'foreach'", "'function'", 
    "'if'", "'import'", "'init'", "'new'", "'print'", "'printf'", "'public'", 
    "'return'", "'sprintf'", "'static'", "'switch'", "'throw'", "'try'", 
    "'while'", "'{'", "'|'", "'|='", "'||'", "'}'"
]




class Eval(TreeParser):
    grammarFileName = "Eval.g"
    api_version = 1
    tokenNames = tokenNames

    def __init__(self, input, state=None, *args, **kwargs):
        if state is None:
            state = RecognizerSharedState()

        super(Eval, self).__init__(input, state, *args, **kwargs)

        self.dfa4 = self.DFA4(
            self, 4,
            eot = self.DFA4_eot,
            eof = self.DFA4_eof,
            min = self.DFA4_min,
            max = self.DFA4_max,
            accept = self.DFA4_accept,
            special = self.DFA4_special,
            transition = self.DFA4_transition
            )



             


        self.delegates = []






    # $ANTLR start "prog"
    # Eval.g:21:1: prog[cpy] : ( stmt )* ;
    def prog(self, cpy):
              
        self.cpy = cpy
        	
        try:
            try:
                # Eval.g:28:2: ( ( stmt )* )
                # Eval.g:28:4: ( stmt )*
                pass 
                # Eval.g:28:4: ( stmt )*
                while True: #loop1
                    alt1 = 2
                    LA1_0 = self.input.LA(1)

                    if (LA1_0 == BREAK or LA1_0 == CLASS or LA1_0 == CONTINUE or LA1_0 == DO_WHILE or LA1_0 == EXEC_STMT or (FOR <= LA1_0 <= FUNCTION) or (IF <= LA1_0 <= IMPORT) or (PRINT <= LA1_0 <= RETURN) or (SWITCH <= LA1_0 <= TRY) or LA1_0 == WHILE) :
                        alt1 = 1


                    if alt1 == 1:
                        # Eval.g:28:4: stmt
                        pass 
                        self._state.following.append(self.FOLLOW_stmt_in_prog69)
                        self.stmt()

                        self._state.following.pop()


                    else:
                        break #loop1




                #action start
                       
                self.cpy.close()
                	
                #action end


            except RecognitionException, re:
                self.reportError(re)
                self.recover(self.input, re)

        finally:
            pass
        return 

    # $ANTLR end "prog"



    # $ANTLR start "stmt"
    # Eval.g:31:1: stmt : ( import_stmt | exec_stmt | print_stmt | printf_stmt | break_stmt | continue_stmt | return_stmt | if_stmt | while_stmt | do_while_stmt | switch_stmt | throw_stmt | try_stmt | func_decl | class_decl | for_stmt | foreach_stmt );
    def stmt(self, ):
        try:
            try:
                # Eval.g:32:2: ( import_stmt | exec_stmt | print_stmt | printf_stmt | break_stmt | continue_stmt | return_stmt | if_stmt | while_stmt | do_while_stmt | switch_stmt | throw_stmt | try_stmt | func_decl | class_decl | for_stmt | foreach_stmt )
                alt2 = 17
                LA2 = self.input.LA(1)
                if LA2 == IMPORT:
                    alt2 = 1
                elif LA2 == EXEC_STMT:
                    alt2 = 2
                elif LA2 == PRINT:
                    alt2 = 3
                elif LA2 == PRINTF:
                    alt2 = 4
                elif LA2 == BREAK:
                    alt2 = 5
                elif LA2 == CONTINUE:
                    alt2 = 6
                elif LA2 == RETURN:
                    alt2 = 7
                elif LA2 == IF:
                    alt2 = 8
                elif LA2 == WHILE:
                    alt2 = 9
                elif LA2 == DO_WHILE:
                    alt2 = 10
                elif LA2 == SWITCH:
                    alt2 = 11
                elif LA2 == THROW:
                    alt2 = 12
                elif LA2 == TRY:
                    alt2 = 13
                elif LA2 == FUNCTION:
                    alt2 = 14
                elif LA2 == CLASS:
                    alt2 = 15
                elif LA2 == FOR:
                    alt2 = 16
                elif LA2 == FOREACH:
                    alt2 = 17
                else:
                    nvae = NoViableAltException("", 2, 0, self.input)

                    raise nvae


                if alt2 == 1:
                    # Eval.g:32:4: import_stmt
                    pass 
                    self._state.following.append(self.FOLLOW_import_stmt_in_stmt81)
                    self.import_stmt()

                    self._state.following.pop()


                elif alt2 == 2:
                    # Eval.g:33:4: exec_stmt
                    pass 
                    self._state.following.append(self.FOLLOW_exec_stmt_in_stmt86)
                    self.exec_stmt()

                    self._state.following.pop()


                elif alt2 == 3:
                    # Eval.g:34:4: print_stmt
                    pass 
                    self._state.following.append(self.FOLLOW_print_stmt_in_stmt91)
                    self.print_stmt()

                    self._state.following.pop()


                elif alt2 == 4:
                    # Eval.g:34:17: printf_stmt
                    pass 
                    self._state.following.append(self.FOLLOW_printf_stmt_in_stmt95)
                    self.printf_stmt()

                    self._state.following.pop()


                elif alt2 == 5:
                    # Eval.g:35:4: break_stmt
                    pass 
                    self._state.following.append(self.FOLLOW_break_stmt_in_stmt100)
                    self.break_stmt()

                    self._state.following.pop()


                elif alt2 == 6:
                    # Eval.g:36:4: continue_stmt
                    pass 
                    self._state.following.append(self.FOLLOW_continue_stmt_in_stmt105)
                    self.continue_stmt()

                    self._state.following.pop()


                elif alt2 == 7:
                    # Eval.g:37:4: return_stmt
                    pass 
                    self._state.following.append(self.FOLLOW_return_stmt_in_stmt110)
                    self.return_stmt()

                    self._state.following.pop()


                elif alt2 == 8:
                    # Eval.g:38:4: if_stmt
                    pass 
                    self._state.following.append(self.FOLLOW_if_stmt_in_stmt115)
                    self.if_stmt()

                    self._state.following.pop()


                elif alt2 == 9:
                    # Eval.g:39:4: while_stmt
                    pass 
                    self._state.following.append(self.FOLLOW_while_stmt_in_stmt120)
                    self.while_stmt()

                    self._state.following.pop()


                elif alt2 == 10:
                    # Eval.g:40:4: do_while_stmt
                    pass 
                    self._state.following.append(self.FOLLOW_do_while_stmt_in_stmt125)
                    self.do_while_stmt()

                    self._state.following.pop()


                elif alt2 == 11:
                    # Eval.g:41:4: switch_stmt
                    pass 
                    self._state.following.append(self.FOLLOW_switch_stmt_in_stmt130)
                    self.switch_stmt()

                    self._state.following.pop()


                elif alt2 == 12:
                    # Eval.g:42:4: throw_stmt
                    pass 
                    self._state.following.append(self.FOLLOW_throw_stmt_in_stmt135)
                    self.throw_stmt()

                    self._state.following.pop()


                elif alt2 == 13:
                    # Eval.g:43:4: try_stmt
                    pass 
                    self._state.following.append(self.FOLLOW_try_stmt_in_stmt140)
                    self.try_stmt()

                    self._state.following.pop()


                elif alt2 == 14:
                    # Eval.g:44:4: func_decl
                    pass 
                    self._state.following.append(self.FOLLOW_func_decl_in_stmt145)
                    self.func_decl()

                    self._state.following.pop()


                elif alt2 == 15:
                    # Eval.g:45:4: class_decl
                    pass 
                    self._state.following.append(self.FOLLOW_class_decl_in_stmt150)
                    self.class_decl()

                    self._state.following.pop()


                elif alt2 == 16:
                    # Eval.g:46:4: for_stmt
                    pass 
                    self._state.following.append(self.FOLLOW_for_stmt_in_stmt155)
                    self.for_stmt()

                    self._state.following.pop()


                elif alt2 == 17:
                    # Eval.g:47:4: foreach_stmt
                    pass 
                    self._state.following.append(self.FOLLOW_foreach_stmt_in_stmt160)
                    self.foreach_stmt()

                    self._state.following.pop()



            except RecognitionException, re:
                self.reportError(re)
                self.recover(self.input, re)

        finally:
            pass
        return 

    # $ANTLR end "stmt"



    # $ANTLR start "block"
    # Eval.g:52:1: block : ^( BLOCK ( stmt )* ) ;
    def block(self, ):
              
        self.cpy.block_enter()
        	
        try:
            try:
                # Eval.g:59:2: ( ^( BLOCK ( stmt )* ) )
                # Eval.g:59:4: ^( BLOCK ( stmt )* )
                pass 
                self.match(self.input, BLOCK, self.FOLLOW_BLOCK_in_block185)

                if self.input.LA(1) == DOWN:
                    self.match(self.input, DOWN, None)
                    # Eval.g:59:12: ( stmt )*
                    while True: #loop3
                        alt3 = 2
                        LA3_0 = self.input.LA(1)

                        if (LA3_0 == BREAK or LA3_0 == CLASS or LA3_0 == CONTINUE or LA3_0 == DO_WHILE or LA3_0 == EXEC_STMT or (FOR <= LA3_0 <= FUNCTION) or (IF <= LA3_0 <= IMPORT) or (PRINT <= LA3_0 <= RETURN) or (SWITCH <= LA3_0 <= TRY) or LA3_0 == WHILE) :
                            alt3 = 1


                        if alt3 == 1:
                            # Eval.g:59:12: stmt
                            pass 
                            self._state.following.append(self.FOLLOW_stmt_in_block187)
                            self.stmt()

                            self._state.following.pop()


                        else:
                            break #loop3


                    self.match(self.input, UP, None)





                #action start
                       
                self.cpy.block_leave()
                	
                #action end


            except RecognitionException, re:
                self.reportError(re)
                self.recover(self.input, re)

        finally:
            pass
        return 

    # $ANTLR end "block"



    # $ANTLR start "import_stmt"
    # Eval.g:62:1: import_stmt : ^( IMPORT (a= module |b= module '.*' )+ ) ;
    def import_stmt(self, ):
        a = None

        b = None


        try:
            try:
                # Eval.g:63:2: ( ^( IMPORT (a= module |b= module '.*' )+ ) )
                # Eval.g:63:4: ^( IMPORT (a= module |b= module '.*' )+ )
                pass 
                self.match(self.input, IMPORT, self.FOLLOW_IMPORT_in_import_stmt201)

                self.match(self.input, DOWN, None)
                # Eval.g:64:3: (a= module |b= module '.*' )+
                cnt4 = 0
                while True: #loop4
                    alt4 = 3
                    alt4 = self.dfa4.predict(self.input)
                    if alt4 == 1:
                        # Eval.g:64:5: a= module
                        pass 
                        self._state.following.append(self.FOLLOW_module_in_import_stmt209)
                        a = self.module()

                        self._state.following.pop()

                        #action start
                        self.cpy.op_import(a, None)
                        #action end



                    elif alt4 == 2:
                        # Eval.g:66:5: b= module '.*'
                        pass 
                        self._state.following.append(self.FOLLOW_module_in_import_stmt222)
                        b = self.module()

                        self._state.following.pop()

                        self.match(self.input, 87, self.FOLLOW_87_in_import_stmt224)

                        #action start
                        self.cpy.op_import(b, '*')
                        #action end



                    else:
                        if cnt4 >= 1:
                            break #loop4

                        eee = EarlyExitException(4, self.input)
                        raise eee

                    cnt4 += 1


                self.match(self.input, UP, None)





            except RecognitionException, re:
                self.reportError(re)
                self.recover(self.input, re)

        finally:
            pass
        return 

    # $ANTLR end "import_stmt"



    # $ANTLR start "exec_stmt"
    # Eval.g:72:1: exec_stmt : ^( EXEC_STMT exec_list ) ;
    def exec_stmt(self, ):
        exec_list1 = None


        try:
            try:
                # Eval.g:73:2: ( ^( EXEC_STMT exec_list ) )
                # Eval.g:73:4: ^( EXEC_STMT exec_list )
                pass 
                self.match(self.input, EXEC_STMT, self.FOLLOW_EXEC_STMT_in_exec_stmt250)

                self.match(self.input, DOWN, None)
                self._state.following.append(self.FOLLOW_exec_list_in_exec_stmt252)
                exec_list1 = self.exec_list()

                self._state.following.pop()

                self.match(self.input, UP, None)


                #action start
                self.cpy.stmt(exec_list1)
                #action end





            except RecognitionException, re:
                self.reportError(re)
                self.recover(self.input, re)

        finally:
            pass
        return 

    # $ANTLR end "exec_stmt"



    # $ANTLR start "exec_expr"
    # Eval.g:76:1: exec_expr returns [text] : ( member_expr | ^( ASSIGN member_expr op= ( '=' | '+=' | '-=' | '*=' | '/=' | '%=' | '&=' | '^=' | '|=' ) expr ) | ^( POST_INC member_expr ) | ^( POST_DEC member_expr ) | ^( PRE_INC member_expr ) | ^( PRE_DEC member_expr ) );
    def exec_expr(self, ):
        text = None


        op = None
        member_expr2 = None

        member_expr3 = None

        expr4 = None

        member_expr5 = None

        member_expr6 = None

        member_expr7 = None

        member_expr8 = None


        try:
            try:
                # Eval.g:77:2: ( member_expr | ^( ASSIGN member_expr op= ( '=' | '+=' | '-=' | '*=' | '/=' | '%=' | '&=' | '^=' | '|=' ) expr ) | ^( POST_INC member_expr ) | ^( POST_DEC member_expr ) | ^( PRE_INC member_expr ) | ^( PRE_DEC member_expr ) )
                alt5 = 6
                LA5 = self.input.LA(1)
                if LA5 == MEMBER:
                    alt5 = 1
                elif LA5 == ASSIGN:
                    alt5 = 2
                elif LA5 == POST_INC:
                    alt5 = 3
                elif LA5 == POST_DEC:
                    alt5 = 4
                elif LA5 == PRE_INC:
                    alt5 = 5
                elif LA5 == PRE_DEC:
                    alt5 = 6
                else:
                    nvae = NoViableAltException("", 5, 0, self.input)

                    raise nvae


                if alt5 == 1:
                    # Eval.g:77:4: member_expr
                    pass 
                    self._state.following.append(self.FOLLOW_member_expr_in_exec_expr270)
                    member_expr2 = self.member_expr()

                    self._state.following.pop()

                    #action start
                    text = member_expr2
                    #action end



                elif alt5 == 2:
                    # Eval.g:79:4: ^( ASSIGN member_expr op= ( '=' | '+=' | '-=' | '*=' | '/=' | '%=' | '&=' | '^=' | '|=' ) expr )
                    pass 
                    self.match(self.input, ASSIGN, self.FOLLOW_ASSIGN_in_exec_expr280)

                    self.match(self.input, DOWN, None)
                    self._state.following.append(self.FOLLOW_member_expr_in_exec_expr282)
                    member_expr3 = self.member_expr()

                    self._state.following.pop()

                    op = self.input.LT(1)

                    if self.input.LA(1) == 71 or self.input.LA(1) == 74 or self.input.LA(1) == 78 or self.input.LA(1) == 81 or self.input.LA(1) == 85 or self.input.LA(1) == 90 or self.input.LA(1) == 95 or self.input.LA(1) == 103 or self.input.LA(1) == 134:
                        self.input.consume()
                        self._state.errorRecovery = False


                    else:
                        mse = MismatchedSetException(None, self.input)
                        raise mse



                    self._state.following.append(self.FOLLOW_expr_in_exec_expr306)
                    expr4 = self.expr()

                    self._state.following.pop()

                    self.match(self.input, UP, None)


                    #action start
                    text = self.cpy.op_assign(member_expr3, expr4, op.text)
                    #action end



                elif alt5 == 3:
                    # Eval.g:81:4: ^( POST_INC member_expr )
                    pass 
                    self.match(self.input, POST_INC, self.FOLLOW_POST_INC_in_exec_expr317)

                    self.match(self.input, DOWN, None)
                    self._state.following.append(self.FOLLOW_member_expr_in_exec_expr319)
                    member_expr5 = self.member_expr()

                    self._state.following.pop()

                    self.match(self.input, UP, None)


                    #action start
                    text = self.cpy.op_inc(member_expr5)
                    #action end



                elif alt5 == 4:
                    # Eval.g:83:4: ^( POST_DEC member_expr )
                    pass 
                    self.match(self.input, POST_DEC, self.FOLLOW_POST_DEC_in_exec_expr330)

                    self.match(self.input, DOWN, None)
                    self._state.following.append(self.FOLLOW_member_expr_in_exec_expr332)
                    member_expr6 = self.member_expr()

                    self._state.following.pop()

                    self.match(self.input, UP, None)


                    #action start
                    text = self.cpy.op_dec(member_expr6)
                    #action end



                elif alt5 == 5:
                    # Eval.g:85:4: ^( PRE_INC member_expr )
                    pass 
                    self.match(self.input, PRE_INC, self.FOLLOW_PRE_INC_in_exec_expr343)

                    self.match(self.input, DOWN, None)
                    self._state.following.append(self.FOLLOW_member_expr_in_exec_expr345)
                    member_expr7 = self.member_expr()

                    self._state.following.pop()

                    self.match(self.input, UP, None)


                    #action start
                    text = self.cpy.op_inc(member_expr7)
                    #action end



                elif alt5 == 6:
                    # Eval.g:87:4: ^( PRE_DEC member_expr )
                    pass 
                    self.match(self.input, PRE_DEC, self.FOLLOW_PRE_DEC_in_exec_expr356)

                    self.match(self.input, DOWN, None)
                    self._state.following.append(self.FOLLOW_member_expr_in_exec_expr358)
                    member_expr8 = self.member_expr()

                    self._state.following.pop()

                    self.match(self.input, UP, None)


                    #action start
                    text = self.cpy.op_dec(member_expr8)
                    #action end




            except RecognitionException, re:
                self.reportError(re)
                self.recover(self.input, re)

        finally:
            pass
        return text

    # $ANTLR end "exec_expr"



    # $ANTLR start "exec_list"
    # Eval.g:90:1: exec_list returns [text] : ^( EXEC_LIST ( exec_expr )+ ) ;
    def exec_list(self, ):
        text = None


        exec_expr9 = None


        ps = []
        try:
            try:
                # Eval.g:92:2: ( ^( EXEC_LIST ( exec_expr )+ ) )
                # Eval.g:92:4: ^( EXEC_LIST ( exec_expr )+ )
                pass 
                self.match(self.input, EXEC_LIST, self.FOLLOW_EXEC_LIST_in_exec_list382)

                self.match(self.input, DOWN, None)
                # Eval.g:92:16: ( exec_expr )+
                cnt6 = 0
                while True: #loop6
                    alt6 = 2
                    LA6_0 = self.input.LA(1)

                    if (LA6_0 == ASSIGN or LA6_0 == MEMBER or (POST_DEC <= LA6_0 <= PRE_INC)) :
                        alt6 = 1


                    if alt6 == 1:
                        # Eval.g:92:17: exec_expr
                        pass 
                        self._state.following.append(self.FOLLOW_exec_expr_in_exec_list385)
                        exec_expr9 = self.exec_expr()

                        self._state.following.pop()

                        #action start
                        ps.append(exec_expr9)
                        #action end



                    else:
                        if cnt6 >= 1:
                            break #loop6

                        eee = EarlyExitException(6, self.input)
                        raise eee

                    cnt6 += 1


                self.match(self.input, UP, None)


                #action start
                text = ', '.join(ps)
                #action end





            except RecognitionException, re:
                self.reportError(re)
                self.recover(self.input, re)

        finally:
            pass
        return text

    # $ANTLR end "exec_list"



    # $ANTLR start "printf_stmt"
    # Eval.g:96:1: printf_stmt : ^( PRINTF expr ( expr_list )? ) ;
    def printf_stmt(self, ):
        expr10 = None

        expr_list11 = None


        try:
            try:
                # Eval.g:97:2: ( ^( PRINTF expr ( expr_list )? ) )
                # Eval.g:97:4: ^( PRINTF expr ( expr_list )? )
                pass 
                self.match(self.input, PRINTF, self.FOLLOW_PRINTF_in_printf_stmt408)

                self.match(self.input, DOWN, None)
                self._state.following.append(self.FOLLOW_expr_in_printf_stmt410)
                expr10 = self.expr()

                self._state.following.pop()

                # Eval.g:97:18: ( expr_list )?
                alt7 = 2
                LA7_0 = self.input.LA(1)

                if (LA7_0 == EXPR_LIST) :
                    alt7 = 1
                if alt7 == 1:
                    # Eval.g:97:18: expr_list
                    pass 
                    self._state.following.append(self.FOLLOW_expr_list_in_printf_stmt412)
                    expr_list11 = self.expr_list()

                    self._state.following.pop()




                self.match(self.input, UP, None)


                #action start
                self.cpy.op_printf(expr10, expr_list11)
                #action end





            except RecognitionException, re:
                self.reportError(re)
                self.recover(self.input, re)

        finally:
            pass
        return 

    # $ANTLR end "printf_stmt"



    # $ANTLR start "print_stmt"
    # Eval.g:100:1: print_stmt : ^( PRINT expr_list ) ;
    def print_stmt(self, ):
        expr_list12 = None


        try:
            try:
                # Eval.g:101:2: ( ^( PRINT expr_list ) )
                # Eval.g:101:4: ^( PRINT expr_list )
                pass 
                self.match(self.input, PRINT, self.FOLLOW_PRINT_in_print_stmt429)

                self.match(self.input, DOWN, None)
                self._state.following.append(self.FOLLOW_expr_list_in_print_stmt431)
                expr_list12 = self.expr_list()

                self._state.following.pop()

                self.match(self.input, UP, None)


                #action start
                self.cpy.op_print(expr_list12)
                #action end





            except RecognitionException, re:
                self.reportError(re)
                self.recover(self.input, re)

        finally:
            pass
        return 

    # $ANTLR end "print_stmt"



    # $ANTLR start "break_stmt"
    # Eval.g:107:1: break_stmt : BREAK ;
    def break_stmt(self, ):
        try:
            try:
                # Eval.g:108:2: ( BREAK )
                # Eval.g:108:4: BREAK
                pass 
                self.match(self.input, BREAK, self.FOLLOW_BREAK_in_break_stmt451)

                #action start
                self.cpy.op_break()
                #action end





            except RecognitionException, re:
                self.reportError(re)
                self.recover(self.input, re)

        finally:
            pass
        return 

    # $ANTLR end "break_stmt"



    # $ANTLR start "continue_stmt"
    # Eval.g:111:1: continue_stmt : CONTINUE ;
    def continue_stmt(self, ):
        try:
            try:
                # Eval.g:112:2: ( CONTINUE )
                # Eval.g:112:4: CONTINUE
                pass 
                self.match(self.input, CONTINUE, self.FOLLOW_CONTINUE_in_continue_stmt465)

                #action start
                self.cpy.op_continue()
                #action end





            except RecognitionException, re:
                self.reportError(re)
                self.recover(self.input, re)

        finally:
            pass
        return 

    # $ANTLR end "continue_stmt"



    # $ANTLR start "return_stmt"
    # Eval.g:115:1: return_stmt : ^( RETURN ( expr )? ) ;
    def return_stmt(self, ):
        expr13 = None


        try:
            try:
                # Eval.g:116:2: ( ^( RETURN ( expr )? ) )
                # Eval.g:116:4: ^( RETURN ( expr )? )
                pass 
                self.match(self.input, RETURN, self.FOLLOW_RETURN_in_return_stmt480)

                if self.input.LA(1) == DOWN:
                    self.match(self.input, DOWN, None)
                    # Eval.g:116:13: ( expr )?
                    alt8 = 2
                    LA8_0 = self.input.LA(1)

                    if (LA8_0 == ARRAY or LA8_0 == BOOL or LA8_0 == FLOAT or LA8_0 == INT or LA8_0 == MEMBER or (NEGATIVE <= LA8_0 <= NEW) or (NULL <= LA8_0 <= OBJECT) or (SPRINTF <= LA8_0 <= STRING) or (68 <= LA8_0 <= 70) or (72 <= LA8_0 <= 73) or LA8_0 == 77 or LA8_0 == 79 or LA8_0 == 83 or LA8_0 == 89 or (93 <= LA8_0 <= 94) or LA8_0 == 96 or (98 <= LA8_0 <= 99) or LA8_0 == 102 or LA8_0 == 133 or LA8_0 == 135) :
                        alt8 = 1
                    if alt8 == 1:
                        # Eval.g:116:13: expr
                        pass 
                        self._state.following.append(self.FOLLOW_expr_in_return_stmt482)
                        expr13 = self.expr()

                        self._state.following.pop()




                    self.match(self.input, UP, None)



                #action start
                self.cpy.op_return(expr13)
                #action end





            except RecognitionException, re:
                self.reportError(re)
                self.recover(self.input, re)

        finally:
            pass
        return 

    # $ANTLR end "return_stmt"



    # $ANTLR start "if_stmt"
    # Eval.g:121:1: if_stmt : if_clause ( else_if_clause )* ( else_clause )? ;
    def if_stmt(self, ):
              
        self.cpy.if_enter()
        	
        try:
            try:
                # Eval.g:128:2: ( if_clause ( else_if_clause )* ( else_clause )? )
                # Eval.g:128:4: if_clause ( else_if_clause )* ( else_clause )?
                pass 
                self._state.following.append(self.FOLLOW_if_clause_in_if_stmt510)
                self.if_clause()

                self._state.following.pop()

                # Eval.g:128:14: ( else_if_clause )*
                while True: #loop9
                    alt9 = 2
                    LA9_0 = self.input.LA(1)

                    if (LA9_0 == ELSE_IF) :
                        alt9 = 1


                    if alt9 == 1:
                        # Eval.g:128:14: else_if_clause
                        pass 
                        self._state.following.append(self.FOLLOW_else_if_clause_in_if_stmt512)
                        self.else_if_clause()

                        self._state.following.pop()


                    else:
                        break #loop9


                # Eval.g:128:30: ( else_clause )?
                alt10 = 2
                LA10_0 = self.input.LA(1)

                if (LA10_0 == ELSE) :
                    alt10 = 1
                if alt10 == 1:
                    # Eval.g:128:30: else_clause
                    pass 
                    self._state.following.append(self.FOLLOW_else_clause_in_if_stmt515)
                    self.else_clause()

                    self._state.following.pop()






                #action start
                       
                self.cpy.if_leave()
                	
                #action end


            except RecognitionException, re:
                self.reportError(re)
                self.recover(self.input, re)

        finally:
            pass
        return 

    # $ANTLR end "if_stmt"



    # $ANTLR start "if_clause"
    # Eval.g:130:1: if_clause : ^( IF expr block ) ;
    def if_clause(self, ):
        expr14 = None


        try:
            try:
                # Eval.g:131:2: ( ^( IF expr block ) )
                # Eval.g:131:4: ^( IF expr block )
                pass 
                self.match(self.input, IF, self.FOLLOW_IF_in_if_clause527)

                self.match(self.input, DOWN, None)
                self._state.following.append(self.FOLLOW_expr_in_if_clause529)
                expr14 = self.expr()

                self._state.following.pop()

                #action start
                self.cpy.op_if(expr14)
                #action end


                self._state.following.append(self.FOLLOW_block_in_if_clause533)
                self.block()

                self._state.following.pop()

                self.match(self.input, UP, None)





            except RecognitionException, re:
                self.reportError(re)
                self.recover(self.input, re)

        finally:
            pass
        return 

    # $ANTLR end "if_clause"



    # $ANTLR start "else_if_clause"
    # Eval.g:133:1: else_if_clause : ^( ELSE_IF if_clause ) ;
    def else_if_clause(self, ):
        try:
            try:
                # Eval.g:134:2: ( ^( ELSE_IF if_clause ) )
                # Eval.g:134:4: ^( ELSE_IF if_clause )
                pass 
                self.match(self.input, ELSE_IF, self.FOLLOW_ELSE_IF_in_else_if_clause545)

                #action start
                self.cpy.op_else_if()
                #action end


                self.match(self.input, DOWN, None)
                self._state.following.append(self.FOLLOW_if_clause_in_else_if_clause549)
                self.if_clause()

                self._state.following.pop()

                self.match(self.input, UP, None)





            except RecognitionException, re:
                self.reportError(re)
                self.recover(self.input, re)

        finally:
            pass
        return 

    # $ANTLR end "else_if_clause"



    # $ANTLR start "else_clause"
    # Eval.g:136:1: else_clause : ^( ELSE block ) ;
    def else_clause(self, ):
        try:
            try:
                # Eval.g:137:2: ( ^( ELSE block ) )
                # Eval.g:137:4: ^( ELSE block )
                pass 
                self.match(self.input, ELSE, self.FOLLOW_ELSE_in_else_clause561)

                #action start
                self.cpy.op_else()
                #action end


                self.match(self.input, DOWN, None)
                self._state.following.append(self.FOLLOW_block_in_else_clause565)
                self.block()

                self._state.following.pop()

                self.match(self.input, UP, None)





            except RecognitionException, re:
                self.reportError(re)
                self.recover(self.input, re)

        finally:
            pass
        return 

    # $ANTLR end "else_clause"



    # $ANTLR start "while_stmt"
    # Eval.g:141:1: while_stmt : ^( WHILE expr block ) ;
    def while_stmt(self, ):
        expr15 = None


        try:
            try:
                # Eval.g:142:2: ( ^( WHILE expr block ) )
                # Eval.g:142:4: ^( WHILE expr block )
                pass 
                self.match(self.input, WHILE, self.FOLLOW_WHILE_in_while_stmt579)

                self.match(self.input, DOWN, None)
                self._state.following.append(self.FOLLOW_expr_in_while_stmt581)
                expr15 = self.expr()

                self._state.following.pop()

                #action start
                self.cpy.op_while(expr15)
                #action end


                self._state.following.append(self.FOLLOW_block_in_while_stmt585)
                self.block()

                self._state.following.pop()

                self.match(self.input, UP, None)





            except RecognitionException, re:
                self.reportError(re)
                self.recover(self.input, re)

        finally:
            pass
        return 

    # $ANTLR end "while_stmt"



    # $ANTLR start "do_while_stmt"
    # Eval.g:145:1: do_while_stmt : ^( DO_WHILE block expr ) ;
    def do_while_stmt(self, ):
        expr16 = None


        try:
            try:
                # Eval.g:146:2: ( ^( DO_WHILE block expr ) )
                # Eval.g:146:4: ^( DO_WHILE block expr )
                pass 
                self.match(self.input, DO_WHILE, self.FOLLOW_DO_WHILE_in_do_while_stmt598)

                #action start
                self.cpy.op_do_while_enter()
                #action end


                self.match(self.input, DOWN, None)
                self._state.following.append(self.FOLLOW_block_in_do_while_stmt604)
                self.block()

                self._state.following.pop()

                self._state.following.append(self.FOLLOW_expr_in_do_while_stmt608)
                expr16 = self.expr()

                self._state.following.pop()

                #action start
                self.cpy.op_do_while_leave(expr16)
                #action end


                self.match(self.input, UP, None)





            except RecognitionException, re:
                self.reportError(re)
                self.recover(self.input, re)

        finally:
            pass
        return 

    # $ANTLR end "do_while_stmt"



    # $ANTLR start "switch_stmt"
    # Eval.g:153:1: switch_stmt : ^( SWITCH expr case_block ) ;
    def switch_stmt(self, ):
        expr17 = None


        try:
            try:
                # Eval.g:154:2: ( ^( SWITCH expr case_block ) )
                # Eval.g:154:4: ^( SWITCH expr case_block )
                pass 
                self.match(self.input, SWITCH, self.FOLLOW_SWITCH_in_switch_stmt627)

                self.match(self.input, DOWN, None)
                self._state.following.append(self.FOLLOW_expr_in_switch_stmt629)
                expr17 = self.expr()

                self._state.following.pop()

                #action start
                self.cpy.op_switch_enter(expr17)
                #action end


                self._state.following.append(self.FOLLOW_case_block_in_switch_stmt633)
                self.case_block()

                self._state.following.pop()

                self.match(self.input, UP, None)


                #action start
                self.cpy.op_switch_leave()
                #action end





            except RecognitionException, re:
                self.reportError(re)
                self.recover(self.input, re)

        finally:
            pass
        return 

    # $ANTLR end "switch_stmt"



    # $ANTLR start "case_block"
    # Eval.g:157:1: case_block : '{' ( case_clause )+ ( default_clause )? '}' ;
    def case_block(self, ):
        try:
            try:
                # Eval.g:158:2: ( '{' ( case_clause )+ ( default_clause )? '}' )
                # Eval.g:158:4: '{' ( case_clause )+ ( default_clause )? '}'
                pass 
                self.match(self.input, 132, self.FOLLOW_132_in_case_block648)

                # Eval.g:158:8: ( case_clause )+
                cnt11 = 0
                while True: #loop11
                    alt11 = 2
                    LA11_0 = self.input.LA(1)

                    if (LA11_0 == CASE) :
                        alt11 = 1


                    if alt11 == 1:
                        # Eval.g:158:9: case_clause
                        pass 
                        self._state.following.append(self.FOLLOW_case_clause_in_case_block651)
                        self.case_clause()

                        self._state.following.pop()


                    else:
                        if cnt11 >= 1:
                            break #loop11

                        eee = EarlyExitException(11, self.input)
                        raise eee

                    cnt11 += 1


                # Eval.g:158:23: ( default_clause )?
                alt12 = 2
                LA12_0 = self.input.LA(1)

                if (LA12_0 == DEFAULT) :
                    alt12 = 1
                if alt12 == 1:
                    # Eval.g:158:24: default_clause
                    pass 
                    self._state.following.append(self.FOLLOW_default_clause_in_case_block656)
                    self.default_clause()

                    self._state.following.pop()




                self.match(self.input, 136, self.FOLLOW_136_in_case_block660)




            except RecognitionException, re:
                self.reportError(re)
                self.recover(self.input, re)

        finally:
            pass
        return 

    # $ANTLR end "case_block"



    # $ANTLR start "case_clause"
    # Eval.g:160:1: case_clause : ^( CASE ( case_test )+ ( stmt )* break_stmt ) ;
    def case_clause(self, ):
        self.cpy.op_case_enter()
        try:
            try:
                # Eval.g:162:2: ( ^( CASE ( case_test )+ ( stmt )* break_stmt ) )
                # Eval.g:162:4: ^( CASE ( case_test )+ ( stmt )* break_stmt )
                pass 
                self.match(self.input, CASE, self.FOLLOW_CASE_in_case_clause676)

                self.match(self.input, DOWN, None)
                # Eval.g:162:11: ( case_test )+
                cnt13 = 0
                while True: #loop13
                    alt13 = 2
                    LA13_0 = self.input.LA(1)

                    if (LA13_0 == CASE) :
                        alt13 = 1


                    if alt13 == 1:
                        # Eval.g:162:11: case_test
                        pass 
                        self._state.following.append(self.FOLLOW_case_test_in_case_clause678)
                        self.case_test()

                        self._state.following.pop()


                    else:
                        if cnt13 >= 1:
                            break #loop13

                        eee = EarlyExitException(13, self.input)
                        raise eee

                    cnt13 += 1


                #action start
                self.cpy.op_case()
                #action end


                # Eval.g:162:43: ( stmt )*
                while True: #loop14
                    alt14 = 2
                    LA14_0 = self.input.LA(1)

                    if (LA14_0 == BREAK) :
                        LA14_1 = self.input.LA(2)

                        if (LA14_1 == BREAK or LA14_1 == CLASS or LA14_1 == CONTINUE or LA14_1 == DO_WHILE or LA14_1 == EXEC_STMT or (FOR <= LA14_1 <= FUNCTION) or (IF <= LA14_1 <= IMPORT) or (PRINT <= LA14_1 <= RETURN) or (SWITCH <= LA14_1 <= TRY) or LA14_1 == WHILE) :
                            alt14 = 1


                    elif (LA14_0 == CLASS or LA14_0 == CONTINUE or LA14_0 == DO_WHILE or LA14_0 == EXEC_STMT or (FOR <= LA14_0 <= FUNCTION) or (IF <= LA14_0 <= IMPORT) or (PRINT <= LA14_0 <= RETURN) or (SWITCH <= LA14_0 <= TRY) or LA14_0 == WHILE) :
                        alt14 = 1


                    if alt14 == 1:
                        # Eval.g:162:43: stmt
                        pass 
                        self._state.following.append(self.FOLLOW_stmt_in_case_clause683)
                        self.stmt()

                        self._state.following.pop()


                    else:
                        break #loop14


                self._state.following.append(self.FOLLOW_break_stmt_in_case_clause686)
                self.break_stmt()

                self._state.following.pop()

                self.match(self.input, UP, None)


                #action start
                self.cpy.op_case_leave()
                #action end





            except RecognitionException, re:
                self.reportError(re)
                self.recover(self.input, re)

        finally:
            pass
        return 

    # $ANTLR end "case_clause"



    # $ANTLR start "case_test"
    # Eval.g:165:1: case_test : ^( CASE expr ) ;
    def case_test(self, ):
        expr18 = None


        try:
            try:
                # Eval.g:166:2: ( ^( CASE expr ) )
                # Eval.g:166:4: ^( CASE expr )
                pass 
                self.match(self.input, CASE, self.FOLLOW_CASE_in_case_test702)

                self.match(self.input, DOWN, None)
                self._state.following.append(self.FOLLOW_expr_in_case_test704)
                expr18 = self.expr()

                self._state.following.pop()

                self.match(self.input, UP, None)


                #action start
                self.cpy.op_case_test(expr18)
                #action end





            except RecognitionException, re:
                self.reportError(re)
                self.recover(self.input, re)

        finally:
            pass
        return 

    # $ANTLR end "case_test"



    # $ANTLR start "default_clause"
    # Eval.g:169:1: default_clause : ^( DEFAULT ( stmt )* ) ;
    def default_clause(self, ):
              
        self.cpy.op_default_enter()
        	
        try:
            try:
                # Eval.g:173:2: ( ^( DEFAULT ( stmt )* ) )
                # Eval.g:173:4: ^( DEFAULT ( stmt )* )
                pass 
                self.match(self.input, DEFAULT, self.FOLLOW_DEFAULT_in_default_clause725)

                if self.input.LA(1) == DOWN:
                    self.match(self.input, DOWN, None)
                    # Eval.g:173:14: ( stmt )*
                    while True: #loop15
                        alt15 = 2
                        LA15_0 = self.input.LA(1)

                        if (LA15_0 == BREAK or LA15_0 == CLASS or LA15_0 == CONTINUE or LA15_0 == DO_WHILE or LA15_0 == EXEC_STMT or (FOR <= LA15_0 <= FUNCTION) or (IF <= LA15_0 <= IMPORT) or (PRINT <= LA15_0 <= RETURN) or (SWITCH <= LA15_0 <= TRY) or LA15_0 == WHILE) :
                            alt15 = 1


                        if alt15 == 1:
                            # Eval.g:173:14: stmt
                            pass 
                            self._state.following.append(self.FOLLOW_stmt_in_default_clause727)
                            self.stmt()

                            self._state.following.pop()


                        else:
                            break #loop15


                    self.match(self.input, UP, None)



                #action start
                self.cpy.op_default_leave()
                #action end





            except RecognitionException, re:
                self.reportError(re)
                self.recover(self.input, re)

        finally:
            pass
        return 

    # $ANTLR end "default_clause"



    # $ANTLR start "for_stmt"
    # Eval.g:178:1: for_stmt : ^( FOR (a= exec_list )? expr block (b= exec_list )? ) ;
    def for_stmt(self, ):
        a = None

        b = None

        expr19 = None


        try:
            try:
                # Eval.g:179:2: ( ^( FOR (a= exec_list )? expr block (b= exec_list )? ) )
                # Eval.g:179:4: ^( FOR (a= exec_list )? expr block (b= exec_list )? )
                pass 
                self.match(self.input, FOR, self.FOLLOW_FOR_in_for_stmt746)

                self.match(self.input, DOWN, None)
                # Eval.g:179:10: (a= exec_list )?
                alt16 = 2
                LA16_0 = self.input.LA(1)

                if (LA16_0 == EXEC_LIST) :
                    alt16 = 1
                if alt16 == 1:
                    # Eval.g:179:11: a= exec_list
                    pass 
                    self._state.following.append(self.FOLLOW_exec_list_in_for_stmt751)
                    a = self.exec_list()

                    self._state.following.pop()

                    #action start
                    self.cpy.stmt(a)
                    #action end





                self._state.following.append(self.FOLLOW_expr_in_for_stmt759)
                expr19 = self.expr()

                self._state.following.pop()

                #action start
                self.cpy.op_while(expr19)
                #action end


                self._state.following.append(self.FOLLOW_block_in_for_stmt765)
                self.block()

                self._state.following.pop()

                #action start
                self.cpy.block_enter()
                #action end


                # Eval.g:183:3: (b= exec_list )?
                alt17 = 2
                LA17_0 = self.input.LA(1)

                if (LA17_0 == EXEC_LIST) :
                    alt17 = 1
                if alt17 == 1:
                    # Eval.g:183:4: b= exec_list
                    pass 
                    self._state.following.append(self.FOLLOW_exec_list_in_for_stmt776)
                    b = self.exec_list()

                    self._state.following.pop()

                    #action start
                    self.cpy.stmt(b)
                    #action end





                #action start
                self.cpy.block_leave()
                #action end


                self.match(self.input, UP, None)





            except RecognitionException, re:
                self.reportError(re)
                self.recover(self.input, re)

        finally:
            pass
        return 

    # $ANTLR end "for_stmt"



    # $ANTLR start "foreach_stmt"
    # Eval.g:188:1: foreach_stmt : ^( FOREACH expr ( ^( EACH k= ID v= each_val ) | ^( EACH v= each_val ) ) block ) ;
    def foreach_stmt(self, ):
        k = None
        v = None

        expr20 = None


        try:
            try:
                # Eval.g:189:2: ( ^( FOREACH expr ( ^( EACH k= ID v= each_val ) | ^( EACH v= each_val ) ) block ) )
                # Eval.g:189:4: ^( FOREACH expr ( ^( EACH k= ID v= each_val ) | ^( EACH v= each_val ) ) block )
                pass 
                self.match(self.input, FOREACH, self.FOLLOW_FOREACH_in_foreach_stmt800)

                self.match(self.input, DOWN, None)
                self._state.following.append(self.FOLLOW_expr_in_foreach_stmt802)
                expr20 = self.expr()

                self._state.following.pop()

                # Eval.g:190:3: ( ^( EACH k= ID v= each_val ) | ^( EACH v= each_val ) )
                alt18 = 2
                LA18_0 = self.input.LA(1)

                if (LA18_0 == EACH) :
                    LA18_1 = self.input.LA(2)

                    if (LA18_1 == 2) :
                        LA18_2 = self.input.LA(3)

                        if (LA18_2 == ID) :
                            alt18 = 1
                        elif (LA18_2 == EACH_VAL) :
                            alt18 = 2
                        else:
                            nvae = NoViableAltException("", 18, 2, self.input)

                            raise nvae


                    else:
                        nvae = NoViableAltException("", 18, 1, self.input)

                        raise nvae


                else:
                    nvae = NoViableAltException("", 18, 0, self.input)

                    raise nvae


                if alt18 == 1:
                    # Eval.g:190:5: ^( EACH k= ID v= each_val )
                    pass 
                    self.match(self.input, EACH, self.FOLLOW_EACH_in_foreach_stmt809)

                    self.match(self.input, DOWN, None)
                    k = self.match(self.input, ID, self.FOLLOW_ID_in_foreach_stmt813)

                    self._state.following.append(self.FOLLOW_each_val_in_foreach_stmt817)
                    v = self.each_val()

                    self._state.following.pop()

                    self.match(self.input, UP, None)


                    #action start
                    self.cpy.op_foreach(expr20, k.text, v)
                    #action end



                elif alt18 == 2:
                    # Eval.g:192:5: ^( EACH v= each_val )
                    pass 
                    self.match(self.input, EACH, self.FOLLOW_EACH_in_foreach_stmt830)

                    self.match(self.input, DOWN, None)
                    self._state.following.append(self.FOLLOW_each_val_in_foreach_stmt834)
                    v = self.each_val()

                    self._state.following.pop()

                    self.match(self.input, UP, None)


                    #action start
                    self.cpy.op_foreach(expr20, None, v)
                    #action end





                self._state.following.append(self.FOLLOW_block_in_foreach_stmt848)
                self.block()

                self._state.following.pop()

                self.match(self.input, UP, None)





            except RecognitionException, re:
                self.reportError(re)
                self.recover(self.input, re)

        finally:
            pass
        return 

    # $ANTLR end "foreach_stmt"



    # $ANTLR start "each_val"
    # Eval.g:198:1: each_val returns [text] : ^( EACH_VAL ( ID )+ ) ;
    def each_val(self, ):
        text = None


        ID21 = None

        ps = []
        try:
            try:
                # Eval.g:200:2: ( ^( EACH_VAL ( ID )+ ) )
                # Eval.g:200:4: ^( EACH_VAL ( ID )+ )
                pass 
                self.match(self.input, EACH_VAL, self.FOLLOW_EACH_VAL_in_each_val871)

                self.match(self.input, DOWN, None)
                # Eval.g:200:15: ( ID )+
                cnt19 = 0
                while True: #loop19
                    alt19 = 2
                    LA19_0 = self.input.LA(1)

                    if (LA19_0 == ID) :
                        alt19 = 1


                    if alt19 == 1:
                        # Eval.g:200:16: ID
                        pass 
                        ID21 = self.match(self.input, ID, self.FOLLOW_ID_in_each_val874)

                        #action start
                        ps.append(ID21.text)
                        #action end



                    else:
                        if cnt19 >= 1:
                            break #loop19

                        eee = EarlyExitException(19, self.input)
                        raise eee

                    cnt19 += 1


                self.match(self.input, UP, None)


                #action start
                text = ','.join(ps)
                #action end





            except RecognitionException, re:
                self.reportError(re)
                self.recover(self.input, re)

        finally:
            pass
        return text

    # $ANTLR end "each_val"



    # $ANTLR start "throw_stmt"
    # Eval.g:205:1: throw_stmt : ^( THROW expr ) ;
    def throw_stmt(self, ):
        expr22 = None


        try:
            try:
                # Eval.g:206:2: ( ^( THROW expr ) )
                # Eval.g:206:4: ^( THROW expr )
                pass 
                self.match(self.input, THROW, self.FOLLOW_THROW_in_throw_stmt897)

                self.match(self.input, DOWN, None)
                self._state.following.append(self.FOLLOW_expr_in_throw_stmt899)
                expr22 = self.expr()

                self._state.following.pop()

                self.match(self.input, UP, None)


                #action start
                self.cpy.op_throw(expr22)
                #action end





            except RecognitionException, re:
                self.reportError(re)
                self.recover(self.input, re)

        finally:
            pass
        return 

    # $ANTLR end "throw_stmt"



    # $ANTLR start "try_stmt"
    # Eval.g:209:1: try_stmt : ^( TRY block ( catch_clause )+ ( finally_clause )? ) ;
    def try_stmt(self, ):
        self.cpy.op_try()
        try:
            try:
                # Eval.g:211:2: ( ^( TRY block ( catch_clause )+ ( finally_clause )? ) )
                # Eval.g:211:4: ^( TRY block ( catch_clause )+ ( finally_clause )? )
                pass 
                self.match(self.input, TRY, self.FOLLOW_TRY_in_try_stmt920)

                self.match(self.input, DOWN, None)
                self._state.following.append(self.FOLLOW_block_in_try_stmt922)
                self.block()

                self._state.following.pop()

                # Eval.g:211:16: ( catch_clause )+
                cnt20 = 0
                while True: #loop20
                    alt20 = 2
                    LA20_0 = self.input.LA(1)

                    if (LA20_0 == CATCH) :
                        alt20 = 1


                    if alt20 == 1:
                        # Eval.g:211:16: catch_clause
                        pass 
                        self._state.following.append(self.FOLLOW_catch_clause_in_try_stmt924)
                        self.catch_clause()

                        self._state.following.pop()


                    else:
                        if cnt20 >= 1:
                            break #loop20

                        eee = EarlyExitException(20, self.input)
                        raise eee

                    cnt20 += 1


                # Eval.g:211:30: ( finally_clause )?
                alt21 = 2
                LA21_0 = self.input.LA(1)

                if (LA21_0 == FINALLY) :
                    alt21 = 1
                if alt21 == 1:
                    # Eval.g:211:30: finally_clause
                    pass 
                    self._state.following.append(self.FOLLOW_finally_clause_in_try_stmt927)
                    self.finally_clause()

                    self._state.following.pop()




                self.match(self.input, UP, None)





            except RecognitionException, re:
                self.reportError(re)
                self.recover(self.input, re)

        finally:
            pass
        return 

    # $ANTLR end "try_stmt"



    # $ANTLR start "catch_clause"
    # Eval.g:213:1: catch_clause : ^( CATCH module ( ID )? block ) ;
    def catch_clause(self, ):
        ID24 = None
        module23 = None


        try:
            try:
                # Eval.g:214:2: ( ^( CATCH module ( ID )? block ) )
                # Eval.g:214:4: ^( CATCH module ( ID )? block )
                pass 
                self.match(self.input, CATCH, self.FOLLOW_CATCH_in_catch_clause940)

                self.match(self.input, DOWN, None)
                self._state.following.append(self.FOLLOW_module_in_catch_clause942)
                module23 = self.module()

                self._state.following.pop()

                # Eval.g:214:19: ( ID )?
                alt22 = 2
                LA22_0 = self.input.LA(1)

                if (LA22_0 == ID) :
                    alt22 = 1
                if alt22 == 1:
                    # Eval.g:214:19: ID
                    pass 
                    ID24 = self.match(self.input, ID, self.FOLLOW_ID_in_catch_clause944)




                #action start
                self.cpy.op_catch(module23, ID24.text)
                #action end


                self._state.following.append(self.FOLLOW_block_in_catch_clause953)
                self.block()

                self._state.following.pop()

                self.match(self.input, UP, None)





            except RecognitionException, re:
                self.reportError(re)
                self.recover(self.input, re)

        finally:
            pass
        return 

    # $ANTLR end "catch_clause"



    # $ANTLR start "finally_clause"
    # Eval.g:218:1: finally_clause : ^( FINALLY block ) ;
    def finally_clause(self, ):
        self.cpy.op_finally()
        try:
            try:
                # Eval.g:220:2: ( ^( FINALLY block ) )
                # Eval.g:220:4: ^( FINALLY block )
                pass 
                self.match(self.input, FINALLY, self.FOLLOW_FINALLY_in_finally_clause970)

                self.match(self.input, DOWN, None)
                self._state.following.append(self.FOLLOW_block_in_finally_clause972)
                self.block()

                self._state.following.pop()

                self.match(self.input, UP, None)





            except RecognitionException, re:
                self.reportError(re)
                self.recover(self.input, re)

        finally:
            pass
        return 

    # $ANTLR end "finally_clause"



    # $ANTLR start "func_decl"
    # Eval.g:224:1: func_decl : ^( FUNCTION ID params block ) ;
    def func_decl(self, ):
        ID25 = None
        params26 = None


        try:
            try:
                # Eval.g:225:2: ( ^( FUNCTION ID params block ) )
                # Eval.g:225:4: ^( FUNCTION ID params block )
                pass 
                self.match(self.input, FUNCTION, self.FOLLOW_FUNCTION_in_func_decl986)

                self.match(self.input, DOWN, None)
                ID25 = self.match(self.input, ID, self.FOLLOW_ID_in_func_decl988)

                self._state.following.append(self.FOLLOW_params_in_func_decl990)
                params26 = self.params()

                self._state.following.pop()

                #action start
                self.cpy.op_function(ID25.text, params26)
                #action end


                self._state.following.append(self.FOLLOW_block_in_func_decl998)
                self.block()

                self._state.following.pop()

                self.match(self.input, UP, None)





            except RecognitionException, re:
                self.reportError(re)
                self.recover(self.input, re)

        finally:
            pass
        return 

    # $ANTLR end "func_decl"



    # $ANTLR start "params"
    # Eval.g:230:1: params returns [text] : ^( PARAMS ( param_decl )* ) ;
    def params(self, ):
        text = None


        param_decl27 = None


        ps = []
        try:
            try:
                # Eval.g:232:2: ( ^( PARAMS ( param_decl )* ) )
                # Eval.g:232:4: ^( PARAMS ( param_decl )* )
                pass 
                self.match(self.input, PARAMS, self.FOLLOW_PARAMS_in_params1021)

                if self.input.LA(1) == DOWN:
                    self.match(self.input, DOWN, None)
                    # Eval.g:232:13: ( param_decl )*
                    while True: #loop23
                        alt23 = 2
                        LA23_0 = self.input.LA(1)

                        if (LA23_0 == ID) :
                            alt23 = 1


                        if alt23 == 1:
                            # Eval.g:232:14: param_decl
                            pass 
                            self._state.following.append(self.FOLLOW_param_decl_in_params1024)
                            param_decl27 = self.param_decl()

                            self._state.following.pop()

                            #action start
                            ps.append(param_decl27)
                            #action end



                        else:
                            break #loop23


                    self.match(self.input, UP, None)



                #action start
                text = ', '.join(ps)
                #action end





            except RecognitionException, re:
                self.reportError(re)
                self.recover(self.input, re)

        finally:
            pass
        return text

    # $ANTLR end "params"



    # $ANTLR start "param_decl"
    # Eval.g:235:1: param_decl returns [text] : ID ( '=' atom )? ;
    def param_decl(self, ):
        text = None


        ID28 = None
        atom29 = None


        try:
            try:
                # Eval.g:236:2: ( ID ( '=' atom )? )
                # Eval.g:236:4: ID ( '=' atom )?
                pass 
                ID28 = self.match(self.input, ID, self.FOLLOW_ID_in_param_decl1048)

                #action start
                text = ID28.text
                #action end


                # Eval.g:238:3: ( '=' atom )?
                alt24 = 2
                LA24_0 = self.input.LA(1)

                if (LA24_0 == 95) :
                    alt24 = 1
                if alt24 == 1:
                    # Eval.g:238:4: '=' atom
                    pass 
                    self.match(self.input, 95, self.FOLLOW_95_in_param_decl1057)

                    self._state.following.append(self.FOLLOW_atom_in_param_decl1059)
                    atom29 = self.atom()

                    self._state.following.pop()

                    #action start
                    text += ('=' + atom29)
                    #action end








            except RecognitionException, re:
                self.reportError(re)
                self.recover(self.input, re)

        finally:
            pass
        return text

    # $ANTLR end "param_decl"



    # $ANTLR start "class_decl"
    # Eval.g:244:1: class_decl : ( ^( CLASS a= ID ( class_element )* ) | ^( CLASS b= ID c= ID ( class_element )* ) );
    def class_decl(self, ):
        a = None
        b = None
        c = None

        try:
            try:
                # Eval.g:246:2: ( ^( CLASS a= ID ( class_element )* ) | ^( CLASS b= ID c= ID ( class_element )* ) )
                alt27 = 2
                LA27_0 = self.input.LA(1)

                if (LA27_0 == CLASS) :
                    LA27_1 = self.input.LA(2)

                    if (LA27_1 == 2) :
                        LA27_2 = self.input.LA(3)

                        if (LA27_2 == ID) :
                            LA27_3 = self.input.LA(4)

                            if (LA27_3 == ID) :
                                alt27 = 2
                            elif (LA27_3 == 3 or LA27_3 == CONSTRUCTOR or LA27_3 == FUNCTION or LA27_3 == VAR) :
                                alt27 = 1
                            else:
                                nvae = NoViableAltException("", 27, 3, self.input)

                                raise nvae


                        else:
                            nvae = NoViableAltException("", 27, 2, self.input)

                            raise nvae


                    else:
                        nvae = NoViableAltException("", 27, 1, self.input)

                        raise nvae


                else:
                    nvae = NoViableAltException("", 27, 0, self.input)

                    raise nvae


                if alt27 == 1:
                    # Eval.g:246:4: ^( CLASS a= ID ( class_element )* )
                    pass 
                    self.match(self.input, CLASS, self.FOLLOW_CLASS_in_class_decl1087)

                    self.match(self.input, DOWN, None)
                    a = self.match(self.input, ID, self.FOLLOW_ID_in_class_decl1091)

                    #action start
                    self.cpy.op_class_enter(a.text, None)
                    #action end


                    # Eval.g:248:3: ( class_element )*
                    while True: #loop25
                        alt25 = 2
                        LA25_0 = self.input.LA(1)

                        if (LA25_0 == CONSTRUCTOR or LA25_0 == FUNCTION or LA25_0 == VAR) :
                            alt25 = 1


                        if alt25 == 1:
                            # Eval.g:248:3: class_element
                            pass 
                            self._state.following.append(self.FOLLOW_class_element_in_class_decl1100)
                            self.class_element()

                            self._state.following.pop()


                        else:
                            break #loop25


                    self.match(self.input, UP, None)



                elif alt27 == 2:
                    # Eval.g:249:4: ^( CLASS b= ID c= ID ( class_element )* )
                    pass 
                    self.match(self.input, CLASS, self.FOLLOW_CLASS_in_class_decl1108)

                    self.match(self.input, DOWN, None)
                    b = self.match(self.input, ID, self.FOLLOW_ID_in_class_decl1112)

                    c = self.match(self.input, ID, self.FOLLOW_ID_in_class_decl1116)

                    #action start
                    self.cpy.op_class_enter(b.text, c.text)
                    #action end


                    # Eval.g:251:3: ( class_element )*
                    while True: #loop26
                        alt26 = 2
                        LA26_0 = self.input.LA(1)

                        if (LA26_0 == CONSTRUCTOR or LA26_0 == FUNCTION or LA26_0 == VAR) :
                            alt26 = 1


                        if alt26 == 1:
                            # Eval.g:251:3: class_element
                            pass 
                            self._state.following.append(self.FOLLOW_class_element_in_class_decl1125)
                            self.class_element()

                            self._state.following.pop()


                        else:
                            break #loop26


                    self.match(self.input, UP, None)



                #action start
                self.cpy.op_class_leave()
                #action end


            except RecognitionException, re:
                self.reportError(re)
                self.recover(self.input, re)

        finally:
            pass
        return 

    # $ANTLR end "class_decl"



    # $ANTLR start "class_element"
    # Eval.g:253:1: class_element : ( var_def | constructor | func_decl );
    def class_element(self, ):
        try:
            try:
                # Eval.g:254:2: ( var_def | constructor | func_decl )
                alt28 = 3
                LA28 = self.input.LA(1)
                if LA28 == VAR:
                    alt28 = 1
                elif LA28 == CONSTRUCTOR:
                    alt28 = 2
                elif LA28 == FUNCTION:
                    alt28 = 3
                else:
                    nvae = NoViableAltException("", 28, 0, self.input)

                    raise nvae


                if alt28 == 1:
                    # Eval.g:254:4: var_def
                    pass 
                    self._state.following.append(self.FOLLOW_var_def_in_class_element1137)
                    self.var_def()

                    self._state.following.pop()


                elif alt28 == 2:
                    # Eval.g:254:14: constructor
                    pass 
                    self._state.following.append(self.FOLLOW_constructor_in_class_element1141)
                    self.constructor()

                    self._state.following.pop()


                elif alt28 == 3:
                    # Eval.g:254:28: func_decl
                    pass 
                    self._state.following.append(self.FOLLOW_func_decl_in_class_element1145)
                    self.func_decl()

                    self._state.following.pop()



            except RecognitionException, re:
                self.reportError(re)
                self.recover(self.input, re)

        finally:
            pass
        return 

    # $ANTLR end "class_element"



    # $ANTLR start "var_def"
    # Eval.g:256:1: var_def : ( ^( VAR ID ( expr )? ) | ^( VAR 'static' ID ( expr )? ) );
    def var_def(self, ):
        ID30 = None
        ID32 = None
        expr31 = None

        expr33 = None


        try:
            try:
                # Eval.g:257:2: ( ^( VAR ID ( expr )? ) | ^( VAR 'static' ID ( expr )? ) )
                alt31 = 2
                LA31_0 = self.input.LA(1)

                if (LA31_0 == VAR) :
                    LA31_1 = self.input.LA(2)

                    if (LA31_1 == 2) :
                        LA31_2 = self.input.LA(3)

                        if (LA31_2 == ID) :
                            alt31 = 1
                        elif (LA31_2 == 127) :
                            alt31 = 2
                        else:
                            nvae = NoViableAltException("", 31, 2, self.input)

                            raise nvae


                    else:
                        nvae = NoViableAltException("", 31, 1, self.input)

                        raise nvae


                else:
                    nvae = NoViableAltException("", 31, 0, self.input)

                    raise nvae


                if alt31 == 1:
                    # Eval.g:257:4: ^( VAR ID ( expr )? )
                    pass 
                    self.match(self.input, VAR, self.FOLLOW_VAR_in_var_def1156)

                    self.match(self.input, DOWN, None)
                    ID30 = self.match(self.input, ID, self.FOLLOW_ID_in_var_def1158)

                    # Eval.g:257:13: ( expr )?
                    alt29 = 2
                    LA29_0 = self.input.LA(1)

                    if (LA29_0 == ARRAY or LA29_0 == BOOL or LA29_0 == FLOAT or LA29_0 == INT or LA29_0 == MEMBER or (NEGATIVE <= LA29_0 <= NEW) or (NULL <= LA29_0 <= OBJECT) or (SPRINTF <= LA29_0 <= STRING) or (68 <= LA29_0 <= 70) or (72 <= LA29_0 <= 73) or LA29_0 == 77 or LA29_0 == 79 or LA29_0 == 83 or LA29_0 == 89 or (93 <= LA29_0 <= 94) or LA29_0 == 96 or (98 <= LA29_0 <= 99) or LA29_0 == 102 or LA29_0 == 133 or LA29_0 == 135) :
                        alt29 = 1
                    if alt29 == 1:
                        # Eval.g:257:13: expr
                        pass 
                        self._state.following.append(self.FOLLOW_expr_in_var_def1160)
                        expr31 = self.expr()

                        self._state.following.pop()




                    self.match(self.input, UP, None)


                    #action start
                    self.cpy.op_var_def(False, ID30.text, expr31)
                    #action end



                elif alt31 == 2:
                    # Eval.g:259:4: ^( VAR 'static' ID ( expr )? )
                    pass 
                    self.match(self.input, VAR, self.FOLLOW_VAR_in_var_def1172)

                    self.match(self.input, DOWN, None)
                    self.match(self.input, 127, self.FOLLOW_127_in_var_def1174)

                    ID32 = self.match(self.input, ID, self.FOLLOW_ID_in_var_def1176)

                    # Eval.g:259:22: ( expr )?
                    alt30 = 2
                    LA30_0 = self.input.LA(1)

                    if (LA30_0 == ARRAY or LA30_0 == BOOL or LA30_0 == FLOAT or LA30_0 == INT or LA30_0 == MEMBER or (NEGATIVE <= LA30_0 <= NEW) or (NULL <= LA30_0 <= OBJECT) or (SPRINTF <= LA30_0 <= STRING) or (68 <= LA30_0 <= 70) or (72 <= LA30_0 <= 73) or LA30_0 == 77 or LA30_0 == 79 or LA30_0 == 83 or LA30_0 == 89 or (93 <= LA30_0 <= 94) or LA30_0 == 96 or (98 <= LA30_0 <= 99) or LA30_0 == 102 or LA30_0 == 133 or LA30_0 == 135) :
                        alt30 = 1
                    if alt30 == 1:
                        # Eval.g:259:22: expr
                        pass 
                        self._state.following.append(self.FOLLOW_expr_in_var_def1178)
                        expr33 = self.expr()

                        self._state.following.pop()




                    self.match(self.input, UP, None)


                    #action start
                    self.cpy.op_var_def(True, ID32.text, expr33)
                    #action end




            except RecognitionException, re:
                self.reportError(re)
                self.recover(self.input, re)

        finally:
            pass
        return 

    # $ANTLR end "var_def"



    # $ANTLR start "constructor"
    # Eval.g:262:1: constructor : ^( CONSTRUCTOR params block ) ;
    def constructor(self, ):
        params34 = None


        try:
            try:
                # Eval.g:263:2: ( ^( CONSTRUCTOR params block ) )
                # Eval.g:263:4: ^( CONSTRUCTOR params block )
                pass 
                self.match(self.input, CONSTRUCTOR, self.FOLLOW_CONSTRUCTOR_in_constructor1195)

                self.match(self.input, DOWN, None)
                self._state.following.append(self.FOLLOW_params_in_constructor1197)
                params34 = self.params()

                self._state.following.pop()

                #action start
                self.cpy.op_construct(params34)
                #action end


                self._state.following.append(self.FOLLOW_block_in_constructor1205)
                self.block()

                self._state.following.pop()

                self.match(self.input, UP, None)





            except RecognitionException, re:
                self.reportError(re)
                self.recover(self.input, re)

        finally:
            pass
        return 

    # $ANTLR end "constructor"



    # $ANTLR start "module"
    # Eval.g:270:1: module returns [text] : ^( MODULE ( ID )+ ) ;
    def module(self, ):
        text = None


        ID35 = None

        ps = []
        try:
            try:
                # Eval.g:272:2: ( ^( MODULE ( ID )+ ) )
                # Eval.g:272:4: ^( MODULE ( ID )+ )
                pass 
                self.match(self.input, MODULE, self.FOLLOW_MODULE_in_module1229)

                self.match(self.input, DOWN, None)
                # Eval.g:272:13: ( ID )+
                cnt32 = 0
                while True: #loop32
                    alt32 = 2
                    LA32_0 = self.input.LA(1)

                    if (LA32_0 == ID) :
                        alt32 = 1


                    if alt32 == 1:
                        # Eval.g:272:14: ID
                        pass 
                        ID35 = self.match(self.input, ID, self.FOLLOW_ID_in_module1232)

                        #action start
                        ps.append(ID35.text)
                        #action end



                    else:
                        if cnt32 >= 1:
                            break #loop32

                        eee = EarlyExitException(32, self.input)
                        raise eee

                    cnt32 += 1


                self.match(self.input, UP, None)


                #action start
                text = '.'.join(ps)
                #action end





            except RecognitionException, re:
                self.reportError(re)
                self.recover(self.input, re)

        finally:
            pass
        return text

    # $ANTLR end "module"



    # $ANTLR start "member_expr"
    # Eval.g:276:1: member_expr returns [text] : ^( MEMBER ( primary )+ ) ;
    def member_expr(self, ):
        text = None


        primary36 = None


        ps = []
        try:
            try:
                # Eval.g:278:2: ( ^( MEMBER ( primary )+ ) )
                # Eval.g:278:4: ^( MEMBER ( primary )+ )
                pass 
                self.match(self.input, MEMBER, self.FOLLOW_MEMBER_in_member_expr1263)

                self.match(self.input, DOWN, None)
                # Eval.g:278:13: ( primary )+
                cnt33 = 0
                while True: #loop33
                    alt33 = 2
                    LA33_0 = self.input.LA(1)

                    if (LA33_0 == ID) :
                        alt33 = 1


                    if alt33 == 1:
                        # Eval.g:278:14: primary
                        pass 
                        self._state.following.append(self.FOLLOW_primary_in_member_expr1266)
                        primary36 = self.primary()

                        self._state.following.pop()

                        #action start
                        ps.append(primary36)
                        #action end



                    else:
                        if cnt33 >= 1:
                            break #loop33

                        eee = EarlyExitException(33, self.input)
                        raise eee

                    cnt33 += 1


                self.match(self.input, UP, None)


                #action start
                text = '.'.join(ps)
                #action end





            except RecognitionException, re:
                self.reportError(re)
                self.recover(self.input, re)

        finally:
            pass
        return text

    # $ANTLR end "member_expr"



    # $ANTLR start "primary"
    # Eval.g:281:1: primary returns [text] : ID ( index_expr )* ( call_expr )? ;
    def primary(self, ):
        text = None


        ID39 = None
        index_expr37 = None

        call_expr38 = None


        a=''
        try:
            try:
                # Eval.g:283:2: ( ID ( index_expr )* ( call_expr )? )
                # Eval.g:283:4: ID ( index_expr )* ( call_expr )?
                pass 
                ID39 = self.match(self.input, ID, self.FOLLOW_ID_in_primary1295)

                # Eval.g:283:7: ( index_expr )*
                while True: #loop34
                    alt34 = 2
                    LA34_0 = self.input.LA(1)

                    if (LA34_0 == INDEX or LA34_0 == SLICE) :
                        alt34 = 1


                    if alt34 == 1:
                        # Eval.g:283:8: index_expr
                        pass 
                        self._state.following.append(self.FOLLOW_index_expr_in_primary1298)
                        index_expr37 = self.index_expr()

                        self._state.following.pop()

                        #action start
                        a += index_expr37
                        #action end



                    else:
                        break #loop34


                # Eval.g:284:3: ( call_expr )?
                alt35 = 2
                LA35_0 = self.input.LA(1)

                if (LA35_0 == CALL) :
                    alt35 = 1
                if alt35 == 1:
                    # Eval.g:284:3: call_expr
                    pass 
                    self._state.following.append(self.FOLLOW_call_expr_in_primary1305)
                    call_expr38 = self.call_expr()

                    self._state.following.pop()




                #action start
                  
                b = call_expr38
                if b == None: b = ''
                text = ID39.text + a + b
                		
                #action end





            except RecognitionException, re:
                self.reportError(re)
                self.recover(self.input, re)

        finally:
            pass
        return text

    # $ANTLR end "primary"



    # $ANTLR start "call_expr"
    # Eval.g:291:1: call_expr returns [text] : ^( CALL ( expr_list )? ) ;
    def call_expr(self, ):
        text = None


        expr_list40 = None


        try:
            try:
                # Eval.g:292:2: ( ^( CALL ( expr_list )? ) )
                # Eval.g:292:4: ^( CALL ( expr_list )? )
                pass 
                self.match(self.input, CALL, self.FOLLOW_CALL_in_call_expr1324)

                if self.input.LA(1) == DOWN:
                    self.match(self.input, DOWN, None)
                    # Eval.g:292:11: ( expr_list )?
                    alt36 = 2
                    LA36_0 = self.input.LA(1)

                    if (LA36_0 == EXPR_LIST) :
                        alt36 = 1
                    if alt36 == 1:
                        # Eval.g:292:11: expr_list
                        pass 
                        self._state.following.append(self.FOLLOW_expr_list_in_call_expr1326)
                        expr_list40 = self.expr_list()

                        self._state.following.pop()




                    self.match(self.input, UP, None)



                #action start
                  
                s = expr_list40
                if s == None: s = ''
                text = '(' + s + ')'
                		
                #action end





            except RecognitionException, re:
                self.reportError(re)
                self.recover(self.input, re)

        finally:
            pass
        return text

    # $ANTLR end "call_expr"



    # $ANTLR start "index_expr"
    # Eval.g:299:1: index_expr returns [text] : ( ^( INDEX expr ) | ^( SLICE a= expr (b= expr )? ) );
    def index_expr(self, ):
        text = None


        a = None

        b = None

        expr41 = None


        try:
            try:
                # Eval.g:300:2: ( ^( INDEX expr ) | ^( SLICE a= expr (b= expr )? ) )
                alt38 = 2
                LA38_0 = self.input.LA(1)

                if (LA38_0 == INDEX) :
                    alt38 = 1
                elif (LA38_0 == SLICE) :
                    alt38 = 2
                else:
                    nvae = NoViableAltException("", 38, 0, self.input)

                    raise nvae


                if alt38 == 1:
                    # Eval.g:300:4: ^( INDEX expr )
                    pass 
                    self.match(self.input, INDEX, self.FOLLOW_INDEX_in_index_expr1346)

                    self.match(self.input, DOWN, None)
                    self._state.following.append(self.FOLLOW_expr_in_index_expr1348)
                    expr41 = self.expr()

                    self._state.following.pop()

                    self.match(self.input, UP, None)


                    #action start
                    text = '[' + expr41 + ']'
                    #action end



                elif alt38 == 2:
                    # Eval.g:302:4: ^( SLICE a= expr (b= expr )? )
                    pass 
                    self.match(self.input, SLICE, self.FOLLOW_SLICE_in_index_expr1359)

                    self.match(self.input, DOWN, None)
                    self._state.following.append(self.FOLLOW_expr_in_index_expr1363)
                    a = self.expr()

                    self._state.following.pop()

                    # Eval.g:302:20: (b= expr )?
                    alt37 = 2
                    LA37_0 = self.input.LA(1)

                    if (LA37_0 == ARRAY or LA37_0 == BOOL or LA37_0 == FLOAT or LA37_0 == INT or LA37_0 == MEMBER or (NEGATIVE <= LA37_0 <= NEW) or (NULL <= LA37_0 <= OBJECT) or (SPRINTF <= LA37_0 <= STRING) or (68 <= LA37_0 <= 70) or (72 <= LA37_0 <= 73) or LA37_0 == 77 or LA37_0 == 79 or LA37_0 == 83 or LA37_0 == 89 or (93 <= LA37_0 <= 94) or LA37_0 == 96 or (98 <= LA37_0 <= 99) or LA37_0 == 102 or LA37_0 == 133 or LA37_0 == 135) :
                        alt37 = 1
                    if alt37 == 1:
                        # Eval.g:302:20: b= expr
                        pass 
                        self._state.following.append(self.FOLLOW_expr_in_index_expr1367)
                        b = self.expr()

                        self._state.following.pop()




                    self.match(self.input, UP, None)


                    #action start
                      
                    s = b
                    if s == None: s = ''
                    text = '[%s : %s]' %(a, s)
                    		
                    #action end




            except RecognitionException, re:
                self.reportError(re)
                self.recover(self.input, re)

        finally:
            pass
        return text

    # $ANTLR end "index_expr"



    # $ANTLR start "expr_list"
    # Eval.g:311:1: expr_list returns [text] : ^( EXPR_LIST ( expr )+ ) ;
    def expr_list(self, ):
        text = None


        expr42 = None


        ps = []
        try:
            try:
                # Eval.g:313:2: ( ^( EXPR_LIST ( expr )+ ) )
                # Eval.g:313:4: ^( EXPR_LIST ( expr )+ )
                pass 
                self.match(self.input, EXPR_LIST, self.FOLLOW_EXPR_LIST_in_expr_list1394)

                self.match(self.input, DOWN, None)
                # Eval.g:313:16: ( expr )+
                cnt39 = 0
                while True: #loop39
                    alt39 = 2
                    LA39_0 = self.input.LA(1)

                    if (LA39_0 == ARRAY or LA39_0 == BOOL or LA39_0 == FLOAT or LA39_0 == INT or LA39_0 == MEMBER or (NEGATIVE <= LA39_0 <= NEW) or (NULL <= LA39_0 <= OBJECT) or (SPRINTF <= LA39_0 <= STRING) or (68 <= LA39_0 <= 70) or (72 <= LA39_0 <= 73) or LA39_0 == 77 or LA39_0 == 79 or LA39_0 == 83 or LA39_0 == 89 or (93 <= LA39_0 <= 94) or LA39_0 == 96 or (98 <= LA39_0 <= 99) or LA39_0 == 102 or LA39_0 == 133 or LA39_0 == 135) :
                        alt39 = 1


                    if alt39 == 1:
                        # Eval.g:313:17: expr
                        pass 
                        self._state.following.append(self.FOLLOW_expr_in_expr_list1397)
                        expr42 = self.expr()

                        self._state.following.pop()

                        #action start
                        ps.append(expr42)
                        #action end



                    else:
                        if cnt39 >= 1:
                            break #loop39

                        eee = EarlyExitException(39, self.input)
                        raise eee

                    cnt39 += 1


                self.match(self.input, UP, None)


                #action start
                  
                text = ', '.join(ps)
                		
                #action end





            except RecognitionException, re:
                self.reportError(re)
                self.recover(self.input, re)

        finally:
            pass
        return text

    # $ANTLR end "expr_list"



    # $ANTLR start "expr"
    # Eval.g:319:1: expr returns [text] : (a= relation_expr |a= logic_or_expr |a= logic_and_expr |a= bitwise_or_expr |a= bitwise_xor_expr |a= bitwise_and_expr |a= add_expr |a= mul_expr |a= not_expr |a= negative_expr |a= atom );
    def expr(self, ):
        text = None


        a = None


        try:
            try:
                # Eval.g:320:2: (a= relation_expr |a= logic_or_expr |a= logic_and_expr |a= bitwise_or_expr |a= bitwise_xor_expr |a= bitwise_and_expr |a= add_expr |a= mul_expr |a= not_expr |a= negative_expr |a= atom )
                alt40 = 11
                LA40 = self.input.LA(1)
                if LA40 == 69 or LA40 == 93 or LA40 == 94 or LA40 == 96 or LA40 == 98 or LA40 == 99:
                    alt40 = 1
                elif LA40 == 135:
                    alt40 = 2
                elif LA40 == 72:
                    alt40 = 3
                elif LA40 == 133:
                    alt40 = 4
                elif LA40 == 102:
                    alt40 = 5
                elif LA40 == 73:
                    alt40 = 6
                elif LA40 == 79 or LA40 == 83:
                    alt40 = 7
                elif LA40 == 70 or LA40 == 77 or LA40 == 89:
                    alt40 = 8
                elif LA40 == 68:
                    alt40 = 9
                elif LA40 == NEGATIVE:
                    alt40 = 10
                elif LA40 == ARRAY or LA40 == BOOL or LA40 == FLOAT or LA40 == INT or LA40 == MEMBER or LA40 == NEW or LA40 == NULL or LA40 == OBJECT or LA40 == SPRINTF or LA40 == STRING:
                    alt40 = 11
                else:
                    nvae = NoViableAltException("", 40, 0, self.input)

                    raise nvae


                if alt40 == 1:
                    # Eval.g:320:4: a= relation_expr
                    pass 
                    self._state.following.append(self.FOLLOW_relation_expr_in_expr1423)
                    a = self.relation_expr()

                    self._state.following.pop()

                    #action start
                    text = a
                    #action end



                elif alt40 == 2:
                    # Eval.g:321:4: a= logic_or_expr
                    pass 
                    self._state.following.append(self.FOLLOW_logic_or_expr_in_expr1432)
                    a = self.logic_or_expr()

                    self._state.following.pop()

                    #action start
                    text = a
                    #action end



                elif alt40 == 3:
                    # Eval.g:322:4: a= logic_and_expr
                    pass 
                    self._state.following.append(self.FOLLOW_logic_and_expr_in_expr1441)
                    a = self.logic_and_expr()

                    self._state.following.pop()

                    #action start
                    text = a
                    #action end



                elif alt40 == 4:
                    # Eval.g:323:4: a= bitwise_or_expr
                    pass 
                    self._state.following.append(self.FOLLOW_bitwise_or_expr_in_expr1450)
                    a = self.bitwise_or_expr()

                    self._state.following.pop()

                    #action start
                    text = a
                    #action end



                elif alt40 == 5:
                    # Eval.g:324:4: a= bitwise_xor_expr
                    pass 
                    self._state.following.append(self.FOLLOW_bitwise_xor_expr_in_expr1459)
                    a = self.bitwise_xor_expr()

                    self._state.following.pop()

                    #action start
                    text = a
                    #action end



                elif alt40 == 6:
                    # Eval.g:325:4: a= bitwise_and_expr
                    pass 
                    self._state.following.append(self.FOLLOW_bitwise_and_expr_in_expr1468)
                    a = self.bitwise_and_expr()

                    self._state.following.pop()

                    #action start
                    text = a
                    #action end



                elif alt40 == 7:
                    # Eval.g:326:4: a= add_expr
                    pass 
                    self._state.following.append(self.FOLLOW_add_expr_in_expr1477)
                    a = self.add_expr()

                    self._state.following.pop()

                    #action start
                    text = a
                    #action end



                elif alt40 == 8:
                    # Eval.g:327:4: a= mul_expr
                    pass 
                    self._state.following.append(self.FOLLOW_mul_expr_in_expr1487)
                    a = self.mul_expr()

                    self._state.following.pop()

                    #action start
                    text = a
                    #action end



                elif alt40 == 9:
                    # Eval.g:328:4: a= not_expr
                    pass 
                    self._state.following.append(self.FOLLOW_not_expr_in_expr1497)
                    a = self.not_expr()

                    self._state.following.pop()

                    #action start
                    text = a
                    #action end



                elif alt40 == 10:
                    # Eval.g:329:4: a= negative_expr
                    pass 
                    self._state.following.append(self.FOLLOW_negative_expr_in_expr1507)
                    a = self.negative_expr()

                    self._state.following.pop()

                    #action start
                    text = a
                    #action end



                elif alt40 == 11:
                    # Eval.g:330:4: a= atom
                    pass 
                    self._state.following.append(self.FOLLOW_atom_in_expr1516)
                    a = self.atom()

                    self._state.following.pop()

                    #action start
                    text = a
                    #action end




            except RecognitionException, re:
                self.reportError(re)
                self.recover(self.input, re)

        finally:
            pass
        return text

    # $ANTLR end "expr"



    # $ANTLR start "logic_or_expr"
    # Eval.g:332:1: logic_or_expr returns [text] : ^( '||' b= expr c= expr ) ;
    def logic_or_expr(self, ):
        text = None


        b = None

        c = None


        try:
            try:
                # Eval.g:333:2: ( ^( '||' b= expr c= expr ) )
                # Eval.g:333:4: ^( '||' b= expr c= expr )
                pass 
                self.match(self.input, 135, self.FOLLOW_135_in_logic_or_expr1534)

                self.match(self.input, DOWN, None)
                self._state.following.append(self.FOLLOW_expr_in_logic_or_expr1538)
                b = self.expr()

                self._state.following.pop()

                self._state.following.append(self.FOLLOW_expr_in_logic_or_expr1542)
                c = self.expr()

                self._state.following.pop()

                self.match(self.input, UP, None)


                #action start
                text = '(' + b + ' or ' + c + ')'
                #action end





            except RecognitionException, re:
                self.reportError(re)
                self.recover(self.input, re)

        finally:
            pass
        return text

    # $ANTLR end "logic_or_expr"



    # $ANTLR start "logic_and_expr"
    # Eval.g:336:1: logic_and_expr returns [text] : ^( '&&' b= expr c= expr ) ;
    def logic_and_expr(self, ):
        text = None


        b = None

        c = None


        try:
            try:
                # Eval.g:337:2: ( ^( '&&' b= expr c= expr ) )
                # Eval.g:337:4: ^( '&&' b= expr c= expr )
                pass 
                self.match(self.input, 72, self.FOLLOW_72_in_logic_and_expr1561)

                self.match(self.input, DOWN, None)
                self._state.following.append(self.FOLLOW_expr_in_logic_and_expr1565)
                b = self.expr()

                self._state.following.pop()

                self._state.following.append(self.FOLLOW_expr_in_logic_and_expr1569)
                c = self.expr()

                self._state.following.pop()

                self.match(self.input, UP, None)


                #action start
                text = b + ' and ' + c
                #action end





            except RecognitionException, re:
                self.reportError(re)
                self.recover(self.input, re)

        finally:
            pass
        return text

    # $ANTLR end "logic_and_expr"



    # $ANTLR start "bitwise_or_expr"
    # Eval.g:340:1: bitwise_or_expr returns [text] : ^( '|' b= expr c= expr ) ;
    def bitwise_or_expr(self, ):
        text = None


        b = None

        c = None


        try:
            try:
                # Eval.g:341:2: ( ^( '|' b= expr c= expr ) )
                # Eval.g:341:4: ^( '|' b= expr c= expr )
                pass 
                self.match(self.input, 133, self.FOLLOW_133_in_bitwise_or_expr1588)

                self.match(self.input, DOWN, None)
                self._state.following.append(self.FOLLOW_expr_in_bitwise_or_expr1592)
                b = self.expr()

                self._state.following.pop()

                self._state.following.append(self.FOLLOW_expr_in_bitwise_or_expr1596)
                c = self.expr()

                self._state.following.pop()

                self.match(self.input, UP, None)


                #action start
                text = b + ' | ' + c
                #action end





            except RecognitionException, re:
                self.reportError(re)
                self.recover(self.input, re)

        finally:
            pass
        return text

    # $ANTLR end "bitwise_or_expr"



    # $ANTLR start "bitwise_xor_expr"
    # Eval.g:344:1: bitwise_xor_expr returns [text] : ^( '^' b= expr c= expr ) ;
    def bitwise_xor_expr(self, ):
        text = None


        b = None

        c = None


        try:
            try:
                # Eval.g:345:2: ( ^( '^' b= expr c= expr ) )
                # Eval.g:345:4: ^( '^' b= expr c= expr )
                pass 
                self.match(self.input, 102, self.FOLLOW_102_in_bitwise_xor_expr1615)

                self.match(self.input, DOWN, None)
                self._state.following.append(self.FOLLOW_expr_in_bitwise_xor_expr1619)
                b = self.expr()

                self._state.following.pop()

                self._state.following.append(self.FOLLOW_expr_in_bitwise_xor_expr1623)
                c = self.expr()

                self._state.following.pop()

                self.match(self.input, UP, None)


                #action start
                text = b + ' ^ ' + c
                #action end





            except RecognitionException, re:
                self.reportError(re)
                self.recover(self.input, re)

        finally:
            pass
        return text

    # $ANTLR end "bitwise_xor_expr"



    # $ANTLR start "bitwise_and_expr"
    # Eval.g:348:1: bitwise_and_expr returns [text] : ^( '&' b= expr c= expr ) ;
    def bitwise_and_expr(self, ):
        text = None


        b = None

        c = None


        try:
            try:
                # Eval.g:349:2: ( ^( '&' b= expr c= expr ) )
                # Eval.g:349:4: ^( '&' b= expr c= expr )
                pass 
                self.match(self.input, 73, self.FOLLOW_73_in_bitwise_and_expr1642)

                self.match(self.input, DOWN, None)
                self._state.following.append(self.FOLLOW_expr_in_bitwise_and_expr1646)
                b = self.expr()

                self._state.following.pop()

                self._state.following.append(self.FOLLOW_expr_in_bitwise_and_expr1650)
                c = self.expr()

                self._state.following.pop()

                self.match(self.input, UP, None)


                #action start
                text = b + ' & ' + c
                #action end





            except RecognitionException, re:
                self.reportError(re)
                self.recover(self.input, re)

        finally:
            pass
        return text

    # $ANTLR end "bitwise_and_expr"



    # $ANTLR start "relation_expr"
    # Eval.g:352:1: relation_expr returns [text] : ^(op= ( '<' | '>' | '<=' | '>=' | '==' | '!=' ) b= expr c= expr ) ;
    def relation_expr(self, ):
        text = None


        op = None
        b = None

        c = None


        try:
            try:
                # Eval.g:353:2: ( ^(op= ( '<' | '>' | '<=' | '>=' | '==' | '!=' ) b= expr c= expr ) )
                # Eval.g:353:4: ^(op= ( '<' | '>' | '<=' | '>=' | '==' | '!=' ) b= expr c= expr )
                pass 
                op = self.input.LT(1)

                if self.input.LA(1) == 69 or (93 <= self.input.LA(1) <= 94) or self.input.LA(1) == 96 or (98 <= self.input.LA(1) <= 99):
                    self.input.consume()
                    self._state.errorRecovery = False


                else:
                    mse = MismatchedSetException(None, self.input)
                    raise mse



                self.match(self.input, DOWN, None)
                self._state.following.append(self.FOLLOW_expr_in_relation_expr1687)
                b = self.expr()

                self._state.following.pop()

                self._state.following.append(self.FOLLOW_expr_in_relation_expr1691)
                c = self.expr()

                self._state.following.pop()

                self.match(self.input, UP, None)


                #action start
                text = b + op.text + c
                #action end





            except RecognitionException, re:
                self.reportError(re)
                self.recover(self.input, re)

        finally:
            pass
        return text

    # $ANTLR end "relation_expr"



    # $ANTLR start "add_expr"
    # Eval.g:356:1: add_expr returns [text] : ^(op= ( '+' | '-' ) b= expr c= expr ) ;
    def add_expr(self, ):
        text = None


        op = None
        b = None

        c = None


        try:
            try:
                # Eval.g:357:2: ( ^(op= ( '+' | '-' ) b= expr c= expr ) )
                # Eval.g:357:4: ^(op= ( '+' | '-' ) b= expr c= expr )
                pass 
                op = self.input.LT(1)

                if self.input.LA(1) == 79 or self.input.LA(1) == 83:
                    self.input.consume()
                    self._state.errorRecovery = False


                else:
                    mse = MismatchedSetException(None, self.input)
                    raise mse



                self.match(self.input, DOWN, None)
                self._state.following.append(self.FOLLOW_expr_in_add_expr1720)
                b = self.expr()

                self._state.following.pop()

                self._state.following.append(self.FOLLOW_expr_in_add_expr1724)
                c = self.expr()

                self._state.following.pop()

                self.match(self.input, UP, None)


                #action start
                text = '(' + b + ' ' + op.text + ' ' + c + ')'
                #action end





            except RecognitionException, re:
                self.reportError(re)
                self.recover(self.input, re)

        finally:
            pass
        return text

    # $ANTLR end "add_expr"



    # $ANTLR start "mul_expr"
    # Eval.g:360:1: mul_expr returns [text] : ^(op= ( '*' | '/' | '%' ) b= expr c= expr ) ;
    def mul_expr(self, ):
        text = None


        op = None
        b = None

        c = None


        try:
            try:
                # Eval.g:361:2: ( ^(op= ( '*' | '/' | '%' ) b= expr c= expr ) )
                # Eval.g:361:4: ^(op= ( '*' | '/' | '%' ) b= expr c= expr )
                pass 
                op = self.input.LT(1)

                if self.input.LA(1) == 70 or self.input.LA(1) == 77 or self.input.LA(1) == 89:
                    self.input.consume()
                    self._state.errorRecovery = False


                else:
                    mse = MismatchedSetException(None, self.input)
                    raise mse



                self.match(self.input, DOWN, None)
                self._state.following.append(self.FOLLOW_expr_in_mul_expr1755)
                b = self.expr()

                self._state.following.pop()

                self._state.following.append(self.FOLLOW_expr_in_mul_expr1759)
                c = self.expr()

                self._state.following.pop()

                self.match(self.input, UP, None)


                #action start
                text = b + ' ' + op.text + ' ' + c
                #action end





            except RecognitionException, re:
                self.reportError(re)
                self.recover(self.input, re)

        finally:
            pass
        return text

    # $ANTLR end "mul_expr"



    # $ANTLR start "not_expr"
    # Eval.g:364:1: not_expr returns [text] : ^( '!' a= expr ) ;
    def not_expr(self, ):
        text = None


        a = None


        try:
            try:
                # Eval.g:365:2: ( ^( '!' a= expr ) )
                # Eval.g:365:4: ^( '!' a= expr )
                pass 
                self.match(self.input, 68, self.FOLLOW_68_in_not_expr1778)

                self.match(self.input, DOWN, None)
                self._state.following.append(self.FOLLOW_expr_in_not_expr1782)
                a = self.expr()

                self._state.following.pop()

                self.match(self.input, UP, None)


                #action start
                text = 'not (' + a + ')'
                #action end





            except RecognitionException, re:
                self.reportError(re)
                self.recover(self.input, re)

        finally:
            pass
        return text

    # $ANTLR end "not_expr"



    # $ANTLR start "negative_expr"
    # Eval.g:368:1: negative_expr returns [text] : ^( NEGATIVE a= expr ) ;
    def negative_expr(self, ):
        text = None


        a = None


        try:
            try:
                # Eval.g:369:2: ( ^( NEGATIVE a= expr ) )
                # Eval.g:369:4: ^( NEGATIVE a= expr )
                pass 
                self.match(self.input, NEGATIVE, self.FOLLOW_NEGATIVE_in_negative_expr1801)

                self.match(self.input, DOWN, None)
                self._state.following.append(self.FOLLOW_expr_in_negative_expr1805)
                a = self.expr()

                self._state.following.pop()

                self.match(self.input, UP, None)


                #action start
                text = '- (' + a + ')'
                #action end





            except RecognitionException, re:
                self.reportError(re)
                self.recover(self.input, re)

        finally:
            pass
        return text

    # $ANTLR end "negative_expr"



    # $ANTLR start "sprintf"
    # Eval.g:374:1: sprintf returns [text] : ^( SPRINTF expr (a= expr_list )? ) ;
    def sprintf(self, ):
        text = None


        a = None

        expr43 = None


        try:
            try:
                # Eval.g:375:2: ( ^( SPRINTF expr (a= expr_list )? ) )
                # Eval.g:375:4: ^( SPRINTF expr (a= expr_list )? )
                pass 
                self.match(self.input, SPRINTF, self.FOLLOW_SPRINTF_in_sprintf1826)

                self.match(self.input, DOWN, None)
                self._state.following.append(self.FOLLOW_expr_in_sprintf1828)
                expr43 = self.expr()

                self._state.following.pop()

                # Eval.g:375:20: (a= expr_list )?
                alt41 = 2
                LA41_0 = self.input.LA(1)

                if (LA41_0 == EXPR_LIST) :
                    alt41 = 1
                if alt41 == 1:
                    # Eval.g:375:20: a= expr_list
                    pass 
                    self._state.following.append(self.FOLLOW_expr_list_in_sprintf1832)
                    a = self.expr_list()

                    self._state.following.pop()




                self.match(self.input, UP, None)


                #action start
                  
                s = a
                if not s: s=''
                text = expr43 + '%(' + s + ')'
                		
                #action end





            except RecognitionException, re:
                self.reportError(re)
                self.recover(self.input, re)

        finally:
            pass
        return text

    # $ANTLR end "sprintf"



    # $ANTLR start "new_clause"
    # Eval.g:383:1: new_clause returns [text] : ^( NEW module call_expr ) ;
    def new_clause(self, ):
        text = None


        module44 = None

        call_expr45 = None


        try:
            try:
                # Eval.g:384:2: ( ^( NEW module call_expr ) )
                # Eval.g:384:4: ^( NEW module call_expr )
                pass 
                self.match(self.input, NEW, self.FOLLOW_NEW_in_new_clause1853)

                self.match(self.input, DOWN, None)
                self._state.following.append(self.FOLLOW_module_in_new_clause1855)
                module44 = self.module()

                self._state.following.pop()

                self._state.following.append(self.FOLLOW_call_expr_in_new_clause1857)
                call_expr45 = self.call_expr()

                self._state.following.pop()

                self.match(self.input, UP, None)


                #action start
                text = module44 + call_expr45
                #action end





            except RecognitionException, re:
                self.reportError(re)
                self.recover(self.input, re)

        finally:
            pass
        return text

    # $ANTLR end "new_clause"



    # $ANTLR start "array_decl"
    # Eval.g:388:1: array_decl returns [text] : ^( ARRAY ( expr_list )? ) ;
    def array_decl(self, ):
        text = None


        expr_list46 = None


        try:
            try:
                # Eval.g:389:2: ( ^( ARRAY ( expr_list )? ) )
                # Eval.g:389:4: ^( ARRAY ( expr_list )? )
                pass 
                self.match(self.input, ARRAY, self.FOLLOW_ARRAY_in_array_decl1877)

                if self.input.LA(1) == DOWN:
                    self.match(self.input, DOWN, None)
                    # Eval.g:389:12: ( expr_list )?
                    alt42 = 2
                    LA42_0 = self.input.LA(1)

                    if (LA42_0 == EXPR_LIST) :
                        alt42 = 1
                    if alt42 == 1:
                        # Eval.g:389:12: expr_list
                        pass 
                        self._state.following.append(self.FOLLOW_expr_list_in_array_decl1879)
                        expr_list46 = self.expr_list()

                        self._state.following.pop()




                    self.match(self.input, UP, None)



                #action start
                  
                s = expr_list46
                if s == None: s = ''
                text = '[' + s + ']'
                		
                #action end





            except RecognitionException, re:
                self.reportError(re)
                self.recover(self.input, re)

        finally:
            pass
        return text

    # $ANTLR end "array_decl"



    # $ANTLR start "object_decl"
    # Eval.g:396:1: object_decl returns [text] : ^( OBJECT ( property )* ) ;
    def object_decl(self, ):
        text = None


        property47 = None


        s = ''
        try:
            try:
                # Eval.g:398:2: ( ^( OBJECT ( property )* ) )
                # Eval.g:398:4: ^( OBJECT ( property )* )
                pass 
                self.match(self.input, OBJECT, self.FOLLOW_OBJECT_in_object_decl1904)

                if self.input.LA(1) == DOWN:
                    self.match(self.input, DOWN, None)
                    # Eval.g:398:13: ( property )*
                    while True: #loop43
                        alt43 = 2
                        LA43_0 = self.input.LA(1)

                        if (LA43_0 == ID or LA43_0 == INT or LA43_0 == STRING) :
                            alt43 = 1


                        if alt43 == 1:
                            # Eval.g:398:14: property
                            pass 
                            self._state.following.append(self.FOLLOW_property_in_object_decl1907)
                            property47 = self.property()

                            self._state.following.pop()

                            #action start
                            s += property47
                            #action end



                        else:
                            break #loop43


                    self.match(self.input, UP, None)



                #action start
                text = '{' + s + '}'
                #action end





            except RecognitionException, re:
                self.reportError(re)
                self.recover(self.input, re)

        finally:
            pass
        return text

    # $ANTLR end "object_decl"



    # $ANTLR start "property"
    # Eval.g:401:1: property returns [text] : a= ( ID | STRING | INT ) ':' expr ;
    def property(self, ):
        text = None


        a = None
        expr48 = None


        try:
            try:
                # Eval.g:402:2: (a= ( ID | STRING | INT ) ':' expr )
                # Eval.g:402:4: a= ( ID | STRING | INT ) ':' expr
                pass 
                a = self.input.LT(1)

                if self.input.LA(1) == ID or self.input.LA(1) == INT or self.input.LA(1) == STRING:
                    self.input.consume()
                    self._state.errorRecovery = False


                else:
                    mse = MismatchedSetException(None, self.input)
                    raise mse



                self.match(self.input, 91, self.FOLLOW_91_in_property1944)

                self._state.following.append(self.FOLLOW_expr_in_property1946)
                expr48 = self.expr()

                self._state.following.pop()

                #action start
                text = a.text + ': ' + expr48 + ','
                #action end





            except RecognitionException, re:
                self.reportError(re)
                self.recover(self.input, re)

        finally:
            pass
        return text

    # $ANTLR end "property"



    # $ANTLR start "atom"
    # Eval.g:407:1: atom returns [text] : (a= literal |a= member_expr |a= new_clause |a= array_decl |a= object_decl |a= sprintf );
    def atom(self, ):
        text = None


        a = None


        try:
            try:
                # Eval.g:408:2: (a= literal |a= member_expr |a= new_clause |a= array_decl |a= object_decl |a= sprintf )
                alt44 = 6
                LA44 = self.input.LA(1)
                if LA44 == BOOL or LA44 == FLOAT or LA44 == INT or LA44 == NULL or LA44 == STRING:
                    alt44 = 1
                elif LA44 == MEMBER:
                    alt44 = 2
                elif LA44 == NEW:
                    alt44 = 3
                elif LA44 == ARRAY:
                    alt44 = 4
                elif LA44 == OBJECT:
                    alt44 = 5
                elif LA44 == SPRINTF:
                    alt44 = 6
                else:
                    nvae = NoViableAltException("", 44, 0, self.input)

                    raise nvae


                if alt44 == 1:
                    # Eval.g:408:4: a= literal
                    pass 
                    self._state.following.append(self.FOLLOW_literal_in_atom1967)
                    a = self.literal()

                    self._state.following.pop()

                    #action start
                    text = a
                    #action end



                elif alt44 == 2:
                    # Eval.g:409:4: a= member_expr
                    pass 
                    self._state.following.append(self.FOLLOW_member_expr_in_atom1977)
                    a = self.member_expr()

                    self._state.following.pop()

                    #action start
                    text = a
                    #action end



                elif alt44 == 3:
                    # Eval.g:410:4: a= new_clause
                    pass 
                    self._state.following.append(self.FOLLOW_new_clause_in_atom1986)
                    a = self.new_clause()

                    self._state.following.pop()

                    #action start
                    text = a
                    #action end



                elif alt44 == 4:
                    # Eval.g:411:4: a= array_decl
                    pass 
                    self._state.following.append(self.FOLLOW_array_decl_in_atom1995)
                    a = self.array_decl()

                    self._state.following.pop()

                    #action start
                    text = a
                    #action end



                elif alt44 == 5:
                    # Eval.g:412:4: a= object_decl
                    pass 
                    self._state.following.append(self.FOLLOW_object_decl_in_atom2004)
                    a = self.object_decl()

                    self._state.following.pop()

                    #action start
                    text = a
                    #action end



                elif alt44 == 6:
                    # Eval.g:413:4: a= sprintf
                    pass 
                    self._state.following.append(self.FOLLOW_sprintf_in_atom2013)
                    a = self.sprintf()

                    self._state.following.pop()

                    #action start
                    text = a
                    #action end




            except RecognitionException, re:
                self.reportError(re)
                self.recover(self.input, re)

        finally:
            pass
        return text

    # $ANTLR end "atom"



    # $ANTLR start "literal"
    # Eval.g:415:1: literal returns [text] : ( NULL | BOOL | INT | FLOAT | STRING );
    def literal(self, ):
        text = None


        BOOL49 = None
        INT50 = None
        FLOAT51 = None
        STRING52 = None

        try:
            try:
                # Eval.g:416:2: ( NULL | BOOL | INT | FLOAT | STRING )
                alt45 = 5
                LA45 = self.input.LA(1)
                if LA45 == NULL:
                    alt45 = 1
                elif LA45 == BOOL:
                    alt45 = 2
                elif LA45 == INT:
                    alt45 = 3
                elif LA45 == FLOAT:
                    alt45 = 4
                elif LA45 == STRING:
                    alt45 = 5
                else:
                    nvae = NoViableAltException("", 45, 0, self.input)

                    raise nvae


                if alt45 == 1:
                    # Eval.g:416:4: NULL
                    pass 
                    self.match(self.input, NULL, self.FOLLOW_NULL_in_literal2029)

                    #action start
                    text = 'None'
                    #action end



                elif alt45 == 2:
                    # Eval.g:417:4: BOOL
                    pass 
                    BOOL49 = self.match(self.input, BOOL, self.FOLLOW_BOOL_in_literal2036)

                    #action start
                    text = BOOL49.text.capitalize()
                    #action end



                elif alt45 == 3:
                    # Eval.g:418:4: INT
                    pass 
                    INT50 = self.match(self.input, INT, self.FOLLOW_INT_in_literal2043)

                    #action start
                    text = INT50.text
                    #action end



                elif alt45 == 4:
                    # Eval.g:419:4: FLOAT
                    pass 
                    FLOAT51 = self.match(self.input, FLOAT, self.FOLLOW_FLOAT_in_literal2050)

                    #action start
                    text = FLOAT51.text
                    #action end



                elif alt45 == 5:
                    # Eval.g:420:4: STRING
                    pass 
                    STRING52 = self.match(self.input, STRING, self.FOLLOW_STRING_in_literal2057)

                    #action start
                    text = STRING52.text
                    #action end




            except RecognitionException, re:
                self.reportError(re)
                self.recover(self.input, re)

        finally:
            pass
        return text

    # $ANTLR end "literal"



    # lookup tables for DFA #4

    DFA4_eot = DFA.unpack(
        u"\10\uffff"
        )

    DFA4_eof = DFA.unpack(
        u"\10\uffff"
        )

    DFA4_min = DFA.unpack(
        u"\1\3\1\uffff\1\2\1\42\2\3\2\uffff"
        )

    DFA4_max = DFA.unpack(
        u"\1\52\1\uffff\1\2\2\42\1\127\2\uffff"
        )

    DFA4_accept = DFA.unpack(
        u"\1\uffff\1\3\4\uffff\1\1\1\2"
        )

    DFA4_special = DFA.unpack(
        u"\10\uffff"
        )


    DFA4_transition = [
        DFA.unpack(u"\1\1\46\uffff\1\2"),
        DFA.unpack(u""),
        DFA.unpack(u"\1\3"),
        DFA.unpack(u"\1\4"),
        DFA.unpack(u"\1\5\36\uffff\1\4"),
        DFA.unpack(u"\1\6\46\uffff\1\6\54\uffff\1\7"),
        DFA.unpack(u""),
        DFA.unpack(u"")
    ]

    # class definition for DFA #4

    class DFA4(DFA):
        pass


 

    FOLLOW_stmt_in_prog69 = frozenset([1, 9, 13, 16, 20, 27, 31, 32, 33, 36, 37, 55, 56, 57, 62, 63, 64, 66])
    FOLLOW_import_stmt_in_stmt81 = frozenset([1])
    FOLLOW_exec_stmt_in_stmt86 = frozenset([1])
    FOLLOW_print_stmt_in_stmt91 = frozenset([1])
    FOLLOW_printf_stmt_in_stmt95 = frozenset([1])
    FOLLOW_break_stmt_in_stmt100 = frozenset([1])
    FOLLOW_continue_stmt_in_stmt105 = frozenset([1])
    FOLLOW_return_stmt_in_stmt110 = frozenset([1])
    FOLLOW_if_stmt_in_stmt115 = frozenset([1])
    FOLLOW_while_stmt_in_stmt120 = frozenset([1])
    FOLLOW_do_while_stmt_in_stmt125 = frozenset([1])
    FOLLOW_switch_stmt_in_stmt130 = frozenset([1])
    FOLLOW_throw_stmt_in_stmt135 = frozenset([1])
    FOLLOW_try_stmt_in_stmt140 = frozenset([1])
    FOLLOW_func_decl_in_stmt145 = frozenset([1])
    FOLLOW_class_decl_in_stmt150 = frozenset([1])
    FOLLOW_for_stmt_in_stmt155 = frozenset([1])
    FOLLOW_foreach_stmt_in_stmt160 = frozenset([1])
    FOLLOW_BLOCK_in_block185 = frozenset([2])
    FOLLOW_stmt_in_block187 = frozenset([3, 9, 13, 16, 20, 27, 31, 32, 33, 36, 37, 55, 56, 57, 62, 63, 64, 66])
    FOLLOW_IMPORT_in_import_stmt201 = frozenset([2])
    FOLLOW_module_in_import_stmt209 = frozenset([3, 42])
    FOLLOW_module_in_import_stmt222 = frozenset([87])
    FOLLOW_87_in_import_stmt224 = frozenset([3, 42])
    FOLLOW_EXEC_STMT_in_exec_stmt250 = frozenset([2])
    FOLLOW_exec_list_in_exec_stmt252 = frozenset([3])
    FOLLOW_member_expr_in_exec_expr270 = frozenset([1])
    FOLLOW_ASSIGN_in_exec_expr280 = frozenset([2])
    FOLLOW_member_expr_in_exec_expr282 = frozenset([71, 74, 78, 81, 85, 90, 95, 103, 134])
    FOLLOW_set_in_exec_expr286 = frozenset([5, 8, 30, 39, 41, 43, 44, 47, 48, 60, 61, 68, 69, 70, 72, 73, 77, 79, 83, 89, 93, 94, 96, 98, 99, 102, 133, 135])
    FOLLOW_expr_in_exec_expr306 = frozenset([3])
    FOLLOW_POST_INC_in_exec_expr317 = frozenset([2])
    FOLLOW_member_expr_in_exec_expr319 = frozenset([3])
    FOLLOW_POST_DEC_in_exec_expr330 = frozenset([2])
    FOLLOW_member_expr_in_exec_expr332 = frozenset([3])
    FOLLOW_PRE_INC_in_exec_expr343 = frozenset([2])
    FOLLOW_member_expr_in_exec_expr345 = frozenset([3])
    FOLLOW_PRE_DEC_in_exec_expr356 = frozenset([2])
    FOLLOW_member_expr_in_exec_expr358 = frozenset([3])
    FOLLOW_EXEC_LIST_in_exec_list382 = frozenset([2])
    FOLLOW_exec_expr_in_exec_list385 = frozenset([3, 6, 41, 51, 52, 53, 54])
    FOLLOW_PRINTF_in_printf_stmt408 = frozenset([2])
    FOLLOW_expr_in_printf_stmt410 = frozenset([3, 28])
    FOLLOW_expr_list_in_printf_stmt412 = fr
Download .txt
gitextract_mk6jffsy/

├── .gitignore
├── ChangeLog
├── Dockerfile
├── LICENSE
├── Makefile
├── README.md
├── api/
│   ├── README.md
│   ├── cpp/
│   │   └── README.md
│   ├── cpy/
│   │   ├── SSDB.cpy
│   │   └── demo.cpy
│   ├── php/
│   │   ├── SSDB.php
│   │   ├── demo.php
│   │   └── perf.php
│   └── python/
│       ├── SSDB.py
│       └── demo.py
├── build.sh
├── deps/
│   ├── cpy/
│   │   ├── Eval.g
│   │   ├── Eval.py
│   │   ├── Expr.g
│   │   ├── ExprLexer.py
│   │   ├── ExprParser.py
│   │   ├── Makefile
│   │   ├── Readme.txt
│   │   ├── antlr3/
│   │   │   ├── __init__.py
│   │   │   ├── compat.py
│   │   │   ├── constants.py
│   │   │   ├── dfa.py
│   │   │   ├── dottreegen.py
│   │   │   ├── exceptions.py
│   │   │   ├── extras.py
│   │   │   ├── main.py
│   │   │   ├── recognizers.py
│   │   │   ├── streams.py
│   │   │   ├── tokens.py
│   │   │   ├── tree.py
│   │   │   └── treewizard.py
│   │   ├── cpy
│   │   ├── cpy.bat
│   │   ├── cpy.py
│   │   ├── engine.py
│   │   └── samples/
│   │       ├── class.cpy
│   │       ├── extends.cpy
│   │       ├── foreach.cpy
│   │       ├── function.cpy
│   │       ├── hello.cpy
│   │       ├── list.cpy
│   │       ├── object.cpy
│   │       ├── simple_client.cpy
│   │       ├── simple_server.cpy
│   │       ├── stdin.cpy
│   │       └── test.cpy
│   ├── jemalloc-4.1.0/
│   │   ├── .autom4te.cfg
│   │   ├── .gitattributes
│   │   ├── .gitignore
│   │   ├── COPYING
│   │   ├── ChangeLog
│   │   ├── INSTALL
│   │   ├── Makefile.in
│   │   ├── README
│   │   ├── autogen.sh
│   │   ├── bin/
│   │   │   ├── jemalloc-config.in
│   │   │   ├── jemalloc.sh.in
│   │   │   └── jeprof.in
│   │   ├── build-aux/
│   │   │   ├── config.guess
│   │   │   ├── config.sub
│   │   │   └── install-sh
│   │   ├── config.stamp.in
│   │   ├── configure.ac
│   │   ├── coverage.sh
│   │   ├── doc/
│   │   │   ├── html.xsl.in
│   │   │   ├── jemalloc.xml.in
│   │   │   ├── manpages.xsl.in
│   │   │   └── stylesheet.xsl
│   │   ├── include/
│   │   │   ├── jemalloc/
│   │   │   │   ├── internal/
│   │   │   │   │   ├── arena.h
│   │   │   │   │   ├── assert.h
│   │   │   │   │   ├── atomic.h
│   │   │   │   │   ├── base.h
│   │   │   │   │   ├── bitmap.h
│   │   │   │   │   ├── chunk.h
│   │   │   │   │   ├── chunk_dss.h
│   │   │   │   │   ├── chunk_mmap.h
│   │   │   │   │   ├── ckh.h
│   │   │   │   │   ├── ctl.h
│   │   │   │   │   ├── extent.h
│   │   │   │   │   ├── hash.h
│   │   │   │   │   ├── huge.h
│   │   │   │   │   ├── jemalloc_internal.h.in
│   │   │   │   │   ├── jemalloc_internal_decls.h
│   │   │   │   │   ├── jemalloc_internal_defs.h.in
│   │   │   │   │   ├── jemalloc_internal_macros.h
│   │   │   │   │   ├── mb.h
│   │   │   │   │   ├── mutex.h
│   │   │   │   │   ├── nstime.h
│   │   │   │   │   ├── pages.h
│   │   │   │   │   ├── private_namespace.sh
│   │   │   │   │   ├── private_symbols.txt
│   │   │   │   │   ├── private_unnamespace.sh
│   │   │   │   │   ├── prng.h
│   │   │   │   │   ├── prof.h
│   │   │   │   │   ├── public_namespace.sh
│   │   │   │   │   ├── public_unnamespace.sh
│   │   │   │   │   ├── ql.h
│   │   │   │   │   ├── qr.h
│   │   │   │   │   ├── quarantine.h
│   │   │   │   │   ├── rb.h
│   │   │   │   │   ├── rtree.h
│   │   │   │   │   ├── size_classes.sh
│   │   │   │   │   ├── smoothstep.h
│   │   │   │   │   ├── smoothstep.sh
│   │   │   │   │   ├── stats.h
│   │   │   │   │   ├── tcache.h
│   │   │   │   │   ├── ticker.h
│   │   │   │   │   ├── tsd.h
│   │   │   │   │   ├── util.h
│   │   │   │   │   └── valgrind.h
│   │   │   │   ├── jemalloc.sh
│   │   │   │   ├── jemalloc_defs.h.in
│   │   │   │   ├── jemalloc_macros.h.in
│   │   │   │   ├── jemalloc_mangle.sh
│   │   │   │   ├── jemalloc_protos.h.in
│   │   │   │   ├── jemalloc_rename.sh
│   │   │   │   └── jemalloc_typedefs.h.in
│   │   │   └── msvc_compat/
│   │   │       ├── C99/
│   │   │       │   ├── stdbool.h
│   │   │       │   └── stdint.h
│   │   │       ├── strings.h
│   │   │       └── windows_extra.h
│   │   ├── jemalloc.pc.in
│   │   ├── msvc/
│   │   │   ├── ReadMe.txt
│   │   │   ├── jemalloc_vc2015.sln
│   │   │   └── projects/
│   │   │       └── vc2015/
│   │   │           ├── jemalloc/
│   │   │           │   ├── jemalloc.vcxproj
│   │   │           │   └── jemalloc.vcxproj.filters
│   │   │           └── test_threads/
│   │   │               ├── test_threads.cpp
│   │   │               ├── test_threads.h
│   │   │               ├── test_threads.vcxproj
│   │   │               ├── test_threads.vcxproj.filters
│   │   │               └── test_threads_main.cpp
│   │   ├── src/
│   │   │   ├── arena.c
│   │   │   ├── atomic.c
│   │   │   ├── base.c
│   │   │   ├── bitmap.c
│   │   │   ├── chunk.c
│   │   │   ├── chunk_dss.c
│   │   │   ├── chunk_mmap.c
│   │   │   ├── ckh.c
│   │   │   ├── ctl.c
│   │   │   ├── extent.c
│   │   │   ├── hash.c
│   │   │   ├── huge.c
│   │   │   ├── jemalloc.c
│   │   │   ├── mb.c
│   │   │   ├── mutex.c
│   │   │   ├── nstime.c
│   │   │   ├── pages.c
│   │   │   ├── prng.c
│   │   │   ├── prof.c
│   │   │   ├── quarantine.c
│   │   │   ├── rtree.c
│   │   │   ├── stats.c
│   │   │   ├── tcache.c
│   │   │   ├── ticker.c
│   │   │   ├── tsd.c
│   │   │   ├── util.c
│   │   │   ├── valgrind.c
│   │   │   └── zone.c
│   │   └── test/
│   │       ├── include/
│   │       │   └── test/
│   │       │       ├── SFMT-alti.h
│   │       │       ├── SFMT-params.h
│   │       │       ├── SFMT-params11213.h
│   │       │       ├── SFMT-params1279.h
│   │       │       ├── SFMT-params132049.h
│   │       │       ├── SFMT-params19937.h
│   │       │       ├── SFMT-params216091.h
│   │       │       ├── SFMT-params2281.h
│   │       │       ├── SFMT-params4253.h
│   │       │       ├── SFMT-params44497.h
│   │       │       ├── SFMT-params607.h
│   │       │       ├── SFMT-params86243.h
│   │       │       ├── SFMT-sse2.h
│   │       │       ├── SFMT.h
│   │       │       ├── btalloc.h
│   │       │       ├── jemalloc_test.h.in
│   │       │       ├── jemalloc_test_defs.h.in
│   │       │       ├── math.h
│   │       │       ├── mq.h
│   │       │       ├── mtx.h
│   │       │       ├── test.h
│   │       │       ├── thd.h
│   │       │       └── timer.h
│   │       ├── integration/
│   │       │   ├── MALLOCX_ARENA.c
│   │       │   ├── aligned_alloc.c
│   │       │   ├── allocated.c
│   │       │   ├── chunk.c
│   │       │   ├── mallocx.c
│   │       │   ├── overflow.c
│   │       │   ├── posix_memalign.c
│   │       │   ├── rallocx.c
│   │       │   ├── sdallocx.c
│   │       │   ├── thread_arena.c
│   │       │   ├── thread_tcache_enabled.c
│   │       │   └── xallocx.c
│   │       ├── src/
│   │       │   ├── SFMT.c
│   │       │   ├── btalloc.c
│   │       │   ├── btalloc_0.c
│   │       │   ├── btalloc_1.c
│   │       │   ├── math.c
│   │       │   ├── mq.c
│   │       │   ├── mtx.c
│   │       │   ├── test.c
│   │       │   ├── thd.c
│   │       │   └── timer.c
│   │       ├── stress/
│   │       │   └── microbench.c
│   │       ├── test.sh.in
│   │       └── unit/
│   │           ├── SFMT.c
│   │           ├── atomic.c
│   │           ├── bitmap.c
│   │           ├── ckh.c
│   │           ├── decay.c
│   │           ├── hash.c
│   │           ├── junk.c
│   │           ├── junk_alloc.c
│   │           ├── junk_free.c
│   │           ├── lg_chunk.c
│   │           ├── mallctl.c
│   │           ├── math.c
│   │           ├── mq.c
│   │           ├── mtx.c
│   │           ├── nstime.c
│   │           ├── prng.c
│   │           ├── prof_accum.c
│   │           ├── prof_active.c
│   │           ├── prof_gdump.c
│   │           ├── prof_idump.c
│   │           ├── prof_reset.c
│   │           ├── prof_thread_name.c
│   │           ├── ql.c
│   │           ├── qr.c
│   │           ├── quarantine.c
│   │           ├── rb.c
│   │           ├── rtree.c
│   │           ├── run_quantize.c
│   │           ├── size_classes.c
│   │           ├── smoothstep.c
│   │           ├── stats.c
│   │           ├── ticker.c
│   │           ├── tsd.c
│   │           ├── util.c
│   │           └── zero.c
│   ├── leveldb-1.20/
│   │   ├── .gitignore
│   │   ├── .travis.yml
│   │   ├── AUTHORS
│   │   ├── CONTRIBUTING.md
│   │   ├── LICENSE
│   │   ├── Makefile
│   │   ├── Makefile.bk
│   │   ├── NEWS
│   │   ├── README.md
│   │   ├── TODO
│   │   ├── build_detect_platform
│   │   ├── build_detect_platform.bk
│   │   ├── db/
│   │   │   ├── autocompact_test.cc
│   │   │   ├── builder.cc
│   │   │   ├── builder.h
│   │   │   ├── c.cc
│   │   │   ├── c_test.c
│   │   │   ├── corruption_test.cc
│   │   │   ├── db_bench.cc
│   │   │   ├── db_impl.cc
│   │   │   ├── db_impl.cc.bk
│   │   │   ├── db_impl.h
│   │   │   ├── db_iter.cc
│   │   │   ├── db_iter.h
│   │   │   ├── db_test.cc
│   │   │   ├── dbformat.cc
│   │   │   ├── dbformat.h
│   │   │   ├── dbformat.h.bk
│   │   │   ├── dbformat_test.cc
│   │   │   ├── dumpfile.cc
│   │   │   ├── fault_injection_test.cc
│   │   │   ├── filename.cc
│   │   │   ├── filename.h
│   │   │   ├── filename_test.cc
│   │   │   ├── leveldbutil.cc
│   │   │   ├── log_format.h
│   │   │   ├── log_reader.cc
│   │   │   ├── log_reader.h
│   │   │   ├── log_test.cc
│   │   │   ├── log_writer.cc
│   │   │   ├── log_writer.h
│   │   │   ├── memtable.cc
│   │   │   ├── memtable.h
│   │   │   ├── recovery_test.cc
│   │   │   ├── repair.cc
│   │   │   ├── skiplist.h
│   │   │   ├── skiplist_test.cc
│   │   │   ├── snapshot.h
│   │   │   ├── table_cache.cc
│   │   │   ├── table_cache.h
│   │   │   ├── version_edit.cc
│   │   │   ├── version_edit.h
│   │   │   ├── version_edit_test.cc
│   │   │   ├── version_set.cc
│   │   │   ├── version_set.h
│   │   │   ├── version_set_test.cc
│   │   │   ├── write_batch.cc
│   │   │   ├── write_batch_internal.h
│   │   │   └── write_batch_test.cc
│   │   ├── doc/
│   │   │   ├── bench/
│   │   │   │   ├── db_bench_sqlite3.cc
│   │   │   │   └── db_bench_tree_db.cc
│   │   │   ├── benchmark.html
│   │   │   ├── impl.md
│   │   │   ├── index.md
│   │   │   ├── log_format.md
│   │   │   └── table_format.md
│   │   ├── helpers/
│   │   │   └── memenv/
│   │   │       ├── memenv.cc
│   │   │       ├── memenv.h
│   │   │       └── memenv_test.cc
│   │   ├── include/
│   │   │   └── leveldb/
│   │   │       ├── c.h
│   │   │       ├── cache.h
│   │   │       ├── comparator.h
│   │   │       ├── db.h
│   │   │       ├── dumpfile.h
│   │   │       ├── env.h
│   │   │       ├── filter_policy.h
│   │   │       ├── iterator.h
│   │   │       ├── iterator.h.bk
│   │   │       ├── options.h
│   │   │       ├── slice.h
│   │   │       ├── status.h
│   │   │       ├── table.h
│   │   │       ├── table_builder.h
│   │   │       └── write_batch.h
│   │   ├── issues/
│   │   │   ├── issue178_test.cc
│   │   │   └── issue200_test.cc
│   │   ├── port/
│   │   │   ├── README
│   │   │   ├── atomic_pointer.h
│   │   │   ├── port.h
│   │   │   ├── port_example.h
│   │   │   ├── port_posix.cc
│   │   │   ├── port_posix.h
│   │   │   ├── port_posix_sse.cc
│   │   │   ├── thread_annotations.h
│   │   │   └── win/
│   │   │       └── stdint.h
│   │   ├── table/
│   │   │   ├── block.cc
│   │   │   ├── block.h
│   │   │   ├── block_builder.cc
│   │   │   ├── block_builder.h
│   │   │   ├── filter_block.cc
│   │   │   ├── filter_block.h
│   │   │   ├── filter_block_test.cc
│   │   │   ├── format.cc
│   │   │   ├── format.h
│   │   │   ├── iterator.cc
│   │   │   ├── iterator_wrapper.h
│   │   │   ├── merger.cc
│   │   │   ├── merger.h
│   │   │   ├── table.cc
│   │   │   ├── table_builder.cc
│   │   │   ├── table_test.cc
│   │   │   ├── two_level_iterator.cc
│   │   │   └── two_level_iterator.h
│   │   └── util/
│   │       ├── arena.cc
│   │       ├── arena.h
│   │       ├── arena_test.cc
│   │       ├── bloom.cc
│   │       ├── bloom_test.cc
│   │       ├── cache.cc
│   │       ├── cache_test.cc
│   │       ├── coding.cc
│   │       ├── coding.h
│   │       ├── coding_test.cc
│   │       ├── comparator.cc
│   │       ├── crc32c.cc
│   │       ├── crc32c.h
│   │       ├── crc32c_test.cc
│   │       ├── env.cc
│   │       ├── env_posix.cc
│   │       ├── env_posix_test.cc
│   │       ├── env_posix_test_helper.h
│   │       ├── env_test.cc
│   │       ├── filter_policy.cc
│   │       ├── hash.cc
│   │       ├── hash.h
│   │       ├── hash_test.cc
│   │       ├── histogram.cc
│   │       ├── histogram.h
│   │       ├── logging.cc
│   │       ├── logging.h
│   │       ├── mutexlock.h
│   │       ├── options.cc
│   │       ├── posix_logger.h
│   │       ├── random.h
│   │       ├── status.cc
│   │       ├── testharness.cc
│   │       ├── testharness.h
│   │       ├── testutil.cc
│   │       └── testutil.h
│   └── snappy-1.1.0/
│       ├── .gitignore
│       ├── AUTHORS
│       ├── COPYING
│       ├── ChangeLog
│       ├── INSTALL
│       ├── Makefile-ios
│       ├── Makefile.am
│       ├── Makefile.in
│       ├── NEWS
│       ├── README
│       ├── aclocal.m4
│       ├── autogen.sh
│       ├── config.guess
│       ├── config.h.in
│       ├── config.sub
│       ├── configure
│       ├── configure.ac
│       ├── depcomp
│       ├── format_description.txt
│       ├── framing_format.txt
│       ├── install-sh
│       ├── ltmain.sh
│       ├── m4/
│       │   └── gtest.m4
│       ├── missing
│       ├── snappy-c.cc
│       ├── snappy-c.h
│       ├── snappy-internal.h
│       ├── snappy-sinksource.cc
│       ├── snappy-sinksource.h
│       ├── snappy-stubs-internal.cc
│       ├── snappy-stubs-internal.h
│       ├── snappy-stubs-public.h
│       ├── snappy-stubs-public.h.in
│       ├── snappy-test.cc
│       ├── snappy-test.h
│       ├── snappy.cc
│       ├── snappy.h
│       └── snappy_unittest.cc
├── docs/
│   └── README.md
├── src/
│   ├── Makefile
│   ├── backend_dump.cpp
│   ├── backend_dump.h
│   ├── backend_sync.cpp
│   ├── backend_sync.h
│   ├── client/
│   │   ├── Doxyfile
│   │   ├── Makefile
│   │   ├── README.md
│   │   ├── SSDB_client.h
│   │   ├── SSDB_impl.cpp
│   │   ├── SSDB_impl.h
│   │   ├── demo.cpp
│   │   └── hello-ssdb.cpp
│   ├── include.h
│   ├── net/
│   │   ├── .gitignore
│   │   ├── Makefile
│   │   ├── fde.cpp
│   │   ├── fde.h
│   │   ├── fde_epoll.cpp
│   │   ├── fde_select.cpp
│   │   ├── link.cpp
│   │   ├── link.h
│   │   ├── link_addr.cpp
│   │   ├── link_addr.h
│   │   ├── link_redis.cpp
│   │   ├── link_redis.h
│   │   ├── proc.cpp
│   │   ├── proc.h
│   │   ├── resp.cpp
│   │   ├── resp.h
│   │   ├── server.cpp
│   │   ├── server.h
│   │   ├── test.conf
│   │   ├── test.cpp
│   │   ├── test2.cpp
│   │   ├── worker.cpp
│   │   └── worker.h
│   ├── proc_hash.cpp
│   ├── proc_hash.h
│   ├── proc_kv.cpp
│   ├── proc_kv.h
│   ├── proc_queue.cpp
│   ├── proc_queue.h
│   ├── proc_sys.cpp
│   ├── proc_sys.h
│   ├── proc_zset.cpp
│   ├── proc_zset.h
│   ├── serv.cpp
│   ├── serv.h
│   ├── slave.cpp
│   ├── slave.h
│   ├── ssdb/
│   │   ├── Makefile
│   │   ├── Makefile-ios
│   │   ├── binlog.cpp
│   │   ├── binlog.h
│   │   ├── const.h
│   │   ├── iterator.cpp
│   │   ├── iterator.h
│   │   ├── options.cpp
│   │   ├── options.h
│   │   ├── ssdb.h
│   │   ├── ssdb_impl.cpp
│   │   ├── ssdb_impl.h
│   │   ├── t_hash.cpp
│   │   ├── t_hash.h
│   │   ├── t_kv.cpp
│   │   ├── t_kv.h
│   │   ├── t_queue.cpp
│   │   ├── t_queue.h
│   │   ├── t_zset.cpp
│   │   ├── t_zset.h
│   │   ├── test.cpp
│   │   ├── ttl.cpp
│   │   └── ttl.h
│   ├── util/
│   │   ├── Makefile
│   │   ├── Makefile-ios
│   │   ├── app.cpp
│   │   ├── app.h
│   │   ├── bytes.cpp
│   │   ├── bytes.h
│   │   ├── config.cpp
│   │   ├── config.h
│   │   ├── daemon.h
│   │   ├── file.h
│   │   ├── ip_filter.h
│   │   ├── line.h
│   │   ├── list.h
│   │   ├── log.cpp
│   │   ├── log.h
│   │   ├── sorted_set.cpp
│   │   ├── sorted_set.h
│   │   ├── string_util.h
│   │   ├── test_sorted_set.cpp
│   │   ├── test_thread.cpp
│   │   └── thread.h
│   └── version.h
├── ssdb.conf
├── ssdb_slave.conf
├── tools/
│   ├── Makefile
│   ├── leveldb-import.cpp
│   ├── redis-import.php
│   ├── ssdb-bench.cpp
│   ├── ssdb-cli
│   ├── ssdb-cli.bat
│   ├── ssdb-cli.cpy
│   ├── ssdb-dump.cpp
│   ├── ssdb-iterate.php
│   ├── ssdb-migrate.cpp
│   ├── ssdb-repair.cpp
│   ├── ssdb.sh
│   ├── ssdb_cli/
│   │   ├── cluster.cpy
│   │   ├── exporter.cpy
│   │   ├── flushdb.cpy
│   │   ├── importer.cpy
│   │   ├── nagios.cpy
│   │   └── util.cpy
│   ├── test_slow_client.php
│   └── unittest.php
└── version
Download .txt
Showing preview only (299K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (4171 symbols across 344 files)

FILE: api/php/SSDB.php
  class SSDBException (line 11) | class SSDBException extends Exception
  class SSDBTimeoutException (line 15) | class SSDBTimeoutException extends SSDBException
  class SimpleSSDB (line 23) | class SimpleSSDB extends SSDB
    method __construct (line 25) | function __construct($host, $port, $timeout_ms=2000){
  class SSDB_Response (line 31) | class SSDB_Response
    method __construct (line 38) | function __construct($code='ok', $data_or_message=null){
    method __toString (line 47) | function __toString(){
    method ok (line 56) | function ok(){
    method not_found (line 60) | function not_found(){
  class SSDB (line 66) | class SSDB
    method __construct (line 75) | function __construct($host, $port, $timeout_ms=2000){
    method set_timeout (line 89) | function set_timeout($timeout_ms){
    method easy (line 101) | function easy(){
    method close (line 105) | function close(){
    method closed (line 113) | function closed(){
    method batch (line 120) | function batch(){
    method multi (line 126) | function multi(){
    method exec (line 130) | function exec(){
    method request (line 147) | function request(){
    method auth (line 155) | function auth($password){
    method __call (line 160) | function __call($cmd, $params=array()){
    method check_easy_resp (line 199) | private function check_easy_resp($cmd, $resp){
    method multi_set (line 215) | function multi_set($kvs=array()){
    method multi_hset (line 224) | function multi_hset($name, $kvs=array()){
    method multi_zset (line 233) | function multi_zset($name, $kvs=array()){
    method incr (line 242) | function incr($key, $val=1){
    method decr (line 247) | function decr($key, $val=1){
    method zincr (line 252) | function zincr($name, $key, $score=1){
    method zdecr (line 257) | function zdecr($name, $key, $score=1){
    method zadd (line 262) | function zadd($key, $score, $value){
    method zRevRank (line 267) | function zRevRank($name, $key){
    method zRevRange (line 272) | function zRevRange($name, $offset, $limit){
    method hincr (line 277) | function hincr($name, $key, $val=1){
    method hdecr (line 282) | function hdecr($name, $key, $val=1){
    method send_req (line 287) | private function send_req($cmd, $params){
    method recv_resp (line 299) | private function recv_resp($cmd, $params){
    method send (line 504) | function send($data){
    method recv (line 534) | function recv(){
    method parse (line 569) | private function parse(){

FILE: api/php/demo.php
  function speed (line 95) | function speed($msg=null, $count=0){

FILE: api/php/perf.php
  function start (line 64) | function start(){
  function output (line 69) | function output($op){

FILE: api/python/SSDB.py
  class SSDB_Response (line 8) | class SSDB_Response(object):
    method __init__ (line 12) | def __init__(this, code='', data_or_message=None):
    method set (line 20) | def set(this, code, data_or_message=None):
    method __repr__ (line 40) | def __repr__(this):
    method ok (line 44) | def ok(this):
    method not_found (line 48) | def not_found(this):
    method str_resp (line 52) | def str_resp(this, resp):
    method str_resp (line 70) | def str_resp(this, resp):
    method int_resp (line 88) | def int_resp(this, resp):
    method float_resp (line 112) | def float_resp(this, resp):
    method list_resp (line 136) | def list_resp(this, resp):
    method int_map_resp (line 142) | def int_map_resp(this, resp):
    method str_map_resp (line 177) | def str_map_resp(this, resp):
  class SSDB (line 206) | class SSDB(object):
    method __init__ (line 210) | def __init__(this, host, port):
    method close (line 223) | def close(this):
    method closed (line 231) | def closed(this):
    method request (line 235) | def request(this, cmd, params=None):
    method send (line 333) | def send(this, data):
    method net_read (line 369) | def net_read(this):
    method recv (line 385) | def recv(this):
    method parse (line 402) | def parse(this):

FILE: deps/cpy/Eval.py
  class Eval (line 179) | class Eval(TreeParser):
    method __init__ (line 184) | def __init__(self, input, state=None, *args, **kwargs):
    method prog (line 215) | def prog(self, cpy):
    method stmt (line 269) | def stmt(self, ):
    method block (line 483) | def block(self, ):
    method import_stmt (line 545) | def import_stmt(self, ):
    method exec_stmt (line 624) | def exec_stmt(self, ):
    method exec_expr (line 666) | def exec_expr(self, ):
    method exec_list (line 856) | def exec_list(self, ):
    method printf_stmt (line 931) | def printf_stmt(self, ):
    method print_stmt (line 992) | def print_stmt(self, ):
    method break_stmt (line 1034) | def break_stmt(self, ):
    method continue_stmt (line 1064) | def continue_stmt(self, ):
    method return_stmt (line 1094) | def return_stmt(self, ):
    method if_stmt (line 1150) | def if_stmt(self, ):
    method if_clause (line 1226) | def if_clause(self, ):
    method else_if_clause (line 1273) | def else_if_clause(self, ):
    method else_clause (line 1312) | def else_clause(self, ):
    method while_stmt (line 1351) | def while_stmt(self, ):
    method do_while_stmt (line 1398) | def do_while_stmt(self, ):
    method switch_stmt (line 1450) | def switch_stmt(self, ):
    method case_block (line 1502) | def case_block(self, ):
    method case_clause (line 1575) | def case_clause(self, ):
    method case_test (line 1678) | def case_test(self, ):
    method default_clause (line 1720) | def default_clause(self, ):
    method for_stmt (line 1781) | def for_stmt(self, ):
    method foreach_stmt (line 1886) | def foreach_stmt(self, ):
    method each_val (line 2007) | def each_val(self, ):
    method throw_stmt (line 2078) | def throw_stmt(self, ):
    method try_stmt (line 2120) | def try_stmt(self, ):
    method catch_clause (line 2201) | def catch_clause(self, ):
    method finally_clause (line 2263) | def finally_clause(self, ):
    method func_decl (line 2298) | def func_decl(self, ):
    method params (line 2348) | def params(self, ):
    method param_decl (line 2418) | def param_decl(self, ):
    method class_decl (line 2479) | def class_decl(self, ):
    method class_element (line 2626) | def class_element(self, ):
    method var_def (line 2686) | def var_def(self, ):
    method constructor (line 2813) | def constructor(self, ):
    method module (line 2860) | def module(self, ):
    method member_expr (line 2931) | def member_expr(self, ):
    method primary (line 3006) | def primary(self, ):
    method call_expr (line 3094) | def call_expr(self, ):
    method index_expr (line 3157) | def index_expr(self, ):
    method expr_list (line 3260) | def expr_list(self, ):
    method expr (line 3337) | def expr(self, ):
    method logic_or_expr (line 3546) | def logic_or_expr(self, ):
    method logic_and_expr (line 3598) | def logic_and_expr(self, ):
    method bitwise_or_expr (line 3650) | def bitwise_or_expr(self, ):
    method bitwise_xor_expr (line 3702) | def bitwise_xor_expr(self, ):
    method bitwise_and_expr (line 3754) | def bitwise_and_expr(self, ):
    method relation_expr (line 3806) | def relation_expr(self, ):
    method add_expr (line 3870) | def add_expr(self, ):
    method mul_expr (line 3934) | def mul_expr(self, ):
    method not_expr (line 3998) | def not_expr(self, ):
    method negative_expr (line 4043) | def negative_expr(self, ):
    method sprintf (line 4088) | def sprintf(self, ):
    method new_clause (line 4156) | def new_clause(self, ):
    method array_decl (line 4208) | def array_decl(self, ):
    method object_decl (line 4271) | def object_decl(self, ):
    method property (line 4341) | def property(self, ):
    method atom (line 4396) | def atom(self, ):
    method literal (line 4525) | def literal(self, ):
    class DFA4 (line 4663) | class DFA4(DFA):
  function main (line 4888) | def main(argv, stdin=sys.stdin, stdout=sys.stdout, stderr=sys.stderr):

FILE: deps/cpy/ExprLexer.py
  class ExprLexer (line 149) | class ExprLexer(Lexer):
    method __init__ (line 154) | def __init__(self, input=None, state=None):
    method mT__68 (line 178) | def mT__68(self, ):
    method mT__69 (line 200) | def mT__69(self, ):
    method mT__70 (line 223) | def mT__70(self, ):
    method mT__71 (line 245) | def mT__71(self, ):
    method mT__72 (line 268) | def mT__72(self, ):
    method mT__73 (line 291) | def mT__73(self, ):
    method mT__74 (line 313) | def mT__74(self, ):
    method mT__75 (line 336) | def mT__75(self, ):
    method mT__76 (line 358) | def mT__76(self, ):
    method mT__77 (line 380) | def mT__77(self, ):
    method mT__78 (line 402) | def mT__78(self, ):
    method mT__79 (line 425) | def mT__79(self, ):
    method mT__80 (line 447) | def mT__80(self, ):
    method mT__81 (line 470) | def mT__81(self, ):
    method mT__82 (line 493) | def mT__82(self, ):
    method mT__83 (line 515) | def mT__83(self, ):
    method mT__84 (line 537) | def mT__84(self, ):
    method mT__85 (line 560) | def mT__85(self, ):
    method mT__86 (line 583) | def mT__86(self, ):
    method mT__87 (line 605) | def mT__87(self, ):
    method mT__88 (line 628) | def mT__88(self, ):
    method mT__89 (line 651) | def mT__89(self, ):
    method mT__90 (line 673) | def mT__90(self, ):
    method mT__91 (line 696) | def mT__91(self, ):
    method mT__92 (line 718) | def mT__92(self, ):
    method mT__93 (line 740) | def mT__93(self, ):
    method mT__94 (line 762) | def mT__94(self, ):
    method mT__95 (line 785) | def mT__95(self, ):
    method mT__96 (line 807) | def mT__96(self, ):
    method mT__97 (line 830) | def mT__97(self, ):
    method mT__98 (line 853) | def mT__98(self, ):
    method mT__99 (line 875) | def mT__99(self, ):
    method mT__100 (line 898) | def mT__100(self, ):
    method mT__101 (line 920) | def mT__101(self, ):
    method mT__102 (line 942) | def mT__102(self, ):
    method mT__103 (line 964) | def mT__103(self, ):
    method mT__104 (line 987) | def mT__104(self, ):
    method mT__105 (line 1010) | def mT__105(self, ):
    method mT__106 (line 1033) | def mT__106(self, ):
    method mT__107 (line 1056) | def mT__107(self, ):
    method mT__108 (line 1079) | def mT__108(self, ):
    method mT__109 (line 1102) | def mT__109(self, ):
    method mT__110 (line 1125) | def mT__110(self, ):
    method mT__111 (line 1148) | def mT__111(self, ):
    method mT__112 (line 1171) | def mT__112(self, ):
    method mT__113 (line 1194) | def mT__113(self, ):
    method mT__114 (line 1217) | def mT__114(self, ):
    method mT__115 (line 1240) | def mT__115(self, ):
    method mT__116 (line 1263) | def mT__116(self, ):
    method mT__117 (line 1286) | def mT__117(self, ):
    method mT__118 (line 1309) | def mT__118(self, ):
    method mT__119 (line 1332) | def mT__119(self, ):
    method mT__120 (line 1355) | def mT__120(self, ):
    method mT__121 (line 1378) | def mT__121(self, ):
    method mT__122 (line 1401) | def mT__122(self, ):
    method mT__123 (line 1424) | def mT__123(self, ):
    method mT__124 (line 1447) | def mT__124(self, ):
    method mT__125 (line 1470) | def mT__125(self, ):
    method mT__126 (line 1493) | def mT__126(self, ):
    method mT__127 (line 1516) | def mT__127(self, ):
    method mT__128 (line 1539) | def mT__128(self, ):
    method mT__129 (line 1562) | def mT__129(self, ):
    method mT__130 (line 1585) | def mT__130(self, ):
    method mT__131 (line 1608) | def mT__131(self, ):
    method mT__132 (line 1631) | def mT__132(self, ):
    method mT__133 (line 1653) | def mT__133(self, ):
    method mT__134 (line 1675) | def mT__134(self, ):
    method mT__135 (line 1698) | def mT__135(self, ):
    method mT__136 (line 1721) | def mT__136(self, ):
    method mNULL (line 1743) | def mNULL(self, ):
    method mBOOL (line 1766) | def mBOOL(self, ):
    method mID (line 1809) | def mID(self, ):
    method mINT (line 1864) | def mINT(self, ):
    method mFLOAT (line 1917) | def mFLOAT(self, ):
    method mALPHA (line 1968) | def mALPHA(self, ):
    method mDIGIT (line 1993) | def mDIGIT(self, ):
    method mSTRING (line 2018) | def mSTRING(self, ):
    method mDOUBLE_QUOTE_CHARS (line 2103) | def mDOUBLE_QUOTE_CHARS(self, ):
    method mSINGLE_QUOTE_CHARS (line 2164) | def mSINGLE_QUOTE_CHARS(self, ):
    method mNEWLINE (line 2225) | def mNEWLINE(self, ):
    method mWS (line 2257) | def mWS(self, ):
    method mCOMMENT (line 2315) | def mCOMMENT(self, ):
    method mLINECOMMENT (line 2374) | def mLINECOMMENT(self, ):
    method mTokens (line 2456) | def mTokens(self):
    class DFA15 (line 3320) | class DFA15(DFA):
  function main (line 3328) | def main(argv, stdin=sys.stdin, stdout=sys.stdout, stderr=sys.stderr):

FILE: deps/cpy/ExprParser.py
  class ExprParser (line 177) | class ExprParser(Parser):
    method __init__ (line 182) | def __init__(self, input, state=None, *args, **kwargs):
    method getTreeAdaptor (line 209) | def getTreeAdaptor(self):
    method setTreeAdaptor (line 212) | def setTreeAdaptor(self, adaptor):
    class prog_return (line 218) | class prog_return(ParserRuleReturnScope):
      method __init__ (line 219) | def __init__(self):
    method prog (line 230) | def prog(self, ):
    class stmt_return (line 366) | class stmt_return(ParserRuleReturnScope):
      method __init__ (line 367) | def __init__(self):
    method stmt (line 378) | def stmt(self, ):
    class block_return (line 768) | class block_return(ParserRuleReturnScope):
      method __init__ (line 769) | def __init__(self):
    method block (line 780) | def block(self, ):
    class import_stmt_return (line 898) | class import_stmt_return(ParserRuleReturnScope):
      method __init__ (line 899) | def __init__(self):
    method import_stmt (line 910) | def import_stmt(self, ):
    class module_path_return (line 1048) | class module_path_return(ParserRuleReturnScope):
      method __init__ (line 1049) | def __init__(self):
    method module_path (line 1060) | def module_path(self, ):
    class printf_stmt_return (line 1136) | class printf_stmt_return(ParserRuleReturnScope):
      method __init__ (line 1137) | def __init__(self):
    method printf_stmt (line 1148) | def printf_stmt(self, ):
    class print_stmt_return (line 1297) | class print_stmt_return(ParserRuleReturnScope):
      method __init__ (line 1298) | def __init__(self):
    method print_stmt (line 1309) | def print_stmt(self, ):
    class break_stmt_return (line 1411) | class break_stmt_return(ParserRuleReturnScope):
      method __init__ (line 1412) | def __init__(self):
    method break_stmt (line 1423) | def break_stmt(self, ):
    class continue_stmt_return (line 1504) | class continue_stmt_return(ParserRuleReturnScope):
      method __init__ (line 1505) | def __init__(self):
    method continue_stmt (line 1516) | def continue_stmt(self, ):
    class return_stmt_return (line 1597) | class return_stmt_return(ParserRuleReturnScope):
      method __init__ (line 1598) | def __init__(self):
    method return_stmt (line 1609) | def return_stmt(self, ):
    class if_stmt_return (line 1722) | class if_stmt_return(ParserRuleReturnScope):
      method __init__ (line 1723) | def __init__(self):
    method if_stmt (line 1734) | def if_stmt(self, ):
    class if_clause_return (line 1835) | class if_clause_return(ParserRuleReturnScope):
      method __init__ (line 1836) | def __init__(self):
    method if_clause (line 1847) | def if_clause(self, ):
    class else_if_clause_return (line 1963) | class else_if_clause_return(ParserRuleReturnScope):
      method __init__ (line 1964) | def __init__(self):
    method else_if_clause (line 1975) | def else_if_clause(self, ):
    class else_clause_return (line 2063) | class else_clause_return(ParserRuleReturnScope):
      method __init__ (line 2064) | def __init__(self):
    method else_clause (line 2075) | def else_clause(self, ):
    class while_stmt_return (line 2163) | class while_stmt_return(ParserRuleReturnScope):
      method __init__ (line 2164) | def __init__(self):
    method while_stmt (line 2175) | def while_stmt(self, ):
    class do_while_stmt_return (line 2291) | class do_while_stmt_return(ParserRuleReturnScope):
      method __init__ (line 2292) | def __init__(self):
    method do_while_stmt (line 2303) | def do_while_stmt(self, ):
    class switch_stmt_return (line 2435) | class switch_stmt_return(ParserRuleReturnScope):
      method __init__ (line 2436) | def __init__(self):
    method switch_stmt (line 2447) | def switch_stmt(self, ):
    class case_block_return (line 2563) | class case_block_return(ParserRuleReturnScope):
      method __init__ (line 2564) | def __init__(self):
    method case_block (line 2575) | def case_block(self, ):
    class case_clause_return (line 2691) | class case_clause_return(ParserRuleReturnScope):
      method __init__ (line 2692) | def __init__(self):
    method case_clause (line 2703) | def case_clause(self, ):
    class case_test_return (line 2877) | class case_test_return(ParserRuleReturnScope):
      method __init__ (line 2878) | def __init__(self):
    method case_test (line 2889) | def case_test(self, ):
    class default_clause_return (line 2985) | class default_clause_return(ParserRuleReturnScope):
      method __init__ (line 2986) | def __init__(self):
    method default_clause (line 2997) | def default_clause(self, ):
    class for_stmt_return (line 3115) | class for_stmt_return(ParserRuleReturnScope):
      method __init__ (line 3116) | def __init__(self):
    method for_stmt (line 3127) | def for_stmt(self, ):
    class foreach_stmt_return (line 3325) | class foreach_stmt_return(ParserRuleReturnScope):
      method __init__ (line 3326) | def __init__(self):
    method foreach_stmt (line 3337) | def foreach_stmt(self, ):
    class each_return (line 3473) | class each_return(ParserRuleReturnScope):
      method __init__ (line 3474) | def __init__(self):
    method each (line 3485) | def each(self, ):
    class each_val_return (line 3662) | class each_val_return(ParserRuleReturnScope):
      method __init__ (line 3663) | def __init__(self):
    method each_val (line 3674) | def each_val(self, ):
    class throw_stmt_return (line 3795) | class throw_stmt_return(ParserRuleReturnScope):
      method __init__ (line 3796) | def __init__(self):
    method throw_stmt (line 3807) | def throw_stmt(self, ):
    class try_stmt_return (line 3903) | class try_stmt_return(ParserRuleReturnScope):
      method __init__ (line 3904) | def __init__(self):
    method try_stmt (line 3915) | def try_stmt(self, ):
    class catch_clause_return (line 4080) | class catch_clause_return(ParserRuleReturnScope):
      method __init__ (line 4081) | def __init__(self):
    method catch_clause (line 4092) | def catch_clause(self, ):
    class finally_clause_return (line 4237) | class finally_clause_return(ParserRuleReturnScope):
      method __init__ (line 4238) | def __init__(self):
    method finally_clause (line 4249) | def finally_clause(self, ):
    class func_decl_return (line 4337) | class func_decl_return(ParserRuleReturnScope):
      method __init__ (line 4338) | def __init__(self):
    method func_decl (line 4349) | def func_decl(self, ):
    class params_return (line 4461) | class params_return(ParserRuleReturnScope):
      method __init__ (line 4462) | def __init__(self):
    method params (line 4473) | def params(self, ):
    class param_decl_return (line 4620) | class param_decl_return(ParserRuleReturnScope):
      method __init__ (line 4621) | def __init__(self):
    method param_decl (line 4632) | def param_decl(self, ):
    class class_decl_return (line 4711) | class class_decl_return(ParserRuleReturnScope):
      method __init__ (line 4712) | def __init__(self):
    method class_decl (line 4723) | def class_decl(self, ):
    class class_element_return (line 4897) | class class_element_return(ParserRuleReturnScope):
      method __init__ (line 4898) | def __init__(self):
    method class_element (line 4909) | def class_element(self, ):
    class var_def_return (line 5022) | class var_def_return(ParserRuleReturnScope):
      method __init__ (line 5023) | def __init__(self):
    method var_def (line 5034) | def var_def(self, ):
    class constructor_return (line 5305) | class constructor_return(ParserRuleReturnScope):
      method __init__ (line 5306) | def __init__(self):
    method constructor (line 5317) | def constructor(self, ):
    class member_expr_return (line 5425) | class member_expr_return(ParserRuleReturnScope):
      method __init__ (line 5426) | def __init__(self):
    method member_expr (line 5437) | def member_expr(self, ):
    class primary_return (line 5559) | class primary_return(ParserRuleReturnScope):
      method __init__ (line 5560) | def __init__(self):
    method primary (line 5571) | def primary(self, ):
    class call_expr_return (line 5667) | class call_expr_return(ParserRuleReturnScope):
      method __init__ (line 5668) | def __init__(self):
    method call_expr (line 5679) | def call_expr(self, ):
    class index_expr_return (line 5792) | class index_expr_return(ParserRuleReturnScope):
      method __init__ (line 5793) | def __init__(self):
    method index_expr (line 5804) | def index_expr(self, ):
    class exec_list_return (line 6027) | class exec_list_return(ParserRuleReturnScope):
      method __init__ (line 6028) | def __init__(self):
    method exec_list (line 6039) | def exec_list(self, ):
    class member_list_return (line 6161) | class member_list_return(ParserRuleReturnScope):
      method __init__ (line 6162) | def __init__(self):
    method member_list (line 6173) | def member_list(self, ):
    class exec_expr_return (line 6257) | class exec_expr_return(ParserRuleReturnScope):
      method __init__ (line 6258) | def __init__(self):
    method exec_expr (line 6269) | def exec_expr(self, ):
    class assign_op_return (line 6648) | class assign_op_return(ParserRuleReturnScope):
      method __init__ (line 6649) | def __init__(self):
    method assign_op (line 6660) | def assign_op(self, ):
    class exec_stmt_return (line 6722) | class exec_stmt_return(ParserRuleReturnScope):
      method __init__ (line 6723) | def __init__(self):
    method exec_stmt (line 6734) | def exec_stmt(self, ):
    class expr_list_return (line 6822) | class expr_list_return(ParserRuleReturnScope):
      method __init__ (line 6823) | def __init__(self):
    method expr_list (line 6834) | def expr_list(self, ):
    class expr_return (line 6980) | class expr_return(ParserRuleReturnScope):
      method __init__ (line 6981) | def __init__(self):
    method expr (line 6992) | def expr(self, ):
    class logic_or_expr_return (line 7041) | class logic_or_expr_return(ParserRuleReturnScope):
      method __init__ (line 7042) | def __init__(self):
    method logic_or_expr (line 7053) | def logic_or_expr(self, ):
    class logic_and_expr_return (line 7137) | class logic_and_expr_return(ParserRuleReturnScope):
      method __init__ (line 7138) | def __init__(self):
    method logic_and_expr (line 7149) | def logic_and_expr(self, ):
    class bitwise_or_expr_return (line 7233) | class bitwise_or_expr_return(ParserRuleReturnScope):
      method __init__ (line 7234) | def __init__(self):
    method bitwise_or_expr (line 7245) | def bitwise_or_expr(self, ):
    class bitwise_xor_expr_return (line 7329) | class bitwise_xor_expr_return(ParserRuleReturnScope):
      method __init__ (line 7330) | def __init__(self):
    method bitwise_xor_expr (line 7341) | def bitwise_xor_expr(self, ):
    class bitwise_and_expr_return (line 7425) | class bitwise_and_expr_return(ParserRuleReturnScope):
      method __init__ (line 7426) | def __init__(self):
    method bitwise_and_expr (line 7437) | def bitwise_and_expr(self, ):
    class relation_expr_return (line 7521) | class relation_expr_return(ParserRuleReturnScope):
      method __init__ (line 7522) | def __init__(self):
    method relation_expr (line 7533) | def relation_expr(self, ):
    class add_expr_return (line 7627) | class add_expr_return(ParserRuleReturnScope):
      method __init__ (line 7628) | def __init__(self):
    method add_expr (line 7639) | def add_expr(self, ):
    class mul_expr_return (line 7738) | class mul_expr_return(ParserRuleReturnScope):
      method __init__ (line 7739) | def __init__(self):
    method mul_expr (line 7750) | def mul_expr(self, ):
    class not_expr_return (line 7849) | class not_expr_return(ParserRuleReturnScope):
      method __init__ (line 7850) | def __init__(self):
    method not_expr (line 7861) | def not_expr(self, ):
    class negative_expr_return (line 7967) | class negative_expr_return(ParserRuleReturnScope):
      method __init__ (line 7968) | def __init__(self):
    method negative_expr (line 7979) | def negative_expr(self, ):
    class atom_return (line 8085) | class atom_return(ParserRuleReturnScope):
      method __init__ (line 8086) | def __init__(self):
    method atom (line 8097) | def atom(self, ):
    class literal_return (line 8307) | class literal_return(ParserRuleReturnScope):
      method __init__ (line 8308) | def __init__(self):
    method literal (line 8319) | def literal(self, ):
    class new_clause_return (line 8381) | class new_clause_return(ParserRuleReturnScope):
      method __init__ (line 8382) | def __init__(self):
    method new_clause (line 8393) | def new_clause(self, ):
    class module_return (line 8493) | class module_return(ParserRuleReturnScope):
      method __init__ (line 8494) | def __init__(self):
    method module (line 8505) | def module(self, ):
    class array_decl_return (line 8626) | class array_decl_return(ParserRuleReturnScope):
      method __init__ (line 8627) | def __init__(self):
    method array_decl (line 8638) | def array_decl(self, ):
    class object_decl_return (line 8751) | class object_decl_return(ParserRuleReturnScope):
      method __init__ (line 8752) | def __init__(self):
    method object_decl (line 8763) | def object_decl(self, ):
    class property_return (line 8934) | class property_return(ParserRuleReturnScope):
      method __init__ (line 8935) | def __init__(self):
    method property (line 8946) | def property(self, ):
    class sprintf_return (line 9026) | class sprintf_return(ParserRuleReturnScope):
      method __init__ (line 9027) | def __init__(self):
    method sprintf (line 9038) | def sprintf(self, ):
    method synpred1_Expr_fragment (line 9179) | def synpred1_Expr_fragment(self, ):
    method synpred1_Expr (line 9205) | def synpred1_Expr(self):
    class DFA6 (line 9258) | class DFA6(DFA):
  function main (line 9535) | def main(argv, stdin=sys.stdin, stdout=sys.stdout, stderr=sys.stderr):

FILE: deps/cpy/antlr3/__init__.py
  function version_str_to_tuple (line 143) | def version_str_to_tuple(version_str):

FILE: deps/cpy/antlr3/compat.py
  function reversed (line 43) | def reversed(l):

FILE: deps/cpy/antlr3/dfa.py
  class DFA (line 37) | class DFA(object):
    method __init__ (line 46) | def __init__(
    method predict (line 64) | def predict(self, input):
    method noViableAlt (line 152) | def noViableAlt(self, s, input):
    method error (line 167) | def error(self, nvae):
    method specialStateTransition (line 172) | def specialStateTransition(self, s, input):
    method getDescription (line 176) | def getDescription(self):
    method unpack (line 184) | def unpack(cls, string):

FILE: deps/cpy/antlr3/dottreegen.py
  class DOTTreeGenerator (line 44) | class DOTTreeGenerator(object):
    method __init__ (line 72) | def __init__(self):
    method toDOT (line 80) | def toDOT(self, tree, adaptor=None, treeST=_treeST, edgeST=_edgeST):
    method toDOTDefineNodes (line 94) | def toDOTDefineNodes(self, tree, adaptor, treeST, knownNodes=None):
    method toDOTDefineEdges (line 127) | def toDOTDefineEdges(self, tree, adaptor, treeST, edgeST):
    method getNodeST (line 154) | def getNodeST(self, adaptor, t):
    method getNodeNumber (line 165) | def getNodeNumber(self, t):
  function toDOT (line 174) | def toDOT(tree, adaptor=None, treeST=DOTTreeGenerator._treeST, edgeST=DO...

FILE: deps/cpy/antlr3/exceptions.py
  class BacktrackingFailed (line 36) | class BacktrackingFailed(Exception):
  class RecognitionException (line 42) | class RecognitionException(Exception):
    method __init__ (line 75) | def __init__(self, input=None):
    method extractInformationFromTreeNodeStream (line 136) | def extractInformationFromTreeNodeStream(self, nodes):
    method getUnexpectedType (line 177) | def getUnexpectedType(self):
  class MismatchedTokenException (line 196) | class MismatchedTokenException(RecognitionException):
    method __init__ (line 199) | def __init__(self, expecting, input):
    method __str__ (line 204) | def __str__(self):
  class UnwantedTokenException (line 212) | class UnwantedTokenException(MismatchedTokenException):
    method getUnexpectedToken (line 215) | def getUnexpectedToken(self):
    method __str__ (line 219) | def __str__(self):
  class MissingTokenException (line 231) | class MissingTokenException(MismatchedTokenException):
    method __init__ (line 237) | def __init__(self, expecting, input, inserted):
    method getMissingType (line 243) | def getMissingType(self):
    method __str__ (line 247) | def __str__(self):
  class MismatchedRangeException (line 259) | class MismatchedRangeException(RecognitionException):
    method __init__ (line 262) | def __init__(self, a, b, input):
    method __str__ (line 269) | def __str__(self):
  class MismatchedSetException (line 276) | class MismatchedSetException(RecognitionException):
    method __init__ (line 279) | def __init__(self, expecting, input):
    method __str__ (line 285) | def __str__(self):
  class MismatchedNotSetException (line 292) | class MismatchedNotSetException(MismatchedSetException):
    method __str__ (line 295) | def __str__(self):
  class NoViableAltException (line 302) | class NoViableAltException(RecognitionException):
    method __init__ (line 305) | def __init__(
    method __str__ (line 315) | def __str__(self):
  class EarlyExitException (line 322) | class EarlyExitException(RecognitionException):
    method __init__ (line 325) | def __init__(self, decisionNumber, input):
  class FailedPredicateException (line 331) | class FailedPredicateException(RecognitionException):
    method __init__ (line 340) | def __init__(self, input, ruleName, predicateText):
    method __str__ (line 347) | def __str__(self):
  class MismatchedTreeNodeException (line 352) | class MismatchedTreeNodeException(RecognitionException):
    method __init__ (line 355) | def __init__(self, expecting, input):
    method __str__ (line 360) | def __str__(self):

FILE: deps/cpy/antlr3/extras.py
  function toDOT (line 46) | def toDOT(*args, **kwargs):

FILE: deps/cpy/antlr3/main.py
  class _Main (line 40) | class _Main(object):
    method __init__ (line 41) | def __init__(self):
    method parseOptions (line 47) | def parseOptions(self, argv):
    method setupOptions (line 87) | def setupOptions(self, optParser):
    method execute (line 91) | def execute(self, argv):
    method setUp (line 154) | def setUp(self, options):
    method parseStream (line 158) | def parseStream(self, options, inStream):
    method write (line 162) | def write(self, options, text):
    method writeln (line 167) | def writeln(self, options, text):
  class LexerMain (line 171) | class LexerMain(_Main):
    method __init__ (line 172) | def __init__(self, lexerClass):
    method parseStream (line 178) | def parseStream(self, options, inStream):
  class ParserMain (line 184) | class ParserMain(_Main):
    method __init__ (line 185) | def __init__(self, lexerClassName, parserClass):
    method setupOptions (line 193) | def setupOptions(self, optParser):
    method setUp (line 209) | def setUp(self, options):
    method parseStream (line 214) | def parseStream(self, options, inStream):
  class WalkerMain (line 227) | class WalkerMain(_Main):
    method __init__ (line 228) | def __init__(self, walkerClass):
    method setupOptions (line 236) | def setupOptions(self, optParser):
    method setUp (line 266) | def setUp(self, options):
    method parseStream (line 273) | def parseStream(self, options, inStream):

FILE: deps/cpy/antlr3/recognizers.py
  class RecognizerSharedState (line 48) | class RecognizerSharedState(object):
    method __init__ (line 58) | def __init__(self):
  class BaseRecognizer (line 126) | class BaseRecognizer(object):
    method __init__ (line 153) | def __init__(self, state=None):
    method setInput (line 189) | def setInput(self, input):
    method reset (line 193) | def reset(self):
    method match (line 213) | def match(self, input, ttype, follow):
    method matchAny (line 241) | def matchAny(self, input):
    method mismatchIsUnwantedToken (line 248) | def mismatchIsUnwantedToken(self, input, ttype):
    method mismatchIsMissingToken (line 252) | def mismatchIsMissingToken(self, input, follow):
    method mismatch (line 276) | def mismatch(self, input, ttype, follow):
    method reportError (line 307) | def reportError(self, e):
    method displayRecognitionError (line 337) | def displayRecognitionError(self, tokenNames, e):
    method getErrorMessage (line 343) | def getErrorMessage(self, e, tokenNames):
    method getNumberOfSyntaxErrors (line 448) | def getNumberOfSyntaxErrors(self):
    method getErrorHeader (line 460) | def getErrorHeader(self, e):
    method getTokenErrorDisplay (line 468) | def getTokenErrorDisplay(self, t):
    method emitErrorMessage (line 489) | def emitErrorMessage(self, msg):
    method recover (line 494) | def recover(self, input, re):
    method beginResync (line 520) | def beginResync(self):
    method endResync (line 529) | def endResync(self):
    method computeErrorRecoverySet (line 538) | def computeErrorRecoverySet(self):
    method computeContextSensitiveRuleFOLLOW (line 635) | def computeContextSensitiveRuleFOLLOW(self):
    method combineFollows (line 693) | def combineFollows(self, exact):
    method recoverFromMismatchedToken (line 712) | def recoverFromMismatchedToken(self, input, ttype, follow):
    method recoverFromMismatchedSet (line 777) | def recoverFromMismatchedSet(self, input, e, follow):
    method getCurrentInputSymbol (line 789) | def getCurrentInputSymbol(self, input):
    method getMissingSymbol (line 804) | def getMissingSymbol(self, input, e, expectedTokenType, follow):
    method consumeUntil (line 844) | def consumeUntil(self, input, tokenTypes):
    method getRuleInvocationStack (line 861) | def getRuleInvocationStack(self):
    method _getRuleInvocationStack (line 886) | def _getRuleInvocationStack(cls, module):
    method getBacktrackingLevel (line 923) | def getBacktrackingLevel(self):
    method getGrammarFileName (line 927) | def getGrammarFileName(self):
    method getSourceName (line 936) | def getSourceName(self):
    method toStrings (line 940) | def toStrings(self, tokens):
    method getRuleMemoization (line 952) | def getRuleMemoization(self, ruleIndex, ruleStartIndex):
    method alreadyParsedRule (line 969) | def alreadyParsedRule(self, input, ruleIndex):
    method memoize (line 994) | def memoize(self, input, ruleIndex, ruleStartIndex, success):
    method traceIn (line 1009) | def traceIn(self, ruleName, ruleIndex, inputSymbol):
    method traceOut (line 1021) | def traceOut(self, ruleName, ruleIndex, inputSymbol):
  class TokenSource (line 1034) | class TokenSource(object):
    method nextToken (line 1052) | def nextToken(self):
    method __iter__ (line 1062) | def __iter__(self):
    method next (line 1073) | def next(self):
  class Lexer (line 1087) | class Lexer(BaseRecognizer, TokenSource):
    method __init__ (line 1097) | def __init__(self, input, state=None):
    method reset (line 1105) | def reset(self):
    method nextToken (line 1126) | def nextToken(self):
    method skip (line 1162) | def skip(self):
    method mTokens (line 1174) | def mTokens(self):
    method setCharStream (line 1181) | def setCharStream(self, input):
    method getSourceName (line 1188) | def getSourceName(self):
    method emit (line 1192) | def emit(self, token=None):
    method match (line 1221) | def match(self, s):
    method matchAny (line 1246) | def matchAny(self):
    method matchRange (line 1250) | def matchRange(self, a, b):
    method getLine (line 1262) | def getLine(self):
    method getCharPositionInLine (line 1266) | def getCharPositionInLine(self):
    method getCharIndex (line 1270) | def getCharIndex(self):
    method getText (line 1276) | def getText(self):
    method setText (line 1290) | def setText(self, text):
    method reportError (line 1301) | def reportError(self, e):
    method getErrorMessage (line 1315) | def getErrorMessage(self, e, tokenNames):
    method getCharErrorDisplay (line 1358) | def getCharErrorDisplay(self, c):
    method recover (line 1364) | def recover(self, re):
    method traceIn (line 1375) | def traceIn(self, ruleName, ruleIndex):
    method traceOut (line 1384) | def traceOut(self, ruleName, ruleIndex):
  class Parser (line 1394) | class Parser(BaseRecognizer):
    method __init__ (line 1399) | def __init__(self, lexer, state=None):
    method reset (line 1405) | def reset(self):
    method getCurrentInputSymbol (line 1411) | def getCurrentInputSymbol(self, input):
    method getMissingSymbol (line 1415) | def getMissingSymbol(self, input, e, expectedTokenType, follow):
    method setTokenStream (line 1432) | def setTokenStream(self, input):
    method getTokenStream (line 1440) | def getTokenStream(self):
    method getSourceName (line 1444) | def getSourceName(self):
    method traceIn (line 1448) | def traceIn(self, ruleName, ruleIndex):
    method traceOut (line 1452) | def traceOut(self, ruleName, ruleIndex):
  class RuleReturnScope (line 1456) | class RuleReturnScope(object):
    method getStart (line 1461) | def getStart(self):
    method getStop (line 1466) | def getStop(self):
    method getTree (line 1471) | def getTree(self):
    method getTemplate (line 1476) | def getTemplate(self):
  class ParserRuleReturnScope (line 1481) | class ParserRuleReturnScope(RuleReturnScope):
    method __init__ (line 1502) | def __init__(self):
    method getStart (line 1507) | def getStart(self):
    method getStop (line 1511) | def getStop(self):

FILE: deps/cpy/antlr3/streams.py
  class IntStream (line 51) | class IntStream(object):
    method consume (line 59) | def consume(self):
    method LA (line 63) | def LA(self, i):
    method mark (line 74) | def mark(self):
    method index (line 87) | def index(self):
    method rewind (line 97) | def rewind(self, marker=None):
    method release (line 121) | def release(self, marker=None):
    method seek (line 135) | def seek(self, index):
    method size (line 162) | def size(self):
    method getSourceName (line 172) | def getSourceName(self):
  class CharStream (line 182) | class CharStream(IntStream):
    method substring (line 196) | def substring(self, start, stop):
    method LT (line 206) | def LT(self, i):
    method getLine (line 217) | def getLine(self):
    method setLine (line 223) | def setLine(self, line):
    method getCharPositionInLine (line 231) | def getCharPositionInLine(self):
    method setCharPositionInLine (line 239) | def setCharPositionInLine(self, pos):
  class TokenStream (line 243) | class TokenStream(IntStream):
    method LT (line 255) | def LT(self, k):
    method get (line 267) | def get(self, i):
    method getTokenSource (line 280) | def getTokenSource(self):
    method toString (line 289) | def toString(self, start=None, stop=None):
  class ANTLRStringStream (line 315) | class ANTLRStringStream(CharStream):
    method __init__ (line 325) | def __init__(self, data):
    method reset (line 363) | def reset(self):
    method consume (line 376) | def consume(self):
    method LA (line 393) | def LA(self, i):
    method LT (line 407) | def LT(self, i):
    method index (line 420) | def index(self):
    method size (line 430) | def size(self):
    method mark (line 434) | def mark(self):
    method rewind (line 447) | def rewind(self, marker=None):
    method release (line 459) | def release(self, marker=None):
    method seek (line 466) | def seek(self, index):
    method substring (line 481) | def substring(self, start, stop):
    method getLine (line 485) | def getLine(self):
    method getCharPositionInLine (line 490) | def getCharPositionInLine(self):
    method setLine (line 498) | def setLine(self, line):
    method setCharPositionInLine (line 503) | def setCharPositionInLine(self, pos):
    method getSourceName (line 511) | def getSourceName(self):
  class ANTLRFileStream (line 515) | class ANTLRFileStream(ANTLRStringStream):
    method __init__ (line 523) | def __init__(self, fileName, encoding=None):
    method getSourceName (line 544) | def getSourceName(self):
  class ANTLRInputStream (line 550) | class ANTLRInputStream(ANTLRStringStream):
    method __init__ (line 560) | def __init__(self, file, encoding=None):
  class CommonTokenStream (line 598) | class CommonTokenStream(TokenStream):
    method __init__ (line 608) | def __init__(self, tokenSource=None, channel=DEFAULT_CHANNEL):
    method setTokenSource (line 646) | def setTokenSource(self, tokenSource):
    method reset (line 655) | def reset(self):
    method fillBuffer (line 660) | def fillBuffer(self):
    method consume (line 705) | def consume(self):
    method skipOffTokenChannels (line 721) | def skipOffTokenChannels(self, i):
    method skipOffTokenChannelsReverse (line 737) | def skipOffTokenChannelsReverse(self, i):
    method setTokenTypeChannel (line 744) | def setTokenTypeChannel(self, ttype, channel):
    method discardTokenType (line 756) | def discardTokenType(self, ttype):
    method getTokens (line 760) | def getTokens(self, start=None, stop=None, types=None):
    method LT (line 794) | def LT(self, k):
    method LB (line 823) | def LB(self, k):
    method get (line 849) | def get(self, i):
    method LA (line 858) | def LA(self, i):
    method mark (line 862) | def mark(self):
    method release (line 867) | def release(self, marker=None):
    method size (line 872) | def size(self):
    method index (line 876) | def index(self):
    method rewind (line 880) | def rewind(self, marker=None):
    method seek (line 887) | def seek(self, index):
    method getTokenSource (line 891) | def getTokenSource(self):
    method getSourceName (line 895) | def getSourceName(self):
    method toString (line 899) | def toString(self, start=None, stop=None):
  class RewriteOperation (line 919) | class RewriteOperation(object):
    method __init__ (line 922) | def __init__(self, stream, index, text):
    method execute (line 927) | def execute(self, buf):
    method toString (line 934) | def toString(self):
  class InsertBeforeOp (line 942) | class InsertBeforeOp(RewriteOperation):
    method execute (line 945) | def execute(self, buf):
  class ReplaceOp (line 951) | class ReplaceOp(RewriteOperation):
    method __init__ (line 959) | def __init__(self, stream, first, last, text):
    method execute (line 964) | def execute(self, buf):
    method toString (line 971) | def toString(self):
  class DeleteOp (line 979) | class DeleteOp(ReplaceOp):
    method __init__ (line 984) | def __init__(self, stream, first, last):
    method toString (line 988) | def toString(self):
  class TokenRewriteStream (line 995) | class TokenRewriteStream(CommonTokenStream):
    method __init__ (line 1053) | def __init__(self, tokenSource=None, channel=DEFAULT_CHANNEL):
    method rollback (line 1066) | def rollback(self, *args):
    method deleteProgram (line 1088) | def deleteProgram(self, programName=DEFAULT_PROGRAM_NAME):
    method insertAfter (line 1094) | def insertAfter(self, *args):
    method insertBefore (line 1116) | def insertBefore(self, *args):
    method replace (line 1139) | def replace(self, *args):
    method delete (line 1179) | def delete(self, *args):
    method getLastRewriteTokenIndex (line 1183) | def getLastRewriteTokenIndex(self, programName=DEFAULT_PROGRAM_NAME):
    method setLastRewriteTokenIndex (line 1187) | def setLastRewriteTokenIndex(self, programName, i):
    method getProgram (line 1191) | def getProgram(self, name):
    method initializeProgram (line 1199) | def initializeProgram(self, name):
    method toOriginalString (line 1205) | def toOriginalString(self, start=None, end=None):
    method toString (line 1220) | def toString(self, *args):
    method reduceToSingleOperationPerIndex (line 1298) | def reduceToSingleOperationPerIndex(self, rewrites):
    method catOpText (line 1416) | def catOpText(self, a, b):
    method getKindOfOps (line 1426) | def getKindOfOps(self, rewrites, kind, before=None):
    method toDebugString (line 1440) | def toDebugString(self, start=None, end=None):

FILE: deps/cpy/antlr3/tokens.py
  class Token (line 41) | class Token(object):
    method getText (line 44) | def getText(self):
    method setText (line 51) | def setText(self, text):
    method getType (line 59) | def getType(self):
    method setType (line 66) | def setType(self, ttype):
    method getLine (line 74) | def getLine(self):
    method setLine (line 83) | def setLine(self, line):
    method getCharPositionInLine (line 91) | def getCharPositionInLine(self):
    method setCharPositionInLine (line 100) | def setCharPositionInLine(self, pos):
    method getChannel (line 108) | def getChannel(self):
    method setChannel (line 115) | def setChannel(self, channel):
    method getTokenIndex (line 123) | def getTokenIndex(self):
    method setTokenIndex (line 133) | def setTokenIndex(self, index):
    method getInputStream (line 141) | def getInputStream(self):
    method setInputStream (line 149) | def setInputStream(self, input):
  class CommonToken (line 168) | class CommonToken(Token):
    method __init__ (line 177) | def __init__(self, type=None, channel=DEFAULT_CHANNEL, text=None,
    method getText (line 216) | def getText(self):
    method setText (line 226) | def setText(self, text):
    method getType (line 238) | def getType(self):
    method setType (line 241) | def setType(self, ttype):
    method getLine (line 245) | def getLine(self):
    method setLine (line 248) | def setLine(self, line):
    method getCharPositionInLine (line 252) | def getCharPositionInLine(self):
    method setCharPositionInLine (line 255) | def setCharPositionInLine(self, pos):
    method getChannel (line 259) | def getChannel(self):
    method setChannel (line 262) | def setChannel(self, channel):
    method getTokenIndex (line 266) | def getTokenIndex(self):
    method setTokenIndex (line 269) | def setTokenIndex(self, index):
    method getInputStream (line 273) | def getInputStream(self):
    method setInputStream (line 276) | def setInputStream(self, input):
    method __str__ (line 280) | def __str__(self):
  class ClassicToken (line 305) | class ClassicToken(Token):
    method __init__ (line 316) | def __init__(self, type=None, text=None, channel=DEFAULT_CHANNEL,
    method getText (line 336) | def getText(self):
    method setText (line 339) | def setText(self, text):
    method getType (line 343) | def getType(self):
    method setType (line 346) | def setType(self, ttype):
    method getLine (line 350) | def getLine(self):
    method setLine (line 353) | def setLine(self, line):
    method getCharPositionInLine (line 357) | def getCharPositionInLine(self):
    method setCharPositionInLine (line 360) | def setCharPositionInLine(self, pos):
    method getChannel (line 364) | def getChannel(self):
    method setChannel (line 367) | def setChannel(self, channel):
    method getTokenIndex (line 371) | def getTokenIndex(self):
    method setTokenIndex (line 374) | def setTokenIndex(self, index):
    method getInputStream (line 378) | def getInputStream(self):
    method setInputStream (line 381) | def setInputStream(self, input):
    method toString (line 385) | def toString(self):

FILE: deps/cpy/antlr3/tree.py
  class RewriteCardinalityException (line 57) | class RewriteCardinalityException(RuntimeError):
    method __init__ (line 65) | def __init__(self, elementDescription):
    method getMessage (line 71) | def getMessage(self):
  class RewriteEarlyExitException (line 75) | class RewriteEarlyExitException(RewriteCardinalityException):
    method __init__ (line 78) | def __init__(self, elementDescription=None):
  class RewriteEmptyStreamException (line 82) | class RewriteEmptyStreamException(RewriteCardinalityException):
  class Tree (line 96) | class Tree(object):
    method getChild (line 112) | def getChild(self, i):
    method getChildCount (line 116) | def getChildCount(self):
    method getParent (line 120) | def getParent(self):
    method setParent (line 125) | def setParent(self, t):
    method getChildIndex (line 131) | def getChildIndex(self):
    method setChildIndex (line 136) | def setChildIndex(self, index):
    method freshenParentAndChildIndexes (line 142) | def freshenParentAndChildIndexes(self):
    method addChild (line 148) | def addChild(self, t):
    method setChild (line 157) | def setChild(self, i, t):
    method deleteChild (line 163) | def deleteChild(self, i):
    method replaceChildren (line 167) | def replaceChildren(self, startChildIndex, stopChildIndex, t):
    method isNil (line 178) | def isNil(self):
    method getTokenStartIndex (line 187) | def getTokenStartIndex(self):
    method setTokenStartIndex (line 196) | def setTokenStartIndex(self, index):
    method getTokenStopIndex (line 200) | def getTokenStopIndex(self):
    method setTokenStopIndex (line 209) | def setTokenStopIndex(self, index):
    method dupNode (line 213) | def dupNode(self):
    method getType (line 217) | def getType(self):
    method getText (line 223) | def getText(self):
    method getLine (line 227) | def getLine(self):
    method getCharPositionInLine (line 235) | def getCharPositionInLine(self):
    method toStringTree (line 239) | def toStringTree(self):
    method toString (line 243) | def toString(self):
  class TreeAdaptor (line 248) | class TreeAdaptor(object):
    method createWithPayload (line 264) | def createWithPayload(self, payload):
    method dupNode (line 276) | def dupNode(self, treeNode):
    method dupTree (line 284) | def dupTree(self, tree):
    method nil (line 290) | def nil(self):
    method errorNode (line 300) | def errorNode(self, input, start, stop, exc):
    method isNil (line 320) | def isNil(self, tree):
    method addChild (line 326) | def addChild(self, t, child):
    method becomeRoot (line 339) | def becomeRoot(self, newRoot, oldRoot):
    method rulePostProcessing (line 371) | def rulePostProcessing(self, root):
    method getUniqueID (line 390) | def getUniqueID(self, node):
    method createFromToken (line 403) | def createFromToken(self, tokenType, fromToken, text=None):
    method createFromType (line 417) | def createFromType(self, tokenType, text):
    method getType (line 431) | def getType(self, t):
    method setType (line 437) | def setType(self, t, type):
    method getText (line 443) | def getText(self, t):
    method setText (line 446) | def setText(self, t, text):
    method getToken (line 452) | def getToken(self, t):
    method setTokenBoundaries (line 467) | def setTokenBoundaries(self, t, startToken, stopToken):
    method getTokenStartIndex (line 479) | def getTokenStartIndex(self, t):
    method getTokenStopIndex (line 487) | def getTokenStopIndex(self, t):
    method getChild (line 497) | def getChild(self, t, i):
    method setChild (line 503) | def setChild(self, t, i, child):
    method deleteChild (line 509) | def deleteChild(self, t, i):
    method getChildCount (line 515) | def getChildCount(self, t):
    method getParent (line 521) | def getParent(self, t):
    method setParent (line 531) | def setParent(self, t, parent):
    method getChildIndex (line 541) | def getChildIndex(self, t):
    method setChildIndex (line 551) | def setChildIndex(self, t, index):
    method replaceChildren (line 561) | def replaceChildren(self, parent, startChildIndex, stopChildIndex, t):
    method create (line 576) | def create(self, *args):
  class BaseTree (line 649) | class BaseTree(Tree):
    method __init__ (line 664) | def __init__(self, node=None):
    method getChild (line 677) | def getChild(self, i):
    method getChildren (line 684) | def getChildren(self):
    method getFirstChildWithType (line 695) | def getFirstChildWithType(self, treeType):
    method getChildCount (line 703) | def getChildCount(self):
    method addChild (line 707) | def addChild(self, childTree):
    method addChildren (line 741) | def addChildren(self, children):
    method setChild (line 747) | def setChild(self, i, t):
    method deleteChild (line 759) | def deleteChild(self, i):
    method replaceChildren (line 771) | def replaceChildren(self, startChildIndex, stopChildIndex, newTree):
    method isNil (line 817) | def isNil(self):
    method freshenParentAndChildIndexes (line 821) | def freshenParentAndChildIndexes(self, offset=0):
    method sanityCheckParentAndChildIndexes (line 827) | def sanityCheckParentAndChildIndexes(self, parent=None, i=-1):
    method getChildIndex (line 844) | def getChildIndex(self):
    method setChildIndex (line 850) | def setChildIndex(self, index):
    method getParent (line 856) | def getParent(self):
    method setParent (line 861) | def setParent(self, t):
    method toStringTree (line 867) | def toStringTree(self):
    method getLine (line 890) | def getLine(self):
    method getCharPositionInLine (line 894) | def getCharPositionInLine(self):
    method toString (line 898) | def toString(self):
  class BaseTreeAdaptor (line 905) | class BaseTreeAdaptor(TreeAdaptor):
    method nil (line 914) | def nil(self):
    method errorNode (line 918) | def errorNode(self, input, start, stop, exc):
    method isNil (line 932) | def isNil(self, tree):
    method dupTree (line 936) | def dupTree(self, t, parent=None):
    method addChild (line 963) | def addChild(self, tree, child):
    method becomeRoot (line 980) | def becomeRoot(self, newRoot, oldRoot):
    method rulePostProcessing (line 1035) | def rulePostProcessing(self, root):
    method createFromToken (line 1051) | def createFromToken(self, tokenType, fromToken, text=None):
    method createFromType (line 1064) | def createFromType(self, tokenType, text):
    method getType (line 1073) | def getType(self, t):
    method setType (line 1077) | def setType(self, t, type):
    method getText (line 1081) | def getText(self, t):
    method setText (line 1085) | def setText(self, t, text):
    method getChild (line 1089) | def getChild(self, t, i):
    method setChild (line 1093) | def setChild(self, t, i, child):
    method deleteChild (line 1097) | def deleteChild(self, t, i):
    method getChildCount (line 1101) | def getChildCount(self, t):
    method getUniqueID (line 1105) | def getUniqueID(self, node):
    method createToken (line 1109) | def createToken(self, fromToken=None, tokenType=None, text=None):
  class CommonTree (line 1139) | class CommonTree(BaseTree):
    method __init__ (line 1150) | def __init__(self, payload):
    method getToken (line 1181) | def getToken(self):
    method dupNode (line 1185) | def dupNode(self):
    method isNil (line 1189) | def isNil(self):
    method getType (line 1193) | def getType(self):
    method getText (line 1202) | def getText(self):
    method getLine (line 1211) | def getLine(self):
    method getCharPositionInLine (line 1223) | def getCharPositionInLine(self):
    method getTokenStartIndex (line 1236) | def getTokenStartIndex(self):
    method setTokenStartIndex (line 1242) | def setTokenStartIndex(self, index):
    method getTokenStopIndex (line 1248) | def getTokenStopIndex(self):
    method setTokenStopIndex (line 1254) | def setTokenStopIndex(self, index):
    method getChildIndex (line 1260) | def getChildIndex(self):
    method setChildIndex (line 1265) | def setChildIndex(self, idx):
    method getParent (line 1270) | def getParent(self):
    method setParent (line 1275) | def setParent(self, t):
    method toString (line 1280) | def toString(self):
    method toStringTree (line 1293) | def toStringTree(self):
  class CommonErrorNode (line 1312) | class CommonErrorNode(CommonTree):
    method __init__ (line 1315) | def __init__(self, input, start, stop, exc):
    method isNil (line 1335) | def isNil(self):
    method getType (line 1339) | def getType(self):
    method getText (line 1343) | def getText(self):
    method toString (line 1363) | def toString(self):
  class CommonTreeAdaptor (line 1387) | class CommonTreeAdaptor(BaseTreeAdaptor):
    method dupNode (line 1401) | def dupNode(self, treeNode):
    method createWithPayload (line 1416) | def createWithPayload(self, payload):
    method createToken (line 1420) | def createToken(self, fromToken=None, tokenType=None, text=None):
    method setTokenBoundaries (line 1437) | def setTokenBoundaries(self, t, startToken, stopToken):
    method getTokenStartIndex (line 1461) | def getTokenStartIndex(self, t):
    method getTokenStopIndex (line 1467) | def getTokenStopIndex(self, t):
    method getText (line 1473) | def getText(self, t):
    method getType (line 1479) | def getType(self, t):
    method getToken (line 1486) | def getToken(self, t):
    method getChild (line 1499) | def getChild(self, t, i):
    method getChildCount (line 1505) | def getChildCount(self, t):
    method getParent (line 1511) | def getParent(self, t):
    method setParent (line 1515) | def setParent(self, t, parent):
    method getChildIndex (line 1519) | def getChildIndex(self, t):
    method setChildIndex (line 1523) | def setChildIndex(self, t, index):
    method replaceChildren (line 1527) | def replaceChildren(self, parent, startChildIndex, stopChildIndex, t):
  class TreeNodeStream (line 1548) | class TreeNodeStream(IntStream):
    method get (line 1558) | def get(self, i):
    method LT (line 1567) | def LT(self, k):
    method getTreeSource (line 1584) | def getTreeSource(self):
    method getTokenStream (line 1593) | def getTokenStream(self):
    method getTreeAdaptor (line 1604) | def getTreeAdaptor(self):
    method setUniqueNavigationNodes (line 1613) | def setUniqueNavigationNodes(self, uniqueNavigationNodes):
    method toString (line 1625) | def toString(self, start, stop):
    method replaceChildren (line 1638) | def replaceChildren(self, parent, startChildIndex, stopChildIndex, t):
  class CommonTreeNodeStream (line 1654) | class CommonTreeNodeStream(TreeNodeStream):
    method __init__ (line 1674) | def __init__(self, *args):
    method fillBuffer (line 1727) | def fillBuffer(self):
    method _fillBuffer (line 1736) | def _fillBuffer(self, t):
    method getNodeIndex (line 1756) | def getNodeIndex(self, node):
    method addNavigationNode (line 1771) | def addNavigationNode(self, ttype):
    method get (line 1797) | def get(self, i):
    method LT (line 1804) | def LT(self, k):
    method getCurrentSymbol (line 1821) | def getCurrentSymbol(self):
    method LB (line 1825) | def LB(self, k):
    method getTreeSource (line 1837) | def getTreeSource(self):
    method getSourceName (line 1841) | def getSourceName(self):
    method getTokenStream (line 1845) | def getTokenStream(self):
    method setTokenStream (line 1849) | def setTokenStream(self, tokens):
    method getTreeAdaptor (line 1853) | def getTreeAdaptor(self):
    method hasUniqueNavigationNodes (line 1857) | def hasUniqueNavigationNodes(self):
    method setUniqueNavigationNodes (line 1861) | def setUniqueNavigationNodes(self, uniqueNavigationNodes):
    method consume (line 1865) | def consume(self):
    method LA (line 1872) | def LA(self, i):
    method mark (line 1876) | def mark(self):
    method release (line 1885) | def release(self, marker=None):
    method index (line 1891) | def index(self):
    method rewind (line 1895) | def rewind(self, marker=None):
    method seek (line 1902) | def seek(self, index):
    method push (line 1909) | def push(self, index):
    method pop (line 1919) | def pop(self):
    method reset (line 1930) | def reset(self):
    method size (line 1936) | def size(self):
    method replaceChildren (line 1945) | def replaceChildren(self, parent, startChildIndex, stopChildIndex, t):
    method __str__ (line 1952) | def __str__(self):
    method toString (line 1963) | def toString(self, start, stop):
    method __iter__ (line 2024) | def __iter__(self):
  class TreeParser (line 2038) | class TreeParser(BaseRecognizer):
    method __init__ (line 2046) | def __init__(self, input, state=None):
    method reset (line 2053) | def reset(self):
    method setTreeNodeStream (line 2059) | def setTreeNodeStream(self, input):
    method getTreeNodeStream (line 2065) | def getTreeNodeStream(self):
    method getSourceName (line 2069) | def getSourceName(self):
    method getCurrentInputSymbol (line 2073) | def getCurrentInputSymbol(self, input):
    method getMissingSymbol (line 2077) | def getMissingSymbol(self, input, e, expectedTokenType, follow):
    method matchAny (line 2082) | def matchAny(self, ignore): # ignore stream, copy of this.input
    method mismatch (line 2113) | def mismatch(self, input, ttype, follow):
    method getErrorHeader (line 2123) | def getErrorHeader(self, e):
    method getErrorMessage (line 2138) | def getErrorMessage(self, e, tokenNames):
    method traceIn (line 2156) | def traceIn(self, ruleName, ruleIndex):
    method traceOut (line 2160) | def traceOut(self, ruleName, ruleIndex):
  class RewriteRuleElementStream (line 2170) | class RewriteRuleElementStream(object):
    method __init__ (line 2188) | def __init__(self, adaptor, elementDescription, elements=None):
    method reset (line 2222) | def reset(self):
    method add (line 2234) | def add(self, el):
    method nextTree (line 2253) | def nextTree(self):
    method _next (line 2274) | def _next(self):
    method dup (line 2304) | def dup(self, el):
    method toTree (line 2315) | def toTree(self, el):
    method hasNext (line 2324) | def hasNext(self):
    method size (line 2332) | def size(self):
    method getDescription (line 2344) | def getDescription(self):
  class RewriteRuleTokenStream (line 2350) | class RewriteRuleTokenStream(RewriteRuleElementStream):
    method toTree (line 2353) | def toTree(self, el):
    method nextNode (line 2359) | def nextNode(self):
    method nextToken (line 2364) | def nextToken(self):
    method dup (line 2368) | def dup(self, el):
  class RewriteRuleSubtreeStream (line 2372) | class RewriteRuleSubtreeStream(RewriteRuleElementStream):
    method nextNode (line 2375) | def nextNode(self):
    method dup (line 2404) | def dup(self, el):
  class RewriteRuleNodeStream (line 2409) | class RewriteRuleNodeStream(RewriteRuleElementStream):
    method nextNode (line 2415) | def nextNode(self):
    method toTree (line 2419) | def toTree(self, el):
    method dup (line 2423) | def dup(self, el):
  class TreeRuleReturnScope (line 2429) | class TreeRuleReturnScope(RuleReturnScope):
    method __init__ (line 2437) | def __init__(self):
    method getStart (line 2442) | def getStart(self):
    method getTree (line 2446) | def getTree(self):

FILE: deps/cpy/antlr3/treewizard.py
  function computeTokenTypes (line 44) | def computeTokenTypes(tokenNames):
  class TreePatternLexer (line 66) | class TreePatternLexer(object):
    method __init__ (line 67) | def __init__(self, pattern):
    method nextToken (line 93) | def nextToken(self):
    method consume (line 154) | def consume(self):
  class TreePatternParser (line 163) | class TreePatternParser(object):
    method __init__ (line 164) | def __init__(self, tokenizer, wizard, adaptor):
    method pattern (line 171) | def pattern(self):
    method parseTree (line 185) | def parseTree(self):
    method parseNode (line 213) | def parseNode(self):
  class TreePattern (line 271) | class TreePattern(CommonTree):
    method __init__ (line 277) | def __init__(self, payload):
    method toString (line 284) | def toString(self):
  class WildcardTreePattern (line 292) | class WildcardTreePattern(TreePattern):
  class TreePatternTreeAdaptor (line 296) | class TreePatternTreeAdaptor(CommonTreeAdaptor):
    method createWithPayload (line 299) | def createWithPayload(self, payload):
  class TreeWizard (line 303) | class TreeWizard(object):
    method __init__ (line 322) | def __init__(self, adaptor=None, tokenNames=None, typeMap=None):
    method getTokenType (line 334) | def getTokenType(self, tokenName):
    method create (line 343) | def create(self, pattern):
    method index (line 364) | def index(self, tree):
    method _index (line 377) | def _index(self, t, m):
    method find (line 394) | def find(self, tree, what):
    method _findTokenType (line 412) | def _findTokenType(self, t, ttype):
    method _findPattern (line 425) | def _findPattern(self, t, pattern):
    method visit (line 451) | def visit(self, tree, what, visitor):
    method _visitType (line 477) | def _visitType(self, t, parent, childIndex, ttype, visitor):
    method _visitPattern (line 491) | def _visitPattern(self, tree, pattern, visitor):
    method parse (line 516) | def parse(self, t, pattern, labels=None):
    method _parse (line 535) | def _parse(self, t1, t2, labels):
    method equals (line 574) | def equals(self, t1, t2, adaptor=None):
    method _equals (line 588) | def _equals(self, t1, t2, adaptor):

FILE: deps/cpy/cpy.py
  function __sigint__ (line 9) | def __sigint__(n, f):
  function usage (line 13) | def usage():

FILE: deps/cpy/engine.py
  class CpyEngine (line 13) | class CpyEngine:
    method find_imports (line 16) | def find_imports(self, srcfile, base_dir):
    method find_files (line 44) | def find_files(self, member, base_dir):
    method compile (line 60) | def compile(self, srcfile, base_dir, output_dir):
    method _compile (line 82) | def _compile(self, srcfile, base_dir, output_dir):
  class CpyBuilder (line 127) | class CpyBuilder:
    method __init__ (line 130) | def __init__(self, dstfile, base_dir, output_dir):
    method tmp_var (line 151) | def tmp_var(self, name = ''):
    method close (line 155) | def close(self):
    method write (line 158) | def write(self, text):
    method indent (line 164) | def indent(self):
    method _compile_dir (line 167) | def _compile_dir(self, rel_path):
    method _compile (line 178) | def _compile(self, rel_path, f):
    method op_import (line 204) | def op_import(self, member, all):
    method block_enter (line 262) | def block_enter(self):
    method block_leave (line 266) | def block_leave(self):
    method if_enter (line 269) | def if_enter(self):
    method if_leave (line 274) | def if_leave(self):
    method op_if (line 277) | def op_if(self, expr):
    method op_else (line 280) | def op_else(self):
    method op_else_if (line 283) | def op_else_if(self):
    method stmt (line 286) | def stmt(self, text):
    method op_assign (line 289) | def op_assign(self, id, val, op):
    method op_inc (line 293) | def op_inc(self, id):
    method op_dec (line 296) | def op_dec(self, id):
    method op_call (line 299) | def op_call(self, text):
    method op_print (line 302) | def op_print(self, text):
    method op_printf (line 306) | def op_printf(self, format, text):
    method op_while (line 313) | def op_while(self, expr):
    method op_do_while_enter (line 318) | def op_do_while_enter(self):
    method op_do_while_leave (line 323) | def op_do_while_leave(self, expr):
    method op_switch_enter (line 337) | def op_switch_enter(self, expr):
    method op_switch_leave (line 350) | def op_switch_leave(self):
    method op_case_enter (line 365) | def op_case_enter(self):
    method op_case_test (line 370) | def op_case_test(self, expr):
    method op_case (line 373) | def op_case(self):
    method op_case_leave (line 378) | def op_case_leave(self):
    method op_break (line 381) | def op_break(self):
    method op_continue (line 385) | def op_continue(self):
    method op_return (line 396) | def op_return(self, expr):
    method op_default_enter (line 402) | def op_default_enter(self):
    method op_default_leave (line 405) | def op_default_leave(self):
    method op_function (line 408) | def op_function(self, id, params):
    method op_foreach (line 421) | def op_foreach(self, expr, k, vals):
    method op_throw (line 455) | def op_throw(self, expr):
    method op_try (line 459) | def op_try(self):
    method op_catch (line 463) | def op_catch(self, type, var):
    method op_finally (line 470) | def op_finally(self):
    method op_class_enter (line 474) | def op_class_enter(self, name, parent):
    method op_class_leave (line 489) | def op_class_leave(self):
    method op_var_def (line 497) | def op_var_def(self, is_static, id, val):
    method op_construct (line 512) | def op_construct(self, params):

FILE: deps/jemalloc-4.1.0/include/jemalloc/internal/arena.h
  type purge_mode_t (line 26) | typedef enum {
  type arena_runs_dirty_link_t (line 38) | typedef struct arena_runs_dirty_link_s arena_runs_dirty_link_t;
  type arena_run_t (line 39) | typedef struct arena_run_s arena_run_t;
  type arena_chunk_map_bits_t (line 40) | typedef struct arena_chunk_map_bits_s arena_chunk_map_bits_t;
  type arena_chunk_map_misc_t (line 41) | typedef struct arena_chunk_map_misc_s arena_chunk_map_misc_t;
  type arena_chunk_t (line 42) | typedef struct arena_chunk_s arena_chunk_t;
  type arena_bin_info_t (line 43) | typedef struct arena_bin_info_s arena_bin_info_t;
  type arena_bin_t (line 44) | typedef struct arena_bin_s arena_bin_t;
  type arena_t (line 45) | typedef struct arena_s arena_t;
  type arena_tdata_t (line 46) | typedef struct arena_tdata_s arena_tdata_t;
  type arena_run_s (line 53) | struct arena_run_s {
  type arena_chunk_map_bits_s (line 65) | struct arena_chunk_map_bits_s {
  type arena_runs_dirty_link_s (line 145) | struct arena_runs_dirty_link_s {
  type arena_chunk_map_misc_s (line 154) | struct arena_chunk_map_misc_s {
  type arena_run_tree_t (line 178) | typedef rb_tree(arena_chunk_map_misc_t) arena_run_tree_t;
  type arena_chunk_s (line 183) | struct arena_chunk_s {
  type arena_bin_info_s (line 233) | struct arena_bin_info_s {
  type arena_bin_s (line 259) | struct arena_bin_s {
  type arena_s (line 287) | struct arena_s {
  type arena_tdata_s (line 467) | struct arena_tdata_s {
  function JEMALLOC_ALWAYS_INLINE (line 658) | JEMALLOC_ALWAYS_INLINE arena_chunk_map_bits_t *
  function JEMALLOC_ALWAYS_INLINE (line 668) | JEMALLOC_ALWAYS_INLINE arena_chunk_map_misc_t *
  function JEMALLOC_ALWAYS_INLINE (line 679) | JEMALLOC_ALWAYS_INLINE size_t
  function JEMALLOC_ALWAYS_INLINE (line 692) | JEMALLOC_ALWAYS_INLINE void *
  function JEMALLOC_ALWAYS_INLINE (line 701) | JEMALLOC_ALWAYS_INLINE arena_chunk_map_misc_t *
  function JEMALLOC_ALWAYS_INLINE (line 713) | JEMALLOC_ALWAYS_INLINE arena_chunk_map_misc_t *
  function JEMALLOC_ALWAYS_INLINE (line 725) | JEMALLOC_ALWAYS_INLINE size_t *
  function JEMALLOC_ALWAYS_INLINE (line 732) | JEMALLOC_ALWAYS_INLINE size_t
  function JEMALLOC_ALWAYS_INLINE (line 739) | JEMALLOC_ALWAYS_INLINE size_t
  function JEMALLOC_ALWAYS_INLINE (line 746) | JEMALLOC_ALWAYS_INLINE size_t
  function JEMALLOC_ALWAYS_INLINE (line 762) | JEMALLOC_ALWAYS_INLINE size_t
  function JEMALLOC_ALWAYS_INLINE (line 772) | JEMALLOC_ALWAYS_INLINE size_t
  function JEMALLOC_ALWAYS_INLINE (line 783) | JEMALLOC_ALWAYS_INLINE size_t
  function JEMALLOC_ALWAYS_INLINE (line 794) | JEMALLOC_ALWAYS_INLINE szind_t
  function JEMALLOC_ALWAYS_INLINE (line 806) | JEMALLOC_ALWAYS_INLINE size_t
  function JEMALLOC_ALWAYS_INLINE (line 817) | JEMALLOC_ALWAYS_INLINE size_t
  function JEMALLOC_ALWAYS_INLINE (line 828) | JEMALLOC_ALWAYS_INLINE size_t
  function JEMALLOC_ALWAYS_INLINE (line 839) | JEMALLOC_ALWAYS_INLINE size_t
  function JEMALLOC_ALWAYS_INLINE (line 848) | JEMALLOC_ALWAYS_INLINE size_t
  function JEMALLOC_ALWAYS_INLINE (line 857) | JEMALLOC_ALWAYS_INLINE void
  function JEMALLOC_ALWAYS_INLINE (line 864) | JEMALLOC_ALWAYS_INLINE size_t
  function JEMALLOC_ALWAYS_INLINE (line 881) | JEMALLOC_ALWAYS_INLINE void
  function JEMALLOC_ALWAYS_INLINE (line 895) | JEMALLOC_ALWAYS_INLINE void
  function JEMALLOC_ALWAYS_INLINE (line 908) | JEMALLOC_ALWAYS_INLINE void
  function JEMALLOC_ALWAYS_INLINE (line 917) | JEMALLOC_ALWAYS_INLINE void
  function JEMALLOC_ALWAYS_INLINE (line 932) | JEMALLOC_ALWAYS_INLINE void
  function JEMALLOC_ALWAYS_INLINE (line 946) | JEMALLOC_ALWAYS_INLINE void
  function JEMALLOC_INLINE (line 959) | JEMALLOC_INLINE void
  function JEMALLOC_INLINE (line 966) | JEMALLOC_INLINE void
  function JEMALLOC_INLINE (line 973) | JEMALLOC_INLINE size_t
  function JEMALLOC_INLINE (line 980) | JEMALLOC_INLINE bool
  function JEMALLOC_INLINE (line 995) | JEMALLOC_INLINE bool
  function JEMALLOC_INLINE (line 1006) | JEMALLOC_INLINE bool
  function JEMALLOC_ALWAYS_INLINE (line 1025) | JEMALLOC_ALWAYS_INLINE szind_t
  function JEMALLOC_INLINE (line 1074) | JEMALLOC_INLINE szind_t
  function JEMALLOC_INLINE (line 1082) | JEMALLOC_INLINE size_t
  function JEMALLOC_INLINE (line 1155) | JEMALLOC_INLINE prof_tctx_t *
  function JEMALLOC_INLINE (line 1182) | JEMALLOC_INLINE void
  function JEMALLOC_INLINE (line 1217) | JEMALLOC_INLINE void
  function JEMALLOC_ALWAYS_INLINE (line 1246) | JEMALLOC_ALWAYS_INLINE void
  function JEMALLOC_ALWAYS_INLINE (line 1260) | JEMALLOC_ALWAYS_INLINE void
  function JEMALLOC_ALWAYS_INLINE (line 1267) | JEMALLOC_ALWAYS_INLINE void *
  function JEMALLOC_ALWAYS_INLINE (line 1290) | JEMALLOC_ALWAYS_INLINE arena_t *
  function JEMALLOC_ALWAYS_INLINE (line 1303) | JEMALLOC_ALWAYS_INLINE size_t
  function JEMALLOC_ALWAYS_INLINE (line 1352) | JEMALLOC_ALWAYS_INLINE void
  function JEMALLOC_ALWAYS_INLINE (line 1396) | JEMALLOC_ALWAYS_INLINE void

FILE: deps/jemalloc-4.1.0/include/jemalloc/internal/atomic.h
  function JEMALLOC_INLINE (line 71) | JEMALLOC_INLINE uint64_t
  function JEMALLOC_INLINE (line 85) | JEMALLOC_INLINE uint64_t
  function JEMALLOC_INLINE (line 101) | JEMALLOC_INLINE bool
  function JEMALLOC_INLINE (line 117) | JEMALLOC_INLINE void
  function JEMALLOC_INLINE (line 129) | JEMALLOC_INLINE uint64_t
  function JEMALLOC_INLINE (line 136) | JEMALLOC_INLINE uint64_t
  function JEMALLOC_INLINE (line 143) | JEMALLOC_INLINE bool
  function JEMALLOC_INLINE (line 150) | JEMALLOC_INLINE void
  function JEMALLOC_INLINE (line 157) | JEMALLOC_INLINE uint64_t
  function JEMALLOC_INLINE (line 170) | JEMALLOC_INLINE uint64_t
  function JEMALLOC_INLINE (line 179) | JEMALLOC_INLINE bool
  function JEMALLOC_INLINE (line 188) | JEMALLOC_INLINE void
  function JEMALLOC_INLINE (line 197) | JEMALLOC_INLINE uint64_t
  function JEMALLOC_INLINE (line 204) | JEMALLOC_INLINE uint64_t
  function JEMALLOC_INLINE (line 211) | JEMALLOC_INLINE bool
  function JEMALLOC_INLINE (line 218) | JEMALLOC_INLINE void
  function JEMALLOC_INLINE (line 229) | JEMALLOC_INLINE uint64_t
  function JEMALLOC_INLINE (line 236) | JEMALLOC_INLINE uint64_t
  function JEMALLOC_INLINE (line 243) | JEMALLOC_INLINE bool
  function JEMALLOC_INLINE (line 252) | JEMALLOC_INLINE void
  function JEMALLOC_INLINE (line 260) | JEMALLOC_INLINE uint64_t
  function JEMALLOC_INLINE (line 267) | JEMALLOC_INLINE uint64_t
  function JEMALLOC_INLINE (line 274) | JEMALLOC_INLINE bool
  function JEMALLOC_INLINE (line 281) | JEMALLOC_INLINE void
  function JEMALLOC_INLINE (line 295) | JEMALLOC_INLINE uint32_t
  function JEMALLOC_INLINE (line 309) | JEMALLOC_INLINE uint32_t
  function JEMALLOC_INLINE (line 325) | JEMALLOC_INLINE bool
  function JEMALLOC_INLINE (line 341) | JEMALLOC_INLINE void
  function JEMALLOC_INLINE (line 353) | JEMALLOC_INLINE uint32_t
  function JEMALLOC_INLINE (line 360) | JEMALLOC_INLINE uint32_t
  function JEMALLOC_INLINE (line 367) | JEMALLOC_INLINE bool
  function JEMALLOC_INLINE (line 374) | JEMALLOC_INLINE void
  function JEMALLOC_INLINE (line 381) | JEMALLOC_INLINE uint32_t
  function JEMALLOC_INLINE (line 388) | JEMALLOC_INLINE uint32_t
  function JEMALLOC_INLINE (line 395) | JEMALLOC_INLINE bool
  function JEMALLOC_INLINE (line 402) | JEMALLOC_INLINE void
  function JEMALLOC_INLINE (line 409) | JEMALLOC_INLINE uint32_t
  function JEMALLOC_INLINE (line 416) | JEMALLOC_INLINE uint32_t
  function JEMALLOC_INLINE (line 423) | JEMALLOC_INLINE bool
  function JEMALLOC_INLINE (line 430) | JEMALLOC_INLINE void
  function JEMALLOC_INLINE (line 441) | JEMALLOC_INLINE uint32_t
  function JEMALLOC_INLINE (line 448) | JEMALLOC_INLINE uint32_t
  function JEMALLOC_INLINE (line 455) | JEMALLOC_INLINE bool
  function JEMALLOC_INLINE (line 464) | JEMALLOC_INLINE void
  function JEMALLOC_INLINE (line 472) | JEMALLOC_INLINE uint32_t
  function JEMALLOC_INLINE (line 479) | JEMALLOC_INLINE uint32_t
  function JEMALLOC_INLINE (line 486) | JEMALLOC_INLINE bool
  function JEMALLOC_INLINE (line 493) | JEMALLOC_INLINE void
  function JEMALLOC_INLINE (line 505) | JEMALLOC_INLINE void *
  function JEMALLOC_INLINE (line 516) | JEMALLOC_INLINE void *
  function JEMALLOC_INLINE (line 529) | JEMALLOC_INLINE bool
  function JEMALLOC_INLINE (line 540) | JEMALLOC_INLINE void
  function JEMALLOC_INLINE (line 553) | JEMALLOC_INLINE size_t
  function JEMALLOC_INLINE (line 564) | JEMALLOC_INLINE size_t
  function JEMALLOC_INLINE (line 577) | JEMALLOC_INLINE bool
  function JEMALLOC_INLINE (line 588) | JEMALLOC_INLINE void
  function atomic_add_u (line 601) | JEMALLOC_INLINE unsigned
  function atomic_sub_u (line 612) | JEMALLOC_INLINE unsigned
  function JEMALLOC_INLINE (line 625) | JEMALLOC_INLINE bool
  function JEMALLOC_INLINE (line 636) | JEMALLOC_INLINE void

FILE: deps/jemalloc-4.1.0/include/jemalloc/internal/bitmap.h
  type bitmap_level_t (line 8) | typedef struct bitmap_level_s bitmap_level_t;
  type bitmap_info_t (line 9) | typedef struct bitmap_info_s bitmap_info_t;
  type bitmap_t (line 10) | typedef unsigned long bitmap_t;
  type bitmap_level_s (line 89) | struct bitmap_level_s {
  type bitmap_info_s (line 94) | struct bitmap_info_s {
  function JEMALLOC_INLINE (line 134) | JEMALLOC_INLINE bool
  function JEMALLOC_INLINE (line 153) | JEMALLOC_INLINE bool
  function JEMALLOC_INLINE (line 165) | JEMALLOC_INLINE void
  function JEMALLOC_INLINE (line 201) | JEMALLOC_INLINE size_t
  function JEMALLOC_INLINE (line 232) | JEMALLOC_INLINE void

FILE: deps/jemalloc-4.1.0/include/jemalloc/internal/chunk.h
  function JEMALLOC_INLINE (line 87) | JEMALLOC_INLINE extent_node_t *

FILE: deps/jemalloc-4.1.0/include/jemalloc/internal/chunk_dss.h
  type dss_prec_t (line 4) | typedef enum {

FILE: deps/jemalloc-4.1.0/include/jemalloc/internal/ckh.h
  type ckh_t (line 4) | typedef struct ckh_s ckh_t;
  type ckhc_t (line 5) | typedef struct ckhc_s ckhc_t;
  type ckhc_s (line 27) | struct ckhc_s {
  type ckh_s (line 32) | struct ckh_s {

FILE: deps/jemalloc-4.1.0/include/jemalloc/internal/ctl.h
  type ctl_node_t (line 4) | typedef struct ctl_node_s ctl_node_t;
  type ctl_named_node_t (line 5) | typedef struct ctl_named_node_s ctl_named_node_t;
  type ctl_indexed_node_t (line 6) | typedef struct ctl_indexed_node_s ctl_indexed_node_t;
  type ctl_arena_stats_t (line 7) | typedef struct ctl_arena_stats_s ctl_arena_stats_t;
  type ctl_stats_t (line 8) | typedef struct ctl_stats_s ctl_stats_t;
  type ctl_node_s (line 14) | struct ctl_node_s {
  type ctl_named_node_s (line 18) | struct ctl_named_node_s {
  type ctl_indexed_node_s (line 28) | struct ctl_indexed_node_s {
  type ctl_arena_stats_s (line 33) | struct ctl_arena_stats_s {
  type ctl_stats_s (line 57) | struct ctl_stats_s {

FILE: deps/jemalloc-4.1.0/include/jemalloc/internal/extent.h
  type extent_node_t (line 4) | typedef struct extent_node_s extent_node_t;
  type extent_node_s (line 11) | struct extent_node_s {
  type extent_tree_t (line 58) | typedef rb_tree(extent_node_t) extent_tree_t;
  function JEMALLOC_INLINE (line 96) | JEMALLOC_INLINE arena_t *
  function JEMALLOC_INLINE (line 103) | JEMALLOC_INLINE void *
  function JEMALLOC_INLINE (line 110) | JEMALLOC_INLINE size_t
  function JEMALLOC_INLINE (line 117) | JEMALLOC_INLINE bool
  function JEMALLOC_INLINE (line 124) | JEMALLOC_INLINE bool
  function JEMALLOC_INLINE (line 132) | JEMALLOC_INLINE bool
  function JEMALLOC_INLINE (line 139) | JEMALLOC_INLINE prof_tctx_t *
  function JEMALLOC_INLINE (line 146) | JEMALLOC_INLINE void
  function JEMALLOC_INLINE (line 153) | JEMALLOC_INLINE void
  function JEMALLOC_INLINE (line 160) | JEMALLOC_INLINE void
  function JEMALLOC_INLINE (line 167) | JEMALLOC_INLINE void
  function JEMALLOC_INLINE (line 174) | JEMALLOC_INLINE void
  function JEMALLOC_INLINE (line 181) | JEMALLOC_INLINE void
  function JEMALLOC_INLINE (line 188) | JEMALLOC_INLINE void
  function JEMALLOC_INLINE (line 195) | JEMALLOC_INLINE void
  function JEMALLOC_INLINE (line 210) | JEMALLOC_INLINE void
  function JEMALLOC_INLINE (line 218) | JEMALLOC_INLINE void
  function JEMALLOC_INLINE (line 227) | JEMALLOC_INLINE void

FILE: deps/jemalloc-4.1.0/include/jemalloc/internal/hash.h
  function JEMALLOC_INLINE (line 34) | JEMALLOC_INLINE uint32_t
  function JEMALLOC_INLINE (line 41) | JEMALLOC_INLINE uint64_t
  function JEMALLOC_INLINE (line 48) | JEMALLOC_INLINE uint32_t
  function JEMALLOC_INLINE (line 63) | JEMALLOC_INLINE uint64_t
  function JEMALLOC_INLINE (line 78) | JEMALLOC_INLINE uint32_t
  function JEMALLOC_INLINE (line 91) | JEMALLOC_INLINE uint64_t
  function JEMALLOC_INLINE (line 104) | JEMALLOC_INLINE uint32_t
  function hash_x86_128 (line 155) | void
  function hash_x64_128 (line 257) | void
  function JEMALLOC_INLINE (line 337) | JEMALLOC_INLINE void

FILE: deps/jemalloc-4.1.0/include/jemalloc/internal/jemalloc_internal_decls.h
  function isblank (line 53) | static int

FILE: deps/jemalloc-4.1.0/include/jemalloc/internal/mb.h
  function JEMALLOC_INLINE (line 31) | JEMALLOC_INLINE void
  function JEMALLOC_INLINE (line 58) | JEMALLOC_INLINE void
  function JEMALLOC_INLINE (line 69) | JEMALLOC_INLINE void
  function JEMALLOC_INLINE (line 80) | JEMALLOC_INLINE void
  function JEMALLOC_INLINE (line 91) | JEMALLOC_INLINE void
  function JEMALLOC_INLINE (line 102) | JEMALLOC_INLINE void

FILE: deps/jemalloc-4.1.0/include/jemalloc/internal/mutex.h
  type malloc_mutex_t (line 4) | typedef struct malloc_mutex_s malloc_mutex_t;
  type malloc_mutex_s (line 27) | struct malloc_mutex_s {
  function JEMALLOC_INLINE (line 71) | JEMALLOC_INLINE void
  function JEMALLOC_INLINE (line 90) | JEMALLOC_INLINE void

FILE: deps/jemalloc-4.1.0/include/jemalloc/internal/nstime.h
  type nstime_t (line 7) | typedef struct nstime_s nstime_t;
  type nstime_s (line 16) | struct nstime_s {

FILE: deps/jemalloc-4.1.0/include/jemalloc/internal/prng.h
  function JEMALLOC_ALWAYS_INLINE (line 43) | JEMALLOC_ALWAYS_INLINE uint64_t
  function JEMALLOC_ALWAYS_INLINE (line 58) | JEMALLOC_ALWAYS_INLINE uint64_t

FILE: deps/jemalloc-4.1.0/include/jemalloc/internal/prof.h
  type prof_bt_t (line 4) | typedef struct prof_bt_s prof_bt_t;
  type prof_cnt_t (line 5) | typedef struct prof_cnt_s prof_cnt_t;
  type prof_tctx_t (line 6) | typedef struct prof_tctx_s prof_tctx_t;
  type prof_gctx_t (line 7) | typedef struct prof_gctx_s prof_gctx_t;
  type prof_tdata_t (line 8) | typedef struct prof_tdata_s prof_tdata_t;
  type prof_bt_s (line 59) | struct prof_bt_s {
  type prof_unwind_data_t (line 67) | typedef struct {
  type prof_cnt_s (line 73) | struct prof_cnt_s {
  type prof_tctx_state_t (line 81) | typedef enum {
  type prof_tctx_s (line 88) | struct prof_tctx_s {
  type prof_tctx_tree_t (line 138) | typedef rb_tree(prof_tctx_t) prof_tctx_tree_t;
  type prof_gctx_s (line 140) | struct prof_gctx_s {
  type prof_gctx_tree_t (line 174) | typedef rb_tree(prof_gctx_t) prof_gctx_tree_t;
  type prof_tdata_s (line 176) | struct prof_tdata_s {
  type prof_tdata_tree_t (line 240) | typedef rb_tree(prof_tdata_t) prof_tdata_tree_t;
  function JEMALLOC_ALWAYS_INLINE (line 350) | JEMALLOC_ALWAYS_INLINE bool
  function JEMALLOC_ALWAYS_INLINE (line 363) | JEMALLOC_ALWAYS_INLINE bool
  function JEMALLOC_ALWAYS_INLINE (line 375) | JEMALLOC_ALWAYS_INLINE prof_tdata_t *
  function JEMALLOC_ALWAYS_INLINE (line 399) | JEMALLOC_ALWAYS_INLINE prof_tctx_t *
  function JEMALLOC_ALWAYS_INLINE (line 409) | JEMALLOC_ALWAYS_INLINE void
  function JEMALLOC_ALWAYS_INLINE (line 419) | JEMALLOC_ALWAYS_INLINE void
  function JEMALLOC_ALWAYS_INLINE (line 430) | JEMALLOC_ALWAYS_INLINE bool
  function JEMALLOC_ALWAYS_INLINE (line 460) | JEMALLOC_ALWAYS_INLINE prof_tctx_t *
  function JEMALLOC_ALWAYS_INLINE (line 481) | JEMALLOC_ALWAYS_INLINE void
  function JEMALLOC_ALWAYS_INLINE (line 495) | JEMALLOC_ALWAYS_INLINE void
  function JEMALLOC_ALWAYS_INLINE (line 531) | JEMALLOC_ALWAYS_INLINE void

FILE: deps/jemalloc-4.1.0/include/jemalloc/internal/quarantine.h
  type quarantine_obj_t (line 4) | typedef struct quarantine_obj_s quarantine_obj_t;
  type quarantine_t (line 5) | typedef struct quarantine_s quarantine_t;
  type quarantine_obj_s (line 14) | struct quarantine_obj_s {
  type quarantine_s (line 19) | struct quarantine_s {
  function JEMALLOC_ALWAYS_INLINE (line 45) | JEMALLOC_ALWAYS_INLINE void

FILE: deps/jemalloc-4.1.0/include/jemalloc/internal/rtree.h
  type rtree_node_elm_t (line 9) | typedef struct rtree_node_elm_s rtree_node_elm_t;
  type rtree_level_t (line 10) | typedef struct rtree_level_s rtree_level_t;
  type rtree_t (line 11) | typedef struct rtree_s rtree_t;
  type rtree_node_elm_t (line 30) | typedef rtree_node_elm_t *(rtree_node_alloc_t)(size_t);
  type rtree_node_elm_s (line 37) | struct rtree_node_elm_s {
  type rtree_level_s (line 45) | struct rtree_level_s {
  type rtree_s (line 81) | struct rtree_s {
  function rtree_start_level (line 129) | JEMALLOC_INLINE unsigned
  function JEMALLOC_INLINE (line 143) | JEMALLOC_INLINE uintptr_t
  function JEMALLOC_INLINE (line 152) | JEMALLOC_INLINE bool
  function JEMALLOC_INLINE (line 159) | JEMALLOC_INLINE rtree_node_elm_t *
  function JEMALLOC_INLINE (line 171) | JEMALLOC_INLINE rtree_node_elm_t *
  function JEMALLOC_INLINE (line 182) | JEMALLOC_INLINE extent_node_t *
  function JEMALLOC_INLINE (line 204) | JEMALLOC_INLINE void
  function JEMALLOC_INLINE (line 211) | JEMALLOC_INLINE rtree_node_elm_t *
  function JEMALLOC_INLINE (line 223) | JEMALLOC_INLINE rtree_node_elm_t *
  function JEMALLOC_INLINE (line 234) | JEMALLOC_INLINE extent_node_t *
  function JEMALLOC_INLINE (line 262) | JEMALLOC_INLINE bool

FILE: deps/jemalloc-4.1.0/include/jemalloc/internal/stats.h
  type tcache_bin_stats_t (line 4) | typedef struct tcache_bin_stats_s tcache_bin_stats_t;
  type malloc_bin_stats_t (line 5) | typedef struct malloc_bin_stats_s malloc_bin_stats_t;
  type malloc_large_stats_t (line 6) | typedef struct malloc_large_stats_s malloc_large_stats_t;
  type malloc_huge_stats_t (line 7) | typedef struct malloc_huge_stats_s malloc_huge_stats_t;
  type arena_stats_t (line 8) | typedef struct arena_stats_s arena_stats_t;
  type chunk_stats_t (line 9) | typedef struct chunk_stats_s chunk_stats_t;
  type tcache_bin_stats_s (line 15) | struct tcache_bin_stats_s {
  type malloc_bin_stats_s (line 23) | struct malloc_bin_stats_s {
  type malloc_large_stats_s (line 65) | struct malloc_large_stats_s {
  type malloc_huge_stats_s (line 89) | struct malloc_huge_stats_s {
  type arena_stats_s (line 101) | struct arena_stats_s {
  function JEMALLOC_INLINE (line 160) | JEMALLOC_INLINE size_t
  function JEMALLOC_INLINE (line 167) | JEMALLOC_INLINE void
  function JEMALLOC_INLINE (line 179) | JEMALLOC_INLINE void

FILE: deps/jemalloc-4.1.0/include/jemalloc/internal/tcache.h
  type tcache_bin_info_t (line 4) | typedef struct tcache_bin_info_s tcache_bin_info_t;
  type tcache_bin_t (line 5) | typedef struct tcache_bin_s tcache_bin_t;
  type tcache_t (line 6) | typedef struct tcache_s tcache_t;
  type tcaches_t (line 7) | typedef struct tcaches_s tcaches_t;
  type tcache_enabled_t (line 54) | typedef enum {
  type tcache_bin_info_s (line 64) | struct tcache_bin_info_s {
  type tcache_bin_s (line 68) | struct tcache_bin_s {
  type tcache_s (line 83) | struct tcache_s {
  type tcaches_s (line 98) | struct tcaches_s {
  function JEMALLOC_INLINE (line 178) | JEMALLOC_INLINE void
  function JEMALLOC_INLINE (line 189) | JEMALLOC_INLINE bool
  function JEMALLOC_INLINE (line 207) | JEMALLOC_INLINE void
  function JEMALLOC_ALWAYS_INLINE (line 224) | JEMALLOC_ALWAYS_INLINE tcache_t *
  function JEMALLOC_ALWAYS_INLINE (line 243) | JEMALLOC_ALWAYS_INLINE void
  function JEMALLOC_ALWAYS_INLINE (line 254) | JEMALLOC_ALWAYS_INLINE void *
  function JEMALLOC_ALWAYS_INLINE (line 281) | JEMALLOC_ALWAYS_INLINE void *
  function JEMALLOC_ALWAYS_INLINE (line 340) | JEMALLOC_ALWAYS_INLINE void *
  function JEMALLOC_ALWAYS_INLINE (line 402) | JEMALLOC_ALWAYS_INLINE void
  function JEMALLOC_ALWAYS_INLINE (line 427) | JEMALLOC_ALWAYS_INLINE void
  function JEMALLOC_ALWAYS_INLINE (line 457) | JEMALLOC_ALWAYS_INLINE tcache_t *

FILE: deps/jemalloc-4.1.0/include/jemalloc/internal/ticker.h
  type ticker_t (line 4) | typedef struct ticker_s ticker_t;
  type ticker_s (line 10) | struct ticker_s {
  function JEMALLOC_INLINE (line 32) | JEMALLOC_INLINE void
  function JEMALLOC_INLINE (line 40) | JEMALLOC_INLINE void
  function JEMALLOC_INLINE (line 47) | JEMALLOC_INLINE int32_t
  function JEMALLOC_INLINE (line 54) | JEMALLOC_INLINE bool
  function JEMALLOC_INLINE (line 66) | JEMALLOC_INLINE bool

FILE: deps/jemalloc-4.1.0/include/jemalloc/internal/tsd.h
  type tsd_init_block_t (line 11) | typedef struct tsd_init_block_s tsd_init_block_t;
  type tsd_init_head_t (line 12) | typedef struct tsd_init_head_s tsd_init_head_t;
  type tsd_t (line 15) | typedef struct tsd_s tsd_t;
  type tsd_state_t (line 17) | typedef enum {
  type tsd_init_block_s (line 522) | struct tsd_init_block_s {
  type tsd_init_head_s (line 527) | struct tsd_init_head_s {
  type tsd_s (line 560) | struct tsd_s {
  function malloc_tsd_funcs (line 608) | malloc_tsd_externs(, tsd_t)
  function JEMALLOC_INLINE (line 631) | JEMALLOC_INLINE bool

FILE: deps/jemalloc-4.1.0/include/jemalloc/internal/util.h
  function ffs_llu (line 146) | JEMALLOC_ALWAYS_INLINE unsigned
  function ffs_lu (line 153) | JEMALLOC_ALWAYS_INLINE unsigned
  function ffs_u (line 160) | JEMALLOC_ALWAYS_INLINE unsigned
  function ffs_zu (line 167) | JEMALLOC_ALWAYS_INLINE unsigned
  function ffs_u64 (line 182) | JEMALLOC_ALWAYS_INLINE unsigned
  function ffs_u32 (line 195) | JEMALLOC_ALWAYS_INLINE unsigned
  function JEMALLOC_INLINE (line 207) | JEMALLOC_INLINE uint64_t
  function JEMALLOC_INLINE (line 222) | JEMALLOC_INLINE uint32_t
  function JEMALLOC_INLINE (line 237) | JEMALLOC_INLINE size_t
  function lg_floor (line 249) | JEMALLOC_INLINE unsigned
  function lg_floor (line 264) | JEMALLOC_INLINE unsigned
  function lg_floor (line 282) | JEMALLOC_INLINE unsigned
  function lg_floor (line 297) | JEMALLOC_INLINE unsigned
  function JEMALLOC_INLINE (line 319) | JEMALLOC_INLINE void
  function JEMALLOC_INLINE (line 331) | JEMALLOC_INLINE int

FILE: deps/jemalloc-4.1.0/include/msvc_compat/C99/stdbool.h
  type BOOL (line 11) | typedef BOOL _Bool;

FILE: deps/jemalloc-4.1.0/include/msvc_compat/C99/stdint.h
  type int_least8_t (line 94) | typedef int8_t    int_least8_t;
  type int_least16_t (line 95) | typedef int16_t   int_least16_t;
  type int_least32_t (line 96) | typedef int32_t   int_least32_t;
  type int_least64_t (line 97) | typedef int64_t   int_least64_t;
  type uint_least8_t (line 98) | typedef uint8_t   uint_least8_t;
  type uint_least16_t (line 99) | typedef uint16_t  uint_least16_t;
  type uint_least32_t (line 100) | typedef uint32_t  uint_least32_t;
  type uint_least64_t (line 101) | typedef uint64_t  uint_least64_t;
  type int_fast8_t (line 104) | typedef int8_t    int_fast8_t;
  type int_fast16_t (line 105) | typedef int16_t   int_fast16_t;
  type int_fast32_t (line 106) | typedef int32_t   int_fast32_t;
  type int_fast64_t (line 107) | typedef int64_t   int_fast64_t;
  type uint_fast8_t (line 108) | typedef uint8_t   uint_fast8_t;
  type uint_fast16_t (line 109) | typedef uint16_t  uint_fast16_t;
  type uint_fast32_t (line 110) | typedef uint32_t  uint_fast32_t;
  type uint_fast64_t (line 111) | typedef uint64_t  uint_fast64_t;
  type intmax_t (line 123) | typedef int64_t   intmax_t;
  type uintmax_t (line 124) | typedef uint64_t  uintmax_t;

FILE: deps/jemalloc-4.1.0/include/msvc_compat/strings.h
  function ffsl (line 9) | static __forceinline int ffsl(long x)
  function ffs (line 18) | static __forceinline int ffs(int x)
  function ffsll (line 28) | static __forceinline int ffsll(unsigned __int64 x)

FILE: deps/jemalloc-4.1.0/msvc/projects/vc2015/test_threads/test_threads.cpp
  function test_threads (line 19) | int test_threads()

FILE: deps/jemalloc-4.1.0/msvc/projects/vc2015/test_threads/test_threads_main.cpp
  function main (line 8) | int main(int argc, char** argv)

FILE: deps/jemalloc-4.1.0/src/arena.c
  function JEMALLOC_INLINE_C (line 50) | JEMALLOC_INLINE_C size_t
  function JEMALLOC_INLINE_C (line 62) | JEMALLOC_INLINE_C int
  function run_quantize_ceil_compute_hard (line 103) | static size_t
  function run_quantize_ceil_compute (line 137) | static size_t
  function run_quantize_floor (line 160) | static size_t
  function run_quantize_ceil (line 183) | static size_t
  function arena_run_tree_t (line 202) | static arena_run_tree_t *
  function arena_avail_insert (line 212) | static void
  function arena_avail_remove (line 224) | static void
  function arena_run_dirty_insert (line 236) | static void
  function arena_run_dirty_remove (line 253) | static void
  function arena_chunk_dirty_npages (line 270) | static size_t
  function arena_chunk_cache_maybe_insert (line 277) | void
  function arena_chunk_cache_maybe_remove (line 289) | void
  function JEMALLOC_INLINE_C (line 300) | JEMALLOC_INLINE_C void *
  function JEMALLOC_INLINE_C (line 320) | JEMALLOC_INLINE_C void
  function JEMALLOC_INLINE_C (line 346) | JEMALLOC_INLINE_C void
  function JEMALLOC_INLINE_C (line 356) | JEMALLOC_INLINE_C void
  function JEMALLOC_INLINE_C (line 364) | JEMALLOC_INLINE_C void
  function arena_nactive_add (line 375) | static void
  function arena_nactive_sub (line 389) | static void
  function arena_run_split_remove (line 402) | static void
  function arena_run_split_large_helper (line 444) | static bool
  function arena_run_split_large (line 517) | static bool
  function arena_run_init_large (line 524) | static bool
  function arena_run_split_small (line 531) | static bool
  function arena_chunk_t (line 569) | static arena_chunk_t *
  function arena_chunk_register (line 591) | static bool
  function arena_chunk_t (line 606) | static arena_chunk_t *
  function arena_chunk_t (line 640) | static arena_chunk_t *
  function arena_chunk_t (line 669) | static arena_chunk_t *
  function arena_chunk_t (line 723) | static arena_chunk_t *
  function arena_chunk_dalloc (line 741) | static void
  function arena_huge_malloc_stats_update (line 798) | static void
  function arena_huge_malloc_stats_update_undo (line 811) | static void
  function arena_huge_dalloc_stats_update (line 824) | static void
  function arena_huge_dalloc_stats_update_undo (line 837) | static void
  function arena_huge_ralloc_stats_update (line 850) | static void
  function arena_huge_ralloc_stats_update_undo (line 858) | static void
  function extent_node_t (line 867) | extent_node_t *
  function arena_node_dalloc (line 883) | void
  function arena_chunk_dalloc_huge (line 944) | void
  function arena_chunk_ralloc_huge_similar (line 962) | void
  function arena_chunk_ralloc_huge_shrink (line 980) | void
  function arena_chunk_ralloc_huge_expand_hard (line 1005) | static bool
  function arena_chunk_ralloc_huge_expand (line 1034) | bool
  function arena_run_t (line 1075) | static arena_run_t *
  function arena_run_t (line 1091) | static arena_run_t *
  function arena_run_t (line 1102) | static arena_run_t *
  function arena_run_t (line 1135) | static arena_run_t *
  function arena_run_t (line 1146) | static arena_run_t *
  function arena_lg_dirty_mult_valid (line 1180) | static bool
  function arena_lg_dirty_mult_get (line 1188) | ssize_t
  function arena_lg_dirty_mult_set (line 1200) | bool
  function arena_decay_deadline_init (line 1215) | static void
  function arena_decay_deadline_reached (line 1236) | static bool
  function arena_decay_backlog_npages_limit (line 1245) | static size_t
  function arena_decay_epoch_advance (line 1273) | static void
  function arena_decay_npages_limit (line 1316) | static size_t
  function arena_decay_init (line 1332) | static void
  function arena_decay_time_valid (line 1351) | static bool
  function arena_decay_time_get (line 1358) | ssize_t
  function arena_decay_time_set (line 1370) | bool
  function arena_maybe_purge_ratio (line 1393) | static void
  function arena_maybe_purge_decay (line 1421) | static void
  function arena_maybe_purge (line 1456) | void
  function arena_dirty_count (line 1470) | static size_t
  function arena_stash_dirty (line 1504) | static size_t
  function arena_purge_stashed (line 1594) | static size_t
  function arena_unstash_purged (line 1687) | static void
  function arena_purge_to_limit (line 1736) | static void
  function arena_purge (line 1777) | void
  function arena_run_coalesce (line 1789) | static void
  function arena_run_size_get (line 1881) | static size_t
  function arena_run_dalloc (line 1902) | static void
  function arena_run_trim_head (line 1978) | static void
  function arena_run_trim_tail (line 2018) | static void
  function arena_run_t (line 2063) | static arena_run_t *
  function arena_bin_runs_insert (line 2073) | static void
  function arena_bin_runs_remove (line 2083) | static void
  function arena_run_t (line 2093) | static arena_run_t *
  function arena_run_t (line 2105) | static arena_run_t *
  function arena_tcache_fill_small (line 2205) | void
  function arena_alloc_junk_small (line 2257) | void
  function arena_redzone_corruption (line 2277) | static void
  function arena_redzones_validate (line 2293) | static void
  function arena_dalloc_junk_small (line 2333) | void
  function arena_quarantine_junk_small (line 2349) | void
  function arena_prof_promoted (line 2619) | void
  function arena_dissociate_bin_run (line 2643) | static void
  function arena_dalloc_bin_run (line 2667) | static void
  function arena_bin_lower_run (line 2687) | static void
  function arena_dalloc_bin_locked_impl (line 2708) | static void
  function arena_dalloc_bin_junked_locked (line 2741) | void
  function arena_dalloc_bin (line 2749) | void
  function arena_dalloc_small (line 2765) | void
  function arena_dalloc_junk_large (line 2785) | void
  function arena_dalloc_large_locked_impl (line 2799) | static void
  function arena_dalloc_large_junked_locked (line 2826) | void
  function arena_dalloc_large (line 2834) | void
  function arena_ralloc_large_shrink (line 2844) | static void
  function arena_ralloc_large_grow (line 2880) | static bool
  function arena_ralloc_junk_large (line 2984) | static void
  function arena_ralloc_large (line 3004) | static bool
  function arena_ralloc_no_move (line 3041) | bool
  function dss_prec_t (line 3144) | dss_prec_t
  function arena_dss_prec_set (line 3155) | bool
  function arena_lg_dirty_mult_default_get (line 3167) | ssize_t
  function arena_lg_dirty_mult_default_set (line 3174) | bool
  function arena_decay_time_default_get (line 3186) | ssize_t
  function arena_decay_time_default_set (line 3193) | bool
  function arena_basic_stats_merge_locked (line 3205) | static void
  function arena_basic_stats_merge (line 3219) | void
  function arena_stats_merge (line 3231) | void
  function arena_nthreads_get (line 3292) | unsigned
  function arena_nthreads_inc (line 3299) | void
  function arena_nthreads_dec (line 3306) | void
  function arena_t (line 3313) | arena_t *
  function bin_info_run_size_calc (line 3428) | static void
  function bin_info_init (line 3515) | static void
  function small_run_size_init (line 3534) | static bool
  function run_quantize_init (line 3560) | static bool
  function arena_boot (line 3589) | bool
  function arena_prefork (line 3648) | void
  function arena_postfork_parent (line 3661) | void
  function arena_postfork_child (line 3674) | void

FILE: deps/jemalloc-4.1.0/src/base.c
  function extent_node_t (line 17) | static extent_node_t *
  function base_node_dalloc (line 31) | static void
  function extent_node_t (line 41) | static extent_node_t *
  function base_stats_get (line 130) | void
  function base_boot (line 143) | bool
  function base_prefork (line 155) | void
  function base_postfork_parent (line 162) | void
  function base_postfork_child (line 169) | void

FILE: deps/jemalloc-4.1.0/src/bitmap.c
  function bitmap_info_init (line 8) | void
  function bitmap_info_ngroups (line 37) | static size_t
  function bitmap_init (line 44) | void
  function bitmap_info_init (line 74) | void
  function bitmap_info_ngroups (line 89) | static size_t
  function bitmap_init (line 96) | void
  function bitmap_size (line 109) | size_t

FILE: deps/jemalloc-4.1.0/src/chunk.c
  function chunk_hooks_t (line 58) | static chunk_hooks_t
  function chunk_hooks_t (line 65) | chunk_hooks_t
  function chunk_hooks_t (line 77) | chunk_hooks_t
  function chunk_hooks_assure_initialized_impl (line 112) | static void
  function chunk_hooks_assure_initialized_locked (line 126) | static void
  function chunk_hooks_assure_initialized (line 134) | static void
  function chunk_register (line 141) | bool
  function chunk_deregister (line 168) | void
  function extent_node_t (line 187) | static extent_node_t *
  function arena_t (line 406) | static arena_t *
  function chunk_record (line 475) | static void
  function chunk_dalloc_cache (line 567) | void
  function chunk_dalloc_arena (line 582) | void
  function chunk_dalloc_default (line 607) | static bool
  function chunk_dalloc_wrapper (line 617) | void
  function chunk_commit_default (line 628) | static bool
  function chunk_decommit_default (line 637) | static bool
  function chunk_purge_arena (line 646) | bool
  function chunk_purge_default (line 660) | static bool
  function chunk_purge_wrapper (line 669) | bool
  function chunk_split_default (line 678) | static bool
  function chunk_merge_default (line 688) | static bool
  function rtree_node_elm_t (line 701) | static rtree_node_elm_t *
  function chunk_boot (line 709) | bool
  function chunk_prefork (line 751) | void
  function chunk_postfork_parent (line 758) | void
  function chunk_postfork_child (line 765) | void

FILE: deps/jemalloc-4.1.0/src/chunk_dss.c
  function dss_prec_t (line 43) | dss_prec_t
  function chunk_dss_prec_set (line 56) | bool
  function chunk_in_dss (line 157) | bool
  function chunk_dss_boot (line 175) | bool
  function chunk_dss_prefork (line 190) | void
  function chunk_dss_postfork_parent (line 198) | void
  function chunk_dss_postfork_child (line 206) | void

FILE: deps/jemalloc-4.1.0/src/chunk_mmap.c
  function chunk_dalloc_mmap (line 74) | bool

FILE: deps/jemalloc-4.1.0/src/ckh.c
  function JEMALLOC_INLINE_C (line 52) | JEMALLOC_INLINE_C size_t
  function JEMALLOC_INLINE_C (line 70) | JEMALLOC_INLINE_C size_t
  function JEMALLOC_INLINE_C (line 91) | JEMALLOC_INLINE_C bool
  function JEMALLOC_INLINE_C (line 123) | JEMALLOC_INLINE_C bool
  function JEMALLOC_INLINE_C (line 194) | JEMALLOC_INLINE_C bool
  function JEMALLOC_INLINE_C (line 223) | JEMALLOC_INLINE_C bool
  function ckh_grow (line 246) | static bool
  function ckh_shrink (line 301) | static void
  function ckh_new (line 349) | bool
  function ckh_delete (line 406) | void
  function ckh_count (line 429) | size_t
  function ckh_iter (line 438) | bool
  function ckh_insert (line 458) | bool
  function ckh_remove (line 482) | bool
  function ckh_search (line 514) | bool
  function ckh_string_hash (line 533) | void
  function ckh_string_keycomp (line 540) | bool
  function ckh_pointer_hash (line 550) | void
  function ckh_pointer_keycomp (line 563) | bool

FILE: deps/jemalloc-4.1.0/src/ctl.c
  function JEMALLOC_INLINE_C (line 19) | JEMALLOC_INLINE_C const ctl_named_node_t *
  function JEMALLOC_INLINE_C (line 26) | JEMALLOC_INLINE_C const ctl_named_node_t *
  function JEMALLOC_INLINE_C (line 34) | JEMALLOC_INLINE_C const ctl_indexed_node_t *
  function CTL_PROTO (line 65) | CTL_PROTO(version)
  function thread_prof_name_ctl (line 1403) | static int
  function thread_prof_active_ctl (line 1437) | static int
  function tcache_create_ctl (line 1467) | static int
  function tcache_flush_ctl (line 1494) | static int
  function tcache_destroy_ctl (line 1521) | static int
  function arena_i_purge (line 1550) | static void
  function arena_i_purge_ctl (line 1591) | static int
  function arena_i_decay_ctl (line 1606) | static int
  function arena_i_dss_ctl (line 1621) | static int
  function arena_i_lg_dirty_mult_ctl (line 1677) | static int
  function arena_i_decay_time_ctl (line 1711) | static int
  function arena_i_chunk_hooks_ctl (line 1745) | static int
  function ctl_named_node_t (line 1776) | static const ctl_named_node_t *
  function arenas_narenas_ctl (line 1795) | static int
  function arenas_initialized_ctl (line 1817) | static int
  function arenas_lg_dirty_mult_ctl (line 1843) | static int
  function arenas_decay_time_ctl (line 1869) | static int
  function ctl_named_node_t (line 1903) | static const ctl_named_node_t *
  function ctl_named_node_t (line 1914) | static const ctl_named_node_t *
  function ctl_named_node_t (line 1926) | static const ctl_named_node_t *
  function arenas_extend_ctl (line 1935) | static int
  function prof_thread_active_init_ctl (line 1959) | static int
  function prof_active_ctl (line 1984) | static int
  function prof_dump_ctl (line 2009) | static int
  function prof_gdump_ctl (line 2032) | static int
  function prof_reset_ctl (line 2057) | static int
  function ctl_named_node_t (line 2177) | static const ctl_named_node_t *
  function ctl_named_node_t (line 2196) | static const ctl_named_node_t *
  function ctl_named_node_t (line 2205) | static const ctl_named_node_t *

FILE: deps/jemalloc-4.1.0/src/extent.c
  function JEMALLOC_INLINE_C (line 6) | JEMALLOC_INLINE_C size_t
  function JEMALLOC_INLINE_C (line 17) | JEMALLOC_INLINE_C int
  function extent_ad_comp (line 43) | int

FILE: deps/jemalloc-4.1.0/src/huge.c
  function extent_node_t (line 6) | static extent_node_t *
  function huge_node_set (line 17) | static bool
  function huge_node_unset (line 26) | static void
  function huge_dalloc_junk (line 105) | static void
  function huge_ralloc_no_move_similar (line 124) | static void
  function huge_ralloc_no_move_shrink (line 183) | static bool
  function huge_ralloc_no_move_expand (line 233) | static bool
  function huge_ralloc_no_move (line 278) | bool
  function huge_dalloc (line 369) | void
  function arena_t (line 391) | arena_t *
  function huge_salloc (line 398) | size_t
  function prof_tctx_t (line 414) | prof_tctx_t *
  function huge_prof_tctx_set (line 430) | void
  function huge_prof_tctx_reset (line 443) | void

FILE: deps/jemalloc-4.1.0/src/jemalloc.c
  type malloc_init_t (line 65) | typedef enum {
  function WINAPI (line 202) | WINAPI
  type malloc_utrace_t (line 229) | typedef struct {
  function JEMALLOC_ALWAYS_INLINE_C (line 265) | JEMALLOC_ALWAYS_INLINE_C bool
  function JEMALLOC_ALWAYS_INLINE_C (line 272) | JEMALLOC_ALWAYS_INLINE_C void
  function JEMALLOC_ALWAYS_INLINE_C (line 289) | JEMALLOC_ALWAYS_INLINE_C bool
  function JEMALLOC_ALWAYS_INLINE_C (line 298) | JEMALLOC_ALWAYS_INLINE_C bool
  function a0idalloc (line 325) | static void
  function a0dalloc (line 339) | void
  function bootstrap_free (line 376) | void
  function arena_set (line 386) | static void
  function narenas_total_set (line 393) | static void
  function narenas_total_inc (line 400) | static void
  function narenas_total_get (line 407) | unsigned
  function arena_t (line 415) | static arena_t *
  function arena_t (line 442) | arena_t *
  function arena_bind (line 453) | static void
  function arena_migrate (line 465) | void
  function arena_unbind (line 477) | static void
  function arena_tdata_t (line 487) | arena_tdata_t *
  function arena_t (line 564) | arena_t *
  function thread_allocated_cleanup (line 626) | void
  function thread_deallocated_cleanup (line 633) | void
  function arena_cleanup (line 640) | void
  function arenas_tdata_cleanup (line 650) | void
  function narenas_tdata_cleanup (line 665) | void
  function arenas_tdata_bypass_cleanup (line 672) | void
  function stats_print_atexit (line 679) | static void
  function malloc_ncpus (line 736) | static unsigned
  function malloc_conf_next (line 751) | static bool
  function malloc_conf_error (line 827) | static void
  function malloc_slow_flag_init (line 836) | static void
  function malloc_conf_init (line 856) | static void
  function malloc_init_hard_needed (line 1190) | static bool
  function malloc_init_hard_a0_locked (line 1218) | static bool
  function malloc_init_hard_a0 (line 1267) | static bool
  function malloc_init_hard_recursible (line 1283) | static bool
  function malloc_init_hard_finish (line 1317) | static bool
  function malloc_init_hard (line 1359) | static bool
  function JEMALLOC_ALWAYS_INLINE_C (line 1426) | JEMALLOC_ALWAYS_INLINE_C void *
  function JEMALLOC_ALWAYS_INLINE_C (line 1446) | JEMALLOC_ALWAYS_INLINE_C void *
  function JEMALLOC_ALWAYS_INLINE_C (line 1470) | JEMALLOC_ALWAYS_INLINE_C void
  function JEMALLOC_ALWAYS_INLINE_C (line 1536) | JEMALLOC_ALWAYS_INLINE_C void *
  function imemalign (line 1557) | static int
  function JEMALLOC_NOTHROW (line 1622) | JEMALLOC_NOTHROW
  function JEMALLOC_ALWAYS_INLINE_C (line 1668) | JEMALLOC_ALWAYS_INLINE_C void *
  function JEMALLOC_ALWAYS_INLINE_C (line 1777) | JEMALLOC_ALWAYS_INLINE_C void *
  function JEMALLOC_INLINE_C (line 1801) | JEMALLOC_INLINE_C void
  function JEMALLOC_INLINE_C (line 1828) | JEMALLOC_INLINE_C void
  function JEMALLOC_NOTHROW (line 1914) | JEMALLOC_NOTHROW
  function JEMALLOC_ALWAYS_INLINE_C (line 1999) | JEMALLOC_ALWAYS_INLINE_C bool
  function JEMALLOC_ALWAYS_INLINE_C (line 2031) | JEMALLOC_ALWAYS_INLINE_C bool
  function JEMALLOC_ALWAYS_INLINE_C (line 2051) | JEMALLOC_ALWAYS_INLINE_C void *
  function JEMALLOC_ALWAYS_INLINE_C (line 2086) | JEMALLOC_ALWAYS_INLINE_C void *
  function JEMALLOC_ALWAYS_INLINE_C (line 2117) | JEMALLOC_ALWAYS_INLINE_C void *
  function JEMALLOC_ALWAYS_INLINE_C (line 2207) | JEMALLOC_ALWAYS_INLINE_C void *
  function JEMALLOC_ALWAYS_INLINE_C (line 2324) | JEMALLOC_ALWAYS_INLINE_C size_t
  function ixallocx_prof_sample (line 2337) | static size_t
  function JEMALLOC_ALWAYS_INLINE_C (line 2351) | JEMALLOC_ALWAYS_INLINE_C size_t
  function JEMALLOC_NOTHROW (line 2401) | JEMALLOC_NOTHROW
  function JEMALLOC_NOTHROW (line 2459) | JEMALLOC_NOTHROW
  function JEMALLOC_ALWAYS_INLINE_C (line 2498) | JEMALLOC_ALWAYS_INLINE_C size_t
  function JEMALLOC_NOTHROW (line 2510) | JEMALLOC_NOTHROW
  function JEMALLOC_NOTHROW (line 2535) | JEMALLOC_NOTHROW
  function JEMALLOC_NOTHROW (line 2574) | JEMALLOC_NOTHROW
  function JEMALLOC_NOTHROW (line 2585) | JEMALLOC_NOTHROW
  function JEMALLOC_NOTHROW (line 2593) | JEMALLOC_NOTHROW
  function jemalloc_constructor (line 2631) | JEMALLOC_ATTR(constructor)
  function jemalloc_prefork (line 2640) | void
  function jemalloc_postfork_parent (line 2670) | void
  function jemalloc_postfork_child (line 2699) | void

FILE: deps/jemalloc-4.1.0/src/mutex.c
  function pthread_create_once (line 37) | static void
  function JEMALLOC_EXPORT (line 51) | JEMALLOC_EXPORT int
  function malloc_mutex_init (line 71) | bool
  function malloc_mutex_prefork (line 109) | void
  function malloc_mutex_postfork_parent (line 116) | void
  function malloc_mutex_postfork_child (line 123) | void
  function mutex_boot (line 139) | bool

FILE: deps/jemalloc-4.1.0/src/nstime.c
  function nstime_init (line 5) | void
  function nstime_init2 (line 12) | void
  function nstime_ns (line 19) | uint64_t
  function nstime_sec (line 26) | uint64_t
  function nstime_nsec (line 33) | uint64_t
  function nstime_copy (line 40) | void
  function nstime_compare (line 47) | int
  function nstime_add (line 54) | void
  function nstime_subtract (line 63) | void
  function nstime_imultiply (line 72) | void
  function nstime_idivide (line 82) | void
  function nstime_divide (line 91) | uint64_t
  function nstime_update (line 104) | bool

FILE: deps/jemalloc-4.1.0/src/pages.c
  function pages_commit_impl (line 100) | static bool
  function pages_commit (line 131) | bool
  function pages_decommit (line 138) | bool
  function pages_purge (line 145) | bool

FILE: deps/jemalloc-4.1.0/src/prof.c
  function JEMALLOC_INLINE_C (line 135) | JEMALLOC_INLINE_C int
  function prof_malloc_sample_object (line 225) | void
  function prof_free_sampled_object (line 242) | void
  function bt_init (line 258) | void
  function JEMALLOC_INLINE_C (line 268) | JEMALLOC_INLINE_C void
  function JEMALLOC_INLINE_C (line 283) | JEMALLOC_INLINE_C void
  function prof_backtrace (line 310) | void
  function _Unwind_Reason_Code (line 325) | static _Unwind_Reason_Code
  function _Unwind_Reason_Code (line 334) | static _Unwind_Reason_Code
  function prof_backtrace (line 353) | void
  function prof_backtrace (line 363) | void
  function prof_backtrace (line 524) | void
  function malloc_mutex_t (line 533) | static malloc_mutex_t *
  function malloc_mutex_t (line 541) | static malloc_mutex_t *
  function prof_gctx_t (line 548) | static prof_gctx_t *
  function prof_gctx_try_destroy (line 573) | static void
  function prof_tctx_should_destroy (line 610) | static bool
  function prof_gctx_should_destroy (line 623) | static bool
  function prof_tctx_destroy (line 637) | static void
  function prof_lookup_global (line 707) | static bool
  function prof_tctx_t (line 756) | prof_tctx_t *
  function prof_sample_threshold_update (line 828) | void
  function prof_tdata_t (line 883) | static prof_tdata_t *
  function prof_tdata_count (line 893) | size_t
  function prof_bt_count (line 908) | size_t
  function prof_dump_open (line 932) | static int
  function prof_dump_flush (line 953) | static bool
  function prof_dump_close (line 976) | static bool
  function prof_dump_write (line 989) | static bool
  function prof_dump_printf (line 1020) | static bool
  function prof_tctx_merge_tdata (line 1036) | static void
  function prof_tctx_merge_gctx (line 1068) | static void
  function prof_tctx_t (line 1081) | static prof_tctx_t *
  function prof_tctx_t (line 1101) | static prof_tctx_t *
  function prof_tctx_t (line 1127) | static prof_tctx_t *
  function prof_dump_gctx_prep (line 1151) | static void
  function prof_gctx_t (line 1172) | static prof_gctx_t *
  function prof_gctx_finish (line 1186) | static void
  function prof_tdata_t (line 1230) | static prof_tdata_t *
  function prof_tdata_t (line 1262) | static prof_tdata_t *
  function prof_dump_header (line 1285) | static bool
  function prof_dump_gctx (line 1310) | static bool
  function prof_open_maps (line 1364) | static int
  function prof_getpid (line 1380) | static int
  function prof_dump_maps (line 1391) | static bool
  function prof_leakcheck (line 1445) | static void
  function prof_gctx_t (line 1462) | static prof_gctx_t *
  function prof_dump (line 1481) | static bool
  function prof_dump_filename (line 1563) | static void
  function prof_fdump (line 1583) | static void
  function prof_idump (line 1603) | void
  function prof_mdump (line 1632) | bool
  function prof_gdump (line 1657) | void
  function prof_bt_hash (line 1686) | static void
  function prof_bt_keycomp (line 1696) | static bool
  function JEMALLOC_INLINE_C (line 1709) | JEMALLOC_INLINE_C uint64_t
  function prof_tdata_t (line 1722) | static prof_tdata_t *
  function prof_tdata_t (line 1769) | prof_tdata_t *
  function prof_tdata_should_destroy (line 1778) | static bool
  function prof_tdata_destroy_locked (line 1790) | static void
  function prof_tdata_destroy (line 1808) | static void
  function prof_tdata_detach (line 1817) | static void
  function prof_tdata_t (line 1839) | prof_tdata_t *
  function prof_tdata_expire (line 1853) | static bool
  function prof_tdata_t (line 1870) | static prof_tdata_t *
  function prof_reset (line 1877) | void
  function prof_tdata_cleanup (line 1904) | void
  function prof_active_get (line 1917) | bool
  function prof_active_set (line 1928) | bool
  function prof_thread_name_set (line 1974) | int
  function prof_thread_active_get (line 2008) | bool
  function prof_thread_active_set (line 2021) | bool
  function prof_thread_active_init_get (line 2035) | bool
  function prof_thread_active_init_set (line 2046) | bool
  function prof_gdump_get (line 2058) | bool
  function prof_gdump_set (line 2069) | bool
  function prof_boot0 (line 2081) | void
  function prof_boot1 (line 2091) | void
  function prof_boot2 (line 2117) | bool
  function prof_prefork (line 2200) | void
  function prof_postfork_parent (line 2218) | void
  function prof_postfork_child (line 2236) | void

FILE: deps/jemalloc-4.1.0/src/quarantine.c
  function quarantine_t (line 22) | static quarantine_t *
  function quarantine_alloc_hook_work (line 44) | void
  function quarantine_t (line 63) | static quarantine_t *
  function quarantine_drain_one (line 98) | static void
  function quarantine_drain (line 110) | static void
  function quarantine (line 118) | void
  function quarantine_cleanup (line 171) | void

FILE: deps/jemalloc-4.1.0/src/rtree.c
  function hmin (line 4) | static unsigned
  function rtree_new (line 12) | bool
  function rtree_delete_subtree (line 62) | static void
  function rtree_delete (line 79) | void
  function rtree_node_elm_t (line 91) | static rtree_node_elm_t *
  function rtree_node_elm_t (line 115) | rtree_node_elm_t *
  function rtree_node_elm_t (line 122) | rtree_node_elm_t *

FILE: deps/jemalloc-4.1.0/src/stats.c
  function stats_arena_bins_print (line 49) | static void
  function stats_arena_lruns_print (line 160) | static void
  function stats_arena_hchunks_print (line 206) | static void
  function stats_arena_print (line 255) | static void
  function stats_print (line 368) | void

FILE: deps/jemalloc-4.1.0/src/tcache.c
  function tcache_salloc (line 26) | size_t	tcache_salloc(const void *ptr)
  function tcache_event_hard (line 32) | void
  function tcache_bin_flush_small (line 87) | void
  function tcache_bin_flush_large (line 168) | void
  function tcache_arena_associate (line 252) | void
  function tcache_arena_reassociate (line 265) | void
  function tcache_arena_dissociate (line 273) | void
  function tcache_t (line 297) | tcache_t *
  function tcache_t (line 313) | tcache_t *
  function tcache_destroy (line 353) | static void
  function tcache_cleanup (line 394) | void
  function tcache_enabled_cleanup (line 408) | void
  function tcache_stats_merge (line 416) | void
  function tcaches_create (line 442) | bool
  function tcaches_elm_flush (line 476) | static void
  function tcaches_flush (line 486) | void
  function tcaches_destroy (line 493) | void
  function tcache_boot (line 502) | bool

FILE: deps/jemalloc-4.1.0/src/tsd.c
  function malloc_tsd_dalloc (line 21) | void
  function malloc_tsd_no_cleanup (line 28) | void
  function _malloc_thread_cleanup (line 39) | void
  function malloc_tsd_cleanup_register (line 61) | void
  function tsd_cleanup (line 70) | void
  function malloc_tsd_boot0 (line 109) | bool
  function malloc_tsd_boot1 (line 120) | void
  function BOOL (line 129) | static BOOL WINAPI
  function tsd_init_finish (line 187) | void

FILE: deps/jemalloc-4.1.0/src/util.c
  function wrtmessage (line 47) | static void
  function malloc_write (line 73) | void
  function buferror (line 87) | int
  function uintmax_t (line 107) | uintmax_t
  function malloc_vsnprintf (line 317) | int
  function malloc_cprintf (line 638) | void
  function malloc_printf (line 651) | void

FILE: deps/jemalloc-4.1.0/src/valgrind.c
  function valgrind_make_mem_noaccess (line 8) | void
  function valgrind_make_mem_undefined (line 15) | void
  function valgrind_make_mem_defined (line 22) | void
  function valgrind_freelike_block (line 29) | void

FILE: deps/jemalloc-4.1.0/src/zone.c
  type malloc_introspection_t (line 17) | struct malloc_introspection_t
  function zone_size (line 46) | static size_t
  function zone_free (line 86) | static void
  function zone_free_definite_size (line 121) | static void
  function zone_good_size (line 146) | static size_t
  function zone_force_lock (line 155) | static void
  function zone_force_unlock (line 163) | static void
  function register_zone (line 171) | JEMALLOC_ATTR(constructor)

FILE: deps/jemalloc-4.1.0/test/include/test/SFMT-alti.h
  function vec_recursion (line 64) | unsigned int vec_recursion(vector unsigned int a,
  function JEMALLOC_INLINE (line 98) | JEMALLOC_INLINE void gen_rand_all(sfmt_t *ctx) {
  function JEMALLOC_INLINE (line 125) | JEMALLOC_INLINE void gen_rand_array(sfmt_t *ctx, w128_t *array, int size) {
  function JEMALLOC_INLINE (line 176) | JEMALLOC_INLINE void swap(w128_t *array, int size) {

FILE: deps/jemalloc-4.1.0/test/include/test/SFMT-sse2.h
  function JEMALLOC_ALWAYS_INLINE (line 63) | JEMALLOC_ALWAYS_INLINE __m128i mm_recursion(__m128i *a, __m128i *b,
  function JEMALLOC_INLINE (line 84) | JEMALLOC_INLINE void gen_rand_all(sfmt_t *ctx) {
  function JEMALLOC_INLINE (line 114) | JEMALLOC_INLINE void gen_rand_array(sfmt_t *ctx, w128_t *array, int size) {

FILE: deps/jemalloc-4.1.0/test/include/test/SFMT.h
  type sfmt_t (line 69) | typedef struct sfmt_s sfmt_t;
  function JEMALLOC_INLINE (line 100) | JEMALLOC_INLINE double to_real1(uint32_t v)
  function JEMALLOC_INLINE (line 107) | JEMALLOC_INLINE double genrand_real1(sfmt_t *ctx)
  function JEMALLOC_INLINE (line 113) | JEMALLOC_INLINE double to_real2(uint32_t v)
  function JEMALLOC_INLINE (line 120) | JEMALLOC_INLINE double genrand_real2(sfmt_t *ctx)
  function JEMALLOC_INLINE (line 126) | JEMALLOC_INLINE double to_real3(uint32_t v)
  function JEMALLOC_INLINE (line 133) | JEMALLOC_INLINE double genrand_real3(sfmt_t *ctx)
  function JEMALLOC_INLINE (line 140) | JEMALLOC_INLINE double to_res53(uint64_t v)
  function JEMALLOC_INLINE (line 147) | JEMALLOC_INLINE double to_res53_mix(uint32_t x, uint32_t y)
  function JEMALLOC_INLINE (line 154) | JEMALLOC_INLINE double genrand_res53(sfmt_t *ctx)
  function JEMALLOC_INLINE (line 162) | JEMALLOC_INLINE double genrand_res53_mix(sfmt_t *ctx)

FILE: deps/jemalloc-4.1.0/test/include/test/math.h
  function JEMALLOC_INLINE (line 18) | JEMALLOC_INLINE double
  function JEMALLOC_INLINE (line 53) | JEMALLOC_INLINE double
  function JEMALLOC_INLINE (line 134) | JEMALLOC_INLINE double
  function JEMALLOC_INLINE (line 221) | JEMALLOC_INLINE double
  function JEMALLOC_INLINE (line 305) | JEMALLOC_INLINE double

FILE: deps/jemalloc-4.1.0/test/include/test/mtx.h
  type mtx_t (line 8) | typedef struct {

FILE: deps/jemalloc-4.1.0/test/include/test/test.h
  type test_status_t (line 289) | typedef enum {

FILE: deps/jemalloc-4.1.0/test/include/test/thd.h
  type HANDLE (line 3) | typedef HANDLE thd_t;
  type pthread_t (line 5) | typedef pthread_t thd_t;

FILE: deps/jemalloc-4.1.0/test/include/test/timer.h
  type timedelta_t (line 3) | typedef struct {

FILE: deps/jemalloc-4.1.0/test/integration/MALLOCX_ARENA.c
  function TEST_BEGIN (line 48) | TEST_BEGIN(test_MALLOCX_ARENA)
  function TEST_END (line 61) | TEST_END

FILE: deps/jemalloc-4.1.0/test/integration/aligned_alloc.c
  function TEST_BEGIN (line 8) | TEST_BEGIN(test_alignment_errors)
  function TEST_END (line 28) | TEST_END
  function TEST_END (line 73) | TEST_END
  function TEST_END (line 115) | TEST_END

FILE: deps/jemalloc-4.1.0/test/integration/allocated.c
  function TEST_BEGIN (line 98) | TEST_BEGIN(test_main_thread)
  function TEST_END (line 103) | TEST_END
  function TEST_END (line 112) | TEST_END

FILE: deps/jemalloc-4.1.0/test/integration/chunk.c
  function chunk_dalloc (line 40) | bool
  function chunk_commit (line 52) | bool
  function chunk_decommit (line 66) | bool
  function chunk_purge (line 82) | bool
  function chunk_split (line 94) | bool
  function chunk_merge (line 107) | bool
  function TEST_BEGIN (line 120) | TEST_BEGIN(test_chunk)
  function TEST_END (line 269) | TEST_END

FILE: deps/jemalloc-4.1.0/test/integration/mallocx.c
  function get_nsizes_impl (line 3) | static unsigned
  function get_nhuge (line 16) | static unsigned
  function get_size_impl (line 23) | static size_t
  function get_huge_size (line 42) | static size_t
  function TEST_BEGIN (line 49) | TEST_BEGIN(test_overflow)
  function TEST_END (line 68) | TEST_END
  function TEST_END (line 102) | TEST_END
  function TEST_END (line 135) | TEST_END
  function TEST_END (line 193) | TEST_END

FILE: deps/jemalloc-4.1.0/test/integration/overflow.c
  function TEST_BEGIN (line 3) | TEST_BEGIN(test_overflow)
  function TEST_END (line 41) | TEST_END

FILE: deps/jemalloc-4.1.0/test/integration/posix_memalign.c
  function TEST_BEGIN (line 8) | TEST_BEGIN(test_alignment_errors)
  function TEST_END (line 26) | TEST_END
  function TEST_END (line 65) | TEST_END
  function TEST_END (line 109) | TEST_END

FILE: deps/jemalloc-4.1.0/test/integration/rallocx.c
  function get_nsizes_impl (line 3) | static unsigned
  function get_nhuge (line 16) | static unsigned
  function get_size_impl (line 23) | static size_t
  function get_huge_size (line 42) | static size_t
  function TEST_BEGIN (line 49) | TEST_BEGIN(test_grow_and_shrink)
  function TEST_END (line 92) | TEST_END
  function TEST_BEGIN (line 114) | TEST_BEGIN(test_zero)
  function TEST_END (line 157) | TEST_END
  function TEST_END (line 182) | TEST_END
  function TEST_END (line 220) | TEST_END
  function TEST_END (line 247) | TEST_END

FILE: deps/jemalloc-4.1.0/test/integration/sdallocx.c
  function TEST_BEGIN (line 6) | TEST_BEGIN(test_basic)
  function TEST_END (line 11) | TEST_END
  function TEST_END (line 48) | TEST_END

FILE: deps/jemalloc-4.1.0/test/integration/thread_arena.c
  function TEST_BEGIN (line 40) | TEST_BEGIN(test_thread_arena)
  function TEST_END (line 71) | TEST_END

FILE: deps/jemalloc-4.1.0/test/integration/thread_tcache_enabled.c
  function TEST_BEGIN (line 86) | TEST_BEGIN(test_main_thread)
  function TEST_END (line 91) | TEST_END
  function TEST_END (line 100) | TEST_END

FILE: deps/jemalloc-4.1.0/test/integration/xallocx.c
  function arena_ind (line 8) | static unsigned
  function TEST_BEGIN (line 22) | TEST_BEGIN(test_same_size)
  function TEST_END (line 36) | TEST_END
  function TEST_END (line 52) | TEST_END
  function TEST_END (line 68) | TEST_END
  function get_nsmall (line 83) | static unsigned
  function get_nlarge (line 90) | static unsigned
  function get_nhuge (line 97) | static unsigned
  function get_size_impl (line 104) | static size_t
  function get_small_size (line 123) | static size_t
  function get_large_size (line 130) | static size_t
  function get_huge_size (line 137) | static size_t
  function TEST_BEGIN (line 144) | TEST_BEGIN(test_size)
  function TEST_END (line 172) | TEST_END
  function TEST_END (line 204) | TEST_END
  function TEST_END (line 236) | TEST_END
  function TEST_END (line 303) | TEST_END
  function TEST_END (line 369) | TEST_END
  function validate_fill (line 391) | static bool
  function test_zero (line 409) | static void
  function TEST_BEGIN (line 454) | TEST_BEGIN(test_zero_large)
  function TEST_END (line 464) | TEST_END
  function TEST_END (line 476) | TEST_END

FILE: deps/jemalloc-4.1.0/test/src/SFMT.c
  type w128_t (line 77) | typedef union W128_T w128_t;
  type w128_t (line 86) | typedef union W128_T w128_t;
  type W128_T (line 91) | struct W128_T {
  type w128_t (line 95) | typedef struct W128_T w128_t;
  type sfmt_s (line 99) | struct sfmt_s {
  function JEMALLOC_INLINE_C (line 145) | JEMALLOC_INLINE_C int idxof(int i) {
  function JEMALLOC_INLINE_C (line 149) | JEMALLOC_INLINE_C int idxof(int i) {
  function JEMALLOC_INLINE_C (line 163) | JEMALLOC_INLINE_C void rshift128(w128_t *out, w128_t const *in, int shif...
  function JEMALLOC_INLINE_C (line 178) | JEMALLOC_INLINE_C void rshift128(w128_t *out, w128_t const *in, int shif...
  function JEMALLOC_INLINE_C (line 202) | JEMALLOC_INLINE_C void lshift128(w128_t *out, w128_t const *in, int shif...
  function JEMALLOC_INLINE_C (line 217) | JEMALLOC_INLINE_C void lshift128(w128_t *out, w128_t const *in, int shif...
  function JEMALLOC_INLINE_C (line 244) | JEMALLOC_INLINE_C void do_recursion(w128_t *r, w128_t *a, w128_t *b, w12...
  function JEMALLOC_INLINE_C (line 261) | JEMALLOC_INLINE_C void do_recursion(w128_t *r, w128_t *a, w128_t *b, w12...
  function JEMALLOC_INLINE_C (line 285) | JEMALLOC_INLINE_C void gen_rand_all(sfmt_t *ctx) {
  function JEMALLOC_INLINE_C (line 312) | JEMALLOC_INLINE_C void gen_rand_array(sfmt_t *ctx, w128_t *array, int si...
  function JEMALLOC_INLINE_C (line 346) | JEMALLOC_INLINE_C void swap(w128_t *array, int size) {
  function func1 (line 366) | static uint32_t func1(uint32_t x) {
  function func2 (line 376) | static uint32_t func2(uint32_t x) {
  function period_certification (line 383) | static void period_certification(sfmt_t *ctx) {
  function get_min_array_size32 (line 428) | int get_min_array_size32(void) {
  function get_min_array_size64 (line 437) | int get_min_array_size64(void) {
  function gen_rand32 (line 447) | uint32_t gen_rand32(sfmt_t *ctx) {
  function gen_rand32_range (line 461) | uint32_t gen_rand32_range(sfmt_t *ctx, uint32_t limit) {
  function gen_rand64 (line 482) | uint64_t gen_rand64(sfmt_t *ctx) {
  function gen_rand64_range (line 511) | uint64_t gen_rand64_range(sfmt_t *ctx, uint64_t limit) {
  function fill_array32 (line 551) | void fill_array32(sfmt_t *ctx, uint32_t *array, int size) {
  function fill_array64 (line 587) | void fill_array64(sfmt_t *ctx, uint64_t *array, int size) {
  function sfmt_t (line 607) | sfmt_t *init_gen_rand(uint32_t seed) {
  function sfmt_t (line 638) | sfmt_t *init_by_array(uint32_t *init_key, int key_length) {
  function fini_gen_rand (line 714) | void fini_gen_rand(sfmt_t *ctx) {

FILE: deps/jemalloc-4.1.0/test/src/mq.c
  function mq_nanosleep (line 7) | void

FILE: deps/jemalloc-4.1.0/test/src/mtx.c
  function mtx_init (line 7) | bool
  function mtx_fini (line 31) | void
  function mtx_lock (line 42) | void
  function mtx_unlock (line 55) | void

FILE: deps/jemalloc-4.1.0/test/src/test.c
  function test_skip (line 9) | void
  function test_fail (line 22) | void
  function p_test_init (line 46) | void
  function p_test_fini (line 55) | void
  function test_status_t (line 63) | test_status_t
  function p_test_fail (line 101) | void

FILE: deps/jemalloc-4.1.0/test/src/thd.c
  function thd_create (line 4) | void
  function thd_join (line 13) | void
  function thd_create (line 25) | void
  function thd_join (line 33) | void

FILE: deps/jemalloc-4.1.0/test/src/timer.c
  function timer_start (line 3) | void
  function timer_stop (line 11) | void
  function timer_usec (line 19) | uint64_t
  function timer_ratio (line 29) | void

FILE: deps/jemalloc-4.1.0/test/stress/microbench.c
  function JEMALLOC_INLINE_C (line 3) | JEMALLOC_INLINE_C void
  function compare_funcs (line 16) | void
  function malloc_free (line 42) | static void
  function mallocx_free (line 54) | static void
  function TEST_BEGIN (line 65) | TEST_BEGIN(test_malloc_vs_mallocx)
  function TEST_END (line 71) | TEST_END
  function malloc_sdallocx (line 84) | static void
  function TEST_BEGIN (line 95) | TEST_BEGIN(test_free_vs_dallocx)
  function TEST_END (line 101) | TEST_END
  function TEST_END (line 109) | TEST_END
  function malloc_sallocx_free (line 125) | static void
  function TEST_BEGIN (line 140) | TEST_BEGIN(test_mus_vs_sallocx)
  function TEST_END (line 146) | TEST_END
  function TEST_BEGIN (line 163) | TEST_BEGIN(test_sallocx_vs_nallocx)
  function TEST_END (line 169) | TEST_END

FILE: deps/jemalloc-4.1.0/test/unit/SFMT.c
  function TEST_BEGIN (line 1452) | TEST_BEGIN(test_gen_rand_32)
  function TEST_END (line 1485) | TEST_END
  function TEST_END (line 1521) | TEST_END
  function TEST_END (line 1557) | TEST_END
  function TEST_END (line 1594) | TEST_END

FILE: deps/jemalloc-4.1.0/test/unit/atomic.c
  function TEST_BEGIN (line 69) | TEST_BEGIN(test_atomic_uint64)
  function TEST_END (line 78) | TEST_END
  function TEST_END (line 86) | TEST_END
  function TEST_END (line 94) | TEST_END
  function TEST_END (line 102) | TEST_END
  function TEST_END (line 110) | TEST_END

FILE: deps/jemalloc-4.1.0/test/unit/bitmap.c
  function TEST_BEGIN (line 3) | TEST_BEGIN(test_bitmap_size)
  function TEST_END (line 19) | TEST_END
  function TEST_END (line 42) | TEST_END
  function TEST_END (line 65) | TEST_END
  function TEST_END (line 94) | TEST_END
  function TEST_END (line 151) | TEST_END

FILE: deps/jemalloc-4.1.0/test/unit/ckh.c
  function TEST_BEGIN (line 3) | TEST_BEGIN(test_new_delete)
  function TEST_END (line 18) | TEST_END
  function TEST_END (line 106) | TEST_END
  function TEST_END (line 204) | TEST_END

FILE: deps/jemalloc-4.1.0/test/unit/decay.c
  function nstime_update_mock (line 11) | static bool
  function TEST_BEGIN (line 21) | TEST_BEGIN(test_decay_ticks)
  function TEST_END (line 197) | TEST_END
  function TEST_END (line 289) | TEST_END
  function TEST_END (line 350) | TEST_END

FILE: deps/jemalloc-4.1.0/test/unit/hash.c
  type hash_variant_t (line 32) | typedef enum {
  function hash_variant_bits (line 38) | static int
  function hash_variant_verify_key (line 63) | static void
  function hash_variant_verify (line 142) | static void
  function TEST_BEGIN (line 155) | TEST_BEGIN(test_hash_x86_32)
  function TEST_END (line 160) | TEST_END
  function TEST_END (line 167) | TEST_END
  function TEST_END (line 174) | TEST_END

FILE: deps/jemalloc-4.1.0/test/unit/junk.c
  function watch_junking (line 17) | static void
  function arena_dalloc_junk_small_intercept (line 25) | static void
  function arena_dalloc_junk_large_intercept (line 40) | static void
  function huge_dalloc_junk_intercept (line 55) | static void
  function test_junk (line 69) | static void
  function TEST_BEGIN (line 131) | TEST_BEGIN(test_junk_small)
  function TEST_END (line 137) | TEST_END
  function TEST_END (line 145) | TEST_END
  function shrink_size (line 158) | static size_t
  function arena_ralloc_junk_large_intercept (line 170) | static void
  function TEST_BEGIN (line 180) | TEST_BEGIN(test_junk_large_ralloc_shrink)
  function arena_redzone_corruption_replacement (line 202) | static void
  function TEST_BEGIN (line 210) | TEST_BEGIN(test_junk_redzone)
  function TEST_END (line 241) | TEST_END

FILE: deps/jemalloc-4.1.0/test/unit/lg_chunk.c
  function TEST_BEGIN (line 10) | TEST_BEGIN(test_lg_chunk_clamp)
  function TEST_END (line 18) | TEST_END

FILE: deps/jemalloc-4.1.0/test/unit/mallctl.c
  function TEST_BEGIN (line 3) | TEST_BEGIN(test_mallctl_errors)
  function TEST_END (line 27) | TEST_END
  function TEST_END (line 38) | TEST_END
  function TEST_END (line 73) | TEST_END
  function TEST_END (line 100) | TEST_END
  function TEST_END (line 115) | TEST_END
  function TEST_END (line 147) | TEST_END
  function TEST_END (line 191) | TEST_END
  function TEST_END (line 216) | TEST_END
  function TEST_END (line 242) | TEST_END
  function TEST_END (line 336) | TEST_END
  function TEST_END (line 353) | TEST_END
  function TEST_END (line 387) | TEST_END
  function TEST_END (line 420) | TEST_END
  function TEST_END (line 440) | TEST_END
  function TEST_END (line 460) | TEST_END
  function TEST_END (line 502) | TEST_END
  function TEST_END (line 519) | TEST_END
  function TEST_END (line 553) | TEST_END
  function TEST_END (line 586) | TEST_END
  function TEST_END (line 607) | TEST_END
  function TEST_END (line 626) | TEST_END
  function TEST_END (line 643) | TEST_END
  function TEST_END (line 660) | TEST_END
  function TEST_END (line 678) | TEST_END
  function TEST_END (line 699) | TEST_END

FILE: deps/jemalloc-4.1.0/test/unit/math.c
  function double_eq_rel (line 12) | static bool
  function factorial (line 23) | static uint64_t
  function TEST_BEGIN (line 35) | TEST_BEGIN(test_ln_gamma_factorial)
  function TEST_BEGIN (line 187) | TEST_BEGIN(test_ln_gamma_misc)
  function TEST_BEGIN (line 238) | TEST_BEGIN(test_pt_norm)
  function TEST_BEGIN (line 288) | TEST_BEGIN(test_pt_chi2)
  function TEST_BEGIN (line 350) | TEST_BEGIN(test_pt_gamma_shape)
  function TEST_END (line 368) | TEST_END
  function TEST_END (line 381) | TEST_END

FILE: deps/jemalloc-4.1.0/test/unit/mq.c
  type mq_msg_t (line 6) | typedef struct mq_msg_s mq_msg_t;
  type mq_msg_s (line 7) | struct mq_msg_s {
  function TEST_BEGIN (line 12) | TEST_BEGIN(test_mq_basic)
  function TEST_END (line 31) | TEST_END
  function TEST_BEGIN (line 64) | TEST_BEGIN(test_mq_threaded)
  function TEST_END (line 83) | TEST_END

FILE: deps/jemalloc-4.1.0/test/unit/mtx.c
  function TEST_BEGIN (line 6) | TEST_BEGIN(test_mtx_basic)
  function TEST_END (line 15) | TEST_END
  function TEST_BEGIN (line 36) | TEST_BEGIN(test_mtx_race)
  function TEST_END (line 51) | TEST_END

FILE: deps/jemalloc-4.1.0/test/unit/nstime.c
  function TEST_BEGIN (line 5) | TEST_BEGIN(test_nstime_init)
  function TEST_END (line 14) | TEST_END
  function TEST_END (line 24) | TEST_END
  function TEST_END (line 36) | TEST_END
  function TEST_END (line 71) | TEST_END
  function TEST_END (line 91) | TEST_END
  function TEST_END (line 111) | TEST_END
  function TEST_END (line 129) | TEST_END
  function TEST_END (line 149) | TEST_END
  function TEST_END (line 177) | TEST_END
  function TEST_END (line 203) | TEST_END

FILE: deps/jemalloc-4.1.0/test/unit/prng.c
  function TEST_BEGIN (line 3) | TEST_BEGIN(test_prng_lg_range)
  function TEST_END (line 38) | TEST_END
  function TEST_END (line 59) | TEST_END

FILE: deps/jemalloc-4.1.0/test/unit/prof_accum.c
  function prof_dump_open_intercept (line 13) | static int
  function TEST_BEGIN (line 61) | TEST_BEGIN(test_idump)
  function TEST_END (line 83) | TEST_END

FILE: deps/jemalloc-4.1.0/test/unit/prof_active.c
  function mallctl_bool_get (line 8) | static void
  function mallctl_bool_set (line 21) | static void
  function mallctl_prof_active_get_impl (line 36) | static void
  function mallctl_prof_active_set_impl (line 46) | static void
  function mallctl_thread_prof_active_get_impl (line 57) | static void
  function mallctl_thread_prof_active_set_impl (line 68) | static void
  function prof_sampling_probe_impl (line 79) | static void
  function TEST_BEGIN (line 96) | TEST_BEGIN(test_prof_active)
  function TEST_END (line 128) | TEST_END

FILE: deps/jemalloc-4.1.0/test/unit/prof_gdump.c
  function prof_dump_open_intercept (line 9) | static int
  function TEST_BEGIN (line 22) | TEST_BEGIN(test_gdump)
  function TEST_END (line 73) | TEST_END

FILE: deps/jemalloc-4.1.0/test/unit/prof_idump.c
  function prof_dump_open_intercept (line 11) | static int
  function TEST_BEGIN (line 24) | TEST_BEGIN(test_idump)
  function TEST_END (line 43) | TEST_END

FILE: deps/jemalloc-4.1.0/test/unit/prof_reset.c
  function prof_dump_open_intercept (line 8) | static int
  function set_prof_active (line 19) | static void
  function get_lg_prof_sample (line 27) | static size_t
  function do_prof_reset (line 38) | static void
  function TEST_BEGIN (line 48) | TEST_BEGIN(test_prof_reset_basic)
  function prof_dump_header_intercept (line 96) | static bool
  function TEST_BEGIN (line 106) | TEST_BEGIN(test_prof_reset_cleanup)
  function TEST_BEGIN (line 195) | TEST_BEGIN(test_prof_reset)
  function TEST_BEGIN (line 240) | TEST_BEGIN(test_xallocx)
  function main (line 290) | int

FILE: deps/jemalloc-4.1.0/test/unit/prof_thread_name.c
  function mallctl_thread_name_get_impl (line 7) | static void
  function mallctl_thread_name_set_impl (line 24) | static void
  function TEST_BEGIN (line 38) | TEST_BEGIN(test_prof_thread_name_validation)
  function TEST_BEGIN (line 103) | TEST_BEGIN(test_prof_thread_name_threaded)
  function main (line 122) | int

FILE: deps/jemalloc-4.1.0/test/unit/ql.c
  type list_t (line 6) | typedef struct list_s list_t;
  type list_head_t (line 7) | typedef ql_head(list_t) list_head_t;
  type list_s (line 9) | struct list_s {
  function test_empty_list (line 14) | static void
  function TEST_BEGIN (line 37) | TEST_BEGIN(test_ql_empty)
  function TEST_END (line 44) | TEST_END
  function test_entries_list (line 57) | static void
  function TEST_BEGIN (line 94) | TEST_BEGIN(test_ql_tail_insert)
  function TEST_END (line 107) | TEST_END
  function TEST_END (line 126) | TEST_END
  function TEST_END (line 141) | TEST_END
  function TEST_END (line 160) | TEST_END
  function TEST_END (line 196) | TEST_END

FILE: deps/jemalloc-4.1.0/test/unit/qr.c
  type ring_t (line 8) | typedef struct ring_s ring_t;
  type ring_s (line 10) | struct ring_s {
  function init_entries (line 15) | static void
  function test_independent_entries (line 26) | static void
  function TEST_BEGIN (line 64) | TEST_BEGIN(test_qr_one)
  function TEST_END (line 71) | TEST_END
  function TEST_BEGIN (line 107) | TEST_BEGIN(test_qr_after_insert)
  function TEST_END (line 117) | TEST_END
  function TEST_END (line 146) | TEST_END
  function TEST_END (line 184) | TEST_END
  function TEST_BEGIN (line 209) | TEST_BEGIN(test_qr_meld_split)
  function TEST_END (line 236) | TEST_END

FILE: deps/jemalloc-4.1.0/test/unit/quarantine.c
  function quarantine_clear (line 12) | void
  function TEST_BEGIN (line 22) | TEST_BEGIN(test_quarantine)
  function arena_redzone_corruption_replacement (line 61) | static void
  function TEST_BEGIN (line 69) | TEST_BEGIN(test_quarantine_redzone)
  function TEST_END (line 99) | TEST_END

FILE: deps/jemalloc-4.1.0/test/unit/rb.c
  type node_t (line 14) | typedef struct node_s node_t;
  type node_s (line 16) | struct node_s {
  function node_cmp (line 23) | static int
  type tree_t (line 42) | typedef rb_tree(node_t) tree_t;
  function TEST_BEGIN (line 45) | TEST_BEGIN(test_rb_empty)
  function TEST_END (line 68) | TEST_END
  function node_t (line 114) | static node_t *
  function tree_iterate (line 142) | static unsigned
  function tree_iterate_reverse (line 153) | static unsigned
  function node_remove (line 164) | static void
  function node_t (line 197) | static node_t *
  function node_t (line 208) | static node_t *
  function destroy_cb (line 219) | static void
  function TEST_BEGIN (line 228) | TEST_BEGIN(test_rb_random)
  function TEST_END (line 345) | TEST_END

FILE: deps/jemalloc-4.1.0/test/unit/rtree.c
  function rtree_node_elm_t (line 3) | static rtree_node_elm_t *
  function node_dalloc (line 10) | static void
  function TEST_BEGIN (line 17) | TEST_BEGIN(test_rtree_get_empty)
  function TEST_END (line 30) | TEST_END
  function TEST_END (line 55) | TEST_END
  function TEST_END (line 92) | TEST_END
  function TEST_END (line 140) | TEST_END

FILE: deps/jemalloc-4.1.0/test/unit/run_quantize.c
  function TEST_BEGIN (line 3) | TEST_BEGIN(test_small_run_size)
  function TEST_END (line 34) | TEST_END
  function TEST_END (line 92) | TEST_END
  function TEST_END (line 139) | TEST_END

FILE: deps/jemalloc-4.1.0/test/unit/size_classes.c
  function get_max_size_class (line 3) | static size_t
  function TEST_BEGIN (line 26) | TEST_BEGIN(test_size_classes)
  function TEST_END (line 81) | TEST_END
  function TEST_END (line 103) | TEST_END

FILE: deps/jemalloc-4.1.0/test/unit/smoothstep.c
  function TEST_BEGIN (line 10) | TEST_BEGIN(test_smoothstep_integral)
  function TEST_END (line 37) | TEST_END
  function TEST_END (line 59) | TEST_END
  function TEST_END (line 96) | TEST_END

FILE: deps/jemalloc-4.1.0/test/unit/stats.c
  function TEST_BEGIN (line 3) | TEST_BEGIN(test_stats_summary)
  function TEST_END (line 34) | TEST_END
  function TEST_END (line 73) | TEST_END
  function TEST_END (line 124) | TEST_END
  function no_lazy_lock (line 133) | static void
  function TEST_BEGIN (line 142) | TEST_BEGIN(test_stats_arenas_small)
  function TEST_END (line 189) | TEST_END
  function TEST_END (line 233) | TEST_END
  function TEST_END (line 273) | TEST_END
  function TEST_END (line 347) | TEST_END
  function TEST_END (line 391) | TEST_END
  function TEST_END (line 431) | TEST_END

FILE: deps/jemalloc-4.1.0/test/unit/ticker.c
  function TEST_BEGIN (line 3) | TEST_BEGIN(test_ticker_tick)
  function TEST_END (line 27) | TEST_END
  function TEST_END (line 46) | TEST_END
  function TEST_END (line 66) | TEST_END

FILE: deps/jemalloc-4.1.0/test/unit/tsd.c
  type data_t (line 5) | typedef unsigned int data_t;
  function data_cleanup (line 10) | malloc_tsd_protos(, data_, data_t)
  function TEST_BEGIN (line 79) | TEST_BEGIN(test_tsd_main_thread)
  function TEST_END (line 84) | TEST_END
  function TEST_END (line 96) | TEST_END

FILE: deps/jemalloc-4.1.0/test/unit/util.c
  function TEST_BEGIN (line 34) | TEST_BEGIN(test_pow2_ceil_u64)
  function TEST_END (line 39) | TEST_END
  function TEST_END (line 46) | TEST_END
  function TEST_END (line 53) | TEST_END
  function TEST_END (line 64) | TEST_END
  function TEST_END (line 157) | TEST_END
  function TEST_END (line 190) | TEST_END
  function TEST_END (line 303) | TEST_END

FILE: deps/jemalloc-4.1.0/test/unit/zero.c
  function test_zero (line 8) | static void
  function TEST_BEGIN (line 46) | TEST_BEGIN(test_zero_small)
  function TEST_END (line 52) | TEST_END
  function TEST_END (line 60) | TEST_END
  function TEST_END (line 68) | TEST_END

FILE: deps/leveldb-1.20/db/autocompact_test.cc
  type leveldb (line 11) | namespace leveldb {
    class AutoCompactTest (line 13) | class AutoCompactTest {
      method AutoCompactTest (line 20) | AutoCompactTest() {
      method Key (line 36) | std::string Key(int i) {
      method Size (line 42) | uint64_t Size(const Slice& start, const Slice& limit) {
    function TEST (line 106) | TEST(AutoCompactTest, ReadAll) {
    function TEST (line 110) | TEST(AutoCompactTest, ReadHalf) {
  function main (line 116) | int main(int argc, char** argv) {

FILE: deps/leveldb-1.20/db/builder.cc
  type leveldb (line 15) | namespace leveldb {
    function Status (line 17) | Status BuildTable(const std::string& dbname,

FILE: deps/leveldb-1.20/db/builder.h
  function namespace (line 10) | namespace leveldb {

FILE: deps/leveldb-1.20/db/c.cc
  type leveldb_t (line 46) | struct leveldb_t              { DB*               rep; }
  type leveldb_iterator_t (line 47) | struct leveldb_iterator_t     { Iterator*         rep; }
  type leveldb_writebatch_t (line 48) | struct leveldb_writebatch_t   { WriteBatch        rep; }
  type leveldb_snapshot_t (line 49) | struct leveldb_snapshot_t     { const Snapshot*   rep; }
  type leveldb_readoptions_t (line 50) | struct leveldb_readoptions_t  { ReadOptions       rep; }
  type leveldb_writeoptions_t (line 51) | struct leveldb_writeoptions_t { WriteOptions      rep; }
  type leveldb_options_t (line 52) | struct leveldb_options_t      { Options           rep; }
  type leveldb_cache_t (line 53) | struct leveldb_cache_t        { Cache*            rep; }
  type leveldb_seqfile_t (line 54) | struct leveldb_seqfile_t      { SequentialFile*   rep; }
  type leveldb_randomfile_t (line 55) | struct leveldb_randomfile_t   { RandomAccessFile* rep; }
  type leveldb_writablefile_t (line 56) | struct leveldb_writablefile_t { WritableFile*     rep; }
  type leveldb_logger_t (line 57) | struct leveldb_logger_t       { Logger*           rep; }
  type leveldb_filelock_t (line 58) | struct leveldb_filelock_t     { FileLock*         rep; }
  type leveldb_comparator_t (line 60) | struct leveldb_comparator_t : public Comparator {
    method Compare (line 73) | virtual int Compare(const Slice& a, const Slice& b) const {
    method FindShortestSeparator (line 82) | virtual void FindShortestSeparator(std::string*, const Slice&) const { }
    method FindShortSuccessor (line 83) | virtual void FindShortSuccessor(std::string* key) const { }
  type leveldb_filterpolicy_t (line 86) | struct leveldb_filterpolicy_t : public FilterPolicy {
    method CreateFilter (line 108) | virtual void CreateFilter(const Slice* keys, int n, std::string* dst) ...
    method KeyMayMatch (line 121) | virtual bool KeyMayMatch(const Slice& key, const Slice& filter) const {
  type leveldb_env_t (line 127) | struct leveldb_env_t {
  function SaveError (line 132) | static bool SaveError(char** errptr, const Status& s) {
  function leveldb_t (line 152) | leveldb_t* leveldb_open(
  function leveldb_close (line 165) | void leveldb_close(leveldb_t* db) {
  function leveldb_put (line 170) | void leveldb_put(
  function leveldb_delete (line 180) | void leveldb_delete(
  function leveldb_write (line 189) | void leveldb_write(
  function leveldb_iterator_t (line 218) | leveldb_iterator_t* leveldb_create_iterator(
  function leveldb_snapshot_t (line 226) | const leveldb_snapshot_t* leveldb_create_snapshot(
  function leveldb_release_snapshot (line 233) | void leveldb_release_snapshot(
  function leveldb_approximate_sizes (line 252) | void leveldb_approximate_sizes(
  function leveldb_compact_range (line 267) | void leveldb_compact_range(
  function leveldb_destroy_db (line 278) | void leveldb_destroy_db(
  function leveldb_repair_db (line 285) | void leveldb_repair_db(
  function leveldb_iter_destroy (line 292) | void leveldb_iter_destroy(leveldb_iterator_t* iter) {
  function leveldb_iter_valid (line 297) | unsigned char leveldb_iter_valid(const leveldb_iterator_t* iter) {
  function leveldb_iter_seek_to_first (line 301) | void leveldb_iter_seek_to_first(leveldb_iterator_t* iter) {
  function leveldb_iter_seek_to_last (line 305) | void leveldb_iter_seek_to_last(leveldb_iterator_t* iter) {
  function leveldb_iter_seek (line 309) | void leveldb_iter_seek(leveldb_iterator_t* iter, const char* k, size_t k...
  function leveldb_iter_next (line 313) | void leveldb_iter_next(leveldb_iterator_t* iter) {
  function leveldb_iter_prev (line 317) | void leveldb_iter_prev(leveldb_iterator_t* iter) {
  function leveldb_iter_get_error (line 333) | void leveldb_iter_get_error(const leveldb_iterator_t* iter, char** errpt...
  function leveldb_writebatch_t (line 337) | leveldb_writebatch_t* leveldb_writebatch_create() {
  function leveldb_writebatch_destroy (line 341) | void leveldb_writebatch_destroy(leveldb_writebatch_t* b) {
  function leveldb_writebatch_clear (line 345) | void leveldb_writebatch_clear(leveldb_writebatch_t* b) {
  function leveldb_writebatch_put (line 349) | void leveldb_writebatch_put(
  function leveldb_writebatch_delete (line 356) | void leveldb_writebatch_delete(
  function leveldb_writebatch_iterate (line 362) | void leveldb_writebatch_iterate(
  function leveldb_options_t (line 386) | leveldb_options_t* leveldb_options_create() {
  function leveldb_options_destroy (line 390) | void leveldb_options_destroy(leveldb_options_t* options) {
  function leveldb_options_set_comparator (line 394) | void leveldb_options_set_comparator(
  function leveldb_options_set_filter_policy (line 400) | void leveldb_options_set_filter_policy(
  function leveldb_options_set_create_if_missing (line 406) | void leveldb_options_set_create_if_missing(
  function leveldb_options_set_error_if_exists (line 411) | void leveldb_options_set_error_if_exists(
  function leveldb_options_set_paranoid_checks (line 416) | void leveldb_options_set_paranoid_checks(
  function leveldb_options_set_env (line 421) | void leveldb_options_set_env(leveldb_options_t* opt, leveldb_env_t* env) {
  function leveldb_options_set_info_log (line 425) | void leveldb_options_set_info_log(leveldb_options_t* opt, leveldb_logger...
  function leveldb_options_set_write_buffer_size (line 429) | void leveldb_options_set_write_buffer_size(leveldb_options_t* opt, size_...
  function leveldb_options_set_max_open_files (line 433) | void leveldb_options_set_max_open_files(leveldb_options_t* opt, int n) {
  function leveldb_options_set_cache (line 437) | void leveldb_options_set_cache(leveldb_options_t* opt, leveldb_cache_t* ...
  function leveldb_options_set_block_size (line 441) | void leveldb_options_set_block_size(leveldb_options_t* opt, size_t s) {
  function leveldb_options_set_block_restart_interval (line 445) | void leveldb_options_set_block_restart_interval(leveldb_options_t* opt, ...
  function leveldb_options_set_compression (line 449) | void leveldb_options_set_compression(leveldb_options_t* opt, int t) {
  function leveldb_comparator_t (line 453) | leveldb_comparator_t* leveldb_comparator_create(
    method Compare (line 73) | virtual int Compare(const Slice& a, const Slice& b) const {
    method FindShortestSeparator (line 82) | virtual void FindShortestSeparator(std::string*, const Slice&) const { }
    method FindShortSuccessor (line 83) | virtual void FindShortSuccessor(std::string* key) const { }
  function leveldb_comparator_destroy (line 469) | void leveldb_comparator_destroy(leveldb_comparator_t* cmp) {
  function leveldb_filterpolicy_t (line 473) | leveldb_filterpolicy_t* leveldb_filterpolicy_create(
    method CreateFilter (line 108) | virtual void CreateFilter(const Slice* keys, int n, std::string* dst) ...
    method KeyMayMatch (line 121) | virtual bool KeyMayMatch(const Slice& key, const Slice& filter) const {
  function leveldb_filterpolicy_destroy (line 495) | void leveldb_filterpolicy_destroy(leveldb_filterpolicy_t* filter) {
  function leveldb_filterpolicy_t (line 499) | leveldb_filterpolicy_t* leveldb_filterpolicy_create_bloom(int bits_per_k...
    method CreateFilter (line 108) | virtual void CreateFilter(const Slice* keys, int n, std::string* dst) ...
    method KeyMayMatch (line 121) | virtual bool KeyMayMatch(const Slice& key, const Slice& filter) const {
  function leveldb_readoptions_t (line 522) | leveldb_readoptions_t* leveldb_readoptions_create() {
  function leveldb_readoptions_destroy (line 526) | void leveldb_readoptions_destroy(leveldb_readoptions_t* opt) {
  function leveldb_readoptions_set_verify_checksums (line 530) | void leveldb_readoptions_set_verify_checksums(
  function leveldb_readoptions_set_fill_cache (line 536) | void leveldb_readoptions_set_fill_cache(
  function leveldb_readoptions_set_snapshot (line 541) | void leveldb_readoptions_set_snapshot(
  function leveldb_writeoptions_t (line 547) | leveldb_writeoptions_t* leveldb_writeoptions_create() {
  function leveldb_writeoptions_destroy (line 551) | void leveldb_writeoptions_destroy(leveldb_writeoptions_t* opt) {
  function leveldb_writeoptions_set_sync (line 555) | void leveldb_writeoptions_set_sync(
  function leveldb_cache_t (line 560) | leveldb_cache_t* leveldb_cache_create_lru(size_t capacity) {
  function leveldb_cache_destroy (line 566) | void leveldb_cache_destroy(leveldb_cache_t* cache) {
  function leveldb_env_t (line 571) | leveldb_env_t* leveldb_create_default_env() {
  function leveldb_env_destroy (line 578) | void leveldb_env_destroy(leveldb_env_t* env) {
  function leveldb_free (line 583) | void leveldb_free(void* ptr) {
  function leveldb_major_version (line 587) | int leveldb_major_version() {
  function leveldb_minor_version (line 591) | int leveldb_minor_version() {

FILE: deps/leveldb-1.20/db/c_test.c
  function StartPhase (line 17) | static void StartPhase(const char* name) {
  function CheckEqual (line 41) | static void CheckEqual(const char* expected, const char* v, size_t n) {
  function Free (line 57) | static void Free(char** ptr) {
  function CheckGet (line 64) | static void CheckGet(
  function CheckIter (line 78) | static void CheckIter(leveldb_iterator_t* iter,
  function CheckPut (line 89) | static void CheckPut(void* ptr,
  function CheckDel (line 108) | static void CheckDel(void* ptr, const char* k, size_t klen) {
  function CmpDestroy (line 115) | static void CmpDestroy(void* arg) { }
  function CmpCompare (line 117) | static int CmpCompare(void* arg, const char* a, size_t alen,
  function FilterDestroy (line 134) | static void FilterDestroy(void* arg) { }
  function FilterKeyMatch (line 148) | unsigned char FilterKeyMatch(
  function main (line 157) | int main(int argc, char** argv) {

FILE: deps/leveldb-1.20/db/corruption_test.cc
  type leveldb (line 23) | namespace leveldb {
    class CorruptionTest (line 27) | class CorruptionTest {
      method CorruptionTest (line 35) | CorruptionTest() {
      method Status (line 54) | Status TryReopen() {
      method Reopen (line 60) | void Reopen() {
      method RepairDB (line 64) | void RepairDB() {
      method Build (line 70) | void Build(int n) {
      method Check (line 88) | void Check(int min_expected, int max_expected) {
      method Corrupt (line 126) | void Corrupt(FileType filetype, int offset, int bytes_to_corrupt) {
      method Property (line 176) | int Property(const std::string& name) {
      method Slice (line 188) | Slice Key(int i, std::string* storage) {
      method Slice (line 196) | Slice Value(int k, std::string* storage) {
    function TEST (line 202) | TEST(CorruptionTest, Recovery) {
    function TEST (line 213) | TEST(CorruptionTest, RecoverWriteError) {
    function TEST (line 219) | TEST(CorruptionTest, NewFileErrorDuringWrite) {
    function TEST (line 236) | TEST(CorruptionTest, TableFile) {
    function TEST (line 247) | TEST(CorruptionTest, TableFileRepair) {
    function TEST (line 263) | TEST(CorruptionTest, TableFileIndexData) {
    function TEST (line 273) | TEST(CorruptionTest, MissingDescriptor) {
    function TEST (line 280) | TEST(CorruptionTest, SequenceNumberRecovery) {
    function TEST (line 301) | TEST(CorruptionTest, CorruptedDescriptor) {
    function TEST (line 318) | TEST(CorruptionTest, CompactionInputError) {
    function TEST (line 333) | TEST(CorruptionTest, CompactionInputErrorParanoid) {
    function TEST (line 354) | TEST(CorruptionTest, UnrelatedKeys) {
  function main (line 372) | int main(int argc, char** argv) {

FILE: deps/leveldb-1.20/db/db_bench.cc
  type leveldb (line 117) | namespace leveldb {
    class RandomGenerator (line 123) | class RandomGenerator {
      method RandomGenerator (line 129) | RandomGenerator() {
      method Slice (line 144) | Slice Generate(size_t len) {
    function Slice (line 155) | static Slice TrimSpace(Slice s) {
    function AppendWithSpace (line 168) | static void AppendWithSpace(std::string* str, Slice msg) {
    class Stats (line 176) | class Stats {
      method Stats (line 189) | Stats() { Start(); }
      method Start (line 191) | void Start() {
      method Merge (line 203) | void Merge(const Stats& other) {
      method Stop (line 215) | void Stop() {
      method AddMessage (line 220) | void AddMessage(Slice msg) {
      method FinishedSingleOp (line 224) | void FinishedSingleOp() {
      method AddBytes (line 250) | void AddBytes(int64_t n) {
      method Report (line 254) | void Report(const Slice& name) {
    type SharedState (line 284) | struct SharedState {
      method SharedState (line 299) | SharedState() : cv(&mu) { }
    type ThreadState (line 303) | struct ThreadState {
      method ThreadState (line 309) | ThreadState(int index)
    class Benchmark (line 317) | class Benchmark {
      method PrintHeader (line 329) | void PrintHeader() {
      method PrintWarnings (line 347) | void PrintWarnings() {
      method PrintEnvironment (line 368) | void PrintEnvironment() {
      method Benchmark (line 404) | Benchmark()
      method Run (line 433) | void Run() {
      type ThreadArg (line 551) | struct ThreadArg {
      method ThreadBody (line 558) | static void ThreadBody(void* v) {
      method RunBenchmark (line 586) | void RunBenchmark(int n, Slice name,
      method Crc32c (line 627) | void Crc32c(ThreadState* thread) {
      method AcquireLoad (line 646) | void AcquireLoad(ThreadState* thread) {
      method SnappyCompress (line 662) | void SnappyCompress(ThreadState* thread) {
      method SnappyUncompress (line 687) | void SnappyUncompress(ThreadState* thread) {
      method Open (line 709) | void Open() {
      method OpenBench (line 728) | void OpenBench(ThreadState* thread) {
      method WriteSeq (line 736) | void WriteSeq(ThreadState* thread) {
      method WriteRandom (line 740) | void WriteRandom(ThreadState* thread) {
      method DoWrite (line 744) | void DoWrite(ThreadState* thread, bool seq) {
      method ReadSequential (line 774) | void ReadSequential(ThreadState* thread) {
      method ReadReverse (line 787) | void ReadReverse(ThreadState* thread) {
      method ReadRandom (line 800) | void ReadRandom(ThreadState* thread) {
      method ReadMissing (line 818) | void ReadMissing(ThreadState* thread) {
      method ReadHot (line 830) | void ReadHot(ThreadState* thread) {
      method SeekRandom (line 843) | void SeekRandom(ThreadState* thread) {
      method DoDelete (line 861) | void DoDelete(ThreadState* thread, bool seq) {
      method DeleteSeq (line 882) | void DeleteSeq(ThreadState* thread) {
      method DeleteRandom (line 886) | void DeleteRandom(ThreadState* thread) {
      method ReadWhileWriting (line 890) | void ReadWhileWriting(ThreadState* thread) {
      method Compact (line 920) | void Compact(ThreadState* thread) {
      method PrintStats (line 924) | void PrintStats(const char* key) {
      method WriteToFile (line 932) | static void WriteToFile(void* arg, const char* buf, int n) {
      method HeapProfile (line 936) | void HeapProfile() {
  function main (line 956) | int main(int argc, char** argv) {

FILE: deps/leveldb-1.20/db/db_impl.cc
  type leveldb (line 36) | namespace leveldb {
    type DBImpl::Writer (line 41) | struct DBImpl::Writer {
      method Writer (line 48) | explicit Writer(port::Mutex* mu) : cv(mu) { }
    type DBImpl::CompactionState (line 51) | struct DBImpl::CompactionState {
      type Output (line 61) | struct Output {
      method Output (line 74) | Output* current_output() { return &outputs[outputs.size()-1]; }
      method CompactionState (line 76) | explicit CompactionState(Compaction* c)
    function ClipToRange (line 86) | static void ClipToRange(T* ptr, V minvalue, V maxvalue) {
    function Options (line 90) | Options SanitizeOptions(const std::string& dbname,
    function Status (line 177) | Status DBImpl::NewDB() {
    function Status (line 274) | Status DBImpl::Recover(VersionEdit* edit, bool *save_manifest) {
    function Status (line 365) | Status DBImpl::RecoverLogFile(uint64_t log_number, bool last_log,
    function Status (line 488) | Status DBImpl::WriteLevel0Table(MemTable* mem, VersionEdit* edit,
    function Status (line 621) | Status DBImpl::TEST_CompactMemTable() {
    function Status (line 788) | Status DBImpl::OpenCompactionOutputFile(CompactionState* compact) {
    function Status (line 813) | Status DBImpl::FinishCompactionOutputFile(CompactionState* compact,
    function Status (line 882) | Status DBImpl::InstallCompactionResults(CompactionState* compact) {
    function Status (line 903) | Status DBImpl::DoCompactionWork(CompactionState* compact) {
    type IterState (line 1065) | struct IterState {
    function CleanupIteratorState (line 1072) | static void CleanupIteratorState(void* arg1, void* arg2) {
    function Iterator (line 1083) | Iterator* DBImpl::NewInternalIterator(const ReadOptions& options,
    function Iterator (line 1114) | Iterator* DBImpl::TEST_NewInternalIterator() {
    function Status (line 1125) | Status DBImpl::Get(const ReadOptions& options,
    function Iterator (line 1172) | Iterator* DBImpl::NewIterator(const ReadOptions& options) {
    function Snapshot (line 1191) | const Snapshot* DBImpl::GetSnapshot() {
    function Status (line 1202) | Status DBImpl::Put(const WriteOptions& o, const Slice& key, const Slic...
    function Status (line 1206) | Status DBImpl::Delete(const WriteOptions& options, const Slice& key) {
    function Status (line 1210) | Status DBImpl::Write(const WriteOptions& options, WriteBatch* my_batch) {
    function WriteBatch (line 1285) | WriteBatch* DBImpl::BuildBatchGroup(Writer** last_writer) {
    function Status (line 1334) | Status DBImpl::MakeRoomForWrite(bool force) {
    function Status (line 1492) | Status DB::Put(const WriteOptions& opt, const Slice& key, const Slice&...
    function Status (line 1498) | Status DB::Delete(const WriteOptions& opt, const Slice& key) {
    function Status (line 1506) | Status DB::Open(const Options& options, const std::string& dbname,
    function Status (line 1553) | Status DestroyDB(const std::string& dbname, const Options& options) {

FILE: deps/leveldb-1.20/db/db_impl.h
  type CompactionState (line 69) | struct CompactionState
  type Writer (line 70) | struct Writer
  type ManualCompaction (line 162) | struct ManualCompaction {
  type CompactionStats (line 178) | struct CompactionStats {

FILE: deps/leveldb-1.20/db/db_iter.cc
  type leveldb (line 17) | namespace leveldb {
    function DumpInternalIter (line 20) | static void DumpInternalIter(Iterator* iter) {
    class DBIter (line 39) | class DBIter: public Iterator {
      type Direction (line 46) | enum Direction {
      method DBIter (line 51) | DBIter(DBImpl* db, const Comparator* cmp, Iterator* iter, SequenceNu...
      method Valid (line 65) | virtual bool Valid() const { return valid_; }
      method Slice (line 66) | virtual Slice key() const {
      method Slice (line 70) | virtual Slice value() const {
      method Status (line 74) | virtual Status status() const {
      method SaveKey (line 93) | inline void SaveKey(const Slice& k, std::string* dst) {
      method ClearSavedValue (line 97) | inline void ClearSavedValue() {
      method RandomPeriod (line 107) | ssize_t RandomPeriod() {
    function Iterator (line 308) | Iterator* NewDBIterator(

FILE: deps/leveldb-1.20/db/db_iter.h
  function namespace (line 12) | namespace leveldb {

FILE: deps/leveldb-1.20/db/db_test.cc
  type leveldb (line 20) | namespace leveldb {
    function RandomString (line 22) | static std::string RandomString(Random* rnd, int len) {
    class AtomicCounter (line 29) | class AtomicCounter {
      method AtomicCounter (line 34) | AtomicCounter() : count_(0) { }
      method Increment (line 35) | void Increment() {
      method IncrementBy (line 38) | void IncrementBy(int count) {
      method Read (line 42) | int Read() {
      method Reset (line 46) | void Reset() {
    function DelayMilliseconds (line 52) | void DelayMilliseconds(int millis) {
    class SpecialEnv (line 58) | class SpecialEnv : public EnvWrapper {
      method SpecialEnv (line 81) | explicit SpecialEnv(Env* base) : EnvWrapper(base) {
      method Status (line 91) | Status NewWritableFile(const std::string& f, WritableFile** r) {
      method Status (line 164) | Status NewRandomAccessFile(const std::string& f, RandomAccessFile** ...
    class DBTest (line 189) | class DBTest {
      type OptionConfig (line 194) | enum OptionConfig {
      method DBTest (line 210) | DBTest() : option_config_(kDefault),
      method ChangeOptions (line 228) | bool ChangeOptions() {
      method Options (line 239) | Options CurrentOptions() {
      method DBImpl (line 258) | DBImpl* dbfull() {
      method Reopen (line 262) | void Reopen(Options* options = NULL) {
      method Close (line 266) | void Close() {
      method DestroyAndReopen (line 271) | void DestroyAndReopen(Options* options = NULL) {
      method Status (line 278) | Status TryReopen(Options* options) {
      method Status (line 293) | Status Put(const std::string& k, const std::string& v) {
      method Status (line 297) | Status Delete(const std::string& k) {
      method Get (line 301) | std::string Get(const std::string& k, const Snapshot* snapshot = NUL...
      method Contents (line 316) | std::string Contents() {
      method AllEntriesFor (line 341) | std::string AllEntriesFor(const Slice& user_key) {
      method NumTableFilesAtLevel (line 383) | int NumTableFilesAtLevel(int level) {
      method TotalTableFiles (line 391) | int TotalTableFiles() {
      method FilesPerLevel (line 400) | std::string FilesPerLevel() {
      method CountFiles (line 416) | int CountFiles() {
      method Size (line 422) | uint64_t Size(const Slice& start, const Slice& limit) {
      method Compact (line 429) | void Compact(const Slice& start, const Slice& limit) {
      method MakeTables (line 435) | void MakeTables(int n, const std::string& small, const std::string& ...
      method FillLevels (line 445) | void FillLevels(const std::string& smallest, const std::string& larg...
      method DumpFileCounts (line 449) | void DumpFileCounts(const char* label) {
      method DumpSSTableList (line 462) | std::string DumpSSTableList() {
      method IterStatus (line 468) | std::string IterStatus(Iterator* iter) {
      method DeleteAnSSTFile (line 478) | bool DeleteAnSSTFile() {
      method RenameLDBToSST (line 493) | int RenameLDBToSST() {
    function TEST (line 511) | TEST(DBTest, Empty) {
    function TEST (line 518) | TEST(DBTest, ReadWrite) {
    function TEST (line 529) | TEST(DBTest, PutDeleteGet) {
    function TEST (line 540) | TEST(DBTest, GetFromImmutableLayer) {
    function TEST (line 558) | TEST(DBTest, GetFromVersions) {
    function TEST (line 566) | TEST(DBTest, GetMemUsage) {
    function TEST (line 577) | TEST(DBTest, GetSnapshot) {
    function TEST (line 595) | TEST(DBTest, GetLevel0Ordering) {
    function TEST (line 610) | TEST(DBTest, GetOrderedByLevels) {
    function TEST (line 622) | TEST(DBTest, GetPicksCorrectFile) {
    function TEST (line 637) | TEST(DBTest, GetEncountersEmptyLevel) {
    function TEST (line 676) | TEST(DBTest, IterEmpty) {
    function TEST (line 691) | TEST(DBTest, IterSingle) {
    function TEST (line 729) | TEST(DBTest, IterMulti) {
    function TEST (line 812) | TEST(DBTest, IterSmallAndLargeMix) {
    function TEST (line 850) | TEST(DBTest, IterMultiWithDelete) {
    function TEST (line 867) | TEST(DBTest, Recover) {
    function TEST (line 889) | TEST(DBTest, RecoveryWithEmptyLog) {
    function TEST (line 903) | TEST(DBTest, RecoverDuringMemtableCompaction) {
    function Key (line 924) | static std::string Key(int i) {
    function TEST (line 930) | TEST(DBTest, MinorCompactionsHappen) {
    function TEST (line 955) | TEST(DBTest, RecoverWithLargeLog) {
    function TEST (line 979) | TEST(DBTest, CompactionsGenerateMultipleFiles) {
    function TEST (line 1005) | TEST(DBTest, RepeatedWritesToSameKey) {
    function TEST (line 1024) | TEST(DBTest, SparseMerge) {
    function Between (line 1064) | static bool Between(uint64_t val, uint64_t low, uint64_t high) {
    function TEST (line 1075) | TEST(DBTest, ApproximateSizes) {
    function TEST (line 1133) | TEST(DBTest, ApproximateSizes_MixOfSmallAndLarge) {
    function TEST (line 1176) | TEST(DBTest, IteratorPinsRef) {
    function TEST (line 1198) | TEST(DBTest, Snapshot) {
    function TEST (line 1227) | TEST(DBTest, HiddenValuesAreRemoved) {
    function TEST (line 1258) | TEST(DBTest, DeletionMarkers1) {
    function TEST (line 1287) | TEST(DBTest, DeletionMarkers2) {
    function TEST (line 1313) | TEST(DBTest, OverlapInLevel0) {
    function TEST (line 1354) | TEST(DBTest, L0_CompactionBug_Issue44_a) {
    function TEST (line 1371) | TEST(DBTest, L0_CompactionBug_Issue44_b) {
    function TEST (line 1397) | TEST(DBTest, ComparatorCheck) {
    function TEST (line 1420) | TEST(DBTest, CustomComparator) {
    function TEST (line 1475) | TEST(DBTest, ManualCompaction) {
    function TEST (line 1509) | TEST(DBTest, DBOpen_Options) {
    function TEST (line 1548) | TEST(DBTest, Locking) {
    function TEST (line 1555) | TEST(DBTest, NoSpace) {
    function TEST (line 1574) | TEST(DBTest, NonWritableFileSystem) {
    function TEST (line 1594) | TEST(DBTest, WriteSyncError) {
    function TEST (line 1625) | TEST(DBTest, ManifestWriteError) {
    function TEST (line 1666) | TEST(DBTest, MissingSSTFile) {
    function TEST (line 1684) | TEST(DBTest, StillReadSST) {
    function TEST (line 1700) | TEST(DBTest, FilesDeletedAfterCompaction) {
    function TEST (line 1711) | TEST(DBTest, BloomFilter) {
    type MTState (line 1765) | struct MTState {
    type MTThread (line 1772) | struct MTThread {
    function MTThreadBody (line 1777) | static void MTThreadBody(void* arg) {
    function TEST (line 1824) | TEST(DBTest, MultiThreaded) {
    class ModelDB (line 1860) | class ModelDB: public DB {
      class ModelSnapshot (line 1862) | class ModelSnapshot : public Snapshot {
      method ModelDB (line 1867) | explicit ModelDB(const Options& options): options_(options) { }
      method Status (line 1869) | virtual Status Put(const WriteOptions& o, const Slice& k, const Slic...
      method Status (line 1872) | virtual Status Delete(const WriteOptions& o, const Slice& key) {
      method Status (line 1875) | virtual Status Get(const ReadOptions& options,
      method Iterator (line 1880) | virtual Iterator* NewIterator(const ReadOptions& options) {
      method Snapshot (line 1891) | virtual const Snapshot* GetSnapshot() {
      method ReleaseSnapshot (line 1897) | virtual void ReleaseSnapshot(const Snapshot* snapshot) {
      method Status (line 1900) | virtual Status Write(const WriteOptions& options, WriteBatch* batch) {
      method GetProperty (line 1916) | virtual bool GetProperty(const Slice& property, std::string* value) {
      method GetApproximateSizes (line 1919) | virtual void GetApproximateSizes(const Range* r, int n, uint64_t* si...
      method CompactRange (line 1924) | virtual void CompactRange(const Slice* start, const Slice* end) {
      class ModelIter (line 1928) | class ModelIter: public Iterator {
        method ModelIter (line 1930) | ModelIter(const KVMap* map, bool owned)
        method Valid (line 1936) | virtual bool Valid() const { return iter_ != map_->end(); }
        method SeekToFirst (line 1937) | virtual void SeekToFirst() { iter_ = map_->begin(); }
        method SeekToLast (line 1938) | virtual void SeekToLast() {
        method Seek (line 1945) | virtual void Seek(const Slice& k) {
        method Next (line 1948) | virtual void Next() { ++iter_; }
        method Prev (line 1949) | virtual void Prev() { --iter_; }
        method Slice (line 1950) | virtual Slice key() const { return iter_->first; }
        method Slice (line 1951) | virtual Slice value() const { return iter_->second; }
        method Status (line 1952) | virtual Status status() const { return Status::OK(); }
    function RandomKey (line 1962) | static std::string RandomKey(Random* rnd) {
    function CompareIterators (line 1969) | static bool CompareIterators(int step,
    function TEST (line 2017) | TEST(DBTest, Randomized) {
    function MakeKey (line 2088) | std::string MakeKey(unsigned int num) {
    function BM_LogAndApply (line 2094) | void BM_LogAndApply(int iters, int num_base_files) {
  function main (line 2148) | int main(int argc, char** argv) {

FILE: deps/leveldb-1.20/db/dbformat.cc
  type leveldb (line 10) | namespace leveldb {
    function PackSequenceAndType (line 12) | static uint64_t PackSequenceAndType(uint64_t seq, ValueType t) {
    function AppendInternalKey (line 18) | void AppendInternalKey(std::string* result, const ParsedInternalKey& k...

FILE: deps/leveldb-1.20/db/dbformat.h
  function namespace (line 17) | namespace leveldb {

FILE: deps/leveldb-1.20/db/dbformat_test.cc
  type leveldb (line 9) | namespace leveldb {
    function IKey (line 11) | static std::string IKey(const std::string& user_key,
    function Shorten (line 19) | static std::string Shorten(const std::string& s, const std::string& l) {
    function ShortSuccessor (line 25) | static std::string ShortSuccessor(const std::string& s) {
    function TestKey (line 31) | static void TestKey(const std::string& key,
    class FormatTest (line 47) | class FormatTest { }
    function TEST (line 49) | TEST(FormatTest, InternalKey_EncodeDecode) {
    function TEST (line 65) | TEST(FormatTest, InternalKeyShortSeparator) {
    function TEST (line 101) | TEST(FormatTest, InternalKeyShortestSuccessor) {
  function main (line 110) | int main(int argc, char** argv) {

FILE: deps/leveldb-1.20/db/dumpfile.cc
  type leveldb (line 19) | namespace leveldb {
    function GuessType (line 23) | bool GuessType(const std::string& fname, FileType* type) {
    class CorruptionReporter (line 36) | class CorruptionReporter : public log::Reader::Reporter {
      method Corruption (line 39) | virtual void Corruption(size_t bytes, const Status& status) {
    function Status (line 50) | Status PrintLogContents(Env* env, const std::string& fname,
    class WriteBatchItemPrinter (line 71) | class WriteBatchItemPrinter : public WriteBatch::Handler {
      method Put (line 74) | virtual void Put(const Slice& key, const Slice& value) {
      method Delete (line 82) | virtual void Delete(const Slice& key) {
    function WriteBatchPrinter (line 93) | static void WriteBatchPrinter(uint64_t pos, Slice record, WritableFile...
    function Status (line 118) | Status DumpLog(Env* env, const std::string& fname, WritableFile* dst) {
    function VersionEditPrinter (line 124) | static void VersionEditPrinter(uint64_t pos, Slice record, WritableFil...
    function Status (line 139) | Status DumpDescriptor(Env* env, const std::string& fname, WritableFile...
    function Status (line 143) | Status DumpTable(Env* env, const std::string& fname, WritableFile* dst) {
    function Status (line 210) | Status DumpFile(Env* env, const std::string& fname, WritableFile* dst) {

FILE: deps/leveldb-1.20/db/fault_injection_test.cc
  type leveldb (line 26) | namespace leveldb {
    class FaultInjectionTestEnv (line 32) | class FaultInjectionTestEnv
      method FaultInjectionTestEnv (line 129) | FaultInjectionTestEnv() : EnvWrapper(Env::Default()), filesystem_act...
      method IsFilesystemActive (line 149) | bool IsFilesystemActive() const { return filesystem_active_; }
      method SetFilesystemActive (line 150) | void SetFilesystemActive(bool active) { filesystem_active_ = active; }
    function GetDirName (line 37) | static std::string GetDirName(const std::string filename) {
    function Status (line 46) | Status SyncDir(const std::string& dir) {
    function Status (line 52) | Status Truncate(const std::string& filename, uint64_t length) {
    type FileState (line 84) | struct FileState {
      method FileState (line 90) | FileState(const std::string& filename)
      method FileState (line 96) | FileState() : pos_(-1), pos_at_last_sync_(-1), pos_at_last_flush_(-1...
      method IsFullySynced (line 98) | bool IsFullySynced() const { return pos_ <= 0 || pos_ == pos_at_last...
    class TestWritableFile (line 107) | class TestWritableFile : public WritableFile {
    class FaultInjectionTestEnv (line 127) | class FaultInjectionTestEnv : public EnvWrapper {
      method FaultInjectionTestEnv (line 129) | FaultInjectionTestEnv() : EnvWrapper(Env::Default()), filesystem_act...
      method IsFilesystemActive (line 149) | bool IsFilesystemActive() const { return filesystem_active_; }
      method SetFilesystemActive (line 150) | void SetFilesystemActive(bool active) { filesystem_active_ = active; }
    function Status (line 176) | Status TestWritableFile::Append(const Slice& data) {
    function Status (line 184) | Status TestWritableFile::Close() {
    function Status (line 193) | Status TestWritableFile::Flush() {
    function Status (line 201) | Status TestWritableFile::SyncParent() {
    function Status (line 209) | Status TestWritableFile::Sync() {
    function Status (line 227) | Status FaultInjectionTestEnv::NewWritableFile(const std::string& fname,
    function Status (line 245) | Status FaultInjectionTestEnv::NewAppendableFile(const std::string& fname,
    function Status (line 265) | Status FaultInjectionTestEnv::DropUnsyncedFileData() {
    function Status (line 297) | Status FaultInjectionTestEnv::DeleteFile(const std::string& f) {
    function Status (line 306) | Status FaultInjectionTestEnv::RenameFile(const std::string& s,
    function Status (line 335) | Status FaultInjectionTestEnv::DeleteFilesCreatedAfterLastDirSync() {
    function Status (line 354) | Status FileState::DropUnsyncedData() const {
    class FaultInjectionTest (line 359) | class FaultInjectionTest {
      type ExpectedVerifResult (line 361) | enum ExpectedVerifResult { VAL_EXPECT_NO_ERROR, VAL_EXPECT_ERROR }
      type ResetMethod (line 362) | enum ResetMethod { RESET_DROP_UNSYNCED_DATA, RESET_DELETE_UNSYNCED_F...
      method FaultInjectionTest (line 370) | FaultInjectionTest()
      method ReuseLogs (line 390) | void ReuseLogs(bool reuse) {
      method Build (line 394) | void Build(int start_idx, int num_vals) {
      method Status (line 406) | Status ReadValue(int i, std::string* val) const {
      method Status (line 414) | Status Verify(int start_idx, int num_vals,
      method Slice (line 437) | Slice Key(int i, std::string* storage) const {
      method Slice (line 445) | Slice Value(int k, std::string* storage) const {
      method Status (line 450) | Status OpenDB() {
      method CloseDB (line 457) | void CloseDB() {
      method DeleteAllData (line 462) | void DeleteAllData() {
      method ResetDBState (line 472) | void ResetDBState(ResetMethod reset_method) {
      method PartialCompactTestPreFault (line 485) | void PartialCompactTestPreFault(int num_pre_sync, int num_post_sync) {
      method PartialCompactTestReopenWithFault (line 492) | void PartialCompactTestReopenWithFault(ResetMethod reset_method,
      method NoWriteTestPreFault (line 503) | void NoWriteTestPreFault() {
      method NoWriteTestReopenWithFault (line 506) | void NoWriteTestReopenWithFault(ResetMethod reset_method) {
      method DoTest (line 512) | void DoTest() {
    function TEST (line 540) | TEST(FaultInjectionTest, FaultTestNoLogReuse) {
    function TEST (line 545) | TEST(FaultInjectionTest, FaultTestWithLogReuse) {
  function main (line 552) | int main(int argc, char** argv) {

FILE: deps/leveldb-1.20/db/filename.cc
  type leveldb (line 12) | namespace leveldb {
    function MakeFileName (line 18) | static std::string MakeFileName(const std::string& name, uint64_t number,
    function LogFileName (line 27) | std::string LogFileName(const std::string& name, uint64_t number) {
    function TableFileName (line 32) | std::string TableFileName(const std::string& name, uint64_t number) {
    function SSTTableFileName (line 37) | std::string SSTTableFileName(const std::string& name, uint64_t number) {
    function DescriptorFileName (line 42) | std::string DescriptorFileName(const std::string& dbname, uint64_t num...
    function CurrentFileName (line 50) | std::string CurrentFileName(const std::string& dbname) {
    function LockFileName (line 54) | std::string LockFileName(const std::string& dbname) {
    function TempFileName (line 58) | std::string TempFileName(const std::string& dbname, uint64_t number) {
    function InfoLogFileName (line 63) | std::string InfoLogFileName(const std::string& dbname) {
    function OldInfoLogFileName (line 68) | std::string OldInfoLogFileName(const std::string& dbname) {
    function ParseFileName (line 80) | bool ParseFileName(const std::string& fname,
    function Status (line 126) | Status SetCurrentFile(Env* env, const std::string& dbname,

FILE: deps/leveldb-1.20/db/filename.h
  function namespace (line 16) | namespace leveldb {

FILE: deps/leveldb-1.20/db/filename_test.cc
  type leveldb (line 12) | namespace leveldb {
    class FileNameTest (line 14) | class FileNameTest { }
    function TEST (line 16) | TEST(FileNameTest, Parse) {
    function TEST (line 77) | TEST(FileNameTest, Construction) {
  function main (line 121) | int main(int argc, char** argv) {

FILE: deps/leveldb-1.20/db/leveldbutil.cc
  type leveldb (line 10) | namespace leveldb {
    class StdoutPrinter (line 13) | class StdoutPrinter : public WritableFile {
      method Status (line 15) | virtual Status Append(const Slice& data) {
      method Status (line 19) | virtual Status Close() { return Status::OK(); }
      method Status (line 20) | virtual Status Flush() { return Status::OK(); }
      method Status (line 21) | virtual Status Sync() { return Status::OK(); }
    function HandleDumpCommand (line 24) | bool HandleDumpCommand(Env* env, char** files, int num) {
  function Usage (line 40) | static void Usage() {
  function main (line 48) | int main(int argc, char** argv) {

FILE: deps/leveldb-1.20/db/log_format.h
  function namespace (line 11) | namespace leveldb {

FILE: deps/leveldb-1.20/db/log_reader.cc
  type leveldb (line 12) | namespace leveldb {
    type log (line 13) | namespace log {

FILE: deps/leveldb-1.20/db/log_reader.h
  function namespace (line 14) | namespace leveldb {

FILE: deps/leveldb-1.20/db/log_test.cc
  type leveldb (line 13) | namespace leveldb {
    type log (line 14) | namespace log {
      function BigString (line 18) | static std::string BigString(const std::string& partial_string, size...
      function NumberString (line 28) | static std::string NumberString(int n) {
      function RandomSkewedString (line 35) | static std::string RandomSkewedString(int i, Random* rnd) {
      class LogTest (line 39) | class LogTest {
        class StringDest (line 41) | class StringDest : public WritableFile {
          method Status (line 45) | virtual Status Close() { return Status::OK(); }
          method Status (line 46) | virtual Status Flush() { return Status::OK(); }
          method Status (line 47) | virtual Status Sync() { return Status::OK(); }
          method Status (line 48) | virtual Status Append(const Slice& slice) {
        class StringSource (line 54) | class StringSource : public SequentialFile {
          method StringSource (line 59) | StringSource() : force_error_(false), returned_partial_(false) { }
          method Status (line 61) | virtual Status Read(size_t n, Slice* result, char* scratch) {
          method Status (line 79) | virtual Status Skip(uint64_t n) {
        class ReportCollector (line 91) | class ReportCollector : public Reader::Reporter {
          method ReportCollector (line 96) | ReportCollector() : dropped_bytes_(0) { }
          method Corruption (line 97) | virtual void Corruption(size_t bytes, const Status& status) {
        method LogTest (line 116) | LogTest() : reading_(false),
        method ReopenForAppend (line 127) | void ReopenForAppend() {
        method Write (line 132) | void Write(const std::string& msg) {
        method WrittenBytes (line 137) | size_t WrittenBytes() const {
        method Read (line 141) | std::string Read() {
        method IncrementByte (line 155) | void IncrementByte(int offset, int delta) {
        method SetByte (line 159) | void SetByte(int offset, char new_byte) {
        method ShrinkSize (line 163) | void ShrinkSize(int bytes) {
        method FixChecksum (line 167) | void FixChecksum(int header_offset, int len) {
        method ForceError (line 174) | void ForceError() {
        method DroppedBytes (line 178) | size_t DroppedBytes() const {
        method ReportMessage (line 182) | std::string ReportMessage() const {
        method MatchError (line 187) | std::string MatchError(const std::string& msg) const {
        method WriteInitialOffsetLog (line 195) | void WriteInitialOffsetLog() {
        method StartReadingAt (line 203) | void StartReadingAt(uint64_t initial_offset) {
        method CheckOffsetPastEndReturnsNoRecords (line 208) | void CheckOffsetPastEndReturnsNoRecords(uint64_t offset_past_end) {
        method CheckInitialOffsetRecord (line 220) | void CheckInitialOffsetRecord(uint64_t initial_offset,
      function TEST (line 270) | TEST(LogTest, Empty) {
      function TEST (line 274) | TEST(LogTest, ReadWrite) {
      function TEST (line 287) | TEST(LogTest, ManyBlocks) {
      function TEST (line 297) | TEST(LogTest, Fragmentation) {
      function TEST (line 307) | TEST(LogTest, MarginalTrailer) {
      function TEST (line 320) | TEST(LogTest, MarginalTrailer2) {
      function TEST (line 333) | TEST(LogTest, ShortTrailer) {
      function TEST (line 345) | TEST(LogTest, AlignedEof) {
      function TEST (line 353) | TEST(LogTest, OpenForAppend) {
      function TEST (line 362) | TEST(LogTest, RandomRead) {
      function TEST (line 377) | TEST(LogTest, ReadError) {
      function TEST (line 385) | TEST(LogTest, BadRecordType) {
      function TEST (line 395) | TEST(LogTest, TruncatedTrailingRecordIsIgnored) {
      function TEST (line 404) | TEST(LogTest, BadLength) {
      function TEST (line 415) | TEST(LogTest, BadLengthAtEndIsIgnored) {
      function TEST (line 423) | TEST(LogTest, ChecksumMismatch) {
      function TEST (line 431) | TEST(LogTest, UnexpectedMiddleType) {
      function TEST (line 440) | TEST(LogTest, UnexpectedLastType) {
      function TEST (line 449) | TEST(LogTest, UnexpectedFullType) {
      function TEST (line 460) | TEST(LogTest, UnexpectedFirstType) {
      function TEST (line 471) | TEST(LogTest, MissingLastIsIgnored) {
      function TEST (line 480) | TEST(LogTest, PartialLastIsIgnored) {
      function TEST (line 489) | TEST(LogTest, SkipIntoMultiRecord) {
      function TEST (line 505) | TEST(LogTest, ErrorJoinsRecords) {
      function TEST (line 528) | TEST(LogTest, ReadStart) {
      function TEST (line 532) | TEST(LogTest, ReadSecondOneOff) {
      function TEST (line 536) | TEST(LogTest, ReadSecondTenThousand) {
      function TEST (line 540) | TEST(LogTest, ReadSecondStart) {
      function TEST (line 544) | TEST(LogTest, ReadThirdOneOff) {
      function TEST (line 548) | TEST(LogTest, ReadThirdStart) {
      function TEST (line 552) | TEST(LogTest, ReadFourthOneOff) {
      function TEST (line 556) | TEST(LogTest, ReadFourthFirstBlockTrailer) {
      function TEST (line 560) | TEST(LogTest, ReadFourthMiddleBlock) {
      function TEST (line 564) | TEST(LogTest, ReadFourthLastBlock) {
      function TEST (line 568) | TEST(LogTest, ReadFourthStart) {
      function TEST (line 574) | TEST(LogTest, ReadInitialOffsetIntoBlockPadding) {
      function TEST (line 578) | TEST(LogTest, ReadEnd) {
      function TEST (line 582) | TEST(LogTest, ReadPastEnd) {
  function main (line 589) | int main(int argc, char** argv) {

FILE: deps/leveldb-1.20/db/log_writer.cc
  type leveldb (line 12) | namespace leveldb {
    type log (line 13) | namespace log {
      function InitTypeCrc (line 15) | static void InitTypeCrc(uint32_t* type_crc) {
      function Status (line 36) | Status Writer::AddRecord(const Slice& slice) {
      function Status (line 84) | Status Writer::EmitPhysicalRecord(RecordType t, const char* ptr, siz...

FILE: deps/leveldb-1.20/db/log_writer.h
  function namespace (line 13) | namespace leveldb {

FILE: deps/leveldb-1.20/db/memtable.cc
  type leveldb (line 12) | namespace leveldb {
    function Slice (line 14) | static Slice GetLengthPrefixedSlice(const char* data) {
    class MemTableIterator (line 51) | class MemTableIterator: public Iterator {
      method MemTableIterator (line 53) | explicit MemTableIterator(MemTable::Table* table) : iter_(table) { }
      method Valid (line 55) | virtual bool Valid() const { return iter_.Valid(); }
      method Seek (line 56) | virtual void Seek(const Slice& k) { iter_.Seek(EncodeKey(&tmp_, k)); }
      method SeekToFirst (line 57) | virtual void SeekToFirst() { iter_.SeekToFirst(); }
      method SeekToLast (line 58) | virtual void SeekToLast() { iter_.SeekToLast(); }
      method Next (line 59) | virtual void Next() { iter_.Next(); }
      method Prev (line 60) | virtual void Prev() { iter_.Prev(); }
      method Slice (line 61) | virtual Slice key() const { return GetLengthPrefixedSlice(iter_.key(...
      method Slice (line 62) | virtual Slice value() const {
      method Status (line 67) | virtual Status status() const { return Status::OK(); }
    function Iterator (line 78) | Iterator* MemTable::NewIterator() {

FILE: deps/leveldb-1.20/db/memtable.h
  function namespace (line 14) | namespace leveldb {

FILE: deps/leveldb-1.20/db/recovery_test.cc
  type leveldb (line 16) | namespace leveldb {
    class RecoveryTest (line 18) | class RecoveryTest {
      method RecoveryTest (line 20) | RecoveryTest() : env_(Env::Default()), db_(NULL) {
      method DBImpl (line 31) | DBImpl* dbfull() const { return reinterpret_cast<DBImpl*>(db_); }
      method Env (line 32) | Env* env() const { return env_; }
      method CanAppend (line 34) | bool CanAppend() {
      method Close (line 45) | void Close() {
      method Status (line 50) | Status OpenWithStatus(Options* options = NULL) {
      method Open (line 65) | void Open(Options* options = NULL) {
      method Status (line 70) | Status Put(const std::string& k, const std::string& v) {
      method Get (line 74) | std::string Get(const std::string& k, const Snapshot* snapshot = NUL...
      method ManifestFileName (line 85) | std::string ManifestFileName() {
      method LogName (line 95) | std::string LogName(uint64_t number) {
      method DeleteLogFiles (line 99) | size_t DeleteLogFiles() {
      method DeleteManifestFile (line 107) | void DeleteManifestFile() {
      method FirstLogFile (line 111) | uint64_t FirstLogFile() {
      method GetFiles (line 115) | std::vector<uint64_t> GetFiles(FileType t) {
      method NumLogs (line 129) | int NumLogs() {
      method NumTables (line 133) | int NumTables() {
      method FileSize (line 137) | uint64_t FileSize(const std::string& fname) {
      method CompactMemTable (line 143) | void CompactMemTable() {
      method MakeLogFile (line 148) | void MakeLogFile(uint64_t lognum, SequenceNumber seq, Slice key, Sli...
    function TEST (line 167) | TEST(RecoveryTest, ManifestReused) {
    function TEST (line 183) | TEST(RecoveryTest, LargeManifestCompacted) {
    function TEST (line 214) | TEST(RecoveryTest, NoLogFiles) {
    function TEST (line 223) | TEST(RecoveryTest, LogFileReuse) {
    function TEST (line 253) | TEST(RecoveryTest, MultipleMemTables) {
    function TEST (line 282) | TEST(RecoveryTest, MultipleLogFiles) {
    function TEST (line 328) | TEST(RecoveryTest, ManifestMissing) {
  function main (line 339) | int main(int argc, char** argv) {

FILE: deps/leveldb-1.20/db/repair.cc
  type leveldb (line 41) | namespace leveldb {
    class Repairer (line 45) | class Repairer {
      method Repairer (line 47) | Repairer(const std::string& dbname, const Options& options)
      method Status (line 70) | Status Run() {
      type TableInfo (line 95) | struct TableInfo {
      method Status (line 116) | Status FindFiles() {
      method ConvertLogFilesToTables (line 149) | void ConvertLogFilesToTables() {
      method Status (line 162) | Status ConvertLogToTable(uint64_t log) {
      method ExtractMetaData (line 244) | void ExtractMetaData() {
      method Iterator (line 250) | Iterator* NewTableIterator(const FileMetaData& meta) {
      method ScanTable (line 258) | void ScanTable(uint64_t number) {
      method RepairTable (line 321) | void RepairTable(const std::string& src, TableInfo t) {
      method Status (line 375) | Status WriteDescriptor() {
      method ArchiveFile (line 434) | void ArchiveFile(const std::string& fname) {
    function Status (line 456) | Status RepairDB(const std::string& dbname, const Options& options) {

FILE: deps/leveldb-1.20/db/skiplist.h
  function namespace (line 36) | namespace leveldb {

FILE: deps/leveldb-1.20/db/skiplist_test.cc
  type leveldb (line 13) | namespace leveldb {
    type Comparator (line 17) | struct Comparator {
    class SkipTest (line 29) | class SkipTest { }
    function TEST (line 31) | TEST(SkipTest, Empty) {
    function TEST (line 47) | TEST(SkipTest, InsertAndLookup) {
    class ConcurrentTest (line 149) | class ConcurrentTest {
      method key (line 153) | static uint64_t key(Key key) { return (key >> 40); }
      method gen (line 154) | static uint64_t gen(Key key) { return (key >> 8) & 0xffffffffu; }
      method hash (line 155) | static uint64_t hash(Key key) { return key & 0xff; }
      method HashNumbers (line 157) | static uint64_t HashNumbers(uint64_t k, uint64_t g) {
      method Key (line 162) | static Key MakeKey(uint64_t k, uint64_t g) {
      method IsValidKey (line 169) | static bool IsValidKey(Key k) {
      method Key (line 173) | static Key RandomTarget(Random* rnd) {
      type State (line 188) | struct State {
        method Set (line 190) | void Set(int k, intptr_t v) {
        method Get (line 193) | intptr_t Get(int k) {
        method State (line 197) | State() {
      method ConcurrentTest (line 214) | ConcurrentTest() : list_(Comparator(), &arena_) { }
      method WriteStep (line 217) | void WriteStep(Random* rnd) {
      method ReadStep (line 225) | void ReadStep(Random* rnd) {
    function TEST (line 288) | TEST(SkipTest, ConcurrentWithoutThreads) {
    class TestState (line 297) | class TestState {
      type ReaderState (line 303) | enum ReaderState {
      method TestState (line 309) | explicit TestState(int s)
      method Wait (line 315) | void Wait(ReaderState s) {
      method Change (line 323) | void Change(ReaderState s) {
    function ConcurrentReader (line 336) | static void ConcurrentReader(void* arg) {
    function RunConcurrent (line 348) | static void RunConcurrent(int run) {
    function TEST (line 368) | TEST(SkipTest, Concurrent1) { RunConcurrent(1); }
    function TEST (line 369) | TEST(SkipTest, Concurrent2) { RunConcurrent(2); }
    function TEST (line 370) | TEST(SkipTest, Concurrent3) { RunConcurrent(3); }
    function TEST (line 371) | TEST(SkipTest, Concurrent4) { RunConcurrent(4); }
    function TEST (line 372) | TEST(SkipTest, Concurrent5) { RunConcurrent(5); }
  function main (line 376) | int main(int argc, char** argv) {

FILE: deps/leveldb-1.20/db/snapshot.h
  function namespace (line 11) | namespace leveldb {

FILE: deps/leveldb-1.20/db/table_cache.cc
  type leveldb (line 12) | namespace leveldb {
    type TableAndFile (line 14) | struct TableAndFile {
    function DeleteEntry (line 19) | static void DeleteEntry(const Slice& key, void* value) {
    function UnrefEntry (line 26) | static void UnrefEntry(void* arg1, void* arg2) {
    function Status (line 45) | Status TableCache::FindTable(uint64_t file_number, uint64_t file_size,
    function Iterator (line 82) | Iterator* TableCache::NewIterator(const ReadOptions& options,
    function Status (line 105) | Status TableCache::Get(const ReadOptions& options,

FILE: deps/leveldb-1.20/db/table_cache.h
  function namespace (line 17) | namespace leveldb {

FILE: deps/leveldb-1.20/db/version_edit.cc
  type leveldb (line 10) | namespace leveldb {
    type Tag (line 14) | enum Tag {
    function GetInternalKey (line 88) | static bool GetInternalKey(Slice* input, InternalKey* dst) {
    function GetLevel (line 98) | static bool GetLevel(Slice* input, int* level) {
    function Status (line 109) | Status VersionEdit::DecodeFrom(const Slice& src) {

FILE: deps/leveldb-1.20/db/version_edit.h
  function namespace (line 13) | namespace leveldb {

FILE: deps/leveldb-1.20/db/version_edit_test.cc
  type leveldb (line 8) | namespace leveldb {
    function TestEncodeDecode (line 10) | static void TestEncodeDecode(const VersionEdit& edit) {
    class VersionEditTest (line 20) | class VersionEditTest { }
    function TEST (line 22) | TEST(VersionEditTest, EncodeDecode) {
  function main (line 44) | int main(int argc, char** argv) {

FILE: deps/leveldb-1.20/db/version_set.cc
  type leveldb (line 21) | namespace leveldb {
    function TargetFileSize (line 23) | static int TargetFileSize(const Options* options) {
    function MaxGrandParentOverlapBytes (line 29) | static int64_t MaxGrandParentOverlapBytes(const Options* options) {
    function ExpandedCompactionByteSizeLimit (line 36) | static int64_t ExpandedCompactionByteSizeLimit(const Options* options) {
    function MaxBytesForLevel (line 40) | static double MaxBytesForLevel(const Options* options, int level) {
    function MaxFileSizeForLevel (line 53)
Condensed preview — 553 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (6,209K chars).
[
  {
    "path": ".gitignore",
    "chars": 490,
    "preview": "ssdb-server*\nios\n888*.conf\nvar888*\n*.exe\n*.o\n*.a\n*.out\n*.class\ntmp\n.DS_Store\n*.pyc\nvar/*\nvar_*\nvar_slave/*\ndev_ssdb.conf"
  },
  {
    "path": "ChangeLog",
    "chars": 7926,
    "preview": "* 1.9.9\n\t* Bug fixeds:\n\t\t- Fix binlog resource leak bug(2020-09-25)\n* 1.9.8\n\t* New features:\n\t\t- optimize hclear perform"
  },
  {
    "path": "Dockerfile",
    "chars": 1026,
    "preview": "FROM ubuntu\nMAINTAINER wendal \"wendal1985@gmail.com\"\n\n# Set the env variable DEBIAN_FRONTEND to noninteractive\nENV DEBIA"
  },
  {
    "path": "LICENSE",
    "chars": 1470,
    "preview": "Copyright (c) 2013 SSDB Authors\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without"
  },
  {
    "path": "Makefile",
    "chars": 1583,
    "preview": "PREFIX=/usr/local/ssdb\n\n$(shell sh build.sh 1>&2)\ninclude build_config.mk\n\nall:\n\tmkdir -p var var_slave\n\tchmod u+x \"${LE"
  },
  {
    "path": "README.md",
    "chars": 4388,
    "preview": "# SSDB - A Redis compatible NoSQL database stored on disk\n\n[![Author](https://img.shields.io/badge/author-@ideawu-blue.s"
  },
  {
    "path": "api/README.md",
    "chars": 28,
    "preview": "See https://github.com/ssdb\n"
  },
  {
    "path": "api/cpp/README.md",
    "chars": 21,
    "preview": "Moved to src/client\n\n"
  },
  {
    "path": "api/cpy/SSDB.cpy",
    "chars": 8874,
    "preview": "/**\r\n * Copyright (c) 2012, ideawu\r\n * All rights reserved.\r\n * @author: ideawu\r\n * @link: http://www.ideawu.com/\r\n *\r\n "
  },
  {
    "path": "api/cpy/demo.cpy",
    "chars": 1559,
    "preview": "/**\n * Copyright (c) 2012, ideawu\n * All rights reserved.\n * @author: ideawu\n * @link: http://www.ideawu.com/\n *\n * SSDB"
  },
  {
    "path": "api/php/SSDB.php",
    "chars": 14048,
    "preview": "<?php\n/**\n * Copyright (c) 2012, ideawu\n * All rights reserved.\n * @author: ideawu\n * @link: http://www.ideawu.com/\n *\n "
  },
  {
    "path": "api/php/demo.php",
    "chars": 2105,
    "preview": "<?php\n/**\n * Copyright (c) 2012, ideawu\n * All rights reserved.\n * @author: ideawu\n * @link: http://www.ideawu.com/\n *\n "
  },
  {
    "path": "api/php/perf.php",
    "chars": 1311,
    "preview": "<?php\nrequire_once(\"SSDB.php\");\n$ssdb = new SimpleSSDB('127.0.0.1', 8888);\n\n$DATA_LEN = 100 * 1024;\n\n$str = str_pad('', "
  },
  {
    "path": "api/python/SSDB.py",
    "chars": 9512,
    "preview": "# encoding=utf-8\n# Generated by cpy\n# 2020-02-15 18:42:38.728393\nimport os, sys\nfrom sys import stdin, stdout\n\nimport so"
  },
  {
    "path": "api/python/demo.py",
    "chars": 1523,
    "preview": "# encoding=utf-8\r\n# Generated by cpy\r\n# 2013-01-26 21:04:47.984000\r\nimport os, sys\r\nfrom sys import stdin, stdout\r\n\r\nfro"
  },
  {
    "path": "build.sh",
    "chars": 3665,
    "preview": "#!/bin/sh\nBASE_DIR=`pwd`\nJEMALLOC_PATH=\"$BASE_DIR/deps/jemalloc-4.1.0\"\nLEVELDB_PATH=\"$BASE_DIR/deps/leveldb-1.20\"\nSNAPPY"
  },
  {
    "path": "deps/cpy/Eval.g",
    "chars": 8491,
    "preview": "/********************************\r\n * Author: ideawu\r\n * Link: http://www.ideawu.net/\r\n ********************************"
  },
  {
    "path": "deps/cpy/Eval.py",
    "chars": 141340,
    "preview": "# $ANTLR 3.4 Eval.g 2012-12-09 16:07:29\r\n\r\nimport sys\r\nfrom antlr3 import *\r\nfrom antlr3.tree import *\r\n\r\nfrom antlr3.co"
  },
  {
    "path": "deps/cpy/Expr.g",
    "chars": 6754,
    "preview": "/********************************\r\n * Author: ideawu\r\n * Link: http://www.ideawu.net/\r\n ********************************"
  },
  {
    "path": "deps/cpy/ExprLexer.py",
    "chars": 68008,
    "preview": "# $ANTLR 3.5 Expr.g 2013-04-12 19:22:24\n\nimport sys\nfrom antlr3 import *\nfrom antlr3.compat import set, frozenset\n\n\n\n# f"
  },
  {
    "path": "deps/cpy/ExprParser.py",
    "chars": 309324,
    "preview": "# $ANTLR 3.5 Expr.g 2013-04-12 19:22:24\n\nimport sys\nfrom antlr3 import *\nfrom antlr3.compat import set, frozenset\n\nfrom "
  },
  {
    "path": "deps/cpy/Makefile",
    "chars": 264,
    "preview": "\nall: antlr test\n\nantlr:\n\tjava -jar ../antlr-3.4-complete.jar Expr.g Eval.g\n\nlexer:\n\tjava -jar ../antlr-3.4-complete.jar"
  },
  {
    "path": "deps/cpy/Readme.txt",
    "chars": 307,
    "preview": "**********************************************\n* Author: ideawu\n* Link: http://www.ideawu.net/\n* Cpy - Cpy provides you "
  },
  {
    "path": "deps/cpy/antlr3/__init__.py",
    "chars": 5721,
    "preview": "\"\"\" @package antlr3\n@brief ANTLR3 runtime package\n\nThis module contains all support classes, which are needed to use rec"
  },
  {
    "path": "deps/cpy/antlr3/compat.py",
    "chars": 1776,
    "preview": "\"\"\"Compatibility stuff\"\"\"\n\n# begin[licence]\n#\n# [The \"BSD licence\"]\n# Copyright (c) 2005-2008 Terence Parr\n# All rights "
  },
  {
    "path": "deps/cpy/antlr3/constants.py",
    "chars": 2111,
    "preview": "\"\"\"ANTLR3 runtime package\"\"\"\n\n# begin[licence]\n#\n# [The \"BSD licence\"]\n# Copyright (c) 2005-2008 Terence Parr\n# All righ"
  },
  {
    "path": "deps/cpy/antlr3/dfa.py",
    "chars": 7631,
    "preview": "\"\"\"ANTLR3 runtime package\"\"\"\n\n# begin[licence]\n#\n# [The \"BSD licence\"]\n# Copyright (c) 2005-2008 Terence Parr\n# All righ"
  },
  {
    "path": "deps/cpy/antlr3/dottreegen.py",
    "chars": 6980,
    "preview": "\"\"\" @package antlr3.dottreegenerator\n@brief ANTLR3 runtime package, tree module\n\nThis module contains all support classe"
  },
  {
    "path": "deps/cpy/antlr3/exceptions.py",
    "chars": 12739,
    "preview": "\"\"\"ANTLR3 exception hierarchy\"\"\"\n\n# begin[licence]\n#\n# [The \"BSD licence\"]\n# Copyright (c) 2005-2008 Terence Parr\n# All "
  },
  {
    "path": "deps/cpy/antlr3/extras.py",
    "chars": 1913,
    "preview": "\"\"\" @package antlr3.dottreegenerator\n@brief ANTLR3 runtime package, tree module\n\nThis module contains all support classe"
  },
  {
    "path": "deps/cpy/antlr3/main.py",
    "chars": 8626,
    "preview": "\"\"\"ANTLR3 runtime package\"\"\"\n\n# begin[licence]\n#\n# [The \"BSD licence\"]\n# Copyright (c) 2005-2008 Terence Parr\n# All righ"
  },
  {
    "path": "deps/cpy/antlr3/recognizers.py",
    "chars": 52795,
    "preview": "\"\"\"ANTLR3 runtime package\"\"\"\n\n# begin[licence]\n#\n# [The \"BSD licence\"]\n# Copyright (c) 2005-2008 Terence Parr\n# All righ"
  },
  {
    "path": "deps/cpy/antlr3/streams.py",
    "chars": 43606,
    "preview": "\"\"\"ANTLR3 runtime package\"\"\"\n\n# begin[licence]\n#\n# [The \"BSD licence\"]\n# Copyright (c) 2005-2008 Terence Parr\n# All righ"
  },
  {
    "path": "deps/cpy/antlr3/tokens.py",
    "chars": 12016,
    "preview": "\"\"\"ANTLR3 runtime package\"\"\"\n\n# begin[licence]\n#\n# [The \"BSD licence\"]\n# Copyright (c) 2005-2008 Terence Parr\n# All righ"
  },
  {
    "path": "deps/cpy/antlr3/tree.py",
    "chars": 70346,
    "preview": "\"\"\" @package antlr3.tree\n@brief ANTLR3 runtime package, tree module\n\nThis module contains all support classes for AST co"
  },
  {
    "path": "deps/cpy/antlr3/treewizard.py",
    "chars": 18202,
    "preview": "\"\"\" @package antlr3.tree\n@brief ANTLR3 runtime package, treewizard module\n\nA utility module to create ASTs at runtime.\nS"
  },
  {
    "path": "deps/cpy/cpy",
    "chars": 230,
    "preview": "#!/bin/sh\n\nDIR=`dirname $0`\n\nwhich python2.7 > /dev/null 2>&1\n[ $? -eq 0 ] && { python2.7 $DIR/cpy.py $@; exit $?;}\nwhic"
  },
  {
    "path": "deps/cpy/cpy.bat",
    "chars": 57,
    "preview": "\n@echo off\npython %~dp0cpy.py %1 %2 %3 %4 %5 %6 %7 %8 %9\n"
  },
  {
    "path": "deps/cpy/cpy.py",
    "chars": 1595,
    "preview": "# encoding=utf-8\r\n#################################\r\n# Author: ideawu\r\n# Link: http://www.ideawu.net/\r\n#################"
  },
  {
    "path": "deps/cpy/engine.py",
    "chars": 13607,
    "preview": "# encoding=utf-8\n#################################\n# Author: ideawu\n# Link: http://www.ideawu.net/\n#####################"
  },
  {
    "path": "deps/cpy/samples/class.cpy",
    "chars": 207,
    "preview": "class A{\n\tpublic a = 0;\n\tpublic static s = 1;\n\n\tfunction init(a){\n\t\tthis.a = a;\n\t\tprint 'A init', a;\n\t}\n\n\tfunction f(a, "
  },
  {
    "path": "deps/cpy/samples/extends.cpy",
    "chars": 126,
    "preview": "class A{\n\tfunction f(){\n\t\tprint 'A.f';\n\t}\n}\nclass B extends A{\n\tfunction g(){\n\t\tprint \"B.g\";\n\t}\n}\n\nb = new B();\nb.f();\nb"
  },
  {
    "path": "deps/cpy/samples/foreach.cpy",
    "chars": 145,
    "preview": "\narr = [10, 11, 12];\nforeach(arr as k=>v){\n\tprint k, v;\n}\n\n# output: #\n\nd = {\n\t'a': 1,\n\t'b': 2,\n\t'c': 3,\n\t};\n\nforeach(d "
  },
  {
    "path": "deps/cpy/samples/function.cpy",
    "chars": 67,
    "preview": "\nfunction f(a, b=1){\n\treturn a + b;\n}\n\nprint f(1);\nprint f(1, 2);\n\n"
  },
  {
    "path": "deps/cpy/samples/hello.cpy",
    "chars": 27,
    "preview": "\nprintf(\"Hello World!\\n\");\n"
  },
  {
    "path": "deps/cpy/samples/list.cpy",
    "chars": 123,
    "preview": "a = []; // empty array\na.append(1);\na.append(2);\nprint a[0]; // output: 1\nprint a; // output: [1, 2]\n\na = [1, 2];\nprint "
  },
  {
    "path": "deps/cpy/samples/object.cpy",
    "chars": 127,
    "preview": "\na = {}; // empty dictionary\na['x'] = [1, 2];\na['y'] = [3, 4];\nforeach(a as k=>v1, v2){\n\tprintf('%s: %d, %d\\n', k, v1, v"
  },
  {
    "path": "deps/cpy/samples/simple_client.cpy",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "deps/cpy/samples/simple_server.cpy",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "deps/cpy/samples/stdin.cpy",
    "chars": 206,
    "preview": "\n\nprint \"input 'q' to quit:\";\n\nwhile(true){\n\tprintf(\"> \");\n\tline = stdin.readline();\n\tline = line.strip().lower();\n\tif(l"
  },
  {
    "path": "deps/cpy/samples/test.cpy",
    "chars": 86,
    "preview": "a = {}; // empty dictionary\na['x'] = 1;\na['y'] = 2;\nforeach(a as k,v){\n\tprint k, v;\n}\n"
  },
  {
    "path": "deps/jemalloc-4.1.0/.autom4te.cfg",
    "chars": 107,
    "preview": "begin-language: \"Autoconf-without-aclocal-m4\"\nargs: --no-cache\nend-language: \"Autoconf-without-aclocal-m4\"\n"
  },
  {
    "path": "deps/jemalloc-4.1.0/.gitattributes",
    "chars": 19,
    "preview": "* text=auto eol=lf\n"
  },
  {
    "path": "deps/jemalloc-4.1.0/.gitignore",
    "chars": 1736,
    "preview": "/*.gcov.*\n\n/bin/jemalloc-config\n/bin/jemalloc.sh\n/bin/jeprof\n\n/config.stamp\n/config.log\n/config.status\n/configure\n\n/doc/"
  },
  {
    "path": "deps/jemalloc-4.1.0/COPYING",
    "chars": 1703,
    "preview": "Unless otherwise specified, files in the jemalloc source distribution are\nsubject to the following license:\n------------"
  },
  {
    "path": "deps/jemalloc-4.1.0/ChangeLog",
    "chars": 42041,
    "preview": "Following are change highlights associated with official releases.  Important\nbug fixes are all mentioned, but some inte"
  },
  {
    "path": "deps/jemalloc-4.1.0/INSTALL",
    "chars": 16036,
    "preview": "Building and installing a packaged release of jemalloc can be as simple as\ntyping the following while in the root direct"
  },
  {
    "path": "deps/jemalloc-4.1.0/Makefile.in",
    "chars": 17601,
    "preview": "# Clear out all vpaths, then set just one (default vpath) for the main build\n# directory.\nvpath\nvpath % .\n\n# Clear the d"
  },
  {
    "path": "deps/jemalloc-4.1.0/README",
    "chars": 1084,
    "preview": "jemalloc is a general purpose malloc(3) implementation that emphasizes\nfragmentation avoidance and scalable concurrency "
  },
  {
    "path": "deps/jemalloc-4.1.0/autogen.sh",
    "chars": 266,
    "preview": "#!/bin/sh\n\nfor i in autoconf; do\n    echo \"$i\"\n    $i\n    if [ $? -ne 0 ]; then\n\techo \"Error $? in $i\"\n\texit 1\n    fi\ndo"
  },
  {
    "path": "deps/jemalloc-4.1.0/bin/jemalloc-config.in",
    "chars": 1497,
    "preview": "#!/bin/sh\n\nusage() {\n\tcat <<EOF\nUsage:\n  @BINDIR@/jemalloc-config <option>\nOptions:\n  --help | -h  : Print usage.\n  --ve"
  },
  {
    "path": "deps/jemalloc-4.1.0/bin/jemalloc.sh.in",
    "chars": 151,
    "preview": "#!/bin/sh\n\nprefix=@prefix@\nexec_prefix=@exec_prefix@\nlibdir=@libdir@\n\n@LD_PRELOAD_VAR@=${libdir}/libjemalloc.@SOREV@\nexp"
  },
  {
    "path": "deps/jemalloc-4.1.0/bin/jeprof.in",
    "chars": 178567,
    "preview": "#! /usr/bin/env perl\n\n# Copyright (c) 1998-2007, Google Inc.\n# All rights reserved.\n#\n# Redistribution and use in source"
  },
  {
    "path": "deps/jemalloc-4.1.0/build-aux/config.guess",
    "chars": 42856,
    "preview": "#! /bin/sh\n# Attempt to guess a canonical system name.\n#   Copyright 1992-2014 Free Software Foundation, Inc.\n\ntimestamp"
  },
  {
    "path": "deps/jemalloc-4.1.0/build-aux/config.sub",
    "chars": 35766,
    "preview": "#! /bin/sh\n# Configuration validation subroutine script.\n#   Copyright 1992-2014 Free Software Foundation, Inc.\n\ntimesta"
  },
  {
    "path": "deps/jemalloc-4.1.0/build-aux/install-sh",
    "chars": 5585,
    "preview": "#! /bin/sh\n#\n# install - install a program, script, or datafile\n# This comes from X11R5 (mit/util/scripts/install.sh).\n#"
  },
  {
    "path": "deps/jemalloc-4.1.0/config.stamp.in",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "deps/jemalloc-4.1.0/configure.ac",
    "chars": 57834,
    "preview": "dnl Process this file with autoconf to produce a configure script.\nAC_INIT([Makefile.in])\n\nAC_CONFIG_AUX_DIR([build-aux]"
  },
  {
    "path": "deps/jemalloc-4.1.0/coverage.sh",
    "chars": 321,
    "preview": "#!/bin/sh\n\nset -e\n\nobjdir=$1\nsuffix=$2\nshift 2\nobjs=$@\n\ngcov -b -p -f -o \"${objdir}\" ${objs}\n\n# Move gcov outputs so tha"
  },
  {
    "path": "deps/jemalloc-4.1.0/doc/html.xsl.in",
    "chars": 203,
    "preview": "<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" version=\"1.0\">\n  <xsl:import href=\"@XSLROOT@/html/docbo"
  },
  {
    "path": "deps/jemalloc-4.1.0/doc/jemalloc.xml.in",
    "chars": 130636,
    "preview": "<?xml version='1.0' encoding='UTF-8'?>\n<?xml-stylesheet type=\"text/xsl\"\n        href=\"http://docbook.sourceforge.net/rel"
  },
  {
    "path": "deps/jemalloc-4.1.0/doc/manpages.xsl.in",
    "chars": 207,
    "preview": "<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" version=\"1.0\">\n  <xsl:import href=\"@XSLROOT@/manpages/d"
  },
  {
    "path": "deps/jemalloc-4.1.0/doc/stylesheet.xsl",
    "chars": 303,
    "preview": "<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" version=\"1.0\">\n  <xsl:param name=\"funcsynopsis.style\">a"
  },
  {
    "path": "deps/jemalloc-4.1.0/include/jemalloc/internal/arena.h",
    "chars": 46015,
    "preview": "/******************************************************************************/\n#ifdef JEMALLOC_H_TYPES\n\n#define\tLARGE_"
  },
  {
    "path": "deps/jemalloc-4.1.0/include/jemalloc/internal/assert.h",
    "chars": 1029,
    "preview": "/*\n * Define a custom assert() in order to reduce the chances of deadlock during\n * assertion failure.\n */\n#ifndef asser"
  },
  {
    "path": "deps/jemalloc-4.1.0/include/jemalloc/internal/atomic.h",
    "chars": 15441,
    "preview": "/******************************************************************************/\n#ifdef JEMALLOC_H_TYPES\n\n#endif /* JEMA"
  },
  {
    "path": "deps/jemalloc-4.1.0/include/jemalloc/internal/base.h",
    "chars": 855,
    "preview": "/******************************************************************************/\n#ifdef JEMALLOC_H_TYPES\n\n#endif /* JEMA"
  },
  {
    "path": "deps/jemalloc-4.1.0/include/jemalloc/internal/bitmap.h",
    "chars": 7795,
    "preview": "/******************************************************************************/\n#ifdef JEMALLOC_H_TYPES\n\n/* Maximum bit"
  },
  {
    "path": "deps/jemalloc-4.1.0/include/jemalloc/internal/chunk.h",
    "chars": 3299,
    "preview": "/******************************************************************************/\n#ifdef JEMALLOC_H_TYPES\n\n/*\n * Size and"
  },
  {
    "path": "deps/jemalloc-4.1.0/include/jemalloc/internal/chunk_dss.h",
    "chars": 1246,
    "preview": "/******************************************************************************/\n#ifdef JEMALLOC_H_TYPES\n\ntypedef enum {"
  },
  {
    "path": "deps/jemalloc-4.1.0/include/jemalloc/internal/chunk_mmap.h",
    "chars": 789,
    "preview": "/******************************************************************************/\n#ifdef JEMALLOC_H_TYPES\n\n#endif /* JEMA"
  },
  {
    "path": "deps/jemalloc-4.1.0/include/jemalloc/internal/ckh.h",
    "chars": 2648,
    "preview": "/******************************************************************************/\n#ifdef JEMALLOC_H_TYPES\n\ntypedef struct"
  },
  {
    "path": "deps/jemalloc-4.1.0/include/jemalloc/internal/ctl.h",
    "chars": 3279,
    "preview": "/******************************************************************************/\n#ifdef JEMALLOC_H_TYPES\n\ntypedef struct"
  },
  {
    "path": "deps/jemalloc-4.1.0/include/jemalloc/internal/extent.h",
    "chars": 5899,
    "preview": "/******************************************************************************/\n#ifdef JEMALLOC_H_TYPES\n\ntypedef struct"
  },
  {
    "path": "deps/jemalloc-4.1.0/include/jemalloc/internal/hash.h",
    "chars": 8368,
    "preview": "/*\n * The following hash function is based on MurmurHash3, placed into the public\n * domain by Austin Appleby.  See http"
  },
  {
    "path": "deps/jemalloc-4.1.0/include/jemalloc/internal/huge.h",
    "chars": 1512,
    "preview": "/******************************************************************************/\n#ifdef JEMALLOC_H_TYPES\n\n#endif /* JEMA"
  },
  {
    "path": "deps/jemalloc-4.1.0/include/jemalloc/internal/jemalloc_internal.h.in",
    "chars": 31255,
    "preview": "#ifndef JEMALLOC_INTERNAL_H\n#define\tJEMALLOC_INTERNAL_H\n\n#include \"jemalloc_internal_defs.h\"\n#include \"jemalloc/internal"
  },
  {
    "path": "deps/jemalloc-4.1.0/include/jemalloc/internal/jemalloc_internal_decls.h",
    "chars": 1370,
    "preview": "#ifndef JEMALLOC_INTERNAL_DECLS_H\n#define\tJEMALLOC_INTERNAL_DECLS_H\n\n#include <math.h>\n#ifdef _WIN32\n#  include <windows"
  },
  {
    "path": "deps/jemalloc-4.1.0/include/jemalloc/internal/jemalloc_internal_defs.h.in",
    "chars": 7845,
    "preview": "#ifndef JEMALLOC_INTERNAL_DEFS_H_\n#define\tJEMALLOC_INTERNAL_DEFS_H_\n/*\n * If JEMALLOC_PREFIX is defined via --with-jemal"
  },
  {
    "path": "deps/jemalloc-4.1.0/include/jemalloc/internal/jemalloc_internal_macros.h",
    "chars": 1669,
    "preview": "/*\n * JEMALLOC_ALWAYS_INLINE and JEMALLOC_INLINE are used within header files for\n * functions that are static inline fu"
  },
  {
    "path": "deps/jemalloc-4.1.0/include/jemalloc/internal/mb.h",
    "chars": 2687,
    "preview": "/******************************************************************************/\n#ifdef JEMALLOC_H_TYPES\n\n#endif /* JEMA"
  },
  {
    "path": "deps/jemalloc-4.1.0/include/jemalloc/internal/mutex.h",
    "chars": 2926,
    "preview": "/******************************************************************************/\n#ifdef JEMALLOC_H_TYPES\n\ntypedef struct"
  },
  {
    "path": "deps/jemalloc-4.1.0/include/jemalloc/internal/nstime.h",
    "chars": 1719,
    "preview": "/******************************************************************************/\n#ifdef JEMALLOC_H_TYPES\n\n#define JEMALL"
  },
  {
    "path": "deps/jemalloc-4.1.0/include/jemalloc/internal/pages.h",
    "chars": 940,
    "preview": "/******************************************************************************/\n#ifdef JEMALLOC_H_TYPES\n\n#endif /* JEMA"
  },
  {
    "path": "deps/jemalloc-4.1.0/include/jemalloc/internal/private_namespace.sh",
    "chars": 93,
    "preview": "#!/bin/sh\n\nfor symbol in `cat $1` ; do\n  echo \"#define\t${symbol} JEMALLOC_N(${symbol})\"\ndone\n"
  },
  {
    "path": "deps/jemalloc-4.1.0/include/jemalloc/internal/private_symbols.txt",
    "chars": 9408,
    "preview": "a0dalloc\na0malloc\narena_aalloc\narena_alloc_junk_small\narena_basic_stats_merge\narena_bin_index\narena_bin_info\narena_bitse"
  },
  {
    "path": "deps/jemalloc-4.1.0/include/jemalloc/internal/private_unnamespace.sh",
    "chars": 70,
    "preview": "#!/bin/sh\n\nfor symbol in `cat $1` ; do\n  echo \"#undef ${symbol}\"\ndone\n"
  },
  {
    "path": "deps/jemalloc-4.1.0/include/jemalloc/internal/prng.h",
    "chars": 2203,
    "preview": "/******************************************************************************/\n#ifdef JEMALLOC_H_TYPES\n\n/*\n * Simple l"
  },
  {
    "path": "deps/jemalloc-4.1.0/include/jemalloc/internal/prof.h",
    "chars": 15451,
    "preview": "/******************************************************************************/\n#ifdef JEMALLOC_H_TYPES\n\ntypedef struct"
  },
  {
    "path": "deps/jemalloc-4.1.0/include/jemalloc/internal/public_namespace.sh",
    "chars": 129,
    "preview": "#!/bin/sh\n\nfor nm in `cat $1` ; do\n  n=`echo ${nm} |tr ':' ' ' |awk '{print $1}'`\n  echo \"#define\tje_${n} JEMALLOC_N(${n"
  },
  {
    "path": "deps/jemalloc-4.1.0/include/jemalloc/internal/public_unnamespace.sh",
    "chars": 111,
    "preview": "#!/bin/sh\n\nfor nm in `cat $1` ; do\n  n=`echo ${nm} |tr ':' ' ' |awk '{print $1}'`\n  echo \"#undef je_${n}\"\ndone\n"
  },
  {
    "path": "deps/jemalloc-4.1.0/include/jemalloc/internal/ql.h",
    "chars": 2369,
    "preview": "/* List definitions. */\n#define\tql_head(a_type)\t\t\t\t\t\t\t\\\nstruct {\t\t\t\t\t\t\t\t\\\n\ta_type *qlh_first;\t\t\t\t\t\t\\\n}\n\n#define\tql_head_"
  },
  {
    "path": "deps/jemalloc-4.1.0/include/jemalloc/internal/qr.h",
    "chars": 2259,
    "preview": "/* Ring definitions. */\n#define\tqr(a_type)\t\t\t\t\t\t\t\\\nstruct {\t\t\t\t\t\t\t\t\\\n\ta_type\t*qre_next;\t\t\t\t\t\t\\\n\ta_type\t*qre_prev;\t\t\t\t\t\t\\"
  },
  {
    "path": "deps/jemalloc-4.1.0/include/jemalloc/internal/quarantine.h",
    "chars": 1593,
    "preview": "/******************************************************************************/\n#ifdef JEMALLOC_H_TYPES\n\ntypedef struct"
  },
  {
    "path": "deps/jemalloc-4.1.0/include/jemalloc/internal/rb.h",
    "chars": 38311,
    "preview": "/*-\n *******************************************************************************\n *\n * cpp macro implementation of l"
  },
  {
    "path": "deps/jemalloc-4.1.0/include/jemalloc/internal/rtree.h",
    "chars": 8660,
    "preview": "/*\n * This radix tree implementation is tailored to the singular purpose of\n * associating metadata with chunks that are"
  },
  {
    "path": "deps/jemalloc-4.1.0/include/jemalloc/internal/size_classes.sh",
    "chars": 8007,
    "preview": "#!/bin/sh\n#\n# Usage: size_classes.sh <lg_qarr> <lg_tmin> <lg_parr> <lg_g>\n\n# The following limits are chosen such that t"
  },
  {
    "path": "deps/jemalloc-4.1.0/include/jemalloc/internal/smoothstep.h",
    "chars": 16061,
    "preview": "/*\n * This file was generated by the following command:\n *   sh smoothstep.sh smoother 200 24 3 15\n */\n/****************"
  },
  {
    "path": "deps/jemalloc-4.1.0/include/jemalloc/internal/smoothstep.sh",
    "chars": 3405,
    "preview": "#!/bin/sh\n#\n# Generate a discrete lookup table for a sigmoid function in the smoothstep\n# family (https://en.wikipedia.o"
  },
  {
    "path": "deps/jemalloc-4.1.0/include/jemalloc/internal/stats.h",
    "chars": 4897,
    "preview": "/******************************************************************************/\n#ifdef JEMALLOC_H_TYPES\n\ntypedef struct"
  },
  {
    "path": "deps/jemalloc-4.1.0/include/jemalloc/internal/tcache.h",
    "chars": 13517,
    "preview": "/******************************************************************************/\n#ifdef JEMALLOC_H_TYPES\n\ntypedef struct"
  },
  {
    "path": "deps/jemalloc-4.1.0/include/jemalloc/internal/ticker.h",
    "chars": 1698,
    "preview": "/******************************************************************************/\n#ifdef JEMALLOC_H_TYPES\n\ntypedef struct"
  },
  {
    "path": "deps/jemalloc-4.1.0/include/jemalloc/internal/tsd.h",
    "chars": 19151,
    "preview": "/******************************************************************************/\n#ifdef JEMALLOC_H_TYPES\n\n/* Maximum num"
  },
  {
    "path": "deps/jemalloc-4.1.0/include/jemalloc/internal/util.h",
    "chars": 7619,
    "preview": "/******************************************************************************/\n#ifdef JEMALLOC_H_TYPES\n\n#ifdef _WIN32\n"
  },
  {
    "path": "deps/jemalloc-4.1.0/include/jemalloc/internal/valgrind.h",
    "chars": 4243,
    "preview": "/******************************************************************************/\n#ifdef JEMALLOC_H_TYPES\n\n#ifdef JEMALLO"
  },
  {
    "path": "deps/jemalloc-4.1.0/include/jemalloc/jemalloc.sh",
    "chars": 499,
    "preview": "#!/bin/sh\n\nobjroot=$1\n\ncat <<EOF\n#ifndef JEMALLOC_H_\n#define\tJEMALLOC_H_\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nEOF\n\nfo"
  },
  {
    "path": "deps/jemalloc-4.1.0/include/jemalloc/jemalloc_defs.h.in",
    "chars": 1143,
    "preview": "/* Defined if __attribute__((...)) syntax is supported. */\n#undef JEMALLOC_HAVE_ATTR\n\n/* Defined if alloc_size attribute"
  },
  {
    "path": "deps/jemalloc-4.1.0/include/jemalloc/jemalloc_macros.h.in",
    "chars": 3423,
    "preview": "#include <stdlib.h>\n#include <stdbool.h>\n#include <stdint.h>\n#include <limits.h>\n#include <strings.h>\n\n#define\tJEMALLOC_"
  },
  {
    "path": "deps/jemalloc-4.1.0/include/jemalloc/jemalloc_mangle.sh",
    "chars": 1258,
    "preview": "#!/bin/sh\n\npublic_symbols_txt=$1\nsymbol_prefix=$2\n\ncat <<EOF\n/*\n * By default application code must explicitly refer to "
  },
  {
    "path": "deps/jemalloc-4.1.0/include/jemalloc/jemalloc_protos.h.in",
    "chars": 3284,
    "preview": "/*\n * The @je_@ prefix on the following public symbol declarations is an artifact\n * of namespace management, and should"
  },
  {
    "path": "deps/jemalloc-4.1.0/include/jemalloc/jemalloc_rename.sh",
    "chars": 460,
    "preview": "#!/bin/sh\n\npublic_symbols_txt=$1\n\ncat <<EOF\n/*\n * Name mangling for public symbols is controlled by --with-mangling and\n"
  },
  {
    "path": "deps/jemalloc-4.1.0/include/jemalloc/jemalloc_typedefs.h.in",
    "chars": 1575,
    "preview": "/*\n * void *\n * chunk_alloc(void *new_addr, size_t size, size_t alignment, bool *zero,\n *     bool *commit, unsigned are"
  },
  {
    "path": "deps/jemalloc-4.1.0/include/msvc_compat/C99/stdbool.h",
    "chars": 449,
    "preview": "#ifndef stdbool_h\n#define stdbool_h\n\n#include <wtypes.h>\n\n/* MSVC doesn't define _Bool or bool in C, but does have BOOL "
  },
  {
    "path": "deps/jemalloc-4.1.0/include/msvc_compat/C99/stdint.h",
    "chars": 7728,
    "preview": "// ISO C9x  compliant stdint.h for Microsoft Visual Studio\n// Based on ISO/IEC 9899:TC2 Committee draft (May 6, 2005) WG"
  },
  {
    "path": "deps/jemalloc-4.1.0/include/msvc_compat/strings.h",
    "chars": 1047,
    "preview": "#ifndef strings_h\n#define strings_h\n\n/* MSVC doesn't define ffs/ffsl. This dummy strings.h header is provided\n * for bot"
  },
  {
    "path": "deps/jemalloc-4.1.0/include/msvc_compat/windows_extra.h",
    "chars": 529,
    "preview": "#ifndef MSVC_COMPAT_WINDOWS_EXTRA_H\n#define\tMSVC_COMPAT_WINDOWS_EXTRA_H\n\n#ifndef ENOENT\n#  define ENOENT ERROR_PATH_NOT_"
  },
  {
    "path": "deps/jemalloc-4.1.0/jemalloc.pc.in",
    "chars": 397,
    "preview": "prefix=@prefix@\nexec_prefix=@exec_prefix@\nlibdir=@libdir@\nincludedir=@includedir@\ninstall_suffix=@install_suffix@\n\nName:"
  },
  {
    "path": "deps/jemalloc-4.1.0/msvc/ReadMe.txt",
    "chars": 549,
    "preview": "\nHow to build jemalloc for Windows\n=================================\n\n1. Install Cygwin with at least the following pack"
  },
  {
    "path": "deps/jemalloc-4.1.0/msvc/jemalloc_vc2015.sln",
    "chars": 3878,
    "preview": "\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio 14\nVisualStudioVersion = 14.0.24720.0\nMini"
  },
  {
    "path": "deps/jemalloc-4.1.0/msvc/projects/vc2015/jemalloc/jemalloc.vcxproj",
    "chars": 22424,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"14.0\" xmlns=\"http://schemas.micros"
  },
  {
    "path": "deps/jemalloc-4.1.0/msvc/projects/vc2015/jemalloc/jemalloc.vcxproj.filters",
    "chars": 10172,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuil"
  },
  {
    "path": "deps/jemalloc-4.1.0/msvc/projects/vc2015/test_threads/test_threads.cpp",
    "chars": 3153,
    "preview": "// jemalloc C++ threaded test\n// Author: Rustam Abdullaev\n// Public Domain\n\n#include <atomic>\n#include <functional>\n#inc"
  },
  {
    "path": "deps/jemalloc-4.1.0/msvc/projects/vc2015/test_threads/test_threads.h",
    "chars": 34,
    "preview": "#pragma once\n\nint test_threads();\n"
  },
  {
    "path": "deps/jemalloc-4.1.0/msvc/projects/vc2015/test_threads/test_threads.vcxproj",
    "chars": 19200,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" ToolsVersion=\"14.0\" xmlns=\"http://schemas.micros"
  },
  {
    "path": "deps/jemalloc-4.1.0/msvc/projects/vc2015/test_threads/test_threads.vcxproj.filters",
    "chars": 913,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuil"
  },
  {
    "path": "deps/jemalloc-4.1.0/msvc/projects/vc2015/test_threads/test_threads_main.cpp",
    "chars": 200,
    "preview": "#include \"test_threads.h\"\n#include <future>\n#include <functional>\n#include <chrono>\n\nusing namespace std::chrono_literal"
  },
  {
    "path": "deps/jemalloc-4.1.0/src/arena.c",
    "chars": 105061,
    "preview": "#define\tJEMALLOC_ARENA_C_\n#include \"jemalloc/internal/jemalloc_internal.h\"\n\n/*******************************************"
  },
  {
    "path": "deps/jemalloc-4.1.0/src/atomic.c",
    "chars": 76,
    "preview": "#define\tJEMALLOC_ATOMIC_C_\n#include \"jemalloc/internal/jemalloc_internal.h\"\n"
  },
  {
    "path": "deps/jemalloc-4.1.0/src/base.c",
    "chars": 3984,
    "preview": "#define\tJEMALLOC_BASE_C_\n#include \"jemalloc/internal/jemalloc_internal.h\"\n\n/********************************************"
  },
  {
    "path": "deps/jemalloc-4.1.0/src/bitmap.c",
    "chars": 2889,
    "preview": "#define\tJEMALLOC_BITMAP_C_\n#include \"jemalloc/internal/jemalloc_internal.h\"\n\n/******************************************"
  },
  {
    "path": "deps/jemalloc-4.1.0/src/chunk.c",
    "chars": 21656,
    "preview": "#define\tJEMALLOC_CHUNK_C_\n#include \"jemalloc/internal/jemalloc_internal.h\"\n\n/*******************************************"
  },
  {
    "path": "deps/jemalloc-4.1.0/src/chunk_dss.c",
    "chars": 4697,
    "preview": "#define\tJEMALLOC_CHUNK_DSS_C_\n#include \"jemalloc/internal/jemalloc_internal.h\"\n/****************************************"
  },
  {
    "path": "deps/jemalloc-4.1.0/src/chunk_mmap.c",
    "chars": 2077,
    "preview": "#define\tJEMALLOC_CHUNK_MMAP_C_\n#include \"jemalloc/internal/jemalloc_internal.h\"\n\n/**************************************"
  },
  {
    "path": "deps/jemalloc-4.1.0/src/ckh.c",
    "chars": 14383,
    "preview": "/*\n *******************************************************************************\n * Implementation of (2^1+,2) cuckoo"
  },
  {
    "path": "deps/jemalloc-4.1.0/src/ctl.c",
    "chars": 59308,
    "preview": "#define\tJEMALLOC_CTL_C_\n#include \"jemalloc/internal/jemalloc_internal.h\"\n\n/*********************************************"
  },
  {
    "path": "deps/jemalloc-4.1.0/src/extent.c",
    "chars": 1485,
    "preview": "#define\tJEMALLOC_EXTENT_C_\n#include \"jemalloc/internal/jemalloc_internal.h\"\n\n/******************************************"
  },
  {
    "path": "deps/jemalloc-4.1.0/src/hash.c",
    "chars": 74,
    "preview": "#define\tJEMALLOC_HASH_C_\n#include \"jemalloc/internal/jemalloc_internal.h\"\n"
  },
  {
    "path": "deps/jemalloc-4.1.0/src/huge.c",
    "chars": 11685,
    "preview": "#define\tJEMALLOC_HUGE_C_\n#include \"jemalloc/internal/jemalloc_internal.h\"\n\n/********************************************"
  },
  {
    "path": "deps/jemalloc-4.1.0/src/jemalloc.c",
    "chars": 66816,
    "preview": "#define\tJEMALLOC_C_\n#include \"jemalloc/internal/jemalloc_internal.h\"\n\n/*************************************************"
  },
  {
    "path": "deps/jemalloc-4.1.0/src/mb.c",
    "chars": 72,
    "preview": "#define\tJEMALLOC_MB_C_\n#include \"jemalloc/internal/jemalloc_internal.h\"\n"
  },
  {
    "path": "deps/jemalloc-4.1.0/src/mutex.c",
    "chars": 3429,
    "preview": "#define\tJEMALLOC_MUTEX_C_\n#include \"jemalloc/internal/jemalloc_internal.h\"\n\n#if defined(JEMALLOC_LAZY_LOCK) && !defined("
  },
  {
    "path": "deps/jemalloc-4.1.0/src/nstime.c",
    "chars": 2477,
    "preview": "#include \"jemalloc/internal/jemalloc_internal.h\"\n\n#define\tBILLION\tUINT64_C(1000000000)\n\nvoid\nnstime_init(nstime_t *time,"
  },
  {
    "path": "deps/jemalloc-4.1.0/src/pages.c",
    "chars": 3729,
    "preview": "#define\tJEMALLOC_PAGES_C_\n#include \"jemalloc/internal/jemalloc_internal.h\"\n\n/*******************************************"
  },
  {
    "path": "deps/jemalloc-4.1.0/src/prng.c",
    "chars": 74,
    "preview": "#define\tJEMALLOC_PRNG_C_\n#include \"jemalloc/internal/jemalloc_internal.h\"\n"
  },
  {
    "path": "deps/jemalloc-4.1.0/src/prof.c",
    "chars": 50739,
    "preview": "#define\tJEMALLOC_PROF_C_\n#include \"jemalloc/internal/jemalloc_internal.h\"\n/*********************************************"
  },
  {
    "path": "deps/jemalloc-4.1.0/src/quarantine.c",
    "chars": 5486,
    "preview": "#define\tJEMALLOC_QUARANTINE_C_\n#include \"jemalloc/internal/jemalloc_internal.h\"\n\n/*\n * Quarantine pointers close to NULL"
  },
  {
    "path": "deps/jemalloc-4.1.0/src/rtree.c",
    "chars": 3180,
    "preview": "#define\tJEMALLOC_RTREE_C_\n#include \"jemalloc/internal/jemalloc_internal.h\"\n\nstatic unsigned\nhmin(unsigned ha, unsigned h"
  },
  {
    "path": "deps/jemalloc-4.1.0/src/stats.c",
    "chars": 21266,
    "preview": "#define\tJEMALLOC_STATS_C_\n#include \"jemalloc/internal/jemalloc_internal.h\"\n\n#define\tCTL_GET(n, v, t) do {\t\t\t\t\t\t\\\n\tsize_t"
  },
  {
    "path": "deps/jemalloc-4.1.0/src/tcache.c",
    "chars": 13860,
    "preview": "#define\tJEMALLOC_TCACHE_C_\n#include \"jemalloc/internal/jemalloc_internal.h\"\n\n/******************************************"
  },
  {
    "path": "deps/jemalloc-4.1.0/src/ticker.c",
    "chars": 76,
    "preview": "#define\tJEMALLOC_TICKER_C_\n#include \"jemalloc/internal/jemalloc_internal.h\"\n"
  },
  {
    "path": "deps/jemalloc-4.1.0/src/tsd.c",
    "chars": 3941,
    "preview": "#define\tJEMALLOC_TSD_C_\n#include \"jemalloc/internal/jemalloc_internal.h\"\n\n/*********************************************"
  },
  {
    "path": "deps/jemalloc-4.1.0/src/util.c",
    "chars": 14482,
    "preview": "/*\n * Define simple versions of assertion macros that won't recurse in case\n * of assertion failures in malloc_*printf()"
  },
  {
    "path": "deps/jemalloc-4.1.0/src/valgrind.c",
    "chars": 581,
    "preview": "#include \"jemalloc/internal/jemalloc_internal.h\"\n#ifndef JEMALLOC_VALGRIND\n#  error \"This source file is for Valgrind in"
  },
  {
    "path": "deps/jemalloc-4.1.0/src/zone.c",
    "chars": 7711,
    "preview": "#include \"jemalloc/internal/jemalloc_internal.h\"\n#ifndef JEMALLOC_ZONE\n#  error \"This source file is for zones on Darwin"
  },
  {
    "path": "deps/jemalloc-4.1.0/test/include/test/SFMT-alti.h",
    "chars": 5921,
    "preview": "/*\n * This file derives from SFMT 1.3.3\n * (http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/SFMT/index.html), which was\n"
  },
  {
    "path": "deps/jemalloc-4.1.0/test/include/test/SFMT-params.h",
    "chars": 4286,
    "preview": "/*\n * This file derives from SFMT 1.3.3\n * (http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/SFMT/index.html), which was\n"
  },
  {
    "path": "deps/jemalloc-4.1.0/test/include/test/SFMT-params11213.h",
    "chars": 3566,
    "preview": "/*\n * This file derives from SFMT 1.3.3\n * (http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/SFMT/index.html), which was\n"
  },
  {
    "path": "deps/jemalloc-4.1.0/test/include/test/SFMT-params1279.h",
    "chars": 3552,
    "preview": "/*\n * This file derives from SFMT 1.3.3\n * (http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/SFMT/index.html), which was\n"
  },
  {
    "path": "deps/jemalloc-4.1.0/test/include/test/SFMT-params132049.h",
    "chars": 3564,
    "preview": "/*\n * This file derives from SFMT 1.3.3\n * (http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/SFMT/index.html), which was\n"
  },
  {
    "path": "deps/jemalloc-4.1.0/test/include/test/SFMT-params19937.h",
    "chars": 3560,
    "preview": "/*\n * This file derives from SFMT 1.3.3\n * (http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/SFMT/index.html), which was\n"
  },
  {
    "path": "deps/jemalloc-4.1.0/test/include/test/SFMT-params216091.h",
    "chars": 3566,
    "preview": "/*\n * This file derives from SFMT 1.3.3\n * (http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/SFMT/index.html), which was\n"
  },
  {
    "path": "deps/jemalloc-4.1.0/test/include/test/SFMT-params2281.h",
    "chars": 3552,
    "preview": "/*\n * This file derives from SFMT 1.3.3\n * (http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/SFMT/index.html), which was\n"
  },
  {
    "path": "deps/jemalloc-4.1.0/test/include/test/SFMT-params4253.h",
    "chars": 3552,
    "preview": "/*\n * This file derives from SFMT 1.3.3\n * (http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/SFMT/index.html), which was\n"
  },
  {
    "path": "deps/jemalloc-4.1.0/test/include/test/SFMT-params44497.h",
    "chars": 3566,
    "preview": "/*\n * This file derives from SFMT 1.3.3\n * (http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/SFMT/index.html), which was\n"
  },
  {
    "path": "deps/jemalloc-4.1.0/test/include/test/SFMT-params607.h",
    "chars": 3558,
    "preview": "/*\n * This file derives from SFMT 1.3.3\n * (http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/SFMT/index.html), which was\n"
  },
  {
    "path": "deps/jemalloc-4.1.0/test/include/test/SFMT-params86243.h",
    "chars": 3564,
    "preview": "/*\n * This file derives from SFMT 1.3.3\n * (http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/SFMT/index.html), which was\n"
  },
  {
    "path": "deps/jemalloc-4.1.0/test/include/test/SFMT-sse2.h",
    "chars": 5215,
    "preview": "/*\n * This file derives from SFMT 1.3.3\n * (http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/SFMT/index.html), which was\n"
  },
  {
    "path": "deps/jemalloc-4.1.0/test/include/test/SFMT.h",
    "chars": 5805,
    "preview": "/*\n * This file derives from SFMT 1.3.3\n * (http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/SFMT/index.html), which was\n"
  },
  {
    "path": "deps/jemalloc-4.1.0/test/include/test/btalloc.h",
    "chars": 825,
    "preview": "/* btalloc() provides a mechanism for allocating via permuted backtraces. */\nvoid\t*btalloc(size_t size, unsigned bits);\n"
  },
  {
    "path": "deps/jemalloc-4.1.0/test/include/test/jemalloc_test.h.in",
    "chars": 4286,
    "preview": "#include <limits.h>\n#ifndef SIZE_T_MAX\n#  define SIZE_T_MAX\tSIZE_MAX\n#endif\n#include <stdlib.h>\n#include <stdarg.h>\n#inc"
  },
  {
    "path": "deps/jemalloc-4.1.0/test/include/test/jemalloc_test_defs.h.in",
    "chars": 290,
    "preview": "#include \"jemalloc/internal/jemalloc_internal_defs.h\"\n#include \"jemalloc/internal/jemalloc_internal_decls.h\"\n\n/*\n * For "
  },
  {
    "path": "deps/jemalloc-4.1.0/test/include/test/math.h",
    "chars": 8172,
    "preview": "#ifndef JEMALLOC_ENABLE_INLINE\ndouble\tln_gamma(double x);\ndouble\ti_gamma(double x, double p, double ln_gamma_p);\ndouble\t"
  },
  {
    "path": "deps/jemalloc-4.1.0/test/include/test/mq.h",
    "chars": 2902,
    "preview": "void\tmq_nanosleep(unsigned ns);\n\n/*\n * Simple templated message queue implementation that relies on only mutexes for\n * "
  },
  {
    "path": "deps/jemalloc-4.1.0/test/include/test/mtx.h",
    "chars": 520,
    "preview": "/*\n * mtx is a slightly simplified version of malloc_mutex.  This code duplication\n * is unfortunate, but there are allo"
  },
  {
    "path": "deps/jemalloc-4.1.0/test/include/test/test.h",
    "chars": 13175,
    "preview": "#define\tASSERT_BUFSIZE\t256\n\n#define\tassert_cmp(t, a, b, cmp, neg_cmp, pri, ...) do {\t\t\\\n\tt a_ = (a);\t\t\t\t\t\t\t\\\n\tt b_ = (b)"
  },
  {
    "path": "deps/jemalloc-4.1.0/test/include/test/thd.h",
    "chars": 224,
    "preview": "/* Abstraction layer for threading in tests. */\n#ifdef _WIN32\ntypedef HANDLE thd_t;\n#else\ntypedef pthread_t thd_t;\n#endi"
  },
  {
    "path": "deps/jemalloc-4.1.0/test/include/test/timer.h",
    "chars": 312,
    "preview": "/* Simple timer, for use in benchmark reporting. */\n\ntypedef struct {\n\tnstime_t t0;\n\tnstime_t t1;\n} timedelta_t;\n\nvoid\tt"
  },
  {
    "path": "deps/jemalloc-4.1.0/test/integration/MALLOCX_ARENA.c",
    "chars": 1433,
    "preview": "#include \"test/jemalloc_test.h\"\n\n#define\tNTHREADS 10\n\nstatic bool have_dss =\n#ifdef JEMALLOC_DSS\n    true\n#else\n    fals"
  },
  {
    "path": "deps/jemalloc-4.1.0/test/integration/aligned_alloc.c",
    "chars": 2760,
    "preview": "#include \"test/jemalloc_test.h\"\n\n#define\tCHUNK 0x400000\n/* #define MAXALIGN ((size_t)UINT64_C(0x80000000000)) */\n#define"
  },
  {
    "path": "deps/jemalloc-4.1.0/test/integration/allocated.c",
    "chars": 2989,
    "preview": "#include \"test/jemalloc_test.h\"\n\nstatic const bool config_stats =\n#ifdef JEMALLOC_STATS\n    true\n#else\n    false\n#endif\n"
  },
  {
    "path": "deps/jemalloc-4.1.0/test/integration/chunk.c",
    "chars": 8673,
    "preview": "#include \"test/jemalloc_test.h\"\n\n#ifdef JEMALLOC_FILL\nconst char *malloc_conf = \"junk:false\";\n#endif\n\nstatic chunk_hooks"
  },
  {
    "path": "deps/jemalloc-4.1.0/test/integration/mallocx.c",
    "chars": 4704,
    "preview": "#include \"test/jemalloc_test.h\"\n\nstatic unsigned\nget_nsizes_impl(const char *cmd)\n{\n\tunsigned ret;\n\tsize_t z;\n\n\tz = size"
  },
  {
    "path": "deps/jemalloc-4.1.0/test/integration/overflow.c",
    "chars": 1357,
    "preview": "#include \"test/jemalloc_test.h\"\n\nTEST_BEGIN(test_overflow)\n{\n\tunsigned nhchunks;\n\tsize_t mib[4];\n\tsize_t sz, miblen, max"
  },
  {
    "path": "deps/jemalloc-4.1.0/test/integration/posix_memalign.c",
    "chars": 2603,
    "preview": "#include \"test/jemalloc_test.h\"\n\n#define\tCHUNK 0x400000\n/* #define MAXALIGN ((size_t)UINT64_C(0x80000000000)) */\n#define"
  },
  {
    "path": "deps/jemalloc-4.1.0/test/integration/rallocx.c",
    "chars": 5957,
    "preview": "#include \"test/jemalloc_test.h\"\n\nstatic unsigned\nget_nsizes_impl(const char *cmd)\n{\n\tunsigned ret;\n\tsize_t z;\n\n\tz = size"
  },
  {
    "path": "deps/jemalloc-4.1.0/test/integration/sdallocx.c",
    "chars": 1025,
    "preview": "#include \"test/jemalloc_test.h\"\n\n#define\tMAXALIGN (((size_t)1) << 25)\n#define\tNITER 4\n\nTEST_BEGIN(test_basic)\n{\n\tvoid *p"
  },
  {
    "path": "deps/jemalloc-4.1.0/test/integration/thread_arena.c",
    "chars": 1542,
    "preview": "#include \"test/jemalloc_test.h\"\n\n#define\tNTHREADS 10\n\nvoid *\nthd_start(void *arg)\n{\n\tunsigned main_arena_ind = *(unsigne"
  },
  {
    "path": "deps/jemalloc-4.1.0/test/integration/thread_tcache_enabled.c",
    "chars": 2535,
    "preview": "#include \"test/jemalloc_test.h\"\n\nstatic const bool config_tcache =\n#ifdef JEMALLOC_TCACHE\n    true\n#else\n    false\n#endi"
  },
  {
    "path": "deps/jemalloc-4.1.0/test/integration/xallocx.c",
    "chars": 12515,
    "preview": "#include \"test/jemalloc_test.h\"\n\n/*\n * Use a separate arena for xallocx() extension/contraction tests so that\n * interna"
  },
  {
    "path": "deps/jemalloc-4.1.0/test/src/SFMT.c",
    "chars": 20695,
    "preview": "/*\n * This file derives from SFMT 1.3.3\n * (http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/SFMT/index.html), which was\n"
  }
]

// ... and 353 more files (download for full content)

About this extraction

This page contains the full source code of the ideawu/ssdb GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 553 files (5.5 MB), approximately 1.5M tokens, and a symbol index with 4171 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!