From 9809aa651b935ff069bafaa8a599ae02b34e824c Mon Sep 17 00:00:00 2001 From: Ben Harris Date: Sun, 7 Apr 2019 11:02:20 +0100 Subject: [PATCH] bbc-basic: Use distinct error numbers for all errors. This is an improvement on always using error 1 ("Out of range"). Mal's error numbers are taken from a random block in the range suggested by the RISC OS Programmer's Reference Manual for use by applications. --- bbc-basic/core | 6 +++--- bbc-basic/printer | 2 +- bbc-basic/step2_eval.bbc | 2 +- bbc-basic/types | 18 +++++++++--------- 4 files changed, 14 insertions(+), 14 deletions(-) diff --git a/bbc-basic/core b/bbc-basic/core index 3c10752c..c44a614b 100644 --- a/bbc-basic/core +++ b/bbc-basic/core @@ -24,7 +24,7 @@ DEF FNcore_call(fn%, args%()) PROCcore_assert_args("ii", "/", args%()) =FNalloc_int(FNunbox_int(args%(0)) DIV FNunbox_int(args%(1))) ENDCASE -ERROR 1, "Call to non-existent core function" +ERROR &40E809F1, "Call to non-existent core function" DEF PROCcore_assert_args(spec$, fn$, args%()) REM Check that a core function is being provided with the correct @@ -35,13 +35,13 @@ DEF PROCcore_assert_args(spec$, fn$, args%()) LOCAL i% IF DIM(args%(), 1) <> LEN(spec$) THEN - ERROR 1, "Core function '"+fn$+"' requires "+STR$(LEN(spec$))+" arguments" + ERROR &40E80921, "Core function '"+fn$+"' requires "+STR$(LEN(spec$))+" arguments" ENDIF FOR i% = 1 TO LEN(spec$) CASE MID$(spec$, i%, 1) OF WHEN "i" IF NOT FNis_int(args%(i% - 1)) THEN - ERROR 1, "Argument "+STR$(i%)+" to core function '"+fn$+"' must be an integer" + ERROR &40E80911, "Argument "+STR$(i%)+" to core function '"+fn$+"' must be an integer" ENDIF ENDCASE NEXT i% diff --git a/bbc-basic/printer b/bbc-basic/printer index 9d58b61f..2b6d5a7b 100644 --- a/bbc-basic/printer +++ b/bbc-basic/printer @@ -17,4 +17,4 @@ DEF FNpr_str(val%) ENDWHILE =ret$ + ")" ENDIF - ERROR 1, "Unprintable value" + ERROR &40E809F0, "Unprintable value" diff --git a/bbc-basic/step2_eval.bbc b/bbc-basic/step2_eval.bbc index 22e3dd2f..5728ce89 100644 --- a/bbc-basic/step2_eval.bbc +++ b/bbc-basic/step2_eval.bbc @@ -52,7 +52,7 @@ DEF FNeval_ast(ast%, env%) LOCAL val%, car%, cdr% IF FNis_symbol(ast%) THEN val% = FNhashmap_get(env%, FNunbox_symbol(ast%)) - IF val% = FNnil THEN ERROR 1, "Symbol not in environment" + IF val% = FNnil THEN ERROR &40E80922, "Symbol not in environment" =val% ENDIF IF FNis_list(ast%) THEN diff --git a/bbc-basic/types b/bbc-basic/types index 932dc47d..94d82562 100644 --- a/bbc-basic/types +++ b/bbc-basic/types @@ -55,7 +55,7 @@ DEF FNalloc_boolean(bval%) =2 DEF FNunbox_boolean(val%) - IF NOT FNis_boolean(val%) THEN ERROR 1, "Not a boolean" + IF NOT FNis_boolean(val%) THEN ERROR &40E80911, "Not a boolean" IF Z%(val% + 1) THEN =TRUE =FALSE @@ -72,7 +72,7 @@ DEF FNalloc_int(ival%) =val% DEF FNunbox_int(val%) - IF NOT FNis_int(val%) THEN ERROR 1, "Not an integer" + IF NOT FNis_int(val%) THEN ERROR &40E80912, "Not an integer" =Z%(val% + 1) REM ** Symbols ** @@ -91,7 +91,7 @@ DEF FNalloc_symbol(sval$) =val% DEF FNunbox_symbol(val%) - IF NOT FNis_symbol(val%) THEN ERROR 1, "Not a symbol" + IF NOT FNis_symbol(val%) THEN ERROR &40E80915, "Not a symbol" =S$(Z%(val% + 1)) REM ** Lists ** @@ -114,13 +114,13 @@ DEF FNis_list(val%) =FNtype_of(val%) = 6 DEF FNlist_car(val%) - IF NOT FNis_list(val%) THEN ERROR 1, "Can't get car of non-list" - IF Z%(val% + 1) = 0 THEN ERROR 1, "Can't get car of empty list" + IF NOT FNis_list(val%) THEN ERROR &40E80916, "Can't get car of non-list" + IF Z%(val% + 1) = 0 THEN ERROR &40E80920, "Can't get car of empty list" =Z%(val% + 2) DEF FNlist_cdr(val%) - IF NOT FNis_list(val%) THEN ERROR 1, "Can't get cdr of non-list" - IF Z%(val% + 1) = 0 THEN ERROR 1, "Can't get cdr of empty list" + IF NOT FNis_list(val%) THEN ERROR &40E80916, "Can't get cdr of non-list" + IF Z%(val% + 1) = 0 THEN ERROR &40E80920, "Can't get cdr of empty list" =Z%(val% + 1) DEF FNlist_len(val%) @@ -154,7 +154,7 @@ DEF FNalloc_corefn(fn%) =val% DEF FNunbox_corefn(val%) - IF NOT FNis_corefn(val%) THEN ERROR 1, "Not a core function" + IF NOT FNis_corefn(val%) THEN ERROR &40E80919, "Not a core function" =Z%(val% + 1) REM ** Hashmaps ** @@ -182,7 +182,7 @@ DEF FNis_hashmap(val%) =FNtype_of(val%) = 8 DEF FNhashmap_get(map%, key$) - IF NOT FNis_hashmap(map%) THEN ERROR 1, "Can't get item from a non-hashmap" + IF NOT FNis_hashmap(map%) THEN ERROR &40E80918, "Can't get item from a non-hashmap" IF map% = FNempty_hashmap THEN =FNnil IF S$(Z%(map% + 2)) = key$ THEN =Z%(map% + 3) =FNhashmap_get(Z%(map% + 1), key$) -- 2.20.1