Skip to content

Commit 44dd543

Browse files
committed
Rework modifier conflicts
1 parent c3cbbbc commit 44dd543

File tree

2 files changed

+19
-13
lines changed

2 files changed

+19
-13
lines changed

src/WattleScript.Interpreter/Tree/MemberCollection.cs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,6 @@ IEnumerator IEnumerable.GetEnumerator()
2020

2121
public void Add(Token nameToken, Expression expression, MemberModifierFlags modifiers, bool isFunction)
2222
{
23-
MemberUtilities.CheckModifierCombination(nameToken, modifiers);
24-
2523
if (names.Contains(nameToken.Text))
2624
{
2725
throw new SyntaxErrorException(

src/WattleScript.Interpreter/Tree/MemberUtilities.cs

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,12 @@ class MemberUtilities
1212
"__tostring",
1313
};
1414

15+
private static readonly (MemberModifierFlags a, MemberModifierFlags b, string msg)[] flagConflicts =
16+
{
17+
(MemberModifierFlags.Private, MemberModifierFlags.Static, "members declared static may not be private"),
18+
(MemberModifierFlags.Public, MemberModifierFlags.Private, null)
19+
};
20+
1521
public static void CheckReserved(Token name, string buildKind)
1622
{
1723
if (reservedFields.Contains(name.Text))
@@ -25,20 +31,22 @@ public static void AddModifierFlag(ref MemberModifierFlags source, Token token)
2531
var flag = token.ToMemberModiferFlag();
2632
if (source.HasFlag(flag))
2733
{
28-
NodeBase.UnexpectedTokenType(token);
34+
throw new SyntaxErrorException(token, "duplicate modifier '{0}'", token.Text);
2935
}
3036
source |= flag;
31-
}
32-
33-
public static void CheckModifierCombination(Token nameToken, MemberModifierFlags modifiers)
34-
{
35-
if (modifiers.HasFlag(MemberModifierFlags.Private) &&
36-
modifiers.HasFlag(MemberModifierFlags.Static))
37-
throw new SyntaxErrorException(nameToken, "members declared static may not be private");
3837

39-
if (modifiers.HasFlag(MemberModifierFlags.Private) &&
40-
modifiers.HasFlag(MemberModifierFlags.Public))
41-
throw new SyntaxErrorException(nameToken, "conflicting access modifiers public and private");
38+
foreach (var combo in flagConflicts)
39+
{
40+
if (source.HasFlag(combo.a) && source.HasFlag(combo.b))
41+
{
42+
if (combo.msg != null)
43+
throw new SyntaxErrorException(token, combo.msg);
44+
throw new SyntaxErrorException(token,
45+
"conflicting modifiers '{0}' and '{1}'",
46+
combo.a.ToString().ToLowerInvariant(),
47+
combo.b.ToString().ToLowerInvariant());
48+
}
49+
}
4250
}
4351
}
4452
}

0 commit comments

Comments
 (0)