| 1 | ## our_shell: ysh
 | 
| 2 | ## oils_failures_allowed: 0
 | 
| 3 | 
 | 
| 4 | #### ctx push and set
 | 
| 5 | var mydict = {}
 | 
| 6 | ctx push (mydict) {
 | 
| 7 |   ctx set (key1="value1")
 | 
| 8 |   ctx set (key2="value2")
 | 
| 9 | }
 | 
| 10 | json write (mydict)
 | 
| 11 | ## STDOUT:
 | 
| 12 | {
 | 
| 13 |   "key1": "value1",
 | 
| 14 |   "key2": "value2"
 | 
| 15 | }
 | 
| 16 | ## END
 | 
| 17 | 
 | 
| 18 | #### ctx emit
 | 
| 19 | var p = {}
 | 
| 20 | ctx push (p) {
 | 
| 21 |   ctx emit flag ({short_name: '-v'})
 | 
| 22 |   # p => {'flag': [{short_name: '-v'}]}
 | 
| 23 |   json write (p)
 | 
| 24 | 
 | 
| 25 |   ctx emit flag ({short_name: '-c'})
 | 
| 26 |   # p => {'flag': [{short_name: '-v'}, {short_name: '-c'}]}
 | 
| 27 |   json write (p)
 | 
| 28 | }
 | 
| 29 | json write (p)
 | 
| 30 | ## STDOUT:
 | 
| 31 | {
 | 
| 32 |   "flag": [
 | 
| 33 |     {
 | 
| 34 |       "short_name": "-v"
 | 
| 35 |     }
 | 
| 36 |   ]
 | 
| 37 | }
 | 
| 38 | {
 | 
| 39 |   "flag": [
 | 
| 40 |     {
 | 
| 41 |       "short_name": "-v"
 | 
| 42 |     },
 | 
| 43 |     {
 | 
| 44 |       "short_name": "-c"
 | 
| 45 |     }
 | 
| 46 |   ]
 | 
| 47 | }
 | 
| 48 | {
 | 
| 49 |   "flag": [
 | 
| 50 |     {
 | 
| 51 |       "short_name": "-v"
 | 
| 52 |     },
 | 
| 53 |     {
 | 
| 54 |       "short_name": "-c"
 | 
| 55 |     }
 | 
| 56 |   ]
 | 
| 57 | }
 | 
| 58 | ## END
 | 
| 59 | 
 | 
| 60 | #### nested ctx
 | 
| 61 | var a = {}
 | 
| 62 | var b = {}
 | 
| 63 | ctx push (a) {
 | 
| 64 |   ctx set (from="a")
 | 
| 65 |   ctx push (b) {
 | 
| 66 |     ctx set (from="b")
 | 
| 67 |   }
 | 
| 68 | }
 | 
| 69 | json write (a)
 | 
| 70 | json write (b)
 | 
| 71 | ## STDOUT:
 | 
| 72 | {
 | 
| 73 |   "from": "a"
 | 
| 74 | }
 | 
| 75 | {
 | 
| 76 |   "from": "b"
 | 
| 77 | }
 | 
| 78 | ## END
 | 
| 79 | 
 | 
| 80 | #### error in context
 | 
| 81 | var a = {}
 | 
| 82 | try {
 | 
| 83 |   ctx push (a) {
 | 
| 84 |     error "Error from inside a context" (code=100)
 | 
| 85 |   }
 | 
| 86 | }
 | 
| 87 | echo status=$_status
 | 
| 88 | exit 0
 | 
| 89 | ## STDOUT:
 | 
| 90 | status=100
 | 
| 91 | ## END
 | 
| 92 | 
 | 
| 93 | #### no context, set
 | 
| 94 | ctx set (bad=true)
 | 
| 95 | echo status=$_status
 | 
| 96 | ## status: 3
 | 
| 97 | ## STDOUT:
 | 
| 98 | ## END
 | 
| 99 | 
 | 
| 100 | #### no context, emit
 | 
| 101 | ctx emit bad (true)
 | 
| 102 | echo status=$_status
 | 
| 103 | ## status: 3
 | 
| 104 | ## STDOUT:
 | 
| 105 | ## END
 | 
| 106 | 
 | 
| 107 | #### mini-parseArgs
 | 
| 108 | proc parser (; place ; ; block_def) {
 | 
| 109 |   var p = {}
 | 
| 110 |   ctx push (p; ; block_def)
 | 
| 111 |   call place->setValue(p)
 | 
| 112 | }
 | 
| 113 | 
 | 
| 114 | var Bool = "Bool"
 | 
| 115 | var Int = "Int"
 | 
| 116 | proc flag (short_name, long_name; type; help) {
 | 
| 117 |   ctx emit flag ({short_name, long_name, type, help})
 | 
| 118 | }
 | 
| 119 | 
 | 
| 120 | proc arg (name) {
 | 
| 121 |   ctx emit arg ({name})
 | 
| 122 | }
 | 
| 123 | 
 | 
| 124 | parser (&spec) {
 | 
| 125 |   flag -t --tsv (Bool, help='Output as a TSV')
 | 
| 126 |   flag -r --recursive (Bool, help='Recurse into the given directory')
 | 
| 127 |   flag -N --count (Int, help='Process no more than N files')
 | 
| 128 |   arg path
 | 
| 129 | }
 | 
| 130 | json write (spec)
 | 
| 131 | ## STDOUT:
 | 
| 132 | {
 | 
| 133 |   "flag": [
 | 
| 134 |     {
 | 
| 135 |       "short_name": "-t",
 | 
| 136 |       "long_name": "--tsv",
 | 
| 137 |       "type": "Bool",
 | 
| 138 |       "help": "Output as a TSV"
 | 
| 139 |     },
 | 
| 140 |     {
 | 
| 141 |       "short_name": "-r",
 | 
| 142 |       "long_name": "--recursive",
 | 
| 143 |       "type": "Bool",
 | 
| 144 |       "help": "Recurse into the given directory"
 | 
| 145 |     },
 | 
| 146 |     {
 | 
| 147 |       "short_name": "-N",
 | 
| 148 |       "long_name": "--count",
 | 
| 149 |       "type": "Int",
 | 
| 150 |       "help": "Process no more than N files"
 | 
| 151 |     }
 | 
| 152 |   ],
 | 
| 153 |   "arg": [
 | 
| 154 |     {
 | 
| 155 |       "name": "path"
 | 
| 156 |     }
 | 
| 157 |   ]
 | 
| 158 | }
 | 
| 159 | ## END
 | 
| 160 | 
 | 
| 161 | #### ctx with value.Place, not List/Dict (error location bug fix)
 | 
| 162 | 
 | 
| 163 | ctx push (&p) {
 | 
| 164 |   true
 | 
| 165 | }
 | 
| 166 | ## status: 3
 | 
| 167 | ## STDOUT:
 | 
| 168 | ## END
 |