From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.1.3 (2006-06-01) on yquem.inria.fr X-Spam-Level: X-Spam-Status: No, score=0.7 required=5.0 tests=AWL,NO_REAL_NAME autolearn=disabled version=3.1.3 Received: from mail2-relais-roc.national.inria.fr (mail2-relais-roc.national.inria.fr [192.134.164.83]) by yquem.inria.fr (Postfix) with ESMTP id 65B29BBC1 for ; Wed, 9 Apr 2008 10:08:05 +0200 (CEST) X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AsYAAMcV/EfVuiVno2dsb2JhbACQUnsBAQEBAQEHBQkHFpps X-IronPort-AV: E=Sophos;i="4.25,628,1199660400"; d="scan'208";a="9374468" Received: from 25.mail-out.ovh.net ([213.186.37.103]) by mail2-smtp-roc.national.inria.fr with SMTP; 09 Apr 2008 10:08:05 +0200 Received: (qmail 12995 invoked by uid 503); 9 Apr 2008 08:08:26 -0000 Received: (QMFILT: 1.0); 09 Apr 2008 08:08:26 -0000 Received: from b7.ovh.net (HELO mail237.ha.ovh.net) (213.186.33.57) by 25.mail-out.ovh.net with SMTP; 9 Apr 2008 08:08:26 -0000 Received: from b0.ovh.net (HELO queue-out) (213.186.33.50) by b0.ovh.net with SMTP; 9 Apr 2008 08:07:39 -0000 Received: from adret2.inrialpes.fr (adret2.inrialpes.fr [194.199.23.100]) by imp.ovh.net (IMP) with HTTP for ; Wed, 09 Apr 2008 10:07:39 +0200 Message-ID: <1207728459.47fc794b4e6f8@imp.ovh.net> Date: Wed, 09 Apr 2008 10:07:39 +0200 From: forum@x9c.fr To: Caml_mailing list Subject: Re: [Caml-list] weird behavior with camlp4o References: <1207726165.47fc70555cb83@imp.ovh.net> <95513600804090036m1bf04367w5736f67f3f37135b@mail.gmail.com> <1207727302.47fc74c6b621d@imp.ovh.net> <1207727460-sup-1852@port-ext16.ensta.fr> In-Reply-To: <1207727460-sup-1852@port-ext16.ensta.fr> MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 8bit User-Agent: Internet Messaging Program (IMP) 3.2.6 X-Originating-IP: 194.199.23.100 X-Ovh-Tracer-Id: 8753308826686653406 X-Spam: no; 0.00; camlp:01 andrieu:01 oandrieu:01 ocaml:01 camlp:01 cmo:01 cmo:01 denotes:01 ocamlc:01 ocamlopt:01 -pp:01 compiler:01 compiler:01 denotes:01 wrote:01 Selon Nicolas Pouillard : > Excerpts from xclerc's message of Wed Apr 09 09:48:22 +0200 2008: > > Selon Olivier Andrieu : > > > > > On Wed, Apr 9, 2008 at 9:29 AM, wrote: > > > > Selon "Andrew I. Schein" : > > > > > Greetings list - > > > > > > > > > > I was playing around with OCaml 3.10.2 camlp4o like this: > > > > > > > > > > camlp4o pa_breakcont.cmo sample1.ml > > > > > > > > > > with my macro pa_breakcont.cmo and got the expected macro > translation > > > > > printed to my terminal. However, when I type: > > > > > > > > > > camlp4o pa_breakcont.cmo sample1.ml > out.ml > > > > > > > > > > out.ml contains binary output. Am I misusing camlp4o? > > > > > > > > I have encountered the same problem a few days ago while working on > > > > Ocaml-Java to make it camlp4-compatible. > > > > > > > > The fact is that the kind of output (binary dump of abstract tree or > > > > source code in textual form) is chosen according to the nature of the > > > > output file descriptor. If the output file descriptor denotes a tty > > > > then the textual form is chosen, otherwise the binary form is chosen. > > > > > > > > That being said, I don't know what is the rationale of this choice, > > > > as I have not come up with a use case for the binary form. > > > > > > It's simply more efficient for ocamlc or ocamlopt when camlp4 is > > > called via the -pp option: no need to pretty-print and then reparse > > > the source. > > > > Well, this is what I thought at first but, if I am not mistaken, when > > you use the '-pp' option of a compiler, a command of the following form > > is executed: "camlp4XXX source-file.ml > tmp-file.ml". > > Then the "tmp-file.ml" is actually compiled instead of the > "source-file.ml". > > > > So, it seems that compilers go through the textual form. > > Nop, the compiler knows both binary and textual formats. My mistake. Sorry for the noise. In fact, I mixed up the actual behaviour of camlp4 with the awful hack I set up to make OCaml-Java camlp4-aware. As I don't know any pure-Java way to know if a file descriptor denotes a tty, I just pretend that descriptor "1" is always a tty. As a consequence, camlp4 (when run by OCaml-Java) always outputs the textual form. This in turn implies that compilers using the '-pp' option will go through the textual form. This seemed to work like a charm but I totally missed the location problem you point out. This should make me craft another hack ... Thanks for the information. Xavier Clerc PS: the 'camlp4' patches for OCaml-Java are not currently applied to the released version PPS: if anyone knows a reliable pure-Java way to determine if a Java output stream is related to a tty, I would just avoid a terrible hack ...