|
|
coherent
Done: Write library: sine, cosine, exponential, log, arctangent, Bessel functions Rewrite yytname so that += is += not ADDAB, etc. gerror should cause the parser to enter the error state. In the event of a syntax error (or any error in a definition for that matter) someone should do a remloc on the parameters and autos. As it is now, you can never use those variables as parameters again, and whats more, if you refer to their global equivalents while in a function, it uses the aborted local value instead. One solution (gross) is to simply walk the dictionary on errors and remove all local stuff. Another is to have the error production notice that a definition is going on because retfrom is non-null Note that currently, literal number space is never recovered. The result is that if you give bc a large file with expressions to evaluate, it will run out of space. Strings are also lost. Fix exponentiation so that negative powers are implemented or reported as errors. Also report sqrt(x<0) as bc error not mp fatal. Change `foo' into "foo", damn terminal parochialists. Recover literal storage in defunct function bodies when the function is being redeclared. Requires size field in function definition so literal scanner can find end of function body. Provide line numbers on syntax errors within files. Note that currently a quit in a file simply goes to the next file. Note also that quit is executed when parsed, even if it is in a function definition or a conditional which is never true. These are both certainly wrong. The reservation of A-F for digits is stupid, the recognition of A-F as digits in ibase==10 is doubly stupid, the local escapes to hex and octal are trebly stupid. Require numbers to begin with a digit or full stop. ibase=16; 0.FFFF; /* does not compute */ Note that the output routine gets totally confused as to what column it is on with tabs. It should do it right. Not done: Ask Rico and Johann if there is any way for interp and yyparse to work as coroutines rather than subroutines so that the interp stack and the yyparse stack can share memory. I don't think so, except by accepting at each end of statement or define. Eventually the asserts and bogus defaults should be removed, but no need to do so until we have faith. If anyone knew which they were. Should bc catch interrupts. Yes. My random number spectral test blows up for n = 4. The bug changes depending on the strings entered in the program and the amount of debugging code entered into bc. Typically: sqrt of negative, bad pointer in free, segmentation violation in free. Number of iterations of computation accomplished also varies as the contents of the program changes. Now: smult.c: 50: assert(0 <= carry && carry <= NEFL) failed. #include "file" should be allowed. #redirect "file" should be allowed. Make more than one auto per define legal. Too hard? Implement && and || and !. Too hard? Fix realloc work around in bcmutil.c/select() Merge changes from cef's msdos port. Fix any conflicts with /usr/src/cmd/dc Make cstream dynamically grow; must convert all the absolute loc pointers into cstream offsets and fix the patches so they still work. Also shrink cstream after it has grown to encompass a function. The stack should be cleaned up after bcmerr(), which should also catch the mpalc() call to mperr(); people should understand that they can't expect everything to be hunky-dory at this point, but they should be allowed to salvage what information they can. Type check argument lists for functions.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.