argfunction.basic-result 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722
  1. init file /non-existent/file/to/test/failure does not exist
  2. call stack .source .try_catch_recursive(body)
  3. .global A \
  4. .set SHELL /bin/rwsh
  5. .nop .function .run_logic -- cmd [args ...] {.nop
  6. .signal_handler &{.internal_functions}$ {&&* {.argfunction}}
  7. .mapped_argfunction {&&* {.argfunction}}
  8. &&* {.argfunction}}
  9. .function .before_command -- args ... [.{argfunction}] {.nop $args}
  10. .function .after_command -- args ... [.{argfunction}] {.nop $args}
  11. .function .prompt {.echo \$}
  12. .function .vars {.internal_vars}
  13. .source /etc/rwshrc-basic $argv$
  14. #! /bin/rwsh --init-file
  15. .function () {.nop}
  16. .function # -- [ignored ...] [.{argfunction}] {.nop $ignored$}
  17. .function fn -- prototype ... .{argfunction} {
  18. .function $prototype$ {.argfunction}}
  19. # set up environment
  20. .set_max_collectible_exceptions 10
  21. .set_max_extra_exceptions 5
  22. .global nl (
  23. )
  24. .if .var_exists ? {}
  25. .else {.global ? (); .nop $?}
  26. .nop $FIGNORE
  27. # internal functions
  28. .function .ambiguous_prototype_dash_dash prototype stack ... {
  29. .echo $prototype is an ambiguous location for a prototype --
  30. .combine ( (it requests reading the user's mind) ) \( stack: $stack \) $nl}
  31. .function .arguments_for_argfunction name {
  32. echo cannot specify arguments for $name directly}
  33. .function .bad_argfunction_style style {
  34. echo $style is neither an argfunction nor a substitution nor a brace literal}
  35. .function .bad_args -- proto assigned needed excess call_stack ... {
  36. .combine (unacceptable arguments: for prototype ) $proto , $nl
  37. if_only .test_not_empty $assigned {
  38. .combine ( assigned )
  39. .for $assigned$ (-- var val) {.combine $var = ${paren_if_words $val} ( )}
  40. .combine , $nl ( but)}
  41. if_only .test_not_empty $needed {
  42. .combine ( needed \() $needed \), $nl
  43. if_only .test_not_empty $excess {.combine ( and)}}
  44. if_only .test_not_empty $excess {
  45. .combine ( found \() $excess (\) excess) $nl}
  46. echo \ call stack: $call_stack}
  47. .function .bad_if_nest stack ... {
  48. echo nested .if without .else with call stack: $stack$}
  49. .function .binary_does_not_exist name [stack ...] {
  50. echo $name : binary does not exist
  51. if_only .var_exists stack {echo call stack: $stack}}
  52. .function .binary_not_found name path stack ... {
  53. echo $name : binary not found in $path
  54. echo call stack: $stack$}
  55. .function .break stack ... {
  56. echo .break thrown outside of control flow body
  57. echo call stack: $stack$}
  58. .function .continue stack ... {
  59. echo .continue thrown outside of control flow body
  60. echo call stack: $stack$}
  61. .function .dash_dash_argument args stack ... {
  62. echo optional -- parameter cannot take arguments \( $args \) with call stack: $stack$}
  63. .function .dash_star_argument args stack ... {
  64. echo optional -* parameter cannot take arguments \( $args \) with call stack: $stack$}
  65. .function .directory_not_found -- dir stack ... {
  66. .combine $dir ( directory does not exist) $nl
  67. echo call stack $stack}
  68. .function .divide_by_zero numerator stack ... {
  69. echo attempt to divide $numerator by 0 with call stack: $stack$}
  70. .function .double_redirection first second [stack ...] {
  71. echo double redirection is not supported at this time: $first and $second
  72. if_only .var_exists stack {echo call stack: $stack$}}
  73. .function .duplicate_parameter -- parameter stack ... {
  74. echo duplicated parameter in function definition: $parameter
  75. echo call stack: $stack$}
  76. .function .elipsis_first_arg -- elipsis stack ... {
  77. echo $elipsis elipsis cannot be the first argument in a prototype
  78. echo call stack: $stack$}
  79. .function .elipsis_out_of_option_group -- group stack ... {
  80. echo $group for elipsis to apply to option it must occur within the brackets
  81. echo call stack: $stack$}
  82. .function .else_without_if stack ... {
  83. echo else without if with call stack: $stack$}
  84. .function .epsilon var_val change stack ... {
  85. echo $change is too small relative to $var_val to modify its value
  86. echo call stack: $stack$}
  87. .function .excess_argfunction cmd [stack ...] {
  88. echo $cmd does not accept an argfunction with call stack: $cmd $stack$}
  89. .function .excessive_exceptions_collected max stack ... {
  90. echo exceeded maximum number of exceptions \( $max \) in collect_errors.
  91. echo call stack: $stack$}
  92. .function .excessive_exceptions_in_catch max stack ... {
  93. echo exceeded maximum number of exceptions \( $max \) in try_catch.
  94. echo call stack: $stack$}
  95. .function .excessive_nesting stack ... {
  96. echo function exceeded max nesting \( ${.get_max_nesting} \). call stack: $stack}
  97. .function .exec_failed binary errno stack ... {
  98. .combine (.exec failed for ) $binary ( with errno ) $errno $nl
  99. echo call stack $stack}
  100. .function .executable_already_exists -- binary stack ... {
  101. echo $binary is already an executable in the hash table $nl
  102. echo call stack $stack}
  103. .function .failed_substitution substitution [stack ...] {
  104. echo substitution $substitution failed
  105. if_only .var_exists stack {echo call stack: $stack$}}
  106. .function .false test [stack ...] {
  107. echo assertion $test failed
  108. echo call stack $stack$}
  109. .function .file_not_found -- file stack ... {
  110. echo could not find file $file
  111. echo call stack $stack}
  112. .function .file_open_failure -- file stack ... {
  113. echo could not open file $file
  114. echo call stack $stack}
  115. .function .fixed_argument -- arg stack ... {
  116. echo $arg : fixed arguments are not supported at this time
  117. echo call stack $stack}
  118. .function .flag_in_elipsis -- flag stack ... {
  119. echo found flag $flag while collecting arguments for elipsis
  120. echo call stack $stack$}
  121. .function .function_not_found -- cmd [stack ...] {
  122. echo $cmd : command not found \( $cmd $stack$ \)}
  123. .function .global_would_be_masked name stack ... {
  124. .echo requested global $name already exists as a local
  125. echo . It would be masked by the local and inaccessible from here
  126. echo call stack $stack$}
  127. .function .help [args ...] {
  128. .nop $args$
  129. .echo this is the default configuration for rwsh \(or something copied from it
  130. echo \), documentation should be available at rwsh.sf.net or rwsh.org}
  131. .function .if_before_else stack ... {
  132. echo two .if commands without a .else between them with call stack : $stack$}
  133. .function .illegal_function_name name stack ... {
  134. .combine \$ $name ( cannot be a function) $nl
  135. echo call stack $stack}
  136. .function .illegal_variable_name name stack ... {
  137. .combine \$ $name ( cannot be set) $nl
  138. echo call stack $stack}
  139. .function .input_range -- value stack ... {
  140. echo value $value is out of usable numeric range
  141. echo call stack $stack$}
  142. .function .internal_error -- [args ...] {
  143. echo internal error: $args$}
  144. .function .interrupted_sleep [stack ...] {
  145. echo sleep was interrupted
  146. echo call stack $stack$}
  147. .function .invalid_word_selection selection [stack ...] {
  148. echo $selection is not a valid word selection
  149. echo call stack $stack$}
  150. .function .mismatched_brace context [stack ...] {
  151. echo mismatched brace: $context $stack$}
  152. .function .mismatched_bracket context [stack ...] {
  153. echo mismatched bracket: $context
  154. if_only .var_exists stack {echo call stack: $stack$}}
  155. .function .mismatched_parenthesis string [stack ...] {
  156. .echo signal triggered: $0 \( $string $stack$ \); .combine $nl
  157. echo mismatched parenthesis: $string
  158. echo call stack: $stack$}
  159. .function .unclosed_parenthesis string [stack ...] {
  160. .echo signal triggered: $0 \( $string $stack$ \); .combine $nl
  161. echo mismatched parenthesis: $string
  162. echo call stack: $stack$}
  163. .function .missing_argfunction cmd [add_stack ...] {
  164. echo $cmd requires an argfunction
  165. if_only .var_exists add_stack {echo stack $add_stack$}}
  166. .function .multiple_argfunctions {
  167. echo multiple argfunctions not supported at this time}
  168. .function .not_a_directory file stack ... {
  169. .combine $file ( is not a directory) $nl
  170. echo call stack $stack}
  171. .function .not_a_function executable stack ... {
  172. .combine $executable ( is not a function) $nl
  173. echo call stack $stack}
  174. .function .not_a_number -- nan stack ... {
  175. echo $nan is not a number
  176. echo call stack: $stack$}
  177. .function .not_catching_exception stack ... {
  178. echo .replace_exception called outside of an exception handler
  179. echo call stack: $stack$}
  180. .function .not_executable file stack ... {
  181. echo $file is not executable
  182. echo call stack: $stack$}
  183. .function .not_soon_enough too_late [stack ...] {
  184. echo $too_late attempts to substitute after the command has been run
  185. if_only .var_exists stack {echo call stack $stack}}
  186. .function .post_elipsis_option -- flag stack ... {
  187. echo option $flag coming after an elipsis has no meaning
  188. echo call stack: $stack$}
  189. .function .post_dash_dash_flag -- flag stack ... {
  190. echo flag option $flag occurs after -- in the prototype
  191. echo call stack: $stack$}
  192. .function .prompt {.echo \$}
  193. .function .result_range -- lhs rhs op [stack ...] {
  194. echo result of $op with arguments $lhs and $rhs is out of range
  195. echo call stack: $op $stack$}
  196. .function .return_code code cmd [add_stack ...] {
  197. .if .test_in $cmd /usr/bin/test /bin/false {
  198. .replace_exception .false $cmd
  199. .nop $code $add_stack$}
  200. .else {
  201. .set ? $cmd returned $code
  202. echo $?$ : call stack $cmd $add_stack$}}
  203. .function .selection_not_found not_found selection [stack ...] {
  204. .echo no file matching pattern $not_found
  205. if_only .test_string_unequal $not_found $selection {
  206. .echo () for selection $selection}
  207. .echo $nl
  208. if_only .var_exists stack {echo call stack: $stack$}}
  209. .function .sigcont {
  210. echo received SIGCONT}
  211. .function .sigchld {
  212. echo received SIGCHLD}
  213. .function .sighup {
  214. echo received SIGHUP}
  215. .function .sigint {
  216. .throw echo $nl received SIGINT}
  217. .function .sigquit {
  218. echo received SIGQUIT}
  219. .function .sigpipe {
  220. echo received SIGPIPE}
  221. .function .sigterm {
  222. .throw echo $nl received SIGTERM}
  223. .function .sigtstp {
  224. echo received SIGTSTP}
  225. .function .siginfo {
  226. echo received SIGINFO}
  227. .function .sigusr1 {
  228. echo received SIGUSR1}
  229. .function .sigusr2 {
  230. echo received SIGUSR2}
  231. .function .sigunknown {
  232. echo received unknown unix signal}
  233. .function .shutdown -- [args ...] {.nop $args}
  234. .function .tardy_flag -- flag stack ... {
  235. echo $flag flag comes too late in command
  236. echo call stack: $stack$}
  237. .function .unchecked_variable -- var [stack ...] {
  238. echo $var was not checked with call stack $stack$}
  239. .function .unclosed_brace context [stack ...] {
  240. echo unclosed brace: $context $stack$}
  241. .function .undeclared_variable -- name [stack ...] {
  242. echo $name was not declared
  243. echo call stack: $stack$}
  244. .function .undefined_variable -- name [stack ...] {
  245. echo optional variable $name was not defined
  246. echo call stack: $stack$}
  247. .function .unfinished_if_block [stack ...] {
  248. echo conditional not finished within preceeding block
  249. if_only .var_exists stack {echo call stack: $stack$}}
  250. .function .unreadable_dir dir errno [stack ...] {
  251. .combine (cannot read directory ) $dir \ \(errno\ $errno \) $nl
  252. echo call stack: $stack$}
  253. .function .unrecognized_flag -- flag cmd [add_stack ...] {
  254. echo $flag flag is unrecognized for $cmd
  255. echo call stack: $cmd $add_stack$}
  256. .function .unused_before_set -- var [stack ...] {
  257. echo attempt to set $var before making use of its initial value
  258. echo call stack $stack$}
  259. .function .unused_variable -- var [stack ...] {
  260. echo $var was unused with call stack $stack$}
  261. .function .variable_already_exists name stack ... {
  262. echo variable $name already exists
  263. echo call stack $stack$}
  264. .function .version_incompatible version stack ... {
  265. echo this shell is not compatible with requested version $version
  266. echo call stack: $stack$}
  267. # ability of functions to act as builtin wrappers
  268. fn ! args ... {
  269. .if $args$ {.throw .false ${.echo ! $args}}
  270. .else {.nop}}
  271. fn af -- [argv ...] .{argfunction} {.argfunction}
  272. fn c -- text ... {.combine $text$}
  273. fn e -- text ... {.echo $text}
  274. fn do_while argv ... .{argfunction} {
  275. .try_catch_recursive .break {
  276. .nop $argv
  277. .try_catch_recursive .continue {.argfunction}
  278. .while $argv$ {.argfunction}}}
  279. fn echo -- text ... {.echo $text; .combine $nl}
  280. fn echo-comments argv ... {
  281. .stepwise $argv$ (-- cmd [args ...]) {.nop $args$
  282. if_only .test_in $cmd .nop # #! ## {echo &&&*}}}
  283. fn exec -- argv ... {.exec $argv$}
  284. fn elif command ... .{argfunction} {
  285. .else_if $command$ {.argfunction}}
  286. fn else .{argfunction} {.else {.argfunction}}
  287. fn fns -- name args ... .{argfunction} {fn $name [-?] $args$ {.argfunction}}
  288. fn if_only -- args ... .{argfunction} {
  289. .if $args$ {.argfunction}; .else {.nop}}
  290. fn if_only_not -- args ... .{argfunction} {
  291. .if $args$ {.nop}; .else {.argfunction}}
  292. fn ntimes n .{argfunction} {
  293. .while test_var_greater n 0 {
  294. .mapped_argfunction {.argfunction}
  295. .var_subtract n 1}}
  296. fn outer_break stack ... {.replace_exception .break $stack$}
  297. fn outer_continue stack ... {.replace_exception .continue $stack$}
  298. fn forj -- [vals ...] .{argfunction} {.for $vals$ (-- j) {.argfunction}}
  299. fn foreok -- [items ...] prototype .{argfunction} {
  300. .if .var_exists items {.for $items$ $prototype {.argfunction}}
  301. .else {.nop $prototype}}
  302. fn outer_for -- vals ... var .{argfunction} {
  303. .for $vals$ $var {
  304. .try_catch_recursive outer_break outer_continue {.argfunction}}}
  305. fn outer_while -- argv ... .{argfunction} {
  306. .while $argv$ {
  307. .try_catch_recursive outer_break outer_continue {.argfunction}}}
  308. fn setf -- var value {
  309. .if .var_exists $var {.set $var $value}
  310. .else {.global $var $value}}
  311. fn single -- args ... {.scope ${$args$}$ result {echo $result}}
  312. fn test_var_not_equal var value {.test_string_unequal $$var $value}
  313. fn test_var_greater -- var value {.test_greater $$var $value}
  314. fn type [-t] args ... [.{argfunction}] {
  315. .for $args$ (-- name ...) {
  316. .try_catch_recursive .function_not_found {
  317. if_only_not .var_exists -t {.echo &&&name is ()}
  318. .type &&&1 {.argfunction}}}}
  319. fn whence command [.{argfunction}] {
  320. .try_catch_recursive .function_not_found {
  321. .whence_function $command {.argfunction}}}
  322. fn whichp binary {.which_path $binary $PATH}
  323. fn while_and_one_more argv ... .{argfunction} {
  324. .try_catch_recursive .break {
  325. .while $argv$ {.argfunction}
  326. .try_catch_recursive .continue {.argfunction}}}
  327. fn var_exists -- var {.var_exists $var}
  328. fn var_in var set ... {.test_in $$var $set$}
  329. fn var_less var N {.test_less $$var $N}
  330. fn var_val -- [vars ...] {
  331. .if .var_exists vars {.for $vars$ (-- v ...) {.combine $v \( $$v \) \ }}
  332. .else {.nop}}
  333. fn paren_if_words -- value {
  334. .if .test_number_equal ${.argc $value$} 1 {.combine $value}
  335. .else {.combine \( $value \)}}
  336. fn polish -- operator builtin {
  337. fn &&operator -- lhs rhs ... {
  338. if_only .test_in $lhs + - / * {
  339. .scope ${$lhs $rhs$}$ (-- l r ...) {
  340. .set lhs $l
  341. .set rhs $r}}
  342. .scope $rhs$ (rhs [extra ...]) {
  343. .if .test_in $rhs + - / * {
  344. .scope ${$rhs $extra$}$ (rhs [extra ...]) {
  345. &&builtin lhs $rhs
  346. echo $lhs $extra$}}
  347. .else {
  348. &&builtin lhs $rhs
  349. echo $lhs $extra$}}}}
  350. polish + .var_add
  351. polish / .var_divide
  352. polish * .var_multiply
  353. polish - .var_subtract
  354. # external commands tested in the test suite
  355. fn false {.try_catch_recursive .return_code {${whichp false}}}
  356. fn ln [-?] [-t directory] target ... {
  357. .nop $-* $target # in case the following assertion fails
  358. .fork .mapped_argfunction {
  359. if_only .var_exists -t {.cd $directory}
  360. .for $target$ (-- j ...) {.test_file_exists $j}
  361. &{.which_path ln /bin:/usr/bin} $-? -t . $target$}}
  362. fn test -- args ... {.try_catch_recursive .return_code {${whichp test} $args$}}
  363. if_only .var_exists argv {.error ignored excess arguments $argv $nl}
  364. .function .shutdown -- args ... {
  365. .nop $args
  366. .combine $nl (now terminating normally) $nl}
  367. $.echo $nl $nl $nl $nl
  368. $.function fw .{argfunction} {
  369. .function f1 name .{argfunction} {.argfunction}
  370. .whence_function f1; .echo $nl
  371. f1 f2 {.argfunction}
  372. .whence_function f2; .echo $nl
  373. .rm_executable f1; .rm_executable f2}
  374. $fw {.echo hi $nl; .function $name .{argfunction} {.argfunction}}
  375. .function f1 name .{argfunction} {.echo hi $nl; .function $name .{argfunction} {.argfunction}}
  376. hi
  377. .function f2 .{argfunction} {.echo hi $nl; .function $name .{argfunction} {.argfunction}}
  378. $fw {.while .throw .false {
  379. .function &&name .{argfunction} {.argfunction}}}
  380. .function f1 name .{argfunction} {.while .throw .false {
  381. .function &name .{argfunction} {.argfunction}}}
  382. f2 : command not found ( f2 .whence_function fw )
  383. $.function f1 name .{argfunction} {
  384. .echo function name $name $nl
  385. .whence_function .argfunction {.argfunction}
  386. .echo $nl end of function body $nl}
  387. $f1 f2 {
  388. .echo noname $1 $nl
  389. .whence_function .argfunction {.argfunction}
  390. .echo $nl end of nothing $nl}
  391. function name f2
  392. {
  393. .echo noname $1 $nl
  394. .whence_function .argfunction {.argfunction}
  395. .echo $nl end of nothing $nl}
  396. end of function body
  397. $fw {
  398. .echo function name $name $nl
  399. .whence_function .argfunction {.argfunction}
  400. .echo $nl end of function body $nl}
  401. .function f1 name .{argfunction} {
  402. .echo function name $name $nl
  403. .whence_function .argfunction {.argfunction}
  404. .echo $nl end of function body $nl}
  405. function name f2
  406. {
  407. .echo function name $name $nl
  408. .whence_function .argfunction {.argfunction}
  409. .echo $nl end of function body $nl}
  410. end of function body
  411. f2 : command not found ( f2 .whence_function fw )
  412. $fw {forj 1 2 3 {
  413. .echo function name $j $name $nl
  414. .whence_function .argfunction {.argfunction}
  415. .echo $nl end of function body $nl}}
  416. .function f1 name .{argfunction} {forj 1 2 3 {
  417. .echo function name $j $name $nl
  418. .whence_function .argfunction {.argfunction}
  419. .echo $nl end of function body $nl}}
  420. function name 1 f2
  421. {forj 1 2 3 {
  422. .echo function name $j $name $nl
  423. .whence_function .argfunction
  424. .echo $nl end of function body $nl}}
  425. end of function body
  426. function name 2 f2
  427. {forj 1 2 3 {
  428. .echo function name $j $name $nl
  429. .whence_function .argfunction
  430. .echo $nl end of function body $nl}}
  431. end of function body
  432. function name 3 f2
  433. {forj 1 2 3 {
  434. .echo function name $j $name $nl
  435. .whence_function .argfunction
  436. .echo $nl end of function body $nl}}
  437. end of function body
  438. f2 : command not found ( f2 .whence_function fw )
  439. $fw {forj 1 2 3 {.mapped_argfunction $j {
  440. .echo function name &&name $nl
  441. .whence_function .argfunction {.argfunction}
  442. .echo $nl end of function body $nl}}}
  443. .function f1 name .{argfunction} {forj 1 2 3 {.mapped_argfunction $j {
  444. .echo function name &name $nl
  445. .whence_function .argfunction {.argfunction}
  446. .echo $nl end of function body $nl}}}
  447. function name f2
  448. {forj 1 2 3 {.mapped_argfunction $j {
  449. .echo function name &name $nl
  450. .whence_function .argfunction
  451. .echo $nl end of function body $nl}}}
  452. end of function body
  453. function name f2
  454. {forj 1 2 3 {.mapped_argfunction $j {
  455. .echo function name &name $nl
  456. .whence_function .argfunction
  457. .echo $nl end of function body $nl}}}
  458. end of function body
  459. function name f2
  460. {forj 1 2 3 {.mapped_argfunction $j {
  461. .echo function name &name $nl
  462. .whence_function .argfunction
  463. .echo $nl end of function body $nl}}}
  464. end of function body
  465. f2 : command not found ( f2 .whence_function fw )
  466. $# all of the above make sense, and the next should be identical to the last
  467. $fw {.mapped_argfunction $1 {forj 1 2 3 {.nop $j
  468. .echo function name &&name $nl
  469. .whence_function .argfunction {.argfunction}
  470. .echo $nl end of function body $nl}}}
  471. .function f1 name .{argfunction} {.mapped_argfunction $1 {forj 1 2 3 {.nop $j
  472. .echo function name &name $nl
  473. .whence_function .argfunction {.argfunction}
  474. .echo $nl end of function body $nl}}}
  475. function name f2
  476. {.mapped_argfunction $1 {forj 1 2 3 {.nop $j
  477. .echo function name &name $nl
  478. .whence_function .argfunction {forj 1 2 3 {.nop $j
  479. .echo function name f2 $nl
  480. .whence_function .argfunction {.mapped_argfunction $1 {forj 1 2 3 {.nop $j
  481. .echo function name &&&&&&name $nl
  482. .whence_function .argfunction
  483. .echo $nl end of function body $nl}}}
  484. .echo $nl end of function body $nl}}
  485. .echo $nl end of function body $nl}}}
  486. end of function body
  487. function name f2
  488. {.mapped_argfunction $1 {forj 1 2 3 {.nop $j
  489. .echo function name &name $nl
  490. .whence_function .argfunction {forj 1 2 3 {.nop $j
  491. .echo function name f2 $nl
  492. .whence_function .argfunction {.mapped_argfunction $1 {forj 1 2 3 {.nop $j
  493. .echo function name &&&&&&name $nl
  494. .whence_function .argfunction
  495. .echo $nl end of function body $nl}}}
  496. .echo $nl end of function body $nl}}
  497. .echo $nl end of function body $nl}}}
  498. end of function body
  499. function name f2
  500. {.mapped_argfunction $1 {forj 1 2 3 {.nop $j
  501. .echo function name &name $nl
  502. .whence_function .argfunction {forj 1 2 3 {.nop $j
  503. .echo function name f2 $nl
  504. .whence_function .argfunction {.mapped_argfunction $1 {forj 1 2 3 {.nop $j
  505. .echo function name &&&&&&name $nl
  506. .whence_function .argfunction
  507. .echo $nl end of function body $nl}}}
  508. .echo $nl end of function body $nl}}
  509. .echo $nl end of function body $nl}}}
  510. end of function body
  511. f2 : command not found ( f2 .whence_function fw )
  512. $# mostly as wierd
  513. $fw {.mapped_argfunction .not_a_number {
  514. .echo function name &&name $nl
  515. .whence_function .argfunction {.argfunction}
  516. .echo $nl end of function body $nl}}
  517. .function f1 name .{argfunction} {.mapped_argfunction .not_a_number {
  518. .echo function name &name $nl
  519. .whence_function .argfunction {.argfunction}
  520. .echo $nl end of function body $nl}}
  521. function name f2
  522. {.mapped_argfunction .not_a_number {
  523. .echo function name &name $nl
  524. .whence_function .argfunction {
  525. .echo function name f2 $nl
  526. .whence_function .argfunction {.mapped_argfunction .not_a_number {
  527. .echo function name &&&&name $nl
  528. .whence_function .argfunction {.argfunction}
  529. .echo $nl end of function body $nl}}
  530. .echo $nl end of function body $nl}
  531. .echo $nl end of function body $nl}}
  532. end of function body
  533. f2 : command not found ( f2 .whence_function fw )
  534. $# normal again
  535. $fw {.try_catch_recursive .not_a_number {
  536. .echo function name &&name $nl
  537. .whence_function .argfunction {.argfunction}
  538. .echo $nl end of function body $nl}}
  539. .function f1 name .{argfunction} {.try_catch_recursive .not_a_number {
  540. .echo function name &name $nl
  541. .whence_function .argfunction {.argfunction}
  542. .echo $nl end of function body $nl}}
  543. function name f2
  544. {.try_catch_recursive .not_a_number {
  545. .echo function name &name $nl
  546. .whence_function .argfunction
  547. .echo $nl end of function body $nl}}
  548. end of function body
  549. f2 : command not found ( f2 .whence_function fw )
  550. $fw {forj 1 2 3 {.try_catch_recursive .not_a_number {
  551. .nop $j
  552. .echo function name &&name $nl
  553. .whence_function .argfunction {.argfunction}
  554. .echo $nl end of function body $nl}}}
  555. .function f1 name .{argfunction} {forj 1 2 3 {.try_catch_recursive .not_a_number {
  556. .nop $j
  557. .echo function name &name $nl
  558. .whence_function .argfunction {.argfunction}
  559. .echo $nl end of function body $nl}}}
  560. function name f2
  561. {forj 1 2 3 {.try_catch_recursive .not_a_number {
  562. .nop $j
  563. .echo function name &name $nl
  564. .whence_function .argfunction
  565. .echo $nl end of function body $nl}}}
  566. end of function body
  567. function name f2
  568. {forj 1 2 3 {.try_catch_recursive .not_a_number {
  569. .nop $j
  570. .echo function name &name $nl
  571. .whence_function .argfunction
  572. .echo $nl end of function body $nl}}}
  573. end of function body
  574. function name f2
  575. {forj 1 2 3 {.try_catch_recursive .not_a_number {
  576. .nop $j
  577. .echo function name &name $nl
  578. .whence_function .argfunction
  579. .echo $nl end of function body $nl}}}
  580. end of function body
  581. f2 : command not found ( f2 .whence_function fw )
  582. $fw {.try_catch_recursive .not_a_number {forj 1 2 3 {.nop $j
  583. .echo function name &&name $nl
  584. .whence_function .argfunction {.argfunction}
  585. .echo $nl end of function body $nl}}}
  586. .function f1 name .{argfunction} {.try_catch_recursive .not_a_number {forj 1 2 3 {.nop $j
  587. .echo function name &name $nl
  588. .whence_function .argfunction {.argfunction}
  589. .echo $nl end of function body $nl}}}
  590. function name f2
  591. {.try_catch_recursive .not_a_number {forj 1 2 3 {.nop $j
  592. .echo function name &name $nl
  593. .whence_function .argfunction
  594. .echo $nl end of function body $nl}}}
  595. end of function body
  596. function name f2
  597. {.try_catch_recursive .not_a_number {forj 1 2 3 {.nop $j
  598. .echo function name &name $nl
  599. .whence_function .argfunction
  600. .echo $nl end of function body $nl}}}
  601. end of function body
  602. function name f2
  603. {.try_catch_recursive .not_a_number {forj 1 2 3 {.nop $j
  604. .echo function name &name $nl
  605. .whence_function .argfunction
  606. .echo $nl end of function body $nl}}}
  607. end of function body
  608. f2 : command not found ( f2 .whence_function fw )
  609. $# maybe weird?
  610. $fw {.mapped_argfunction $1 {
  611. .echo function name &&name $nl
  612. .whence_function .argfunction {.argfunction}
  613. .echo $nl end of function body $nl}}
  614. .function f1 name .{argfunction} {.mapped_argfunction $1 {
  615. .echo function name &name $nl
  616. .whence_function .argfunction {.argfunction}
  617. .echo $nl end of function body $nl}}
  618. function name f2
  619. {.mapped_argfunction $1 {
  620. .echo function name &name $nl
  621. .whence_function .argfunction {
  622. .echo function name f2 $nl
  623. .whence_function .argfunction {.mapped_argfunction $1 {
  624. .echo function name &&&&name $nl
  625. .whence_function .argfunction {.argfunction}
  626. .echo $nl end of function body $nl}}
  627. .echo $nl end of function body $nl}
  628. .echo $nl end of function body $nl}}
  629. end of function body
  630. f2 : command not found ( f2 .whence_function fw )
  631. $# definitely weird
  632. $fw {.mapped_argfunction $name {forj a b {.nop $j
  633. .echo function name &&name $nl
  634. .whence_function .argfunction {.argfunction}
  635. .echo $nl end of function body $nl}}}
  636. .function f1 name .{argfunction} {.mapped_argfunction $name {forj a b {.nop $j
  637. .echo function name &name $nl
  638. .whence_function .argfunction {.argfunction}
  639. .echo $nl end of function body $nl}}}
  640. function name f2
  641. {.mapped_argfunction $name {forj a b {.nop $j
  642. .echo function name &name $nl
  643. .whence_function .argfunction {forj a b {.nop $j
  644. .echo function name f2 $nl
  645. .whence_function .argfunction {.mapped_argfunction $name {forj a b {.nop $j
  646. .echo function name &&&&&&name $nl
  647. .whence_function .argfunction
  648. .echo $nl end of function body $nl}}}
  649. .echo $nl end of function body $nl}}
  650. .echo $nl end of function body $nl}}}
  651. end of function body
  652. function name f2
  653. {.mapped_argfunction $name {forj a b {.nop $j
  654. .echo function name &name $nl
  655. .whence_function .argfunction {forj a b {.nop $j
  656. .echo function name f2 $nl
  657. .whence_function .argfunction {.mapped_argfunction $name {forj a b {.nop $j
  658. .echo function name &&&&&&name $nl
  659. .whence_function .argfunction
  660. .echo $nl end of function body $nl}}}
  661. .echo $nl end of function body $nl}}
  662. .echo $nl end of function body $nl}}}
  663. end of function body
  664. f2 : command not found ( f2 .whence_function fw )
  665. $fw {.mapped_argfunction {
  666. .function $name .{argfunction} {.argfunction}}}
  667. .function f1 name .{argfunction} {.mapped_argfunction {
  668. .function $name .{argfunction} {.argfunction}}}
  669. .function f2 .{argfunction} {.mapped_argfunction {
  670. .function $name .{argfunction} {
  671. .function $name .{argfunction} {.mapped_argfunction {
  672. .function $name .{argfunction} {.argfunction}}}}}}
  673. $.nop $A $FIGNORE
  674. $.exit 0
  675. now terminating normally