diff --git a/eo-runtime/src/main/java/org/eolang/AtComposite.java b/eo-runtime/src/main/java/org/eolang/AtComposite.java index f71b273363..339d460c47 100644 --- a/eo-runtime/src/main/java/org/eolang/AtComposite.java +++ b/eo-runtime/src/main/java/org/eolang/AtComposite.java @@ -65,9 +65,14 @@ public Phi get() { } @Override - public void put(final int pos, final Phi phi) { + public void put(final Phi phi) { throw new ExReadOnly( "Can't overwrite lambda expression" ); } + + @Override + public void put(final int pos, final Phi src) { + this.put(src); + } } diff --git a/eo-runtime/src/main/java/org/eolang/AtLogged.java b/eo-runtime/src/main/java/org/eolang/AtLogged.java index 4dda88cfa9..0c4fb05195 100644 --- a/eo-runtime/src/main/java/org/eolang/AtLogged.java +++ b/eo-runtime/src/main/java/org/eolang/AtLogged.java @@ -87,9 +87,14 @@ public Phi get() { } @Override - public void put(final int pos, final Phi src) { + public void put(final Phi src) { this.log.info(String.format(" %s.put()...\n", this.owner)); - this.origin.put(pos, src); + this.origin.put(src); this.log.info(String.format(" %s.put()!\n", this.owner)); } + + @Override + public void put(final int pos, final Phi src) { + this.put(src); + } } diff --git a/eo-runtime/src/main/java/org/eolang/AtOnce.java b/eo-runtime/src/main/java/org/eolang/AtOnce.java index d130229aaf..5f033c2ba8 100644 --- a/eo-runtime/src/main/java/org/eolang/AtOnce.java +++ b/eo-runtime/src/main/java/org/eolang/AtOnce.java @@ -70,7 +70,7 @@ public Phi get() { } @Override - public void put(final int pos, final Phi phi) { + public void put(final Phi phi) { throw new ExReadOnly( String.format( "Can't overwrite the \"%s\" attribute", @@ -78,4 +78,14 @@ public void put(final int pos, final Phi phi) { ) ); } + + @Override + public void put(final int pos, final Phi phi) { + throw new ExReadOnly( + String.format( + "There are no void attributes left, can't set the %s one", + pos + ) + ); + } } diff --git a/eo-runtime/src/main/java/org/eolang/AtRho.java b/eo-runtime/src/main/java/org/eolang/AtRho.java index dbcf229c54..7c61af042a 100644 --- a/eo-runtime/src/main/java/org/eolang/AtRho.java +++ b/eo-runtime/src/main/java/org/eolang/AtRho.java @@ -70,9 +70,14 @@ public Phi get() { } @Override - public void put(final int pos, final Phi phi) { + public void put(final Phi phi) { if (this.rho.get() == null) { this.rho.set(phi); } } + + @Override + public void put(final int pos, final Phi src) { + this.put(src); + } } diff --git a/eo-runtime/src/main/java/org/eolang/AtVoid.java b/eo-runtime/src/main/java/org/eolang/AtVoid.java index 4cf0ddc9ca..7951e5c794 100644 --- a/eo-runtime/src/main/java/org/eolang/AtVoid.java +++ b/eo-runtime/src/main/java/org/eolang/AtVoid.java @@ -89,7 +89,7 @@ public Phi get() { } @Override - public void put(final int pos, final Phi phi) { + public void put(final Phi phi) { if (this.object.get() == null) { this.object.set(phi); } else { @@ -101,4 +101,9 @@ public void put(final int pos, final Phi phi) { ); } } + + @Override + public void put(final int pos, final Phi phi) { + this.put(phi); + } } diff --git a/eo-runtime/src/main/java/org/eolang/AtWithRho.java b/eo-runtime/src/main/java/org/eolang/AtWithRho.java index 1d9d50dae1..a04540a6bc 100644 --- a/eo-runtime/src/main/java/org/eolang/AtWithRho.java +++ b/eo-runtime/src/main/java/org/eolang/AtWithRho.java @@ -67,6 +67,11 @@ public Phi get() { return ret; } + @Override + public void put(final Phi phi) { + this.origin.put(phi); + } + @Override public void put(final int pos, final Phi phi) { this.origin.put(pos, phi); diff --git a/eo-runtime/src/main/java/org/eolang/Attr.java b/eo-runtime/src/main/java/org/eolang/Attr.java index a95969025d..886641b0e1 100644 --- a/eo-runtime/src/main/java/org/eolang/Attr.java +++ b/eo-runtime/src/main/java/org/eolang/Attr.java @@ -65,7 +65,14 @@ public interface Attr { /** * Put a new object in. * - * @param pos The position + * @param phi The object to put + */ + void put(Phi phi); + + /** + * Put a new object with position of the attribute in. + * + * @param pos The position of the attribute * @param phi The object to put */ void put(int pos, Phi phi); diff --git a/eo-runtime/src/main/java/org/eolang/PhDefault.java b/eo-runtime/src/main/java/org/eolang/PhDefault.java index f176a036da..eb14b33737 100644 --- a/eo-runtime/src/main/java/org/eolang/PhDefault.java +++ b/eo-runtime/src/main/java/org/eolang/PhDefault.java @@ -140,24 +140,12 @@ public boolean hasRho() { @Override public void put(final int pos, final Phi object) { - this.attrObject(this.attr(pos), object).put(pos, object); + this.attribute(this.attr(pos), object).put(pos, object); } @Override public void put(final String name, final Phi object) { - this.attrObject(name, object).put(0, object); - } - - private Attr attrObject(final String name, final Phi object) { - if (!this.attrs.containsKey(name)) { - throw new ExUnset( - String.format( - "Can't #put(\"%s\", %s) to %s, because the attribute is absent", - name, object, this - ) - ); - } - return this.attrs.get(name); + this.attribute(name, object).put(object); } @Override @@ -259,6 +247,24 @@ public final void add(final String name, final Attr attr) { this.attrs.put(name, new AtWithRho(attr, this)); } + /** + * Get an attribute by name. + * @param name The name + * @param object The object + * @return The attribute + */ + private Attr attribute(final String name, final Phi object) { + if (!this.attrs.containsKey(name)) { + throw new ExUnset( + String.format( + "Can't #put(\"%s\", %s) to %s, because the attribute is absent", + name, object, this + ) + ); + } + return this.attrs.get(name); + } + /** * Get attribute name by position. * @param pos Position of the attribute diff --git a/eo-runtime/src/test/java/org/eolang/AtEnvelope.java b/eo-runtime/src/test/java/org/eolang/AtEnvelope.java index 7d15ae8948..9ede2b7d5a 100644 --- a/eo-runtime/src/test/java/org/eolang/AtEnvelope.java +++ b/eo-runtime/src/test/java/org/eolang/AtEnvelope.java @@ -55,6 +55,11 @@ public Phi get() { return this.origin.get(); } + @Override + public void put(final Phi phi) { + this.origin.put(phi); + } + @Override public void put(final int pos, final Phi phi) { this.origin.put(pos, phi); diff --git a/eo-runtime/src/test/java/org/eolang/PhDefaultTest.java b/eo-runtime/src/test/java/org/eolang/PhDefaultTest.java index ba6686591e..8056f89ca2 100644 --- a/eo-runtime/src/test/java/org/eolang/PhDefaultTest.java +++ b/eo-runtime/src/test/java/org/eolang/PhDefaultTest.java @@ -501,7 +501,7 @@ void failsCorrectlyWhenTooManyAttributesPut() { Matchers.equalTo("There are no void attributes left, can't set the 1st one") ); } - + /** * Rnd. * @since 0.1.0