aboutsummaryrefslogtreecommitdiff
path: root/dev
diff options
context:
space:
mode:
authorPierre-Marie Pédrot2016-10-06 18:39:28 +0200
committerPierre-Marie Pédrot2017-02-17 11:52:38 +0100
commit6d49de4f2d1ed25b9a745378531a3b55bb0d8197 (patch)
treec92fe46cc261ca0c57bf6c4f9ecb0ebc8bf47cdc /dev
parent96e55866d49691f539bd43a88a8dd6a4cc7ae727 (diff)
Documenting the pluginification of Ltac.
Diffstat (limited to 'dev')
-rw-r--r--dev/doc/changes.txt18
1 files changed, 18 insertions, 0 deletions
diff --git a/dev/doc/changes.txt b/dev/doc/changes.txt
index f54f3fcc8e..8d2d055908 100644
--- a/dev/doc/changes.txt
+++ b/dev/doc/changes.txt
@@ -40,6 +40,24 @@ important things:
- Some printing functions were moved from Pptactic to Pputils
- A part of Tacexpr has been moved to Tactypes
+The folder itself has been turned into a plugin. This does not change much,
+but because it is a packed plugin, it may wreak havoc for third-party plugins
+depending on any module defined in the ltac/ directory. Namely, even if
+everything looks OK at compile time, a plugin can fail to load at link time
+because it mistakenly looks for a module Foo instead of Ltac_plugin.Foo, with
+an error of the form:
+
+Error: while loading myplugin.cmxs, no implementation available for Foo.
+
+In particular, most EXTEND macros will trigger this problem even if they
+seemingly do not use any Ltac module, as their expansion do.
+
+The solution is simple, and consists in adding a statement "open Ltac_plugin"
+in each file using a Ltac module, before such a module is actually called. An
+alternative solution would be to fully qualify Ltac modules, e.g. turning any
+call to Tacinterp into Ltac_plugin.Tacinterp. Note that this solution does not
+work for EXTEND macros though.
+
** Error handling **
- All error functions now take an optional parameter `?loc:Loc.t`. For