|
|
 |
|
|
|
 |
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