From 8fe5dcac3447447bd81501a045560abf1bb9cf98 Mon Sep 17 00:00:00 2001 From: Jack Palevich Date: Fri, 4 Sep 2009 15:34:21 -0700 Subject: [PATCH] Improve error message for unknown struct members We now customize the error message to correctly refer to the '.' or '->' operator , whichever one is actually being used when the error occurs. --- libacc/acc.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/libacc/acc.cpp b/libacc/acc.cpp index 7e6dde6a4..c52b99220 100644 --- a/libacc/acc.cpp +++ b/libacc/acc.cpp @@ -4527,7 +4527,7 @@ class Compiler : public ErrorSink { pGen->forceR0RVal(); Type* pStruct = pGen->getR0Type(); if (pStruct->tag == TY_STRUCT) { - doStructMember(pStruct); + doStructMember(pStruct, true); } else { error("expected a struct value to the left of '.'"); } @@ -4536,7 +4536,7 @@ class Compiler : public ErrorSink { Type* pPtr = pGen->getR0Type(); if (pPtr->tag == TY_POINTER && pPtr->pHead->tag == TY_STRUCT) { pGen->loadR0FromR0(); - doStructMember(pPtr->pHead); + doStructMember(pPtr->pHead, false); } else { error("Expected a pointer to a struct to the left of '->'"); } @@ -4602,7 +4602,7 @@ class Compiler : public ErrorSink { } } - void doStructMember(Type* pStruct) { + void doStructMember(Type* pStruct, bool isDot) { Type* pStructElement = lookupStructMember(pStruct, tok); if (pStructElement) { next(); @@ -4610,7 +4610,8 @@ class Compiler : public ErrorSink { } else { String buf; decodeToken(buf, tok, true); - error("Expected a struct member to the right of '.', got %s", buf.getUnwrapped()); + error("Expected a struct member to the right of '%s', got %s", + isDot ? "." : "->", buf.getUnwrapped()); } }