[svn] r6654: nemerle/trunk/ncc: hierarchy/ClassMembers.n
parsing/MainParser.n parsing/ParseTree.n
VladD2
svnadmin at nemerle.org
Fri Sep 15 02:29:55 CEST 2006
Log:
Add save GlabalEnv for class members (for fix delayed parsing of method body in Completion Engine).
Author: VladD2
Date: Fri Sep 15 02:29:53 2006
New Revision: 6654
Modified:
nemerle/trunk/ncc/hierarchy/ClassMembers.n
nemerle/trunk/ncc/parsing/MainParser.n
nemerle/trunk/ncc/parsing/ParseTree.n
Modified: nemerle/trunk/ncc/hierarchy/ClassMembers.n
==============================================================================
--- nemerle/trunk/ncc/hierarchy/ClassMembers.n (original)
+++ nemerle/trunk/ncc/hierarchy/ClassMembers.n Fri Sep 15 02:29:53 2006
@@ -64,9 +64,11 @@
public mutable required_modifiers : list[System.Type] = [];
public mutable optional_modifiers : list[System.Type] = [];
+ public Env : GlobalEnv;
protected this (par : TypeBuilder, d : PT.ClassMember)
{
+ Env = d.Env;
loc = d.loc;
modifiers = d.modifiers;
name = d.Name;
Modified: nemerle/trunk/ncc/parsing/MainParser.n
==============================================================================
--- nemerle/trunk/ncc/parsing/MainParser.n (original)
+++ nemerle/trunk/ncc/parsing/MainParser.n Fri Sep 15 02:29:53 2006
@@ -808,8 +808,10 @@
| x => Error (x, "expecting method body"); FunBody.Abstract ();
};
- ClassMember.Function (header = h, name = h.name, modifiers = modifiers,
- loc = loc, body = body, kind = FunKind.Method (impl))
+ def member = ClassMember.Function (header = h, name = h.name, modifiers = modifiers,
+ loc = loc, body = body, kind = FunKind.Method (impl));
+ member.Env = env;
+ member
}
parse_option (modifiers : Modifiers) : ClassMember
@@ -911,7 +913,9 @@
def (kind, bd) = parse_accessor_body ([], impl);
def name = Splicable.Name (mkname ("get_" + plain_name));
def fh = Fun_header (loc, name, ret_type, parms);
- getter = Some (ClassMember.Function (fh.name, method_atts, fh, kind, bd));
+ def member = ClassMember.Function (fh.name, method_atts, fh, kind, bd);
+ member.Env = env;
+ getter = Some (member);
| "set" =>
unless (setter.IsNone)
@@ -930,7 +934,9 @@
def (kind, bd) = parse_accessor_body (setter_parms, impl);
def name = Splicable.Name (mkname ("set_" + plain_name));
def fh = Fun_header (loc, typarms, name, PExpr.Void (), setter_parms);
- setter = Some (ClassMember.Function (fh.name, method_atts, fh, kind, bd));
+ def member = ClassMember.Function (fh.name, method_atts, fh, kind, bd);
+ member.Env = env;
+ setter = Some (member);
| _ =>
def nm = Splicable.Name (mkname (i));
@@ -1025,6 +1031,7 @@
def name = Splicable.Name (mloc, mkname (i + "_" + plain_name));
def fh = Fun_header (mloc, name, PExpr.Void (mloc), method_parms);
def method = ClassMember.Function (loc, name, method_atts, fh, kind, bd);
+ method.Env = env;
if (i == "remove")
remove = method;
else
@@ -1071,10 +1078,12 @@
def fh = Fun_header (loc, name, PExpr.Void (loc), method_parms);
// funbody is filled during typing
add = ClassMember.Function (loc, name, method_atts, fh, FunKind.Method ([]), null);
+ add.Env = env;
def name = Splicable.Name (loc, mkname ("remove_" + plain_name));
def fh = Fun_header (loc, name, PExpr.Void (loc), method_parms);
remove = ClassMember.Function (loc, name, method_atts, fh, FunKind.Method ([]), null);
+ remove.Env = env;
ClassMember.Event (loc, id, mods, ret_type, field, add, remove)
Modified: nemerle/trunk/ncc/parsing/ParseTree.n
==============================================================================
--- nemerle/trunk/ncc/parsing/ParseTree.n (original)
+++ nemerle/trunk/ncc/parsing/ParseTree.n Fri Sep 15 02:29:53 2006
@@ -72,7 +72,7 @@
public this () { base (Splicable.Name (Name ("")), Modifiers.Empty) }
}
- [Record]
+ [Record (Exclude = [Env])]
public variant ClassMember : DeclarationBase
{
| TypeDeclaration { td : TopDeclaration; }
@@ -97,6 +97,8 @@
}
| EnumOption { value : option [PExpr]; }
+ internal mutable Env : GlobalEnv;
+
/** accessible only for ClassMember.Function, when its FunBody is not typed or compiled */
public Body : PExpr {
get {
More information about the svn
mailing list