[svn] r6312: nemerle/trunk/ncc: generation/HierarchyEmitter.n
hierarchy/ClassMembers.n typing/TypedTree.n
malekith
svnadmin at nemerle.org
Sat May 20 22:14:13 CEST 2006
Log:
Allow modreq/modopt on properties too. Needed for boogie integration. By Wojtek Walewski.
Author: malekith
Date: Sat May 20 22:14:13 2006
New Revision: 6312
Modified:
nemerle/trunk/ncc/generation/HierarchyEmitter.n
nemerle/trunk/ncc/hierarchy/ClassMembers.n
nemerle/trunk/ncc/typing/TypedTree.n
Modified: nemerle/trunk/ncc/generation/HierarchyEmitter.n
==============================================================================
--- nemerle/trunk/ncc/generation/HierarchyEmitter.n (original)
+++ nemerle/trunk/ncc/generation/HierarchyEmitter.n Sat May 20 22:14:13 2006
@@ -895,23 +895,13 @@
foreach (gp in fun_header.typarms) gp.UpdateConstraints ();
}
- mutable paramTypeRequiredModifiers = [];
- mutable paramTypeOptionalModifiers = [];
-
- foreach (p in fun_header.parms)
- {
- paramTypeRequiredModifiers ::= p.required_modifiers.ToArray ();
- paramTypeOptionalModifiers ::= p.optional_modifiers.ToArray ();
- }
-
method_builder.SetSignature (
fun_header.ret_type.SystemType,
- fun_header.ret_type_required_modifiers.ToArray (),
- fun_header.ret_type_optional_modifiers.ToArray (),
+ fun_header.GetRetTypeRequiredModifiers (),
+ fun_header.GetRetTypeOptionalModifiers (),
param_types (),
- paramTypeRequiredModifiers.Reverse ().ToArray (),
- paramTypeOptionalModifiers.Reverse ().ToArray ());
-
+ fun_header.GetParamTypeRequiredModifiers (),
+ fun_header.GetParamTypeOptionalModifiers ());
/* add the runtime modifiers for delegate methods */
when (DeclaringType.IsDelegate) {
@@ -949,23 +939,16 @@
{
// Message.Debug ($"-- AddConstructorBuilder: $this");
- mutable paramTypeRequiredModifiers = [];
- mutable paramTypeOptionalModifiers = [];
-
- foreach (p in fun_header.parms)
- {
- paramTypeRequiredModifiers ::= p.required_modifiers.ToArray ();
- paramTypeOptionalModifiers ::= p.optional_modifiers.ToArray ();
- }
-
/* create the constructor builder */
ctor_builder =
- tb.DefineConstructor (make_method_attributes (Attributes) |
+ tb.DefineConstructor (
+ make_method_attributes (Attributes) |
MethodAttributes.RTSpecialName |
MethodAttributes.SpecialName,
- CallingConventions.Standard, param_types (),
- paramTypeRequiredModifiers.Reverse ().ToArray (),
- paramTypeOptionalModifiers.Reverse ().ToArray ());
+ CallingConventions.Standard,
+ param_types (),
+ fun_header.GetParamTypeRequiredModifiers (),
+ fun_header.GetParamTypeOptionalModifiers ());
/* add the runtime modifiers for delegate constructors */
when (DeclaringType.IsDelegate) {
@@ -1113,12 +1096,43 @@
result
}
- def parms = parms.MapToArray (fun (t : MType) { t.SystemType });
-
def attrs = make_property_attributes (Attributes);
def ty = GetMemType ().SystemType;
+ mutable parms = null;
- property_builder = tb.DefineProperty (Name, attrs, ty, parms);
+ def (ret_type_req_mods, ret_type_opt_mods) = {
+ def getter = GetGetter ();
+
+ if (getter == null)
+ (null, null)
+ else
+ ( (getter :> MethodBuilder).fun_header.GetRetTypeRequiredModifiers (),
+ (getter :> MethodBuilder).fun_header.GetRetTypeOptionalModifiers () )
+ }
+
+ def (param_type_req_mods, param_type_opt_mods) = {
+ def setter = GetSetter ();
+
+ if (setter == null)
+ (null, null)
+ else
+ {
+ parms = (setter :> MethodBuilder).fun_header.parms.MapToArray (
+ fun (t : Fun_parm) { t.SystemType });
+ ( (setter :> MethodBuilder).fun_header.GetParamTypeRequiredModifiers (),
+ (setter :> MethodBuilder).fun_header.GetParamTypeOptionalModifiers () )
+ }
+ }
+
+ property_builder = tb.DefineProperty (
+ Name,
+ attrs,
+ ty,
+ ret_type_req_mods,
+ ret_type_opt_mods,
+ parms,
+ param_type_req_mods,
+ param_type_opt_mods);
}
internal override Compile () : void
Modified: nemerle/trunk/ncc/hierarchy/ClassMembers.n
==============================================================================
--- nemerle/trunk/ncc/hierarchy/ClassMembers.n (original)
+++ nemerle/trunk/ncc/hierarchy/ClassMembers.n Sat May 20 22:14:13 2006
@@ -60,6 +60,9 @@
internal mutable disable_type_attr : bool;
+ public mutable required_modifiers : list[System.Type] = [];
+ public mutable optional_modifiers : list[System.Type] = [];
+
protected this (par : TypeBuilder, d : PT.ClassMember)
{
loc = d.loc;
@@ -394,9 +397,6 @@
public mutable const_value : Literal;
mutable has_been_assigned = false;
- public mutable required_modifiers : list[System.Type] = [];
- public mutable optional_modifiers : list[System.Type] = [];
-
public this (par : TypeBuilder, f : PT.ClassMember.Field) {
base (par, f);
Modified: nemerle/trunk/ncc/typing/TypedTree.n
==============================================================================
--- nemerle/trunk/ncc/typing/TypedTree.n (original)
+++ nemerle/trunk/ncc/typing/TypedTree.n Sat May 20 22:14:13 2006
@@ -284,6 +284,48 @@
{
name
}
+
+ public GetRetTypeRequiredModifiers () : array [System.Type]
+ {
+ ret_type_required_modifiers.ToArray ()
+ }
+
+ public GetRetTypeOptionalModifiers () : array [System.Type]
+ {
+ ret_type_optional_modifiers.ToArray ()
+ }
+
+ public GetParamTypeRequiredModifiers () : array [array [System.Type]]
+ {
+ mutable mods = [];
+
+ foreach (p in parms)
+ if (p.required_modifiers.IsEmpty)
+ mods ::= null;
+ else
+ mods ::= p.required_modifiers.ToArray ();
+
+ if (mods.ForAll (fun (x) { x == null }) )
+ null
+ else
+ mods.Reverse ().ToArray ()
+ }
+
+ public GetParamTypeOptionalModifiers () : array [array [System.Type]]
+ {
+ mutable mods = [];
+
+ foreach (p in parms)
+ if (p.optional_modifiers.IsEmpty)
+ mods ::= null;
+ else
+ mods ::= p.optional_modifiers.ToArray ();
+
+ if (mods.ForAll (fun (x) { x == null }) )
+ null
+ else
+ mods.Reverse ().ToArray ()
+ }
}
More information about the svn
mailing list