Re: Crash or return forbidden value?
- Posted by Shawn Pringle <shawn.pringle at gmai??com> May 08, 2008
- 642 views
CChris wrote: > > Currently, the interpreter always checks the validity of any index or slice, > and errors out whenever a test fails. > > My point is: there is no need to duplicate the testing made by the > interpreter, > and it should do the testing. Just allow RTFatal() to do something smarter, > like skipping the call or branching to some place. This would make the user > code more efficient (no duplicate tests) and cleaner, as part of the error > handling > will simply be in the backand, where it is already. > > CChris What you are talking about here is building an Exception system into the interpreter. It would be analogous to try/throw/catch and Exceptions like in Java or C++. Perhaps exceptions could be less invasive than adding C++ syntax if say some new builtin routines such as a register_exception_routine were added. Routines that are passed to that function would get called in case of exceptions. There would have to be a special return mechanism for these functions. They could return to the offending routine's caller. You can put in some kind of side effect like syntax keyword: onexception (s[6] = 4) { .. } On the other hand, perhaps compiled code could remove the second check after an if statement. s[6] = 5 -- check is done to make sure s is a sequence and 6 is a valid index if sequence(s) and length(s) > 7 then s[6] = 5 -- no check is made to make sure s is a sequence for the -- the user did it. Additionally 7 and 6 are constants -- so index checking could be eliminated at compile time -- too. end if Shawn Pringle