нужен в данный момент, чтобы изменить поле на свойство. после сгодится для любых трансформаций внутри N-данных на ранних фазах.
возможно в его код надо вписать ограничение на фазу. использование на этапе BeforeInheritance проблем не вызывает, все тесты ок.
From 68d2c7f61b8bcc06b334148768ccecc466bad8c7 Mon Sep 17 00:00:00 2001
From: George Dernovoy <g.dernovoy@gmail.com>
Date: Sat, 11 Feb 2012 03:33:13 +0200
Subject: [PATCH] add TypeBuilder.RemoveParsedMember
---
ncc/hierarchy/TypeBuilder.n | 11 ++++++++++-
ncc/parsing/ParseTree.n | 22 ++++++++++++++++++----
2 files changed, 28 insertions(+), 5 deletions(-)
diff --git a/ncc/hierarchy/TypeBuilder.n b/ncc/hierarchy/TypeBuilder.n
index c6a1e5a..55ae80e 100644
--- a/ncc/hierarchy/TypeBuilder.n
+++ b/ncc/hierarchy/TypeBuilder.n
@@ -783,7 +783,16 @@ public partial class TypeBuilder : TypeInfo
result.NToList()
}
-
+
+ public RemoveParsedMember(member : PT.ClassMember) : void
+ {
+ match(AstParts.Find(x => x.GetMembers().Contains(member)))
+ {
+ | Some(val) => val.Remove(member);
+ | _ => {}
+ }
+ }
+
public override GetFields (bindingAttr : BindingFlags) : list[IField]
{
def mems = get_members (bindingAttr, fun (x : IMember) {
diff --git a/ncc/parsing/ParseTree.n b/ncc/parsing/ParseTree.n
index e1ab8f9..79e0c87 100644
--- a/ncc/parsing/ParseTree.n
+++ b/ncc/parsing/ParseTree.n
@@ -38,7 +38,7 @@ namespace Nemerle.Compiler.Parsetree
| Class
{
mutable t_extends : list[PExpr];
- decls : list[ClassMember];
+ mutable decls : list[ClassMember];
}
| Alias { ty : PExpr; }
@@ -46,7 +46,7 @@ namespace Nemerle.Compiler.Parsetree
| Interface
{
mutable t_extends : list [PExpr];
- methods : list [ClassMember]; // only iface_member
+ mutable methods : list [ClassMember]; // only iface_member
}
| Variant
@@ -55,7 +55,7 @@ namespace Nemerle.Compiler.Parsetree
mutable decls : list [ClassMember];
}
- | VariantOption { decls : list [ClassMember]; }
+ | VariantOption { mutable decls : list [ClassMember]; }
| Macro
{
@@ -73,7 +73,7 @@ namespace Nemerle.Compiler.Parsetree
| Enum
{
t_extends : list [PExpr];
- decls : list[ClassMember];
+ mutable decls : list[ClassMember];
}
[RecordIgnore]
@@ -186,6 +186,20 @@ namespace Nemerle.Compiler.Parsetree
}
}
+ public Remove(m : ClassMember) : void
+ {
+ match (this)
+ {
+ | x is Class => x.decls = x.decls.Remove(m)
+ | x is Interface => x.methods = x.methods.Remove(m)
+ | x is Variant => x.decls = x.decls.Remove(m)
+ | x is VariantOption => x.decls = x.decls.Remove(m)
+ | x is Enum => x.decls = x.decls.Remove(m)
+ | _ => {}
+ }
+ }
+
+
public GetMembers() : list[ClassMember]
{
match (this)
--
1.7.8.msysgit.0