[svn] r6226: nemerle/trunk/ncc: generation/HierarchyEmitter.n
hierarchy/ClassMembers.n typing/TypedTree.n
malekith
svnadmin at nemerle.org
Thu May 4 23:03:05 CEST 2006
Log:
Changes by Wojtek Walewski: allow specifing modifiers for parameters and return types (modopt and modreq). For non-nullness.
Author: malekith
Date: Thu May 4 23:03:04 2006
New Revision: 6226
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 Thu May 4 23:03:04 2006
@@ -860,8 +860,7 @@
method_builder = AttributeCompiler.CheckPInvoking (this, tb, attrs, parm_types_array);
if (method_builder == null)
- method_builder = tb.DefineMethod (Name, attrs, ReturnType.SystemType,
- parm_types_array);
+ method_builder = tb.DefineMethod (Name, attrs);
else
pinvoke = true;
}
@@ -875,12 +874,26 @@
x.SetGenericBuilder (generic_parms [idx]);
});
foreach (gp in fun_header.typarms) gp.UpdateConstraints ();
+ }
- method_builder.SetReturnType (ReturnType.SystemType);
+ mutable paramTypeRequiredModifiers = [];
+ mutable paramTypeOptionalModifiers = [];
- method_builder.SetParameters (param_types ());
+ 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 (),
+ param_types (),
+ paramTypeRequiredModifiers.Reverse ().ToArray (),
+ paramTypeOptionalModifiers.Reverse ().ToArray ());
+
+
/* add the runtime modifiers for delegate methods */
when (DeclaringType.IsDelegate) {
assert (!pinvoke);
@@ -1017,7 +1030,12 @@
when (Name != "value__")
attrs &= ~FieldAttributes.RTSpecialName;
- field_builder = tb.DefineField (Name, GetMemType ().SystemType, attrs);
+ field_builder = tb.DefineField (
+ Name,
+ GetMemType ().SystemType,
+ required_modifiers.ToArray (),
+ optional_modifiers.ToArray (),
+ attrs);
when (IsLiteral)
field_builder.SetConstant (const_value.AsObject ());
Modified: nemerle/trunk/ncc/hierarchy/ClassMembers.n
==============================================================================
--- nemerle/trunk/ncc/hierarchy/ClassMembers.n (original)
+++ nemerle/trunk/ncc/hierarchy/ClassMembers.n Thu May 4 23:03:04 2006
@@ -394,6 +394,9 @@
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 Thu May 4 23:03:04 2006
@@ -47,8 +47,10 @@
public name : string;
public color : int;
public mutable ty : TyVar;
- public modifiers : Modifiers;
public kind : ParmKind;
+ public modifiers : Modifiers;
+ public mutable required_modifiers : list[System.Type] = [];
+ public mutable optional_modifiers : list[System.Type] = [];
public mutable default_value : option [Literal] = None ();
// for local functions only
@@ -216,6 +218,8 @@
public mutable parms : list [Fun_parm];
public mutable typarms : list [StaticTyVar];
public tenv : TyVarEnv;
+ public mutable ret_type_required_modifiers : list[System.Type] = [];
+ public mutable ret_type_optional_modifiers : list[System.Type] = [];
public mutable usage : FunctionUsage;
public mutable body : FunBody;
More information about the svn
mailing list