Version française
Home     About     Download     Resources     Contact us    

This site is updated infrequently. For up-to-date information, please visit the new OCaml website at

Browse thread
[Caml-list] 3.07: debug information on camlp4-processed files is missing the file name?
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: 2004-01-07 (12:50)
From: Damien Doligez <damien.doligez@i...>
Subject: Re: [Caml-list] 3.07: debug information on camlp4-processed files is missing the file name?
On Wednesday, January 7, 2004, at 06:47 AM, Aleksey Nogin wrote:

> Character 20504 in the file is indeed "line 560, character 63", but 
> "character 22067" is not the same as "line 595, character 11".
> the code in question is:
>          ...
>       else begin
>          if ...
> and non-camlp4 "line 595, character 11" one points to the space 
> between "else" and "begin", while camlp4's "character 22067" points to 
> the space right before the "if".

In both cases, it's not the space right before, but the first character
of.  Because we used zero-based character numbers (the first character 
the line is character 0).

If you're interested in the reasons for the difference, here is the

begin...end is like a pair of parentheses.  It is used by the parser
to disambiguate the expression, but it doesn't appear explicitely
in the abstract syntax tree.  Hence we have to choose, when we parse
"begin 1 + 2 end" whether the location of the expression is only
the inner expression "1 + 2" or the whole thing.

Originally, it was the inner expression, because it's the natural
way of writing the parser.  I changed it for cosmetic reasons related
to type display (option -dtypes and caml-types.el).  I changed it
in the yacc-based parser but not (yet) in the camlp4 parsers, hence
the discrepancy.

> P.S. Why would an exception (supposedly raised inside the "true" 
> branch of an if) be re-raised at the end of the "if" branch?

I don't know.  Maybe because the "inside" is a call to a primitive, and
the "if branch" is the smallest OCaml expression that contains it ?

-- Damien

To unsubscribe, mail Archives:
Bug reports: FAQ:
Beginner's list: