More doc.
git-svn-id: http://caml.inria.fr/svn/ocaml/branches/extension_points@13363 f963ae5c-01c2-4b8c-9fe0-0dff7051ff02master
parent
8055753e58
commit
9f8b148761
|
@ -67,7 +67,7 @@ On items:
|
||||||
Note: item attributes are currently not supported on Pstr_eval
|
Note: item attributes are currently not supported on Pstr_eval
|
||||||
and Pstr_value structure items.
|
and Pstr_value structure items.
|
||||||
|
|
||||||
A fifth syntax exists for attributes which stands as signature or
|
A fifth syntax exists for attributes which stand as signature or
|
||||||
structure item on their own (i.e. they are not attached to any other
|
structure item on their own (i.e. they are not attached to any other
|
||||||
component):
|
component):
|
||||||
|
|
||||||
|
@ -76,6 +76,40 @@ component):
|
||||||
([^^] and [@@] attributes cannot be attached to such a standalone attribute.)
|
([^^] and [@@] attributes cannot be attached to such a standalone attribute.)
|
||||||
|
|
||||||
|
|
||||||
|
=== Representation of attributes in the Parsetree
|
||||||
|
|
||||||
|
For attributes on expressions and similar categories, attributes are
|
||||||
|
just another possible constructor (one single attribute per node):
|
||||||
|
|
||||||
|
and expression_desc =
|
||||||
|
....
|
||||||
|
| Pexp_attribute of (expression * attribute)
|
||||||
|
|
||||||
|
Note: we currently don't distinguish between prefix and postfix attributes.
|
||||||
|
|
||||||
|
Similarly, attributes as standalone signature/structure items are represented
|
||||||
|
by a new constructor:
|
||||||
|
| Psig_attribute of attribute
|
||||||
|
| Pstr_attribute of attribute
|
||||||
|
|
||||||
|
For "declarations"-like items (type declarations, module declarations,
|
||||||
|
..., but also constructors and record labels), all attributes are stored
|
||||||
|
in an extra field in their record (again, without making the distinction
|
||||||
|
between prefix and postfix attributes):
|
||||||
|
|
||||||
|
and type_declaration = {
|
||||||
|
...
|
||||||
|
ptype_attributes: attribute list;
|
||||||
|
...
|
||||||
|
|
||||||
|
For other kinds of items (currently: open/include stataments,
|
||||||
|
exception rebind), the attributes are stored directly in the
|
||||||
|
constructor of the item:
|
||||||
|
|
||||||
|
| Pstr_open of Longident.t loc * attribute list
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
=== Extension nodes
|
=== Extension nodes
|
||||||
|
|
||||||
Extension nodes replace valid components in the syntax tree. They are
|
Extension nodes replace valid components in the syntax tree. They are
|
||||||
|
@ -178,4 +212,5 @@ More self-documented, simplifies some code.
|
||||||
- Adapt Camlp4 (both its parser(s) and its internal representation of OCaml ASTs).
|
- Adapt Camlp4 (both its parser(s) and its internal representation of OCaml ASTs).
|
||||||
- Propagate attributes to the Typedtree (so that they can be retrieved in .cmt/.cmti).
|
- Propagate attributes to the Typedtree (so that they can be retrieved in .cmt/.cmti).
|
||||||
- Consider adding hooks to the type-checker so that custom extension expanders can be registered (a la OCaml Templates).
|
- Consider adding hooks to the type-checker so that custom extension expanders can be registered (a la OCaml Templates).
|
||||||
|
- Quotations (i.e. string literals with custom delimiters and without any interpretation of special characters in them), and a syntax which combines extension nodes and quotations.
|
||||||
|
- More cleanups to the Parsetree + documentation.
|
||||||
|
|
Loading…
Reference in New Issue