From ffcff0fa618c07270db8ae28633aa8467a346148 Mon Sep 17 00:00:00 2001 From: Kugel Fuhr <98353208+kugelfuhr@users.noreply.github.com> Date: Fri, 4 Jul 2025 17:11:34 +0200 Subject: [PATCH 01/13] Much improved error messages for ca65. For most errors it will now say what was expected and what was found instead. Also improved error recovery in a few places. --- test/asm/listing/130-errormsg.s | 1 - test/asm/listing/ref/120-errormsg.err2 | 1 + test/asm/listing/ref/121-errormsg.err2 | 1 + test/asm/listing/ref/122-errormsg.err2 | 1 + test/asm/listing/ref/123-errormsg.err2 | 1 + test/asm/listing/ref/124-errormsg.err2 | 1 + test/asm/listing/ref/125-errormsg.err2 | 2 ++ test/asm/listing/ref/126-errormsg.err2 | 1 + test/asm/listing/ref/127-errormsg.err2 | 1 + test/asm/listing/ref/128-errormsg.err2 | 1 + test/asm/listing/ref/129-errormsg.err2 | 1 + test/asm/listing/ref/130-errormsg.err2 | 2 ++ test/asm/listing/ref/131-errormsg.err2 | 1 + 13 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 test/asm/listing/ref/120-errormsg.err2 create mode 100644 test/asm/listing/ref/121-errormsg.err2 create mode 100644 test/asm/listing/ref/122-errormsg.err2 create mode 100644 test/asm/listing/ref/123-errormsg.err2 create mode 100644 test/asm/listing/ref/124-errormsg.err2 create mode 100644 test/asm/listing/ref/125-errormsg.err2 create mode 100644 test/asm/listing/ref/126-errormsg.err2 create mode 100644 test/asm/listing/ref/127-errormsg.err2 create mode 100644 test/asm/listing/ref/128-errormsg.err2 create mode 100644 test/asm/listing/ref/129-errormsg.err2 create mode 100644 test/asm/listing/ref/130-errormsg.err2 create mode 100644 test/asm/listing/ref/131-errormsg.err2 diff --git a/test/asm/listing/130-errormsg.s b/test/asm/listing/130-errormsg.s index eb85bc0e1..a5a40156f 100644 --- a/test/asm/listing/130-errormsg.s +++ b/test/asm/listing/130-errormsg.s @@ -1,2 +1 @@ lda | - diff --git a/test/asm/listing/ref/120-errormsg.err2 b/test/asm/listing/ref/120-errormsg.err2 new file mode 100644 index 000000000..ac78914e0 --- /dev/null +++ b/test/asm/listing/ref/120-errormsg.err2 @@ -0,0 +1 @@ +120-errormsg.s:1: Error: Expected 'end-of-line' but found '0' diff --git a/test/asm/listing/ref/121-errormsg.err2 b/test/asm/listing/ref/121-errormsg.err2 new file mode 100644 index 000000000..abc16d4d5 --- /dev/null +++ b/test/asm/listing/ref/121-errormsg.err2 @@ -0,0 +1 @@ +121-errormsg.s:1: Error: Expected ':' after identifier to form a label but found 'end-of-line' diff --git a/test/asm/listing/ref/122-errormsg.err2 b/test/asm/listing/ref/122-errormsg.err2 new file mode 100644 index 000000000..692ac0cc6 --- /dev/null +++ b/test/asm/listing/ref/122-errormsg.err2 @@ -0,0 +1 @@ +122-errormsg.s:1: Error: Expected a struct/union name but found 'X' diff --git a/test/asm/listing/ref/123-errormsg.err2 b/test/asm/listing/ref/123-errormsg.err2 new file mode 100644 index 000000000..f7db86f47 --- /dev/null +++ b/test/asm/listing/ref/123-errormsg.err2 @@ -0,0 +1 @@ +123-errormsg.s:1: Error: Expected 'end-of-line' but found 'foo' diff --git a/test/asm/listing/ref/124-errormsg.err2 b/test/asm/listing/ref/124-errormsg.err2 new file mode 100644 index 000000000..b96690f68 --- /dev/null +++ b/test/asm/listing/ref/124-errormsg.err2 @@ -0,0 +1 @@ +124-errormsg.s:1: Error: Expected 'Y' but found 'A' diff --git a/test/asm/listing/ref/125-errormsg.err2 b/test/asm/listing/ref/125-errormsg.err2 new file mode 100644 index 000000000..4640ed3d5 --- /dev/null +++ b/test/asm/listing/ref/125-errormsg.err2 @@ -0,0 +1,2 @@ +125-errormsg.s:1: Error: Expected 'X' or 'S' but found 'A' +125-errormsg.s:1: Error: Illegal addressing mode diff --git a/test/asm/listing/ref/126-errormsg.err2 b/test/asm/listing/ref/126-errormsg.err2 new file mode 100644 index 000000000..ba42cc0bb --- /dev/null +++ b/test/asm/listing/ref/126-errormsg.err2 @@ -0,0 +1 @@ +126-errormsg.s:2: Error: Expected a storage allocator after the field name but found 'end-of-line' diff --git a/test/asm/listing/ref/127-errormsg.err2 b/test/asm/listing/ref/127-errormsg.err2 new file mode 100644 index 000000000..cdc5eada7 --- /dev/null +++ b/test/asm/listing/ref/127-errormsg.err2 @@ -0,0 +1 @@ +127-errormsg.s:1: Error: Expected a mnemonic but found '127' diff --git a/test/asm/listing/ref/128-errormsg.err2 b/test/asm/listing/ref/128-errormsg.err2 new file mode 100644 index 000000000..28982e479 --- /dev/null +++ b/test/asm/listing/ref/128-errormsg.err2 @@ -0,0 +1 @@ +128-errormsg.s:1: Error: Expected ',' but found 'end-of-line' diff --git a/test/asm/listing/ref/129-errormsg.err2 b/test/asm/listing/ref/129-errormsg.err2 new file mode 100644 index 000000000..4b35ded67 --- /dev/null +++ b/test/asm/listing/ref/129-errormsg.err2 @@ -0,0 +1 @@ +129-errormsg.s:1: Error: Expected ',' but found 'end-of-line' diff --git a/test/asm/listing/ref/130-errormsg.err2 b/test/asm/listing/ref/130-errormsg.err2 new file mode 100644 index 000000000..79b40a915 --- /dev/null +++ b/test/asm/listing/ref/130-errormsg.err2 @@ -0,0 +1,2 @@ +130-errormsg.s:1: Error: Expected an expression but found '|' +130-errormsg.s:1: Error: Expected an expression but found 'end-of-line' diff --git a/test/asm/listing/ref/131-errormsg.err2 b/test/asm/listing/ref/131-errormsg.err2 new file mode 100644 index 000000000..46cc77c62 --- /dev/null +++ b/test/asm/listing/ref/131-errormsg.err2 @@ -0,0 +1 @@ +131-errormsg.s:1: Error: Expected 'end-of-line' but found '1' From b1eb1bf6ab29805ff1c7d34944e39b3e712d746d Mon Sep 17 00:00:00 2001 From: Kugel Fuhr <98353208+kugelfuhr@users.noreply.github.com> Date: Mon, 7 Jul 2025 16:47:36 +0200 Subject: [PATCH 02/13] Colorize diagnostics. --- doc/ca65.sgml | 17 ++-- src/ca65/error.c | 81 +++++++++++----- src/ca65/main.c | 25 ++++- src/common/capability.h | 2 +- src/common/consprop.c | 208 ++++++++++++++++++++++++++++++++++++++++ src/common/consprop.h | 174 +++++++++++++++++++++++++++++++++ 6 files changed, 473 insertions(+), 34 deletions(-) create mode 100644 src/common/consprop.c create mode 100644 src/common/consprop.h diff --git a/doc/ca65.sgml b/doc/ca65.sgml index 90d3aba32..f1154d4b2 100644 --- a/doc/ca65.sgml +++ b/doc/ca65.sgml @@ -106,6 +106,7 @@ Short options: Long options: --auto-import Mark unresolved symbols as import --bin-include-dir dir Set a search path for binary includes + --color [on|auto|off] Color diagnostics (default: auto) --cpu type Set cpu type --create-dep name Create a make dependency file --create-full-dep name Create a full make dependency file @@ -120,7 +121,7 @@ Long options: --list-bytes n Maximum number of bytes per listing line --memory-model model Set the memory model --pagelength n Set the page length for the listing - --relax-checks Disables some error checks + --relax-checks Relax some checks (see docs) --smart Enable smart mode --target sys Set the target system --verbose Increase verbosity @@ -146,6 +147,14 @@ Here is a description of all the command line options: name="search paths">. +