[nem-en] [macro] building event member
Sergey Shishmintzev
sergey.shishmintzev at gmail.com
Thu Mar 8 20:48:03 CET 2007
// Code:
[Nemerle.MacroUsage (Nemerle.MacroPhase.BeforeInheritance,
Nemerle.MacroTargets.Field,
Inherited = false, AllowMultiple = true)]
macro ModelAccessor (current_type : TypeBuilder, pf : ParsedField,
params _ : list [PExpr])
{
mutable attributes = [];
def propAttrs = Modifiers (NemerleAttributes.None, attributes);
def x = <[ decl: ..$propAttrs event $(pf.Name+"Changed" : dyn) :
Handler; ]>;
x.Attributes = NemerleAttributes.Public;
current_type.Define(x);
}
// Usage:
public class Model1
{
public delegate Handler(_ : object) : void;
[ModelAccessor]
private mutable field1 : bool;
[ModelAccessor]
private mutable field2 : bool;
}
Problem:
// ncc's messages:
positive/macroprog.n:267:4:267:17: error: field `Model1._N_1790'
redefined in `Model1'
positive/macroprog.n:265:4:265:17: error: first definition here as
field `Model1._N_1790'
positive/macroprog.n:267:4:267:17: error: redefinition of method
Model1.add_(value : Model1.Handler) : void
positive/macroprog.n:267:4:267:17: error: redefinition of method
Model1.remove_(value : Model1.Handler) : void
I can suggest add Parsetree.Splicable.Combine { names :
list[Splicable] } (or { n1 : Splicable; n2 : Splicabel }) option and
use it to build add_*/remove_* names. But I unsure.
--
Serg
More information about the devel-en
mailing list