summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2018-04-20replace space used to terminate heredocToby Goodwin
2018-03-26Merge branch 'master' into ifnotToby Goodwin
2018-03-26whitespace cleanupsToby Goodwin
2018-03-20whitespace cleanupToby Goodwin
2018-03-19Merge branch 'master' into ifnotToby Goodwin
2018-03-19implement $nl and $tab, issue #43Toby Goodwin
2018-03-19implement desugaring version (again, lost due to git problem)Toby Goodwin
2018-03-17Merge branch 'master' into ifnotToby Goodwin
2018-03-17fix bad merge fixupToby Goodwin
2018-03-17Merge branch 'continue'Toby Goodwin
2018-03-17tidy up, test cases, document flagToby Goodwin
2018-03-16flag largely working, flag n + is a bit oddToby Goodwin
2018-03-16starting to workToby Goodwin
2018-03-05Merge branch 'master' into ifnotToby Goodwin
2018-03-05add to ChangeLogToby Goodwin
2018-03-05implement walk half of if not, plus testsToby Goodwin
2018-03-02Unify bodies of if and if-else statementsBert Münnich
Fixes issue #31 of rakitzis/rc.
2018-03-02nBody second child can be nullToby Goodwin
2018-03-01Merge branch 'master' into ifnotToby Goodwin
2018-02-17remove all references to SIGCLDToby Goodwin
2018-02-09remove config.h-dist; add thanks to Bert and LeahToby Goodwin
2018-02-09wipToby Goodwin
2017-11-17Merge pull request #41 from muennich/issue40Toby Goodwin
Fix issue #40
2017-10-28Add test for issue #40, exit status of -e with failed backquote or pipelineBert Münnich
2017-10-27Fix exit value for -e with failed backquote or pipelineBert Münnich
This fixes rakitzis/rc issue #40. Both cases suffered from a misconception of statprint() in which the necessary check for -e happens. The checked status value gets passed to statprint() as an argument but the corresponding value passed to rc_exit() in case the status is non-zero comes from getstatus(), which requires that the checked status is written to statuses[] first. For pipelines this happened in the wrong order and for backquotes the status value was not put into statuses[] at all. Making statprint() a static helper function prevents this mistake by only leaving the setstatus family of functions to handle status codes.
2017-08-28remove blank line at end of fileToby Goodwin
2017-08-27Change one continue-testing loop from for to whileDrazen Borkovic
2017-08-26FormattingDrazen Borkovic
2017-08-26Remove space at end of lineDrazen Borkovic
2017-08-26Add continue to man pageDrazen Borkovic
2017-08-26Add "continue" builtinDrazen Borkovic
2017-08-25Merge pull request #21 from muennich/break-varstackToby Goodwin
Fix breaking out of loops through local variable blocks
2017-08-25use "/bin/pwd -P" - github #36Toby Goodwin
2017-08-25add CasperToby Goodwin
2017-06-23fix for github #32 readline loses track of term sizeToby Goodwin
2017-06-23fix prefix redir precedence bug, github #33Toby Goodwin
2017-06-23add failing test for github #33 counter intuitive redirection parseToby Goodwin
2017-06-23add parse tree dumper with --enable-developToby Goodwin
2017-06-23reinstate yacc to the build processToby Goodwin
2017-05-26INSTALL is an artifact, so add to .gitignoreToby Goodwin
2017-05-26fix typosJakub Wilk
2017-05-26When running rc on the following script, rc crashes.Drazen Borkovic
fn f1 { v=x { }} fn f2 { f1 1; f1 2 } f2 whatis Valgrind stack: ==10068== Invalid read of size 8 ==10068== at 0x40EFB1: varlookup (var.c:84) ==10068== by 0x407B04: whatare_all_vars (hash.c:311) ==10068== by 0x401E60: b_whatis (builtins.c:323) ==10068== by 0x402E32: exec (exec.c:92) ==10068== by 0x40F997: walk (walk.c:39) The reason is that vp[h].p is freed in delete_var(), but the pointer is kept. Later the pointer is found to be non-null and dereferenced causing the crash.
2017-05-25remove trailing spaceToby Goodwin
2017-05-25Man page explanation of the -e option include the test in the while() statement.Drazen Borkovic
2017-05-25Fix: "rc -e" exits if condition in while statement returns false the second timeDrazen Borkovic
2017-05-25tidy up bootstrap: INSTALL is an artifactToby Goodwin
2017-04-17document readline tilde expansionToby Goodwin
2017-04-17add some tests for unquoted equalsToby Goodwin
2017-04-17update parse.[ch]Toby Goodwin
2017-04-17Parse equals sign as keywordBert Münnich
The parser treats unexpected keyword tokens (eg. if, while, ~) as literals and not as syntax errors. It does not do this for the equals sign, but it could, as it only has a special meaning at the beginning of a command, much like the keywords. Doing this allows one to write commands like this: dd if'='/dev/zero of'='data bs'='1024 count'='1 without the quotes around the equals signs. All shells from the Bourne family do this. For this to work, the lexer must not automatically terminate words at equals signs, instead it has to generate a free caret around it like for the twiddle and other such special characters. In the parser's grammar we need to get rid of the left recursion in the rules for 'simple' to turn the reduce/reduce conflict at 'first' on '=' (empty -> 'optcaret' or 'first' -> 'simple') into a shift/reduce conflict, which then can be solved with precedence/associativity so that the reduction of the empty 'optcaret' wins over shifting '='.