Skip to content

Commit

Permalink
[Compiler] Refactoring.
Browse files Browse the repository at this point in the history
git-svn-id: https://nemerle.googlecode.com/svn/nemerle/trunk@9907 c8a6711f-211a-0410-a8d5-2f220496d6d1
  • Loading branch information
someone-with-default-username committed Jun 19, 2011
1 parent ba5576e commit 6df70ff
Showing 1 changed file with 12 additions and 17 deletions.
29 changes: 12 additions & 17 deletions ncc/typing/Typer-PatternTyper.n
Original file line number Diff line number Diff line change
Expand Up @@ -358,33 +358,28 @@ namespace Nemerle.Compiler
}
else match (matched_value_type.Hint)
{
// if we expecte to match on a class, transform the pattern
// if we expect matching on a class, transform the pattern
// to include field names
| Some (FixedType.Class (ti, _)) =>
def flags = BindingFlags.DeclaredOnly %| BindingFlags.Public %| BindingFlags.Instance;
def mems = ti.GetFields(flags).Filter(withoutIgnoreFieldAttribute);
def names = mems.Map(_.Name);
if (names.Length == pats.Length)
match(pats.Length)
{
if (pats.Length == 0)
{
ReportError(messenger, "pattern can't matchs 0 values.");
| 0 =>
ReportError(messenger, "pattern can't match 0 values");
Pattern.Error()
}
else
{

| n when n == names.Length =>
def assigns = NList.Map2(names, pats, (n, p) => PT.PExpr.Assign (PT.PExpr.Ref(PT.Name(n)), p));
TypeTuplePattern(matched_value_type, assigns)
}
}
else
{
ReportError(messenger, $"pattern matches $(pats.Length) values, while the type `$(ti)' has $(names.Length) fields");
Pattern.Error()

| n =>
ReportError(messenger, $"pattern matches $n values, while the type `$ti' has $(names.Length) fields");
Pattern.Error()
}

| Some (FixedType.Tuple (types))
when types.Length != pats.Length =>

| Some (FixedType.Tuple (types)) when types.Length != pats.Length =>
ReportError (messenger,
$ "pattern matches $(pats.Length)-tuples, "
"while the value matched is a "
Expand Down

0 comments on commit 6df70ff

Please sign in to comment.