Ary Borenszweig wrote:
bearophile wrote:
This is the latest post on the LLVM blog, "Amazing feats of Clang Error Recovery", by Chris Lattner:
http://blog.llvm.org/2010/04/amazing-feats-of-clang-error-recovery.html

I've compared dmd to few of those examples of Clang usage. I don't comment each one of those things because some of them are specific of C++, and because I don't understand some other of them. If you can write better translations to D or if you understand more of them, you can add and show me more comparisons :-)

=============================

Clang:


int foo(int x, pid_t y) {
  return x+y;
}


t.c:1:16: error: unknown type name 'pid_t'
int foo(int x, pid_t y) {
               ^

-----------------

dmd 2.042:

int foo(int x, pid_t y) {
  return x+y;
}
void main() {}


temp.d(1): Error: identifier 'pid_t' is not defined
temp.d(1): Error: pid_t is used as a type
temp.d(1): Error: cannot have parameter of type void

-----------------

Here Clangs gives a single error message (and it gives the error column).
Here the errors given by dmd give the same information.
Here dmd gives error messages that are better than GCC 4.2 ones, but I think a single good error message is better than three.

dmd has an ErrorType when an expression or something gives an error. The problem is it is a kind of an alias of an int type, so it continues to give errors. If such ErrorType would not trigger errors anymore, that would solve the problem. (in some cases I think a void type is returned instead of an error type)

There's also an ErrorExpression which is used in many places, and it generally works properly in supressing errors. (__error shows up in error messages when it hasn't been treated properly).

Reply via email to