Skip to content

Commit af02212

Browse files
committed
Detect methods with duplicated name
Signed-off-by: Stefan Marr <[email protected]>
1 parent a968752 commit af02212

File tree

2 files changed

+11
-2
lines changed

2 files changed

+11
-2
lines changed

src/som/compiler/ClassGenerationContext.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import java.util.ArrayList;
2828
import java.util.List;
2929

30+
import som.compiler.Parser.ParseError;
3031
import som.vm.Universe;
3132
import som.vmobjects.SArray;
3233
import som.vmobjects.SClass;
@@ -76,7 +77,15 @@ public void setClassFieldsOfSuper(final SArray fieldNames) {
7677
}
7778
}
7879

79-
public void addMethod(final som.vmobjects.SInvokable meth) {
80+
public void addMethod(final som.vmobjects.SInvokable meth, final Parser parser) throws ParseError {
81+
List<SInvokable> methods = classSide ? classMethods : instanceMethods;
82+
83+
for (SInvokable i : methods) {
84+
if (i.getSignature() == meth.getSignature()) {
85+
String msg = "A method with name " + meth.getSignature().getEmbeddedString() + " is already declared in " + name.getEmbeddedString();
86+
throw new ParseError(msg, Symbol.NONE, parser);
87+
}
88+
}
8089
if (classSide) {
8190
classMethods.add(meth);
8291
} else {

src/som/compiler/Parser.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -219,7 +219,7 @@ private void classBody() throws ProgramDefinitionError {
219219
mgenc.addArgument("self");
220220

221221
method(mgenc);
222-
cgenc.addMethod(mgenc.assemble(universe));
222+
cgenc.addMethod(mgenc.assemble(universe), this);
223223
}
224224
}
225225

0 commit comments

Comments
 (0)