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 KAA27699; Mon, 23 Aug 2004 10:10:15 +0200 (MET DST) X-Authentication-Warning: pauillac.inria.fr: majordomo set sender to owner-caml-list@pauillac.inria.fr using -f Received: from concorde.inria.fr (concorde.inria.fr [192.93.2.39]) by pauillac.inria.fr (8.7.6/8.7.3) with ESMTP id KAA28604 for ; Mon, 23 Aug 2004 10:10:13 +0200 (MET DST) Received: from is.intellij.net (mail.intellij.net [213.182.181.98]) by concorde.inria.fr (8.12.10/8.12.10) with SMTP id i7N8ACRM021016 for ; Mon, 23 Aug 2004 10:10:13 +0200 Received: (qmail 1351 invoked by uid 89); 23 Aug 2004 08:10:12 -0000 Received: from unknown (HELO ?192.168.1.58?) (dsl@intellij.net@192.168.1.58) by mail.intellij.net with SMTP; 23 Aug 2004 08:10:12 -0000 Message-ID: <4129A664.8070302@jetbrains.com> Date: Mon, 23 Aug 2004 12:10:12 +0400 From: Dmitry Lomov Organization: JetBrains Inc. User-Agent: Mozilla Thunderbird 0.7.2 (Windows/20040707) X-Accept-Language: en-us, en MIME-Version: 1.0 To: Michael Alexander Hamburg CC: caml-list@pauillac.inria.fr Subject: Re: [Caml-list] camlp4 and class values References: In-Reply-To: Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit X-Miltered: at concorde with ID 4129A664.002 by Joe's j-chkmail (http://j-chkmail.ensmp.fr)! X-Loop: caml-list@inria.fr X-Spam: no; 0.00; lomov:01 lomov:01 jetbrains:01 caml-list:01 camlp:01 mlast:01 pcaml:01 mlast:01 params:01 expr:01 params:01 lident:01 ctyp:01 expr:01 pcaml:01 Sender: owner-caml-list@pauillac.inria.fr Precedence: bulk Michael, please see my inline answer. Michael Alexander Hamburg wrote: > [skip] > #load "pa_extend.cmo";; > #load "q_MLast.cmo";; > > open Pcaml > open MLast > > let addName n = "add_" ^ n > let onName n = "on_" ^ n > > let o2b = function > Some _ -> true > | None -> false > > let genfunc loc params e = > <:expr< Stack.apply (fun self $params$ -> $e$) >> > > let genval loc l params e = > <:class_str_item< value $lid:onName l$ = $genfunc loc params e$ >> > > let genmeth loc pf l topt params = > <:class_str_item< method $opt:o2b pf$ $l$ $opt:topt$ $patt:params$ = > Stack.apply $lid:onName l$ self $params$>> > > let genadd loc pf l = > <:class_str_item< method $opt:o2b pf$ $addName l$ f = Stack.append > $lid:onName l$ f >> > > > EXTEND > class_str_item : LAST > [[ "extmethod"; pf = OPT "private"; l = LIDENT; topt = OPT ctyp; params > = LIST0 patt; "="; e = expr -> > let meth = genmeth loc pf l topt params > and add = genadd loc pf l > and v = genval loc l params e in > <:class_str_item< declare $v$; $meth$; $add$; end >> Quotations has a very strict syntax. In particular, quotation <:class_str_item< declare ... >>, which is a way to add multiple declarations to a class body, expects a list of class_str_item's. If you just write some code in revised syntax, it will construct the list automatically, but it cannot construct the list from antiquotations. So you have to do it yourself: let csil = [v; meth; add] in <:class_str_item< declare $csil:csil$ end >> Hope this helps, Friendly, Dmitry > ]]; > END;; > > which raises: > > File "extmethod.ml", line 22, characters 52-65: > While expanding quotation "class_str_item": > Parse error: [fun_binding] expected (in [class structure item]) > Uncaught exception: Pcaml.Qerror("class_str_item", 1, _) > Preprocessor error > > The closest thing I've been able to find to documentation on fun_bindings > is the camlp4 source, which does a much more direct translation. > > How do I write such an extenision? OR is there some reason that it's not > possible? > > Thanks for your time, > > Mike Hamburg > > ------------------- > 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 > -- Dmitry Lomov JetBrains Inc. http://www.jetbrains.com "Develop With Pleasure!" ------------------- 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