mirror of
https://github.com/inexorabletash/jsbasic.git
synced 2025-05-13 03:38:15 +00:00
Fix ONERR GOTO handling - should skip to next line. Resolves #7
This commit is contained in:
parent
3542aa89e6
commit
20f302339f
2
basic.js
2
basic.js
@ -632,7 +632,6 @@ this.basic = (function() {
|
|||||||
throw new EndProgram();
|
throw new EndProgram();
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////
|
||||||
//
|
//
|
||||||
// Error Handling Statements
|
// Error Handling Statements
|
||||||
@ -641,6 +640,7 @@ this.basic = (function() {
|
|||||||
|
|
||||||
'onerr_goto': function ONERR_GOTO(line) {
|
'onerr_goto': function ONERR_GOTO(line) {
|
||||||
state.onerr_handler = line;
|
state.onerr_handler = line;
|
||||||
|
throw new NextLine();
|
||||||
},
|
},
|
||||||
|
|
||||||
'resume': function RESUME() {
|
'resume': function RESUME() {
|
||||||
|
@ -10,9 +10,12 @@
|
|||||||
110 A = 1 : A$ = "a" : A(1) = 2 : A$(1) = "b" : CLEAR
|
110 A = 1 : A$ = "a" : A(1) = 2 : A$(1) = "b" : CLEAR
|
||||||
|
|
||||||
200 REM Feature Detection
|
200 REM Feature Detection
|
||||||
210 LR = 0 : ONERR GOTO 220 : GR : LR = 1
|
210 LR = 0 : ONERR GOTO 220
|
||||||
220 HR = 0 : ONERR GOTO 240 : HGR : HR = 1
|
211 GR : LR = 1
|
||||||
230 PD = 0 : ONERR GOTO 240 : X = PDL(0) : PD = 1
|
220 HR = 0 : ONERR GOTO 240
|
||||||
|
221 HGR : HR = 1
|
||||||
|
230 PD = 0 : ONERR GOTO 240
|
||||||
|
231 X = PDL(0) : PD = 1
|
||||||
240 POKE 216,0
|
240 POKE 216,0
|
||||||
|
|
||||||
300 PR#3 : TEXT : HOME : PRINT "Unit Tests"
|
300 PR#3 : TEXT : HOME : PRINT "Unit Tests"
|
||||||
@ -122,125 +125,128 @@
|
|||||||
3000 PRINT : PRINT "Error Handling ";
|
3000 PRINT : PRINT "Error Handling ";
|
||||||
|
|
||||||
3010 T$ = "ONERR GOTO"
|
3010 T$ = "ONERR GOTO"
|
||||||
: T = 1 : ONERR GOTO 3015 : T = 1 / 0
|
: T = 1 : ONERR GOTO 3015
|
||||||
3011 T = 2
|
3011 T = 1 / 0
|
||||||
|
3012 T = 2
|
||||||
3015 S = (T=1) : GOSUB 1
|
3015 S = (T=1) : GOSUB 1
|
||||||
|
|
||||||
3020 T$ = "RESUME"
|
3020 T$ = "RESUME"
|
||||||
: T = 0 : ONERR GOTO 3025 : T = 1 / T : GOTO 3029
|
: T = 0 : ONERR GOTO 3025
|
||||||
|
3021 T = 1 / T : GOTO 3029
|
||||||
3025 T = 1 : RESUME
|
3025 T = 1 : RESUME
|
||||||
3029 S = (T=1) : GOSUB 1
|
3029 S = (T=1) : GOSUB 1
|
||||||
|
|
||||||
3040 T$ = "RETURN FROM LOOP"
|
3040 T$ = "RETURN FROM LOOP"
|
||||||
: T = 1 : ONERR GOTO 3046
|
: T = 1 : ONERR GOTO 3046
|
||||||
: GOSUB 3045
|
3041 GOSUB 3045
|
||||||
: GOTO 3048
|
: GOTO 3048
|
||||||
3045 FOR I = 1 TO 10 : RETURN
|
3045 FOR I = 1 TO 10 : RETURN
|
||||||
3046 T = 2 : REM ONERR goes here
|
3046 T = 2 : REM ONERR goes here
|
||||||
3048 S = (T=1) : GOSUB 1
|
3048 S = (T=1) : GOSUB 1
|
||||||
|
|
||||||
3100 T$ = "NEXT WITHOUT FOR"
|
3100 T$ = "NEXT WITHOUT FOR"
|
||||||
: T = 1 : ONERR GOTO 3101
|
: T = 1 : ONERR GOTO 3102
|
||||||
: NEXT
|
3101 NEXT
|
||||||
: T = 2
|
: T = 2
|
||||||
3101 S = (T=1) AND (PEEK(222)=0) : GOSUB 1
|
3102 S = (T=1) AND (PEEK(222)=0) : GOSUB 1
|
||||||
|
|
||||||
3110 T$ = "SYNTAX ERROR" : REM Compile time only, can't test!
|
3110 T$ = "SYNTAX ERROR" : REM Compile time only, can't test!
|
||||||
|
|
||||||
3120 T$ = "RETURN WITHOUT GOSUB"
|
3120 T$ = "RETURN WITHOUT GOSUB"
|
||||||
: T = 1 : ONERR GOTO 3121
|
: T = 1 : ONERR GOTO 3122
|
||||||
: RETURN
|
3121 RETURN
|
||||||
: T = 2
|
: T = 2
|
||||||
3121 S = (T=1) AND (PEEK(222)=22) : GOSUB 1
|
3122 S = (T=1) AND (PEEK(222)=22) : GOSUB 1
|
||||||
|
|
||||||
3130 T$ = "OUT OF DATA"
|
3130 T$ = "OUT OF DATA"
|
||||||
: T = 1 : ONERR GOTO 3131
|
: T = 1 : ONERR GOTO 3132
|
||||||
: FOR A = 1 TO 1000 : READ A$ : NEXT
|
3131 FOR A = 1 TO 1000 : READ A$ : NEXT
|
||||||
: T = 2
|
: T = 2
|
||||||
3131 S = (T=1) AND (PEEK(222)=42) : GOSUB 1
|
3132 S = (T=1) AND (PEEK(222)=42) : GOSUB 1
|
||||||
|
|
||||||
3140 T$ = "ILLEGAL QUANTITY"
|
3140 T$ = "ILLEGAL QUANTITY"
|
||||||
: T = 1 : ONERR GOTO 3141
|
: T = 1 : ONERR GOTO 3142
|
||||||
: A% = 32768
|
3141 A% = 32768
|
||||||
: T = 2
|
: T = 2
|
||||||
3141 S = (T=1) AND (PEEK(222)=53) : GOSUB 1
|
3142 S = (T=1) AND (PEEK(222)=53) : GOSUB 1
|
||||||
|
|
||||||
3145 T$ = "ILLEGAL QUANTITY"
|
3145 T$ = "ILLEGAL QUANTITY"
|
||||||
: T = 1 : ONERR GOTO 3146
|
: T = 1 : ONERR GOTO 3147
|
||||||
: A = ASC("")
|
3146 A = ASC("")
|
||||||
: T = 2
|
: T = 2
|
||||||
3146 S = (T=1) AND (PEEK(222)=53) : GOSUB 1
|
3147 S = (T=1) AND (PEEK(222)=53) : GOSUB 1
|
||||||
|
|
||||||
3150 T$ = "OVERFLOW" :
|
3150 T$ = "OVERFLOW" :
|
||||||
: T = 1 : ONERR GOTO 3151
|
: T = 1 : ONERR GOTO 3152
|
||||||
: A = 256^256^256
|
3151 A = 256^256^256
|
||||||
: T = 2
|
: T = 2
|
||||||
3151 S = (T=1) AND (PEEK(222)=69) : GOSUB 1
|
3152 S = (T=1) AND (PEEK(222)=69) : GOSUB 1
|
||||||
|
|
||||||
3160 T$ = "OUT OF MEMORY" : REM Not consistent enough across browsers
|
3160 T$ = "OUT OF MEMORY" : REM Not consistent enough across browsers
|
||||||
: REM T = 1 : ONERR GOTO 3161
|
: REM T = 1 : ONERR GOTO 3162
|
||||||
: REM A$ = "x"
|
3161 REM A$ = "x"
|
||||||
: REM FOR I = 0 TO 1 STEP 0 : A$ = A$ + A$ : NEXT
|
: REM FOR I = 0 TO 1 STEP 0 : A$ = A$ + A$ : NEXT
|
||||||
: REM T = 2
|
: REM T = 2
|
||||||
3161 REM S = (T=1) AND (PEEK(222)=77) : GOSUB 1
|
3162 REM S = (T=1) AND (PEEK(222)=77) : GOSUB 1
|
||||||
|
|
||||||
3170 T$ = "UNDEFINED STATEMENT" :
|
3170 T$ = "UNDEFINED STATEMENT" :
|
||||||
: T = 1 : ONERR GOTO 3171
|
: T = 1 : ONERR GOTO 3172
|
||||||
: GOTO 3172
|
3171 GOTO 3173
|
||||||
: T = 2
|
: T = 2
|
||||||
3171 S = (T=1) AND (PEEK(222)=90) : GOSUB 1
|
3172 S = (T=1) AND (PEEK(222)=90) : GOSUB 1
|
||||||
|
|
||||||
3180 T$ = "BAD SUBSCRIPT" :
|
3180 T$ = "BAD SUBSCRIPT" :
|
||||||
: T = 1 : ONERR GOTO 3181
|
: T = 1 : ONERR GOTO 3182
|
||||||
: DIM BS(3) : BS(4) = 123
|
3181 DIM BS(3) : BS(4) = 123
|
||||||
: T = 2
|
: T = 2
|
||||||
3181 S = (T=1) AND (PEEK(222)=107) : GOSUB 1
|
3182 S = (T=1) AND (PEEK(222)=107) : GOSUB 1
|
||||||
|
|
||||||
3190 T$ = "REDIMENSION ARRAY" :
|
3190 T$ = "REDIMENSION ARRAY" :
|
||||||
: T = 1 : ONERR GOTO 3191
|
: T = 1 : ONERR GOTO 3192
|
||||||
: DIM RA(3) : DIM RA(3)
|
3191 DIM RA(3) : DIM RA(3)
|
||||||
: T = 2
|
: T = 2
|
||||||
3191 S = (T=1) AND (PEEK(222)=120) : GOSUB 1
|
3192 S = (T=1) AND (PEEK(222)=120) : GOSUB 1
|
||||||
|
|
||||||
3200 T$ = "DIVISION BY ZERO" :
|
3200 T$ = "DIVISION BY ZERO" :
|
||||||
: T = 1 : ONERR GOTO 3201
|
: T = 1 : ONERR GOTO 3202
|
||||||
: A = 1 / 0
|
3201 A = 1 / 0
|
||||||
: T = 2
|
: T = 2
|
||||||
3201 S = (T=1) AND (PEEK(222)=133) : GOSUB 1
|
3202 S = (T=1) AND (PEEK(222)=133) : GOSUB 1
|
||||||
|
|
||||||
3210 T$ = "TYPE MISMATCH" :
|
3210 T$ = "TYPE MISMATCH" :
|
||||||
: T = 1 : ONERR GOTO 3211
|
: T = 1 : ONERR GOTO 3212
|
||||||
: RESTORE : FOR I = 1 TO 1000 : READ A : NEXT
|
3211 RESTORE : FOR I = 1 TO 1000 : READ A : NEXT
|
||||||
: T = 2
|
: T = 2
|
||||||
3211 S = (T=1) AND (PEEK(222)=163) : GOSUB 1
|
3212 S = (T=1) AND (PEEK(222)=163) : GOSUB 1
|
||||||
|
|
||||||
3215 T$ = "TYPE MISMATCH" :
|
3215 T$ = "TYPE MISMATCH" :
|
||||||
: T = 1 : ONERR GOTO 3216
|
: T = 1 : ONERR GOTO 3217
|
||||||
: RESTORE : FOR I = 1 TO 1000 : READ A% : NEXT
|
3216 RESTORE : FOR I = 1 TO 1000 : READ A% : NEXT
|
||||||
: T = 2
|
: T = 2
|
||||||
3216 S = (T=1) AND (PEEK(222)=163) : GOSUB 1
|
3217 S = (T=1) AND (PEEK(222)=163) : GOSUB 1
|
||||||
|
|
||||||
3220 T$ = "STRING TOO LONG" : REM Strings are "infinite", can't test
|
3220 T$ = "STRING TOO LONG"
|
||||||
|
: REM Strings are "infinite", can't test
|
||||||
|
|
||||||
3230 T$ = "FORMULA TOO COMPLEX"
|
3230 T$ = "FORMULA TOO COMPLEX"
|
||||||
: REM T = 1 : ONERR GOTO 3231
|
: REM T = 1 : ONERR GOTO 3232
|
||||||
: REM DEF FN FC(x) = FN FC(x) + 1 : X = FN FC(0)
|
3231 REM DEF FN FC(x) = FN FC(x) + 1 : X = FN FC(0)
|
||||||
: REM T = 2
|
: REM T = 2
|
||||||
3231 REM S = (T=1) AND (PEEK(222)=191): GOSUB 1
|
3232 REM S = (T=1) AND (PEEK(222)=191): GOSUB 1
|
||||||
|
|
||||||
3240 T$ = "UNDEFINED FUNCTION" :
|
3240 T$ = "UNDEFINED FUNCTION" :
|
||||||
: T = 1 : ONERR GOTO 3241
|
: T = 1 : ONERR GOTO 3242
|
||||||
: X = FN UF(0)
|
3241 X = FN UF(0)
|
||||||
: T = 2
|
: T = 2
|
||||||
3241 S = (T=1) AND (PEEK(222)=224) : GOSUB 1
|
3242 S = (T=1) AND (PEEK(222)=224) : GOSUB 1
|
||||||
|
|
||||||
3250 T$ = "RE-ENTER" : REM Can't test until input can be synthesized
|
3250 T$ = "RE-ENTER" : REM Can't test until input can be synthesized
|
||||||
|
|
||||||
3260 T$ = "BREAK" :
|
3260 T$ = "BREAK" :
|
||||||
: T = 1 : ONERR GOTO 3261
|
: T = 1 : ONERR GOTO 3262
|
||||||
: STOP
|
3261 STOP
|
||||||
: T = 2
|
: T = 2
|
||||||
3261 S = (T=1) AND (PEEK(222)=255) : GOSUB 1
|
3262 S = (T=1) AND (PEEK(222)=255) : GOSUB 1
|
||||||
|
|
||||||
3270 T$ = "CALL-3288" :
|
3270 T$ = "CALL-3288" :
|
||||||
: T = 1 : ONERR GOTO 3274
|
: T = 1 : ONERR GOTO 3274
|
||||||
@ -254,6 +260,12 @@
|
|||||||
: RETURN
|
: RETURN
|
||||||
3275 S = (T=3) : GOSUB 1
|
3275 S = (T=3) : GOSUB 1
|
||||||
|
|
||||||
|
3280 T$ = "ONERR GOTO skips rest of line"
|
||||||
|
: T = 1
|
||||||
|
: ONERR GOTO 3281
|
||||||
|
: T = 2
|
||||||
|
3281 S = (T=1) : GOSUB 1
|
||||||
|
|
||||||
|
|
||||||
3999 POKE 216,0 : REM Disable ONERR handler
|
3999 POKE 216,0 : REM Disable ONERR handler
|
||||||
|
|
||||||
@ -748,7 +760,8 @@
|
|||||||
17040 T$ = "Sequential Access/ONERR"
|
17040 T$ = "Sequential Access/ONERR"
|
||||||
: PRINT CHR$(4)"OPEN JABBERWOCKY"
|
: PRINT CHR$(4)"OPEN JABBERWOCKY"
|
||||||
: PRINT CHR$(4)"READ JABBERWOCKY"
|
: PRINT CHR$(4)"READ JABBERWOCKY"
|
||||||
: ONERR GOTO 17042 : N = 0
|
: ONERR GOTO 17042
|
||||||
|
17041 N = 0
|
||||||
: FOR N = 0 TO 10 : INPUT A$ : NEXT
|
: FOR N = 0 TO 10 : INPUT A$ : NEXT
|
||||||
17042 POKE 216,0 : PRINT CHR$(4)"CLOSE" : S = (N = 4) : GOSUB 1
|
17042 POKE 216,0 : PRINT CHR$(4)"CLOSE" : S = (N = 4) : GOSUB 1
|
||||||
|
|
||||||
@ -801,16 +814,16 @@
|
|||||||
: S = (A2(1.5) = 123) : GOSUB 1
|
: S = (A2(1.5) = 123) : GOSUB 1
|
||||||
|
|
||||||
18060 T$ = "Array Lower Bounds"
|
18060 T$ = "Array Lower Bounds"
|
||||||
: T = 1 : ONERR GOTO 18061
|
: T = 1 : ONERR GOTO 18062
|
||||||
: X = A2(-1) :
|
18061 X = A2(-1) :
|
||||||
: T = 2
|
: T = 2
|
||||||
18061 S = (T=1) AND (PEEK(222)=53) : GOSUB 1 : POKE 216,0
|
18062 S = (T=1) AND (PEEK(222)=53) : GOSUB 1 : POKE 216,0
|
||||||
|
|
||||||
18070 T$ = "Array Upper Bounds"
|
18070 T$ = "Array Upper Bounds"
|
||||||
: T = 1 : ONERR GOTO 18071
|
: T = 1 : ONERR GOTO 18072
|
||||||
: X = A2(11) :
|
18071 X = A2(11) :
|
||||||
: T = 2
|
: T = 2
|
||||||
18071 S = (T=1) AND (PEEK(222)=107) : GOSUB 1 : POKE 216,0
|
18072 S = (T=1) AND (PEEK(222)=107) : GOSUB 1 : POKE 216,0
|
||||||
|
|
||||||
18080 T$ = "Duplicate Lines"
|
18080 T$ = "Duplicate Lines"
|
||||||
18081 T = 1
|
18081 T = 1
|
||||||
|
Loading…
x
Reference in New Issue
Block a user