Author |
Topic: Wish List (Read 1609 times) |
|
Jack Kelly
Full Member
member is offline
Gender:
Posts: 106
|
|
Wish List
« Thread started on: Jan 26th, 2015, 12:16pm » |
|
Could we have?
(1) a RESUME NEXT command option for the error trapping facility, and/or (2) a SWAP command that might also work with array elements.
In any case, I certainly hope there will be continuing releases of LBB.
|
|
Logged
|
|
|
|
Richard Russell
Administrator
member is offline
Posts: 1348
|
|
Re: Wish List
« Reply #1 on: Jan 26th, 2015, 3:01pm » |
|
on Jan 26th, 2015, 12:16pm, Jack Kelly wrote:Could we have a RESUME NEXT command |
|
Relatively easy to add, but it would necessarily have the same compatibility issue as RESUME, i.e. it would resume at the line (not statement) after the one in which the error occurred. Not a problem if you have only one statement per line.
Quote: Again, easy to add but I worry about breaking existing programs which use 'swap' as a variable name. You could cheat and do this:
Code: v1 = 123
v2 = 456
print v1,v2
!SWAP v1,v2
print v1,v2 Any other votes for these features to be added to LBB?
Richard.
|
|
Logged
|
|
|
|
tsh73
Full Member
member is offline
Gender:
Posts: 210
|
|
Re: Wish List
« Reply #2 on: Jan 26th, 2015, 7:38pm » |
|
I'm in for RESUME NEXT. It is really missing in LB.
|
|
Logged
|
|
|
|
Jack Kelly
Full Member
member is offline
Gender:
Posts: 106
|
|
Re: Wish List
« Reply #3 on: Jan 26th, 2015, 9:38pm » |
|
I'm fine with !SWAP.
No problem with one statement per line, especially in areas that a user could cause an error.
|
|
Logged
|
|
|
|
Richard Russell
Administrator
member is offline
Posts: 1348
|
|
Re: Wish List
« Reply #4 on: Jan 26th, 2015, 9:51pm » |
|
on Jan 26th, 2015, 7:38pm, tsh73 wrote:I'm in for RESUME NEXT. It is really missing in LB. |
|
It would be helpful (and increase the probability of me adding it!) if you could supply an example program with RESUME NEXT that I could use for testing, and perhaps put in the documentation.
Richard.
|
|
Logged
|
|
|
|
tsh73
Full Member
member is offline
Gender:
Posts: 210
|
|
Re: Wish List
« Reply #5 on: Jan 27th, 2015, 07:45am » |
|
example from QBASIC 1. There is error could happen; we trap and handle it somehow ; but we want to continue from next statement, not from errored one Code:CLS
ON ERROR GOTO Handler
FOR i = -5 TO 5
PRINT i, 1 / i
NEXT
END
Handler:
PRINT "Error "; ERR; " happened but we ignore and continue"
RESUME NEXT produces Code:-5 -.2
-4 -.25
-3 -.3333333
-2 -.5
-1 -1
0 Error 11 happened but we ignore and continue
1 1
2 .5
3 .3333333
4 .25
5 .2 2. Example from old VB (QB doesn't have ON ERROR RESUME NEXT) Somehow on the Internet it is called "C-style error handling" We have normal code; but there is a part that could break (it could be complex expression, or call to sub, or some device operation (file/disk/network etc)) We enclose it in ON ERROR RESUME NEXT/ON ERROR GOTO 0 (btw LB does not have ON ERROR GOTO 0 as well :(( ) Text1 is multiline textbox, Command1_Click is button handler.
Code:Private Sub Command1_Click()
'some ordinary code
Text1 = Text1 + "Hello" + vbCrLf
'isolate dangerous code
On Error Resume Next
ThisMightBreak (0)
If Err <> 0 Then
Text1 = Text1 + "!!! Some error happened" + vbCrLf
End If
On Error GoTo 0 'turn error checking off
'some more ordinary code
Text1 = Text1 + "Hello again" + vbCrLf
'second piece of dangerous code - this will break
On Error Resume Next
ThisMightBreak (1)
If Err <> 0 Then
Text1 = Text1 + "!!! Some error happened" + vbCrLf
End If
On Error GoTo 0 'turn error checking off
'last piece of ordinary code
Text1 = Text1 + "last Hello"
End Sub
Public Sub ThisMightBreak(i)
If i = 1 Then a = 1 / 0 'force error
'else
Text1 = Text1 + "Sub happened to work OK" + vbCrLf
End Sub
Output in a textbox: Code:Hello
Sub happened to work OK
Hello again
!!! Some error happened
last Hello
|
|
Logged
|
|
|
|
Richard Russell
Administrator
member is offline
Posts: 1348
|
|
Re: Wish List
« Reply #6 on: Jan 27th, 2015, 1:43pm » |
|
on Jan 27th, 2015, 07:45am, tsh73 wrote:QB doesn't have ON ERROR RESUME NEXT |
|
Do you think this construction is valuable? 'Silently' ignoring an error and continuing execution seems a relatively unlikely (and risky) thing to want to do.
What would be nicer is proper Structured Exception Handling of the TRY...CATCH sort. I could do that, but fortunately nobody's asked for it.
Quote:LB does not have ON ERROR GOTO 0 as well |
|
Oh, I thought it did. LBB has it, of course, but I don't advertise it as an enhancement. Probably I should!
Richard.
|
|
Logged
|
|
|
|
Richard Russell
Administrator
member is offline
Posts: 1348
|
|
Re: Wish List
« Reply #7 on: Jan 27th, 2015, 5:55pm » |
|
on Jan 27th, 2015, 07:45am, tsh73 wrote:I'm in for RESUME NEXT. It is really missing in LB. |
|
OK, I have added RESUME NEXT to my Work In Progress version. With this program:
Code: CLS
ON ERROR GOTO [Handler]
FOR i = -5 TO 5
PRINT i, 1 / i
NEXT
END
[Handler]
PRINT Err$; " happened but we ignore and continue"
RESUME NEXT I get this output:
Code:-5 -0.2
-4 -0.25
-3 -0.333333333
-2 -0.5
-1 -1
0 Division by zero at line 5 happened but we ignore and continue
1 1
2 0.5
3 0.333333333
4 0.25
5 0.2 And with this code:
Code: CrLf$ = chr$(13);chr$(10)
'some ordinary code
Text1$ = Text1$ + "Hello" + CrLf$
'isolate dangerous code
On Error Goto [resume.next]
dummy = 1 / 1
If Err <> 0 Then
Text1$ = Text1$ + "!!! Some error happened" + CrLf$
End If
On Error GoTo 0 'turn error checking off
'some more ordinary code
Text1$ = Text1$ + "Hello again" + CrLf$
'second piece of dangerous code - this will break
On Error Goto [resume.next]
dummy = 1 / 0
If Err <> 0 Then
Text1$ = Text1$ + "!!! Some error happened" + CrLf$
End If
On Error GoTo 0 'turn error checking off
'last piece of ordinary code
Text1$ = Text1$ + "last Hello"
Print Text1$
End
[resume.next]
Resume Next I get this output:
Code:Hello
Hello again
!!! Some error happened
last Hello The ThisMightBreak(n) technique won't work in LBB as it stands, because the error is thrown inside the SUB (and the RESUME NEXT attempts to continue execution inside the SUB).
I could make LBB reproduce the VB behaviour (the error is effectively thrown in the CALL statement), but it's considerably more complicated and it might break compatibility with LB's existing RESUME functionality.
Richard.
|
|
Logged
|
|
|
|
tsh73
Full Member
member is offline
Gender:
Posts: 210
|
|
Re: Wish List
« Reply #8 on: Jan 27th, 2015, 8:32pm » |
|
Quote:Quote:LB does not have ON ERROR GOTO 0 as well Oh, I thought it did. LBB has it, of course, but I don't advertise it as an enhancement. Probably I should! |
|
Indeed. I remember having trouble debugging someone else's program which had on error in a main module. Program didn't worked without on error at all, and there are no way to turn it off once it started. (and I reckon something weird in debugger too)
Quote:OK, I have added RESUME NEXT to my Work In Progress version. |
|
Great. Thanks a lot.
Quote:Do you think this construction is valuable? 'Silently' ignoring an error and continuing execution seems a relatively unlikely (and risky) thing to want to do. |
|
Well, if used right (set to ignore an error for a dangerous statement - check and restore normal handling with ON ERROR GOTO 0 right after) , it might be helpful. EDIT it's still with us in VBS and Ms Excel.
|
« Last Edit: Jan 27th, 2015, 8:37pm by tsh73 » |
Logged
|
|
|
|
Alincon
Full Member
member is offline
Posts: 147
|
|
Re: Wish List
« Reply #9 on: Jan 29th, 2015, 12:52am » |
|
I'd like like the LBB tool bar to have that icon on the LB tool bar that, when clicked, shows a list of the branch names, and then I can jump right to the one I want. I use this feature a lot.
Also I'd like LBB to automatically nullify the 'nomainwin command when the program is run in debug mode.
r.m.
|
|
Logged
|
|
|
|
Richard Russell
Administrator
member is offline
Posts: 1348
|
|
Re: Wish List
« Reply #10 on: Jan 29th, 2015, 11:50am » |
|
on Jan 29th, 2015, 12:52am, Alincon wrote:I'd like like the LBB tool bar to have that icon on the LB tool bar that, when clicked, shows a list of the branch names |
|
I agree it's a nice feature. My concern would be whether I could generate the list of branch/function/sub names in a sensible time-frame if the program is really large (I know of programs in excess of 60,000 lines being compiled with LBB).
I know it's not entirely a substitute, but remember that in LBB you can right-click on a branch/function/sub name and then select Jump to from the displayed context menu; to return from where you came right-click and select Go back.
I would speculate that commonly when you want to jump to a particular branch/function/sub it's because you are currently looking at some code which references it (e.g. a GOTO or a CALL), so in that circumstance the right-click option does the job.
Quote:Also I'd like LBB to automatically nullify the 'nomainwin command when the program is run in debug mode. |
|
I'll investigate the practicality of that.
Richard.
|
|
|
|
Richard Russell
Administrator
member is offline
Posts: 1348
|
|
Re: Wish List
« Reply #11 on: Jan 31st, 2015, 12:55pm » |
|
on Jan 29th, 2015, 12:52am, Alincon wrote:Also I'd like LBB to automatically nullify the 'nomainwin command when the program is run in debug mode. |
|
I can confirm that this will be in the next release of LBB, due in March.
Richard.
|
|
Logged
|
|
|
|
bluatigro
Full Member
member is offline
Gender:
Posts: 111
|
|
Re: Wish List
« Reply #12 on: Feb 1st, 2015, 2:33pm » |
|
Code: Code:
call subname a( 13 ) , a( 14 ) , a( 15 )
end
sub subname byref x , byref y , byref z
end sub
|
|
Logged
|
|
|
|
Richard Russell
Administrator
member is offline
Posts: 1348
|
|
Re: Wish List
« Reply #13 on: Feb 1st, 2015, 3:23pm » |
|
on Feb 1st, 2015, 2:33pm, bluatigro wrote: Any other votes for this?
Quote: Code:call subname a( 13 ) , a( 14 ) , a( 15 )
end
sub subname byref x , byref y , byref z
end sub |
|
Good catch! That should definitely work (in LBB), the fact that it doesn't is a mistake on my part. I'll fix it in the next release. Thank you!
Richard.
|
|
Logged
|
|
|
|
Richard Russell
Administrator
member is offline
Posts: 1348
|
|
Re: Wish List
« Reply #14 on: Feb 8th, 2015, 1:45pm » |
|
on Jan 27th, 2015, 5:55pm, Richard Russell wrote:OK, I have added RESUME NEXT to my Work In Progress version. |
|
Sorry to mess you around, but I've taken it out again! I decided that with SEH being supported in the next release of LBB it didn't make much sense to support the outdated RESUME NEXT as well.
The SEH equivalent to the previous simple example is as follows, and it's much nicer (IMHO):
Code: CLS
FOR i = -5 TO 5
TRY
PRINT i, 1 / i
CATCH
PRINT Err$; " happened but we ignore and continue"
END TRY
NEXT
END And here is the SEH equivalent to the more complex example; no GOTOs, no labels, this is how modern code should be written!:
Code: CrLf$ = chr$(13);chr$(10)
'some ordinary code
Text1$ = Text1$ + "Hello" + CrLf$
'isolate dangerous code
Try
Call Reciprocal 1
Catch
Text1$ = Text1$ + "!!! Some error happened" + CrLf$
End Try
'some more ordinary code
Text1$ = Text1$ + "Hello again" + CrLf$
'second piece of dangerous code - this will break
Try
Call Reciprocal 0
Catch
Text1$ = Text1$ + "!!! Some error happened" + CrLf$
End Try
'last piece of ordinary code
Text1$ = Text1$ + "last Hello"
Print Text1$
End
Sub Reciprocal n
dummy = 1 / n
End Sub Richard.
|
|
|
|
|