Skip to content

Commit

Permalink
Add typing events for TypeBuilder.
Browse files Browse the repository at this point in the history
  • Loading branch information
NN--- committed Nov 24, 2013
1 parent cb72c02 commit 99f26a0
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 0 deletions.
6 changes: 6 additions & 0 deletions ncc/hierarchy/ClassMembers.n
Original file line number Diff line number Diff line change
Expand Up @@ -934,6 +934,12 @@ public partial class MethodBuilder : MemberBuilder, IMethod
{
| FunBody.Parsed =>
def typer = Manager.ComponentsFactory.CreateTyper (this);

// Subscribe to events in typer and forward them to the declaring type.
typer.BeforeStage2 += (s, e) => declaring_type.OnMethodBeforeStage2(s, e);
typer.BeforeStage3 += (s, e) => declaring_type.OnMethodBeforeStage3(s, e);
typer.BeforeStage4 += (s, e) => declaring_type.OnMethodBeforeStage4(s, e);

typer.RunFullTyping ();
| _ => ()
}
Expand Down
35 changes: 35 additions & 0 deletions ncc/hierarchy/TypeBuilder.n
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,10 @@ public partial class TypeBuilder : TypeInfo
internal mutable iterate_first : list[TypeBuilder];

mutable is_special_variant_methods_added : bool;

public event MethodBeforeStage2 : EventHandler[StageEventArgs];
public event MethodBeforeStage3 : EventHandler[StageEventArgs];
public event MethodBeforeStage4 : EventHandler[StageEventArgs];

public this (manager : TypesManager, par : TypeBuilder, td : PT.TopDeclaration,
ns_node : NamespaceTree.Node)
Expand Down Expand Up @@ -196,6 +200,37 @@ public partial class TypeBuilder : TypeInfo
};
}

/// <summary>
/// Raises MethodBeforeStage2 event.
/// </summary>
public OnMethodBeforeStage2(_ : object, args : StageEventArgs) : void
{
RaiseBeforeStage(MethodBeforeStage2, args);
}

/// <summary>
/// Raises MethodBeforeStage3 event.
/// </summary>
public OnMethodBeforeStage3(_ : object, args : StageEventArgs) : void
{
RaiseBeforeStage(MethodBeforeStage3, args);
}

/// <summary>
/// Raises MethodBeforeStage4 event.
/// </summary>
public OnMethodBeforeStage4(_ : object, args : StageEventArgs) : void
{
RaiseBeforeStage(MethodBeforeStage4, args);
}

private RaiseBeforeStage(evt : EventHandler[StageEventArgs], args : StageEventArgs) : void
{
def e = evt;
when (e != null)
e(this, args);
}

internal CalcAccessibility() : void
{
mutable resuleAccessModifiers = NemerleModifiers.None;
Expand Down

0 comments on commit 99f26a0

Please sign in to comment.