| 1 | #!/usr/bin/env bash
 | 
| 2 | #
 | 
| 3 | # Usage:
 | 
| 4 | #   ./shedskin.sh <function name>
 | 
| 5 | 
 | 
| 6 | set -o nounset
 | 
| 7 | set -o pipefail
 | 
| 8 | set -o errexit
 | 
| 9 | 
 | 
| 10 | # Problems
 | 
| 11 | # - loading pickle for metadata.  It has to dynamically look up classes.
 | 
| 12 | # - it won't compile the pickle module due to its use of marshal!
 | 
| 13 | # - TODO: we don't need metadata at all?
 | 
| 14 | 
 | 
| 15 | # Fixed
 | 
| 16 | # - import posix removed in runtime.py
 | 
| 17 | # - _CheckType uses AttributeError: Shed Skin doesn't like it
 | 
| 18 | 
 | 
| 19 | # Unfortunately the ShedSkin compiler crashes after 17 seconds with this error!
 | 
| 20 | #
 | 
| 21 | #     ts = typestrnew(gx, types, cplusplus, node, check_extmod, depth, check_ret, var, tuple_check, mv=mv)
 | 
| 22 | #   File "/usr/lib/python2.7/dist-packages/shedskin/typestr.py", line 193, in typestrnew
 | 
| 23 | #     elif not node or infer.inode(gx, node).mv.module.builtin:
 | 
| 24 | # AttributeError: 'NoneType' object has no attribute 'module'
 | 
| 25 | # 
 | 
| 26 | # real    0m17.210s
 | 
| 27 | # user    0m17.083s
 | 
| 28 | # sys     0m0.084s
 | 
| 29 | 
 | 
| 30 | 
 | 
| 31 | # 0.9.4 was released in 2015.  Supposedly fixed in git!
 | 
| 32 | #
 | 
| 33 | # https://github.com/shedskin/shedskin/issues/203
 | 
| 34 | 
 | 
| 35 | install-latest() {
 | 
| 36 |   # NOTE: I manually transcribed what I did.  Could use virtualenv?
 | 
| 37 |   pushd ~/git/languages/shedskin
 | 
| 38 |   python setup.py build
 | 
| 39 |   sudo python setup.py install
 | 
| 40 | }
 | 
| 41 | 
 | 
| 42 | make-tree() {
 | 
| 43 |   local out=_tmp/shedskin
 | 
| 44 |   mkdir -p $out
 | 
| 45 |   #cp -v asdl/{arith_parse.py,tdop.py} _devbuild/gen/demo_asdl.py $out
 | 
| 46 | 
 | 
| 47 |   # dependencies of generated code
 | 
| 48 |   # unpickle probably won't work
 | 
| 49 |   cp -v asdl/{const.py,runtime.py} $out
 | 
| 50 | }
 | 
| 51 | 
 | 
| 52 | run-python() {
 | 
| 53 |   pushd demo/shedskin
 | 
| 54 |   ./arith_parse.py '1+2'
 | 
| 55 | }
 | 
| 56 | 
 | 
| 57 | # With latest, this generates C++ code, but it doesn't compile.
 | 
| 58 | #
 | 
| 59 | # TODO: Try something based on tdop.py that is a single module?  There are too
 | 
| 60 | # many modules here.
 | 
| 61 | 
 | 
| 62 | compile() {
 | 
| 63 |   pushd demo/shedskin
 | 
| 64 |   time shedskin arith_parse
 | 
| 65 | }
 | 
| 66 | 
 | 
| 67 | count-output() {
 | 
| 68 |   wc -l demo/shedskin/*.{cpp,hpp} Makefile
 | 
| 69 | }
 | 
| 70 | 
 | 
| 71 | "$@"
 |