{ "info": { "author": "Phillip J. Eby", "author_email": "peak@eby-sarna.com", "bugtrack_url": null, "classifiers": [], "description": "``peak.util.assembler`` is a simple bytecode assembler module that handles most\nlow-level bytecode generation details like jump offsets, stack size tracking,\nline number table generation, constant and variable name index tracking, etc.\nThat way, you can focus your attention on the desired semantics of your\nbytecode instead of on these mechanical issues.\n\nIn addition to a low-level opcode-oriented API for directly generating specific\nPython bytecodes, this module also offers an extensible mini-AST framework for\ngenerating code from high-level specifications. This framework does most of\nthe work needed to transform tree-like structures into linear bytecode\ninstructions, and includes the ability to do compile-time constant folding.\n\nPlease see the `BytecodeAssembler reference manual`_ for more details.\n\n.. _BytecodeAssembler reference manual: http://peak.telecommunity.com/DevCenter/BytecodeAssembler#toc\n\n\nChanges since version 0.6:\n\n* Fix bad stack calculations for BUILD_CLASS opcode\n\nChanges since version 0.5.2:\n \n* Symbolic disassembly with full emulation of backward-compatible\n ``JUMP_IF_TRUE`` and ``JUMP_IF_FALSE`` opcodes on Python 2.7 -- tests now\n run clean on Python 2.7.\n\n* Support for backward emulation of Python 2.7's ``JUMP_IF_TRUE_OR_POP`` and\n ``JUMP_IF_FALSE_OR_POP`` instructions on earlier Python versions; these\n emulations are also used in BytecodeAssembler's internal code generation,\n for maximum performance on 2.7+ (with no change to performance on older\n versions).\n\nChanges since version 0.5.1:\n\n* Initial support for Python 2.7's new opcodes and semantics changes, mostly\n by emulating older versions' behavior with macros. (0.5.2 is really just\n a quick-fix release to allow packages using BytecodeAssembler to run on 2.7\n without having to change any of their code generation; future releases will\n provide proper support for the new and changed opcodes, as well as a test\n suite that doesn't show spurious differences in the disassembly listings\n under Python 2.7.)\n\nChanges since version 0.5:\n\n* Fix incorrect stack size calculation for ``MAKE_CLOSURE`` on Python 2.5+\n\nChanges since version 0.3:\n\n* New node types:\n\n * ``For(iterable, assign, body)`` -- define a \"for\" loop over `iterable`\n\n * ``UnpackSequence(nodes)`` -- unpacks a sequence that's ``len(nodes)`` long,\n and then generates the given nodes.\n\n * ``LocalAssign(name)`` -- issues a ``STORE_FAST``, ``STORE_DEREF`` or\n ``STORE_LOCAL`` as appropriate for the given name.\n\n * ``Function(body, name='', args=(), var=None, kw=None, defaults=())``\n -- creates a nested function from `body` and puts it on the stack.\n\n * ``If(cond, then_, else_=Pass)`` -- \"if\" statement analogue\n\n * ``ListComp(body)`` and ``LCAppend(value)`` -- implement list comprehensions\n\n * ``YieldStmt(value)`` -- generates a ``YIELD_VALUE`` (plus a ``POP_TOP`` in\n Python 2.5+)\n\n* ``Code`` objects are now iterable, yielding ``(offset, op, arg)`` triples,\n where `op` is numeric and `arg` is either numeric or ``None``.\n\n* ``Code`` objects' ``.code()`` method can now take a \"parent\" ``Code`` object,\n to link the child code's free variables to cell variables in the parent.\n\n* Added ``Code.from_spec()`` classmethod, that initializes a code object from a\n name and argument spec.\n\n* ``Code`` objects now have a ``.nested(name, args, var, kw)`` method, that\n creates a child code object with the same ``co_filename`` and the supplied\n name/arg spec.\n\n* Fixed incorrect stack tracking for the ``FOR_ITER`` and ``YIELD_VALUE``\n opcodes\n\n* Ensure that ``CO_GENERATOR`` flag is set if ``YIELD_VALUE`` opcode is used\n\n* Change tests so that Python 2.3's broken line number handling in ``dis.dis``\n and constant-folding optimizer don't generate spurious failures in this\n package's test suite.\n\n\nChanges since version 0.2:\n\n* Added ``Suite``, ``TryExcept``, and ``TryFinally`` node types\n\n* Added a ``Getattr`` node type that does static or dynamic attribute access\n and constant folding\n\n* Fixed ``code.from_function()`` not copying the ``co_filename`` attribute when\n ``copy_lineno`` was specified.\n\n* The ``repr()`` of AST nodes doesn't include a trailing comma for 1-argument\n node types any more.\n\n* Added a ``Pass`` symbol that generates no code, a ``Compare()`` node type\n that does n-way comparisons, and ``And()`` and ``Or()`` node types for doing\n logical operations.\n\n* The ``COMPARE_OP()`` method now accepts operator strings like ``\"<=\"``,\n ``\"not in\"``, ``\"exception match\"``, and so on, as well as numeric opcodes.\n See the standard library's ``opcode`` module for a complete list of the\n strings accepted (in the ``cmp_op`` tuple). ``\"<>\"`` is also accepted as an\n alias for ``\"!=\"``.\n\n* Added code to verify that forward jump offsets don't exceed a 64KB span, and\n support absolute backward jumps to locations >64KB.\n\nChanges since version 0.1:\n\n* Constant handling has been fixed so that it doesn't confuse equal values of\n differing types (e.g. ``1.0`` and ``True``), or equal unhashable objects\n (e.g. two empty lists).\n\n* Removed ``nil``, ``ast_curry()`` and ``folding_curry()``, replacing them with\n the ``nodetype()`` decorator and ``fold_args()``; please see the docs for\n more details.\n\n* Added stack tracking across jumps, globally verifying stack level prediction\n consistency and automatically rejecting attempts to generate dead code. It\n should now be virtually impossible to accidentally generate bytecode that can\n crash the interpreter. (If you find a way, let me know!)\n\nChanges since version 0.0.1:\n\n* Added massive quantities of new documentation and examples\n\n* Full block, loop, and closure support\n\n* High-level functional code generation from trees, with smart labels and\n blocks, constant folding, extensibility, smart local variable names, etc.\n\n* The ``.label()`` method was renamed to ``.here()`` to distinguish it from\n the new smart ``Label`` objects.\n\n* Docs and tests were moved to README.txt instead of assembler.txt\n\n* Added a demo that implements a \"switch\"-like statement template that shows\n how to extend the code generation system and how to abuse ``END_FINALLY``\n to implement a \"computed goto\" in bytecode.\n\n* Various bug fixes\n\nThere are a few features that aren't tested yet, and not all opcodes may be\nfully supported. Also note the following limitations:\n\n* Jumps to as-yet-undefined labels cannot span a distance greater than 65,535\n bytes.\n\n* The ``dis()`` function in Python 2.3 has a bug that makes it show incorrect\n line numbers when the difference between two adjacent line numbers is\n greater than 255. (To work around this, the test_suite uses a later version\n of ``dis()``, but do note that it may affect your own tests if you use\n ``dis()`` with Python 2.3 and use widely separated line numbers.)\n \nIf you find any other issues, please let me know.\n\nPlease also keep in mind that this is a work in progress, and the API may\nchange if I come up with a better way to do something.\n\nQuestions and discussion regarding this software should be directed to the\n`PEAK Mailing List `_.\n\n.. _toc:", "description_content_type": null, "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://pypi.python.org/pypi/BytecodeAssembler", "keywords": "", "license": "ZPL 2.1", "maintainer": "", "maintainer_email": "", "name": "BytecodeAssembler", "package_url": "https://pypi.org/project/BytecodeAssembler/", "platform": "", "project_url": "https://pypi.org/project/BytecodeAssembler/", "project_urls": { "Homepage": "http://pypi.python.org/pypi/BytecodeAssembler" }, "release_url": "https://pypi.org/project/BytecodeAssembler/0.6.1/", "requires_dist": null, "requires_python": "", "summary": "Generate Python code objects by \"assembling\" bytecode (Now includes a functional/AST-oriented API, too!)", "version": "0.6.1" }, "last_serial": 2660883, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "b0bde4abdcabc8fc686b60fac6d09ab7", "sha256": "3bc51f0220af24de365fac00ea02c7baa4beaba4ac402fd6abed53e35f30056b" }, "downloads": -1, "filename": "BytecodeAssembler-0.0.1-py2.4.egg", "has_sig": false, "md5_digest": "b0bde4abdcabc8fc686b60fac6d09ab7", "packagetype": "bdist_egg", "python_version": "2.4", "requires_python": null, "size": 9926, "upload_time": "2006-05-23T05:53:11", "url": "https://files.pythonhosted.org/packages/34/19/b1413d353f3669c3312c1e0e107fe543a30275c656eb0ce0173f968f9df9/BytecodeAssembler-0.0.1-py2.4.egg" }, { "comment_text": "", "digests": { "md5": "8021c5219687f0c874b6e23d7c726ddb", "sha256": "aa448f05cbb77fd7d32b870504776c7d3b5033d26acfd787523be600e0060c97" }, "downloads": -1, "filename": "BytecodeAssembler-0.0.1.tar.gz", "has_sig": false, "md5_digest": "8021c5219687f0c874b6e23d7c726ddb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9589, "upload_time": "2006-05-23T05:53:12", "url": "https://files.pythonhosted.org/packages/24/33/3aa1ea683622d8008a12a13db5981065c760ef0b1c0727d9132b59802ec6/BytecodeAssembler-0.0.1.tar.gz" }, { "comment_text": "", "digests": { "md5": "7d647bf224462393771c7ee1b7dde964", "sha256": "b3c8d8f0ec93ab68222ef9d067dd12262d213f9d4ff7ae0c7efcc51d1fb77eba" }, "downloads": -1, "filename": "BytecodeAssembler-0.0.1.zip", "has_sig": false, "md5_digest": "7d647bf224462393771c7ee1b7dde964", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13416, "upload_time": "2006-05-23T05:53:13", "url": "https://files.pythonhosted.org/packages/b0/ad/9791cb68a8e03fa3386a75825caeb8f7cb10e18cb6f8510a47e4f0fe6356/BytecodeAssembler-0.0.1.zip" } ], "0.1": [ { "comment_text": "", "digests": { "md5": "ac3432dadc5adda837ca34b3f02135a1", "sha256": "be69519800f4f9fd19ce17998858e881905c82bfb4ed4bcb7a6d9a9b6bdb9bf7" }, "downloads": -1, "filename": "BytecodeAssembler-0.1-py2.3.egg", "has_sig": false, "md5_digest": "ac3432dadc5adda837ca34b3f02135a1", "packagetype": "bdist_egg", "python_version": "2.3", "requires_python": null, "size": 53928, "upload_time": "2006-06-17T06:26:55", "url": "https://files.pythonhosted.org/packages/69/32/2a71a0040178ba8494810270e0806eda119f6c9a737b260e42a91d196b8a/BytecodeAssembler-0.1-py2.3.egg" }, { "comment_text": "", "digests": { "md5": "f5bc8c4d6a258ce0494aea201e178c8e", "sha256": "16ab7e8e6ebcfca731ac1584d38fdd1ac2fa72fbf17809938eaef10df8b28352" }, "downloads": -1, "filename": "BytecodeAssembler-0.1-py2.4.egg", "has_sig": false, "md5_digest": "f5bc8c4d6a258ce0494aea201e178c8e", "packagetype": "bdist_egg", "python_version": "2.4", "requires_python": null, "size": 17299, "upload_time": "2006-06-17T06:26:43", "url": "https://files.pythonhosted.org/packages/09/18/30f7e2a41b622473a4908343c027613fb5d8ace01a845ef83a5d37c18917/BytecodeAssembler-0.1-py2.4.egg" }, { "comment_text": "", "digests": { "md5": "2dc09db928f73cc4dcf20731376d59ff", "sha256": "ef34a716e36cd4dc0f0ee0d8192539605fb63b61c2a5f35004a7ba3ad794f2fd" }, "downloads": -1, "filename": "BytecodeAssembler-0.1.zip", "has_sig": false, "md5_digest": "2dc09db928f73cc4dcf20731376d59ff", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 29019, "upload_time": "2006-06-17T06:26:41", "url": "https://files.pythonhosted.org/packages/6f/2c/de06fedd24b55087620ae420b37cb642b158d29c22a207317e01026165f0/BytecodeAssembler-0.1.zip" } ], "0.2": [ { "comment_text": "", "digests": { "md5": "1136578a85e89bf293b03bdaf0048c13", "sha256": "a199e9a58fd87ec2852b4c3a7168da6f93085cccb20d33b048ef4057851ca63b" }, "downloads": -1, "filename": "BytecodeAssembler-0.2-py2.3.egg", "has_sig": false, "md5_digest": "1136578a85e89bf293b03bdaf0048c13", "packagetype": "bdist_egg", "python_version": "2.3", "requires_python": null, "size": 63084, "upload_time": "2006-07-05T05:55:03", "url": "https://files.pythonhosted.org/packages/92/b4/ce7b130406304bf8771c998375ffe92986c68df46bcf76e28a41877814a9/BytecodeAssembler-0.2-py2.3.egg" }, { "comment_text": "", "digests": { "md5": "3003958a0af24527988d243e8e91c786", "sha256": "73453a3c80187ef8b9dd3db21c4bcf3b21ee6a28699b8a1d68e638596a141fc0" }, "downloads": -1, "filename": "BytecodeAssembler-0.2-py2.4.egg", "has_sig": false, "md5_digest": "3003958a0af24527988d243e8e91c786", "packagetype": "bdist_egg", "python_version": "2.4", "requires_python": null, "size": 20120, "upload_time": "2006-07-05T05:55:10", "url": "https://files.pythonhosted.org/packages/f3/d9/a6c7e2683a07a5dffbd06c173114991e84d83391b348bf162e95ebff5d17/BytecodeAssembler-0.2-py2.4.egg" }, { "comment_text": "", "digests": { "md5": "edba545f392cde743fe6bcb53f8825d6", "sha256": "b50cd83a7c958023cddd618acb8f52fa901704f1fbc5adaa4dec465039f0d359" }, "downloads": -1, "filename": "BytecodeAssembler-0.2.zip", "has_sig": false, "md5_digest": "edba545f392cde743fe6bcb53f8825d6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 33263, "upload_time": "2006-07-05T05:55:00", "url": "https://files.pythonhosted.org/packages/47/41/e4528a7be607a241505ee8867111bb355674a17679f8757c8300fdd31bd2/BytecodeAssembler-0.2.zip" } ], "0.3": [ { "comment_text": "", "digests": { "md5": "21905d40ed7d049ae7eb57460619592f", "sha256": "b69a18b800dfa7e1d250ba14981b8e03510ee0d2a162fac4dbfe6d6919be47ec" }, "downloads": -1, "filename": "BytecodeAssembler-0.3-py2.3.egg", "has_sig": false, "md5_digest": "21905d40ed7d049ae7eb57460619592f", "packagetype": "bdist_egg", "python_version": "2.3", "requires_python": null, "size": 117510, "upload_time": "2008-01-06T15:31:37", "url": "https://files.pythonhosted.org/packages/86/9f/bbb5e8f86fc76cc45e4be949b87a14f77eea8ffaa981eb40b1eac0e41e36/BytecodeAssembler-0.3-py2.3.egg" }, { "comment_text": "", "digests": { "md5": "8bb3c165f5e54e1b883cc0cc4d271169", "sha256": "090ee427c1584a86963fd6e4fd6889f267972e48c7f6daac5c62398157225414" }, "downloads": -1, "filename": "BytecodeAssembler-0.3-py2.4.egg", "has_sig": false, "md5_digest": "8bb3c165f5e54e1b883cc0cc4d271169", "packagetype": "bdist_egg", "python_version": "2.4", "requires_python": null, "size": 36270, "upload_time": "2008-01-06T15:31:31", "url": "https://files.pythonhosted.org/packages/47/ab/db38fc8a8237a9aabd65c2d1d9c6bd25495e62685e46fcbca1ec6ca1a3d8/BytecodeAssembler-0.3-py2.4.egg" }, { "comment_text": "", "digests": { "md5": "ab410d4c033905a4aaa8274700aa9411", "sha256": "54bf8e6a1c19a7323464accbb437da2bbc6c23a4428e55f65b24e44524e1e53a" }, "downloads": -1, "filename": "BytecodeAssembler-0.3-py2.5.egg", "has_sig": false, "md5_digest": "ab410d4c033905a4aaa8274700aa9411", "packagetype": "bdist_egg", "python_version": "2.5", "requires_python": null, "size": 35513, "upload_time": "2008-01-06T15:31:22", "url": "https://files.pythonhosted.org/packages/1d/3c/6ed235927c6058cac96cab3970b5123371190ba62ed5b20178400b4755d4/BytecodeAssembler-0.3-py2.5.egg" }, { "comment_text": "", "digests": { "md5": "db69d5e6e2df6ab6f5a9b7e98dfabb3d", "sha256": "adcac47cafc203bf9d95341dfff7898c65ef99f602d8e5669a6f96f8aeec8a00" }, "downloads": -1, "filename": "BytecodeAssembler-0.3.zip", "has_sig": false, "md5_digest": "db69d5e6e2df6ab6f5a9b7e98dfabb3d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 38848, "upload_time": "2008-01-06T15:31:21", "url": "https://files.pythonhosted.org/packages/d1/18/6dfa82c6303559597fc81aa07ccb59e26a5614913b6d28086edfe510acfb/BytecodeAssembler-0.3.zip" } ], "0.5": [ { "comment_text": "", "digests": { "md5": "89008b03f91598604507743149c92a60", "sha256": "f2081994b48d57c833c5e66f4ef88dc3a48e7e6647d51ed5070a44052a3f91bf" }, "downloads": -1, "filename": "BytecodeAssembler-0.5-py2.3.egg", "has_sig": false, "md5_digest": "89008b03f91598604507743149c92a60", "packagetype": "bdist_egg", "python_version": "2.3", "requires_python": null, "size": 147911, "upload_time": "2008-08-04T22:17:40", "url": "https://files.pythonhosted.org/packages/20/57/c8cbff24f86f11f18773fa6e0f6979b668d801434d4a1b5fea3190037152/BytecodeAssembler-0.5-py2.3.egg" }, { "comment_text": "", "digests": { "md5": "37ab211b2cb474dd18520c3c5950f123", "sha256": "c16919ed6c3ab0694ec67ecaf8927b437847f5f4108395b9d7e5b819371f23a5" }, "downloads": -1, "filename": "BytecodeAssembler-0.5-py2.4.egg", "has_sig": false, "md5_digest": "37ab211b2cb474dd18520c3c5950f123", "packagetype": "bdist_egg", "python_version": "2.4", "requires_python": null, "size": 44459, "upload_time": "2008-08-04T22:19:42", "url": "https://files.pythonhosted.org/packages/e8/6e/57a30d4e855368a96c4adb8755d06a1062df3aa2548e1fab9ac44cecb766/BytecodeAssembler-0.5-py2.4.egg" }, { "comment_text": "", "digests": { "md5": "29fddf425a2f519634e48c6c2acea898", "sha256": "ff8079bc57df94ac63f22b356b2974c073ea636949413324b1744588db8573bf" }, "downloads": -1, "filename": "BytecodeAssembler-0.5-py2.5.egg", "has_sig": false, "md5_digest": "29fddf425a2f519634e48c6c2acea898", "packagetype": "bdist_egg", "python_version": "2.5", "requires_python": null, "size": 43324, "upload_time": "2008-08-04T22:17:27", "url": "https://files.pythonhosted.org/packages/b5/ae/b640c4eb4bb2d25f50fc6ff50fe1a889f5fb15d2b26fd5c6c2697c4c5635/BytecodeAssembler-0.5-py2.5.egg" }, { "comment_text": "", "digests": { "md5": "94645cdd4b97ed94b946ff66c0f7bbf0", "sha256": "fb91ec4e0d3644d5fded1616d2c58fc83dc398e4617d5b3e0b8e0973e4732efd" }, "downloads": -1, "filename": "BytecodeAssembler-0.5.zip", "has_sig": false, "md5_digest": "94645cdd4b97ed94b946ff66c0f7bbf0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 49009, "upload_time": "2008-08-04T22:17:26", "url": "https://files.pythonhosted.org/packages/1e/8a/da0cb069739c72b8c778c95bd6c5ad2738d03e9bab80dbb94687a5fe4803/BytecodeAssembler-0.5.zip" } ], "0.5.1": [ { "comment_text": "", "digests": { "md5": "6f54a463a0e7515688d140212e726837", "sha256": "ab2a24a10b5fc90c0addf61f33f5c92f4323a3d06b698810584f782f7b243b48" }, "downloads": -1, "filename": "BytecodeAssembler-0.5.1-py2.3.egg", "has_sig": false, "md5_digest": "6f54a463a0e7515688d140212e726837", "packagetype": "bdist_egg", "python_version": "2.3", "requires_python": null, "size": 148223, "upload_time": "2008-08-12T18:11:32", "url": "https://files.pythonhosted.org/packages/3e/fa/09a172803539b5d1ee0f93b67eb3db37063f689df53b8372243f7a3a17d4/BytecodeAssembler-0.5.1-py2.3.egg" }, { "comment_text": "", "digests": { "md5": "7c414665bbb2b7d75ff26dd2f2ea941b", "sha256": "62540a88e2152d521e837cb90b0110ea0272abbd6f8f4115bdf02d58d027ebe8" }, "downloads": -1, "filename": "BytecodeAssembler-0.5.1-py2.4.egg", "has_sig": false, "md5_digest": "7c414665bbb2b7d75ff26dd2f2ea941b", "packagetype": "bdist_egg", "python_version": "2.4", "requires_python": null, "size": 44565, "upload_time": "2008-08-12T18:11:06", "url": "https://files.pythonhosted.org/packages/a6/c0/5d6b8b471ef3c00a6d094cee36d0db16090fa55d2975811d05be764afb8e/BytecodeAssembler-0.5.1-py2.4.egg" }, { "comment_text": "", "digests": { "md5": "add55c841e368c3846d296ce17c61950", "sha256": "73b5745ae2afbaf686e049f2af89ab409aefadc14ac962e7d082be103f482593" }, "downloads": -1, "filename": "BytecodeAssembler-0.5.1-py2.5.egg", "has_sig": false, "md5_digest": "add55c841e368c3846d296ce17c61950", "packagetype": "bdist_egg", "python_version": "2.5", "requires_python": null, "size": 43445, "upload_time": "2008-08-12T18:10:58", "url": "https://files.pythonhosted.org/packages/88/5b/50265cfe412291539da4c01b0e89a9e9cb60ac1f0b0377f74cf4fd351150/BytecodeAssembler-0.5.1-py2.5.egg" }, { "comment_text": "", "digests": { "md5": "b93fe5310226004431816e5139a986f5", "sha256": "de41722c2e48b95596405c3d3e9066aea3c10528d38d5b1e48240cd4e38962cd" }, "downloads": -1, "filename": "BytecodeAssembler-0.5.1.zip", "has_sig": false, "md5_digest": "b93fe5310226004431816e5139a986f5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 49327, "upload_time": "2008-08-12T18:10:56", "url": "https://files.pythonhosted.org/packages/06/ee/c5c5fda6fa0671faf588cb0b73635bf5a73c84dfd29b5764f53972cede3b/BytecodeAssembler-0.5.1.zip" } ], "0.5.2": [ { "comment_text": "", "digests": { "md5": "e5b91183cedecef0613d4513792b8b84", "sha256": "b4a37ca36f34f58de93d861129c55cdc77234a46f6cb55618f0c1f48f492b7d2" }, "downloads": -1, "filename": "BytecodeAssembler-0.5.2.zip", "has_sig": false, "md5_digest": "e5b91183cedecef0613d4513792b8b84", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 50776, "upload_time": "2010-08-02T10:02:39", "url": "https://files.pythonhosted.org/packages/c7/4d/97abaafcbfec2ef4a5ac0c0ffa56275a56105ba2e935319355d1b6adf2d3/BytecodeAssembler-0.5.2.zip" } ], "0.6": [ { "comment_text": "", "digests": { "md5": "e18fbed83ed298b816cc95e4c662987d", "sha256": "05d56f7ed3eb7c85912380c31bfe3622063176418d63d5bbd74ce99e5456ae0f" }, "downloads": -1, "filename": "BytecodeAssembler-0.6.zip", "has_sig": false, "md5_digest": "e18fbed83ed298b816cc95e4c662987d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 52734, "upload_time": "2010-08-02T21:37:39", "url": "https://files.pythonhosted.org/packages/cf/e1/79d74d871b4ba4d97d1d71582be437a54b48f49b70aea4ddfc7e3e1fb75d/BytecodeAssembler-0.6.zip" } ], "0.6.1": [ { "comment_text": "", "digests": { "md5": "d0680fcbc3043ba3fa2f27ad6e5217f1", "sha256": "c949167dc6ec620003ded3124db24efc299ca5a31c8d3a5c22f0578745e82771" }, "downloads": -1, "filename": "BytecodeAssembler-0.6.1.zip", "has_sig": false, "md5_digest": "d0680fcbc3043ba3fa2f27ad6e5217f1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 53547, "upload_time": "2017-02-22T16:10:00", "url": "https://files.pythonhosted.org/packages/51/91/f9faa7ddd6e42c0d8de47e5e06fca2b8b4be56261389ad0dea3abeb1b177/BytecodeAssembler-0.6.1.zip" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "d0680fcbc3043ba3fa2f27ad6e5217f1", "sha256": "c949167dc6ec620003ded3124db24efc299ca5a31c8d3a5c22f0578745e82771" }, "downloads": -1, "filename": "BytecodeAssembler-0.6.1.zip", "has_sig": false, "md5_digest": "d0680fcbc3043ba3fa2f27ad6e5217f1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 53547, "upload_time": "2017-02-22T16:10:00", "url": "https://files.pythonhosted.org/packages/51/91/f9faa7ddd6e42c0d8de47e5e06fca2b8b4be56261389ad0dea3abeb1b177/BytecodeAssembler-0.6.1.zip" } ] }