1 |
## our_shell: ysh
|
2 |
## oils_failures_allowed: 1
|
3 |
|
4 |
|
5 |
|
6 |
proc p ( ; ; ; block) {
|
7 |
var src = block.sourceCode()
|
8 |
echo $[src.code_str] > out.ysh
|
9 |
|
10 |
# don't assert this yet, because whitespace can change
|
11 |
call src->erase('code_str')
|
12 |
|
13 |
json write (src)
|
14 |
|
15 |
# New location is out.ysh:4
|
16 |
$[ENV.SH] out.ysh || true
|
17 |
|
18 |
echo ---
|
19 |
|
20 |
#echo 'zz (' > bad.ysh
|
21 |
|
22 |
# Original location is [ stdin ]:20
|
23 |
... $[ENV.SH]
|
24 |
--location-str $[src.location_str]
|
25 |
--location-start-line $[src.location_start_line]
|
26 |
out.ysh
|
27 |
|| true
|
28 |
;
|
29 |
}
|
30 |
|
31 |
p {
|
32 |
echo 1
|
33 |
echo 2
|
34 |
false
|
35 |
echo 3
|
36 |
}
|
37 |
|
38 |
## STDOUT:
|
39 |
{
|
40 |
"location_str": "[ stdin ]",
|
41 |
"location_start_line": 22
|
42 |
}
|
43 |
1
|
44 |
2
|
45 |
---
|
46 |
1
|
47 |
2
|
48 |
## END
|
49 |
|
50 |
|
51 |
|
52 |
|
53 |
var cmd = ^(echo 1; echo 2; false)
|
54 |
|
55 |
var src = cmd.sourceCode()
|
56 |
|
57 |
assert [null === src]
|
58 |
|
59 |
# Test passing it
|
60 |
proc p ( ; ; ; block) {
|
61 |
pp test_ (block)
|
62 |
assert [null === block.sourceCode()]
|
63 |
}
|
64 |
|
65 |
p ( ; ; cmd)
|
66 |
|
67 |
## STDOUT:
|
68 |
<Command>
|
69 |
## END
|
70 |
|
71 |
|
72 |
|
73 |
|
74 |
# TODO: fix this bug - same as Hay bug
|
75 |
|
76 |
proc p ( ; ; ; block) {
|
77 |
var src = block.sourceCode()
|
78 |
|
79 |
pp test_ (src.code_str)
|
80 |
|
81 |
# Re-parsing messes this up
|
82 |
#echo $[src.code_str]
|
83 |
#echo
|
84 |
}
|
85 |
|
86 |
shopt --set parse_backticks
|
87 |
|
88 |
p {
|
89 |
echo "greeting `echo backticks`"
|
90 |
}
|
91 |
|
92 |
shopt --set parse_sh_arith
|
93 |
|
94 |
p {
|
95 |
array_lhs[i++]=y
|
96 |
}
|
97 |
|
98 |
shopt --set expand_aliases
|
99 |
|
100 |
alias e='echo alias'
|
101 |
|
102 |
p {
|
103 |
e foo
|
104 |
}
|
105 |
|
106 |
# alias that combines the problematic features
|
107 |
alias e2='a[0+2+3]=x; echo `echo bacticks`'
|
108 |
|
109 |
p {
|
110 |
e2 zzz
|
111 |
#e2 e2 zzz
|
112 |
}
|
113 |
|
114 |
## STDOUT:
|
115 |
(Str) " \n echo \"greeting `echo backticks`\"\n"
|
116 |
(Str) " \n array_lhs[i++]=y\n"
|
117 |
(Str) " \n e foo\n"
|
118 |
(Str) " \n e2 zzz\n"
|
119 |
## END
|
120 |
|
121 |
|
122 |
|
123 |
|
124 |
proc p ( ; ; ; block) {
|
125 |
var src = block.sourceCode()
|
126 |
|
127 |
pp test_ (src.code_str)
|
128 |
|
129 |
call io->eval(block)
|
130 |
}
|
131 |
|
132 |
|
133 |
shopt --set parse_backticks
|
134 |
shopt --set parse_sh_arith
|
135 |
shopt --set expand_aliases
|
136 |
|
137 |
p {
|
138 |
echo foo
|
139 |
}
|
140 |
|
141 |
p {
|
142 |
#a[0]=`echo foo`
|
143 |
echo foo
|
144 |
p {
|
145 |
#a[inner]=`echo foo`
|
146 |
echo inner
|
147 |
}
|
148 |
}
|
149 |
|
150 |
## STDOUT:
|
151 |
## END
|