emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Changing a cl-defstruct definition in a published package


From: Clément Pit-Claudel
Subject: Re: Changing a cl-defstruct definition in a published package
Date: Sun, 15 Jul 2018 00:25:02 -0400
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.8.0

On 2018-07-13 23:36, Stefan Monnier wrote:
>>   buffer checker filename line         column  message level id group)
> [...]
>>   buffer checker filename -coordinates -region message level id group)
> 
> OK, so the issue is with `line` and `column` which get replaced by
> `-coordinates` and `-region`, the rest stays unchanged.  So maybe you
> can arrange to auto-detect objects created with the old format.

Thanks Stefan, your help and advice are much appreciated.

>> Most Flycheck checkers are defined using a standardized macro and do
>> not have to worry about creating or accessing individual error
>> structures, so that code is fine.  More complex error checkers, on the
>> other hand, do create error objects directly (concrete examples
>> include merlin, or any of the checkers that maintain a persistent
>> background process).
> 
> IIUC, outside Flycheck the main operation called (and hence inlined) is
> the constructor(s).  Are field accessors also used outside Flycheck?
> If so, is there a chance that they are only ever used on those objects
> that were created by the outside code as well (i.e. those inlined
> accessors only see objects created by the compatible inline
> constructors)?

I don't think so.  We have multiple types of extensions, including error 
checkers (which create new objects and use accessors on them, then pass them to 
Flycheck core which also accesses fields on them) and UI plugins that take 
errors produced by the core or plugins and access their fields.

> I get the impression that maybe you can write a wrapper to access
> `-coordinates` and `-region` which will check if either of those is of
> the wrong type (but of the right type for `line` and `column` instead)
> so it will know to fallback on the new code?

This might be possible.  I will investigate and possibly follow up.
I wonder if there may be a trick to force recompilation of dependencies.  Maybe 
this is something package.el should support ? A field like 
Must-recompile-version: 0.1 would mean that when upgrading from anything before 
0.1 to 0.1 or later package.el should recompile all dependencies, too.

Is there a setting to tell cl-defstruct to not generate macros for constructors 
and accessors?

Clément.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]