From mboxrd@z Thu Jan 1 00:00:00 1970 Received: (from majordomo@localhost) by pauillac.inria.fr (8.7.6/8.7.3) id NAA13215; Wed, 7 Jan 2004 13:50:32 +0100 (MET) X-Authentication-Warning: pauillac.inria.fr: majordomo set sender to owner-caml-list@pauillac.inria.fr using -f Received: from nez-perce.inria.fr (nez-perce.inria.fr [192.93.2.78]) by pauillac.inria.fr (8.7.6/8.7.3) with ESMTP id NAA13610 for ; Wed, 7 Jan 2004 13:50:32 +0100 (MET) Received: from inria.fr (macaque.inria.fr [128.93.8.158]) by nez-perce.inria.fr (8.11.1/8.11.1) with ESMTP id i07CoV516686 for ; Wed, 7 Jan 2004 13:50:31 +0100 (MET) Date: Wed, 7 Jan 2004 13:50:50 +0100 Subject: Re: [Caml-list] 3.07: debug information on camlp4-processed files is missing the file name? Content-Type: text/plain; charset=US-ASCII; format=flowed Mime-Version: 1.0 (Apple Message framework v553) From: Damien Doligez To: Caml List Content-Transfer-Encoding: 7bit In-Reply-To: <3FFB9D6B.6020704@cs.caltech.edu> Message-Id: <1F5153C0-4110-11D8-BEFF-00039310CAE8@inria.fr> X-Mailer: Apple Mail (2.553) X-Loop: caml-list@inria.fr X-Spam: no; 0.00; caml-list:01 3.07:01 camlp:01 damien:01 damien:01 camlp:01 parentheses:01 disambiguate:01 re-raised:01 debug:01 explicitely:01 ocaml:01 doligez:01 doligez:01 syntax:02 Sender: owner-caml-list@pauillac.inria.fr Precedence: bulk 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 of the line is character 0). If you're interested in the reasons for the difference, here is the story: 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 caml-list-request@inria.fr Archives: http://caml.inria.fr Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ Beginner's list: http://groups.yahoo.com/group/ocaml_beginners