From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail3-relais-sop.national.inria.fr (mail3-relais-sop.national.inria.fr [192.134.164.104]) by sympa.inria.fr (Postfix) with ESMTPS id 6C3FA7FEE7 for ; Tue, 25 Jul 2017 23:17:53 +0200 (CEST) Authentication-Results: mail3-smtp-sop.national.inria.fr; spf=None smtp.pra=vietlq85@gmail.com; spf=Pass smtp.mailfrom=vietlq85@gmail.com; spf=None smtp.helo=postmaster@mail-yw0-f170.google.com Received-SPF: None (mail3-smtp-sop.national.inria.fr: no sender authenticity information available from domain of vietlq85@gmail.com) identity=pra; client-ip=209.85.161.170; receiver=mail3-smtp-sop.national.inria.fr; envelope-from="vietlq85@gmail.com"; x-sender="vietlq85@gmail.com"; x-conformance=sidf_compatible Received-SPF: Pass (mail3-smtp-sop.national.inria.fr: domain of vietlq85@gmail.com designates 209.85.161.170 as permitted sender) identity=mailfrom; client-ip=209.85.161.170; receiver=mail3-smtp-sop.national.inria.fr; envelope-from="vietlq85@gmail.com"; x-sender="vietlq85@gmail.com"; x-conformance=sidf_compatible; x-record-type="v=spf1" Received-SPF: None (mail3-smtp-sop.national.inria.fr: no sender authenticity information available from domain of postmaster@mail-yw0-f170.google.com) identity=helo; client-ip=209.85.161.170; receiver=mail3-smtp-sop.national.inria.fr; envelope-from="vietlq85@gmail.com"; x-sender="postmaster@mail-yw0-f170.google.com"; x-conformance=sidf_compatible IronPort-PHdr: =?us-ascii?q?9a23=3ASr4EeRYiQ50fR8jszfAPlGH/LSx+4OfEezUN459i?= =?us-ascii?q?sYplN5qZoMi8bnLW6fgltlLVR4KTs6sC0LuG9fi4EUU7or+5+EgYd5JNUxJXwe?= =?us-ascii?q?43pCcHRPC/NEvgMfTxZDY7FskRHHVs/nW8LFQHUJ2mPw6arXK99yMdFQviPgRp?= =?us-ascii?q?OOv1BpTSj8Oq3Oyu5pHfeQtFiT6+bL9oMBm6sRjau9ULj4dlNqs/0AbCrGFSe+?= =?us-ascii?q?RRy2NoJFaTkAj568yt4pNt8Dletuw4+cJYXqr0Y6o3TbpDDDQ7KG81/9HktQPC?= =?us-ascii?q?TQSU+HQRVHgdnwdSDAjE6BH6WYrxsjf/u+Fg1iSWIdH6QLYpUjmk8qxlSgLniD?= =?us-ascii?q?0fOjA5/m/ZidF+grxHrx+6vRNz35TZbZuJOPZifK7Qe84RS2pbXsZWUixMGoyz?= =?us-ascii?q?b4oRAOodIO1WqZfyrEYJoBugBAmjGv/vyjtRhnL13aA3yOshEQTc0wwhG9ICqm?= =?us-ascii?q?jbrNLwNKoLV+2+0afGzTLGb/xM2Df97pDFchEnofGWXLJ/a9DdyUc1Fw/djlSf?= =?us-ascii?q?s4zlPzSS1ugXtmib6+xtXv+shW4/swx9vCSjy8M2hoTKho8Z0E3I+CRkzIovON?= =?us-ascii?q?G1SlJ3bNi5G5VKrS6aLZF5QsY6TmFopik6zroGtIa+fCcQyZQnwwfTavyJcoSU?= =?us-ascii?q?+x7jWvudLDVkiH5/d7K/gBGy8UekyuLiTMW7zFFKri9dntnNsHACyQDT59CZRv?= =?us-ascii?q?dh+kqtwzWC2gDJ5u1ZIE04iLDXJ4Mjz7IsjpYTtF7MHi7ymEX4lq+WcUAk9/C2?= =?us-ascii?q?6+TmfLrmupucN5Z3hwz+Kakulcm/Dv45MggKRWSU5eO81Lj78U3jXLpKluE2kr?= =?us-ascii?q?XesJ3COcsUvKu5AwtM3oYn6ha/FCum3c8DnXgHKVJFYAiIg5LoO1HIOvD4DO2w?= =?us-ascii?q?j06ikDdxlLj6OeirCZzIKj3Hkaz9Vbd78U9VjgQph5gL7JtRDvQFIenvck73rt?= =?us-ascii?q?3RSBEjZV+a2eHiXet8259WfW/HVrGYPb/WqA/Vzu0qKuiIIoQSvWCueLAe+/fy?= =?us-ascii?q?gCphyhcmdq6z0M5PZQ=3D=3D?= X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: =?us-ascii?q?A0BQGgA8tXdZhqqhVdFdHAEBFgEBBQEBC?= =?us-ascii?q?wEXAQYBgjeBED+BFAeFIqMEaIRAijgOHohOB0MUAQEBAQEBAQEBAQESAQEBCAs?= =?us-ascii?q?LCCgkC4IzIoJtHQEbHgMSEDcCJAERAQUBIoopAQMVEKBxg0U/jAqCBAUBHIMJB?= =?us-ascii?q?YNiChknAwpWR4MQAgYSgxaQWIJCHwWBLQEBhlAMj0mHeQgBAYFQCg6FZ4xQgmO?= =?us-ascii?q?PVpQhFB+BFQ8nYEt3eFyDXFSBdD82AYk0AQEB?= X-IPAS-Result: =?us-ascii?q?A0BQGgA8tXdZhqqhVdFdHAEBFgEBBQEBCwEXAQYBgjeBED+?= =?us-ascii?q?BFAeFIqMEaIRAijgOHohOB0MUAQEBAQEBAQEBAQESAQEBCAsLCCgkC4IzIoJtH?= =?us-ascii?q?QEbHgMSEDcCJAERAQUBIoopAQMVEKBxg0U/jAqCBAUBHIMJBYNiChknAwpWR4M?= =?us-ascii?q?QAgYSgxaQWIJCHwWBLQEBhlAMj0mHeQgBAYFQCg6FZ4xQgmOPVpQhFB+BFQ8nY?= =?us-ascii?q?Et3eFyDXFSBdD82AYk0AQEB?= X-IronPort-AV: E=Sophos;i="5.40,412,1496095200"; d="scan'208,217";a="232789687" Received: from mail-yw0-f170.google.com ([209.85.161.170]) by mail3-smtp-sop.national.inria.fr with ESMTP/TLS/AES128-GCM-SHA256; 25 Jul 2017 23:17:52 +0200 Received: by mail-yw0-f170.google.com with SMTP id l82so18276524ywc.2 for ; Tue, 25 Jul 2017 14:17:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:from:date:message-id:subject:to; bh=KO+Nqf2Gf8cc6npjflVXkMzfd2QXoZNqgZtTlrj7NLE=; b=T83kmIEXFL5DIeDyoBaTvtvUage1T5SJN3t3nuAV/U2k5tzOAHYwehB5H9gVyeXJh7 RPkS7fuhhXmAKLKsKGH0lMVL+lNazzg3qjJraxi3bYX0Jx2zOJu9+C6qBoubEPb6c7jb WwGEa3KhZhX3F7iGPdMzg6esaznDE4Sof1wcFXB3R+APNYpCHRSZ+UwUBruKlg+68NT5 8lC2Hfqx8UAxymS0x+2SQSh1MHwkzgNvwmTgs47V/mfwhTiEuCUEYm639h26StuoogUu nGtxv8MmA0DArPQKpvjcwtO8FWwpzB8Rrlj19sI1jq1g49iqSYV4E9bi0C3C97TVLh+Y /lcQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=KO+Nqf2Gf8cc6npjflVXkMzfd2QXoZNqgZtTlrj7NLE=; b=KibLShX6/QN6E2cgnY7wI4RBoPHB4YRPqFlLYqQoYOXwPa6JoiXer+e+BczuhtAx6W KH7dqiredIj5duYDMKXNQJBUlVXysVde1n5NUjCZGPkciK5XjXl187qoUB8E6No16jFZ 83CGp3npHBok13FsBMD8nsNR/dZC44kfloJUs6DWI8qt/7PLGHJqipDtU6UsIguAowdU /QLytoXH0DLoSGdlPRtkBaBj4J+cCc1/tDA12Ptsn7ABEvlwxu0RkNbywBNKCqTuQaJf LfM1tCDT4adWYeZRZNFsUZxrSxGNI8VQ44gSzbfg32D3/WQ0GfCwUVlN4tn2O8VB+QQs A+lw== X-Gm-Message-State: AIVw110Eg/fgZYSSRvs6ayPOmpqPWN1uJX14nKG/tBFAgR8lHPfwfknc u6dgTCPpBPLBRmpkA9xeX9XndTXx2ZTMgBw= X-Received: by 10.129.152.136 with SMTP id p130mr17262555ywg.264.1501017470734; Tue, 25 Jul 2017 14:17:50 -0700 (PDT) MIME-Version: 1.0 Received: by 10.129.164.76 with HTTP; Tue, 25 Jul 2017 14:17:50 -0700 (PDT) From: Viet Le Date: Tue, 25 Jul 2017 22:17:50 +0100 Message-ID: To: "caml-list@inria.fr" Content-Type: multipart/alternative; boundary="94eb2c0ba450251d1d05552addfc" Subject: [Caml-list] Macro expansion for logging with call site (file & line) --94eb2c0ba450251d1d05552addfc Content-Type: text/plain; charset="UTF-8" Hi, I would like to write a logger in OCaml. In C++ it's pretty straightforward with macro expansion that gives correct call site (file & line): $ cat -n cpp-logger.cpp 1 #include 2 3 #define LOG_START do {\ 4 std::cerr << __FILE__ << ":" << __LINE__ << ": " 5 #define LOG_END std::endl; } while (0) 6 7 int main() 8 { 9 LOG_START << "Got problem!" << LOG_END; 10 return 0; 11 } $ ./a.out cpp-logger.cpp:9: Got problem! In OCaml we have __LOC__ and __LOC_OF__: http://caml.inria.fr/pub/docs/manual-ocaml/libref/Pervasives.html However it's not trivial to get correct call site: $ cat -n yahoo.ml 1 print_string "yahoo\n";; 2 3 Printf.printf "__LOC__ = %s\n" __LOC__;; 4 5 let report s = 6 let loc, _ = __LOC_OF__ s in 7 Printf.printf "LOC of the expression (%s): %s\n" s loc ;; 8 9 report "bad bug" ;; $ ./a.outyahoo __LOC__ = File "yahoo.ml", line 3, characters 31-38 LOC of the expression (bad bug): File "yahoo.ml", line 6, characters 28-29 I expect line 9 but I get line 6 in OCaml. I would appreciate some help to get this working. Does it involve campl4/5 / ppx? Thanks. -- Kind regards, Viet --94eb2c0ba450251d1d05552addfc Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi,

I would like to write a logger in O= Caml. In C++ it's pretty straightforward with macro expansion that give= s correct call site (file & line):

$ cat -n cpp-logger.cpp
=C2=A0 =C2=A0 =C2=A01 #include <iostream>
=C2=A0 =C2=A0 =C2=A02
=C2=A0 =C2=A0 =C2=A03= #define LOG_START do {\
=C2=A0 =C2=A0 =C2=A04 =C2= =A0 =C2=A0std::cerr << __FILE__ << ":" << __LIN= E__ << ": "
=C2=A0 =C2=A0 =C2=A05 #define = LOG_END std::endl; } while (0)
=C2=A0 =C2=A0 =C2=A06
=C2=A0 =C2=A0 =C2=A07 int m= ain()
=C2=A0 =C2=A0 = =C2=A08 {
=C2=A0 =C2=A0 =C2=A09 =C2=A0 =C2=A0LOG_START << "Got problem!" <= < LOG_END;
=C2=A0 = =C2=A0 10 =C2=A0 =C2=A0return 0;
=C2=A0 =C2=A0 11 }

$ ./a= .out
cpp-logger.cpp:9:= Got problem!

In OCaml we have __LOC__ and = __LOC_OF__:


However it&= #39;s not trivial to get correct call site:

$ cat -n=C2= =A0yahoo.ml
=
=C2=A0 = =C2=A0 =C2=A01 =C2=A0print_string "yahoo\n";;
=C2=A0 =C2=A0 = =C2=A02
=C2=A0 =C2=A0 =C2=A03 =C2=A0Printf.printf "__LOC__ =3D %s= \n" __LOC__;;
=C2=A0 =C2=A0 =C2=A04
=C2=A0 =C2=A0 =C2=A05 = =C2=A0let report s =3D
=C2=A0 =C2=A0 =C2=A06 =C2=A0 =C2=A0 =C2=A0let l= oc, _ =3D __LOC_OF__ s in
=C2=A0 =C2=A0 =C2=A07 =C2=A0 =C2=A0 =C2=A0Pr= intf.printf "LOC of the expression (%s): %s\n" s loc ;;
=C2= =A0 =C2=A0 =C2=A08
=C2=A0 =C2=A0 =C2=A09 =C2=A0report "bad bug&= quot; ;;

$ ./a.outyahoo
__LOC__ =3D File "yahoo.ml", line 3, characters 31-38
LOC of the expre= ssion (bad bug): File "= yahoo.ml", line 6, characters 28-29

I expect line 9 but I get line 6 in OCaml. I would appreciate some = help to get this working. Does it involve campl4/5 / ppx?

Thanks.

--
Kind regards,
Viet
--94eb2c0ba450251d1d05552addfc--