From ee07dba1811efb5dbd12cd8c651819347cfd86bc Mon Sep 17 00:00:00 2001 From: maxonfjvipon Date: Tue, 9 Apr 2024 17:16:56 +0300 Subject: [PATCH 1/2] fix(#3060): put to boolean + tests --- eo-runtime/src/main/eo/org/eolang/go.eo | 2 +- eo-runtime/src/main/eo/org/eolang/malloc.eo | 3 ++- .../java/EOorg/EOeolang/EOcage$EOnew.java | 3 ++- .../EOorg/EOeolang/EOmalloc$EO\317\206.java" | 3 +-- .../src/main/java/EOorg/EOeolang/EOtry.java | 12 ++++++---- .../src/main/java/org/eolang/AtComposite.java | 2 +- .../src/main/java/org/eolang/AtEnvelope.java | 4 ++-- .../src/main/java/org/eolang/AtFixed.java | 4 ++-- .../src/main/java/org/eolang/AtFormed.java | 2 +- .../src/main/java/org/eolang/AtGetOnly.java | 2 +- .../src/main/java/org/eolang/AtLogged.java | 5 ++-- .../src/main/java/org/eolang/AtNamed.java | 4 ++-- .../src/main/java/org/eolang/AtOnce.java | 2 +- .../src/main/java/org/eolang/AtRho.java | 7 +++++- .../src/main/java/org/eolang/AtSafe.java | 4 ++-- .../src/main/java/org/eolang/AtSetRho.java | 15 +++++++----- .../src/main/java/org/eolang/AtVoid.java | 3 ++- eo-runtime/src/main/java/org/eolang/Attr.java | 4 ++-- eo-runtime/src/main/java/org/eolang/Data.java | 8 +++---- .../src/main/java/org/eolang/PhConst.java | 8 +++---- .../src/main/java/org/eolang/PhDefault.java | 10 ++++---- .../src/main/java/org/eolang/PhLocated.java | 8 +++---- .../src/main/java/org/eolang/PhLogged.java | 10 ++++---- .../src/main/java/org/eolang/PhNamed.java | 8 +++---- .../src/main/java/org/eolang/PhOnce.java | 8 +++---- .../src/main/java/org/eolang/PhPackage.java | 8 +++---- .../src/main/java/org/eolang/PhSafe.java | 8 +++---- .../main/java/org/eolang/PhTracedLocator.java | 12 ++++++---- eo-runtime/src/main/java/org/eolang/Phi.java | 10 ++++---- .../src/test/eo/org/eolang/malloc-tests.eo | 4 ++++ .../test/java/org/eolang/PhDefaultTest.java | 23 +++++++++++++++++-- 31 files changed, 125 insertions(+), 81 deletions(-) diff --git a/eo-runtime/src/main/eo/org/eolang/go.eo b/eo-runtime/src/main/eo/org/eolang/go.eo index afc0700872..b44cceb6ce 100644 --- a/eo-runtime/src/main/eo/org/eolang/go.eo +++ b/eo-runtime/src/main/eo/org/eolang/go.eo @@ -72,7 +72,7 @@ # Backward jump. error > backward [] - &.^.@ > value + &.^.^.to &.^.body > value &.^.^.id > id # Forward jump. diff --git a/eo-runtime/src/main/eo/org/eolang/malloc.eo b/eo-runtime/src/main/eo/org/eolang/malloc.eo index 157f2a8b99..dfb5bc2fad 100644 --- a/eo-runtime/src/main/eo/org/eolang/malloc.eo +++ b/eo-runtime/src/main/eo/org/eolang/malloc.eo @@ -45,8 +45,9 @@ # Pointer to allocated block in memory. # Here `id` is identifier of pointer, `size` is length of the block. - [id size] > memory-block-pointer + [id] > memory-block-pointer $ > pointer + ^.size > size # Read `bytes` from the block in memory by the pointer. [] > read /bytes diff --git a/eo-runtime/src/main/java/EOorg/EOeolang/EOcage$EOnew.java b/eo-runtime/src/main/java/EOorg/EOeolang/EOcage$EOnew.java index 17026eab62..7f4abccbbd 100644 --- a/eo-runtime/src/main/java/EOorg/EOeolang/EOcage$EOnew.java +++ b/eo-runtime/src/main/java/EOorg/EOeolang/EOcage$EOnew.java @@ -131,7 +131,7 @@ public Phi get() { } @Override - public void put(final Phi phi) { + public boolean put(final Phi phi) { if (this.forma == null) { this.forma = phi.forma(); } else if (!this.forma.equals(phi.forma())) { @@ -147,6 +147,7 @@ public void put(final Phi phi) { } } EOcage$EOnew.CAGES.put(this.locator, phi); + return true; } @Override diff --git "a/eo-runtime/src/main/java/EOorg/EOeolang/EOmalloc$EO\317\206.java" "b/eo-runtime/src/main/java/EOorg/EOeolang/EOmalloc$EO\317\206.java" index d501ceccb8..c399df24f9 100644 --- "a/eo-runtime/src/main/java/EOorg/EOeolang/EOmalloc$EO\317\206.java" +++ "b/eo-runtime/src/main/java/EOorg/EOeolang/EOmalloc$EO\317\206.java" @@ -59,9 +59,8 @@ public Phi lambda() { final int identifier = Heaps.INSTANCE.get().malloc( this, new Dataized(size).take(Long.class).intValue() ); - final Phi pointer = this.take(Attr.SIGMA).take("memory-block-pointer").copy(); + final Phi pointer = this.take(Attr.RHO).take("memory-block-pointer").copy(); pointer.put("id", new Data.ToPhi((long) identifier)); - pointer.put("size", size); return pointer; } } diff --git a/eo-runtime/src/main/java/EOorg/EOeolang/EOtry.java b/eo-runtime/src/main/java/EOorg/EOeolang/EOtry.java index 342aacf2e1..9eab251e2c 100644 --- a/eo-runtime/src/main/java/EOorg/EOeolang/EOtry.java +++ b/eo-runtime/src/main/java/EOorg/EOeolang/EOtry.java @@ -126,13 +126,17 @@ public Phi take(final String name) { } @Override - public void put(final int pos, final Phi object) { - this.func.accept(phi -> phi.put(pos, object)); + public boolean put(final int pos, final Phi object) { + return new TryReturn( + this.body, this.ctch, this.last + ).apply(phi -> phi.put(pos, object)); } @Override - public void put(final String name, final Phi object) { - this.func.accept(phi -> phi.put(name, object)); + public boolean put(final String name, final Phi object) { + return new TryReturn( + this.body, this.ctch, this.last + ).apply(phi -> phi.put(name, object)); } @Override diff --git a/eo-runtime/src/main/java/org/eolang/AtComposite.java b/eo-runtime/src/main/java/org/eolang/AtComposite.java index f33766aeb6..79b3d03d0a 100644 --- a/eo-runtime/src/main/java/org/eolang/AtComposite.java +++ b/eo-runtime/src/main/java/org/eolang/AtComposite.java @@ -77,7 +77,7 @@ public Phi get() { } @Override - public void put(final Phi phi) { + public boolean put(final Phi phi) { throw new ExReadOnly( "You can't overwrite lambda expression" ); diff --git a/eo-runtime/src/main/java/org/eolang/AtEnvelope.java b/eo-runtime/src/main/java/org/eolang/AtEnvelope.java index d759353129..97a617e102 100644 --- a/eo-runtime/src/main/java/org/eolang/AtEnvelope.java +++ b/eo-runtime/src/main/java/org/eolang/AtEnvelope.java @@ -54,8 +54,8 @@ public Phi get() { } @Override - public void put(final Phi phi) { - this.origin.put(phi); + public boolean put(final Phi phi) { + return this.origin.put(phi); } @Override diff --git a/eo-runtime/src/main/java/org/eolang/AtFixed.java b/eo-runtime/src/main/java/org/eolang/AtFixed.java index 580712b8b7..1e88aec4fc 100644 --- a/eo-runtime/src/main/java/org/eolang/AtFixed.java +++ b/eo-runtime/src/main/java/org/eolang/AtFixed.java @@ -74,7 +74,7 @@ public Phi get() { } @Override - public void put(final Phi src) { - // ignore it + public boolean put(final Phi src) { + return false; } } diff --git a/eo-runtime/src/main/java/org/eolang/AtFormed.java b/eo-runtime/src/main/java/org/eolang/AtFormed.java index a867eeacb1..533d74bffc 100644 --- a/eo-runtime/src/main/java/org/eolang/AtFormed.java +++ b/eo-runtime/src/main/java/org/eolang/AtFormed.java @@ -70,7 +70,7 @@ public Phi get() { } @Override - public void put(final Phi phi) { + public boolean put(final Phi phi) { throw new ExReadOnly( "Formed attribute is read only" ); diff --git a/eo-runtime/src/main/java/org/eolang/AtGetOnly.java b/eo-runtime/src/main/java/org/eolang/AtGetOnly.java index 31660f5e02..6aba27d29f 100644 --- a/eo-runtime/src/main/java/org/eolang/AtGetOnly.java +++ b/eo-runtime/src/main/java/org/eolang/AtGetOnly.java @@ -58,7 +58,7 @@ public Phi get() { } @Override - public void put(final Phi phi) { + public boolean put(final Phi phi) { throw new IllegalStateException( "Should never happen" ); diff --git a/eo-runtime/src/main/java/org/eolang/AtLogged.java b/eo-runtime/src/main/java/org/eolang/AtLogged.java index 6de2da8372..c44029ea50 100644 --- a/eo-runtime/src/main/java/org/eolang/AtLogged.java +++ b/eo-runtime/src/main/java/org/eolang/AtLogged.java @@ -98,9 +98,10 @@ public Phi get() { } @Override - public void put(final Phi src) { + public boolean put(final Phi src) { this.log.info(String.format(" %s.put()...\n", this.owner)); - this.origin.put(src); + final boolean ret = this.origin.put(src); this.log.info(String.format(" %s.put()!\n", this.owner)); + return ret; } } diff --git a/eo-runtime/src/main/java/org/eolang/AtNamed.java b/eo-runtime/src/main/java/org/eolang/AtNamed.java index 553fe6766a..13c8202bad 100644 --- a/eo-runtime/src/main/java/org/eolang/AtNamed.java +++ b/eo-runtime/src/main/java/org/eolang/AtNamed.java @@ -98,9 +98,9 @@ public Phi get() { } @Override - public void put(final Phi src) { + public boolean put(final Phi src) { try { - this.origin.put(src); + return this.origin.put(src); } catch (final ExReadOnly ex) { throw new ExReadOnly(this.label(), ex); } catch (final ExFailure ex) { diff --git a/eo-runtime/src/main/java/org/eolang/AtOnce.java b/eo-runtime/src/main/java/org/eolang/AtOnce.java index 8d947b7845..568549bed6 100644 --- a/eo-runtime/src/main/java/org/eolang/AtOnce.java +++ b/eo-runtime/src/main/java/org/eolang/AtOnce.java @@ -94,7 +94,7 @@ public Phi get() { } @Override - public void put(final Phi phi) { + public boolean put(final Phi phi) { throw new ExReadOnly( String.format( "You can't overwrite '%s'", diff --git a/eo-runtime/src/main/java/org/eolang/AtRho.java b/eo-runtime/src/main/java/org/eolang/AtRho.java index 64e04d64ab..c8c3a027a7 100644 --- a/eo-runtime/src/main/java/org/eolang/AtRho.java +++ b/eo-runtime/src/main/java/org/eolang/AtRho.java @@ -81,10 +81,15 @@ public Phi get() { } @Override - public void put(final Phi phi) { + public boolean put(final Phi phi) { + final boolean ret; if (this.rho.get() == null) { this.rho.set(phi); + ret = true; + } else { + ret = false; } + return ret; } @Override diff --git a/eo-runtime/src/main/java/org/eolang/AtSafe.java b/eo-runtime/src/main/java/org/eolang/AtSafe.java index 94b1d0197f..8e723125ec 100644 --- a/eo-runtime/src/main/java/org/eolang/AtSafe.java +++ b/eo-runtime/src/main/java/org/eolang/AtSafe.java @@ -85,9 +85,9 @@ public Phi get() { } @Override - public void put(final Phi phi) { + public boolean put(final Phi phi) { try { - this.origin.put(phi); + return this.origin.put(phi); } catch (final ExFailure ex) { throw new EOerror.ExError( new Data.ToPhi(EOerror.message(ex)) diff --git a/eo-runtime/src/main/java/org/eolang/AtSetRho.java b/eo-runtime/src/main/java/org/eolang/AtSetRho.java index 41632108f4..2d97908ec1 100644 --- a/eo-runtime/src/main/java/org/eolang/AtSetRho.java +++ b/eo-runtime/src/main/java/org/eolang/AtSetRho.java @@ -25,10 +25,10 @@ package org.eolang; /** - * Attribute that tries to set \rho to retrieved object. - * Attribute does not set \rho if retrieved object is \rho or \sigma. - * Since every \rho attribute of {@link Phi} is {@link AtRho} it won't be - * reset because {@link AtRho} ignores all puts except first. + * The attribute tries to set \rho to the given attribute. + * If the name of the attribute is {@link Attr#RHO} or {@link Attr#SIGMA} - just attribute is + * returned. + * * @since 0.36.0 */ final class AtSetRho extends AtEnvelope { @@ -52,9 +52,12 @@ final class AtSetRho extends AtEnvelope { super( new AtGetOnly( () -> { - final Phi ret = attr.get(); + Phi ret = attr.get(); if (!name.equals(Attr.RHO) && !name.equals(Attr.SIGMA)) { - ret.put(Attr.RHO, rho); + final Phi copy = ret.copy(); + if (copy.put(Attr.RHO, rho)) { + ret = copy; + } } return ret; } diff --git a/eo-runtime/src/main/java/org/eolang/AtVoid.java b/eo-runtime/src/main/java/org/eolang/AtVoid.java index b554517d6d..6dcd650d89 100644 --- a/eo-runtime/src/main/java/org/eolang/AtVoid.java +++ b/eo-runtime/src/main/java/org/eolang/AtVoid.java @@ -112,7 +112,7 @@ public Phi get() { } @Override - public void put(final Phi phi) { + public boolean put(final Phi phi) { if (this.object.get() == null) { this.object.set(phi); } else { @@ -120,6 +120,7 @@ public void put(final Phi phi) { "This void attribute is already set, can't reset" ); } + return true; } } diff --git a/eo-runtime/src/main/java/org/eolang/Attr.java b/eo-runtime/src/main/java/org/eolang/Attr.java index edbb7afc41..7c240a7f61 100644 --- a/eo-runtime/src/main/java/org/eolang/Attr.java +++ b/eo-runtime/src/main/java/org/eolang/Attr.java @@ -75,7 +75,7 @@ public interface Attr extends Term { * Put a new object in. * * @param phi The object to put + * @return Was attribute set */ - void put(Phi phi); - + boolean put(Phi phi); } diff --git a/eo-runtime/src/main/java/org/eolang/Data.java b/eo-runtime/src/main/java/org/eolang/Data.java index 252290a1c4..73466df06a 100644 --- a/eo-runtime/src/main/java/org/eolang/Data.java +++ b/eo-runtime/src/main/java/org/eolang/Data.java @@ -100,13 +100,13 @@ public Phi take(final String name) { } @Override - public void put(final int pos, final Phi obj) { - this.object.put(pos, obj); + public boolean put(final int pos, final Phi obj) { + return this.object.put(pos, obj); } @Override - public void put(final String name, final Phi obj) { - this.object.put(name, obj); + public boolean put(final String name, final Phi obj) { + return this.object.put(name, obj); } @Override diff --git a/eo-runtime/src/main/java/org/eolang/PhConst.java b/eo-runtime/src/main/java/org/eolang/PhConst.java index f674f7be5c..97bbf3d210 100644 --- a/eo-runtime/src/main/java/org/eolang/PhConst.java +++ b/eo-runtime/src/main/java/org/eolang/PhConst.java @@ -97,13 +97,13 @@ public Phi take(final String name) { } @Override - public void put(final int pos, final Phi object) { - this.primitive().put(pos, object); + public boolean put(final int pos, final Phi object) { + return this.primitive().put(pos, object); } @Override - public void put(final String name, final Phi object) { - this.primitive().put(name, object); + public boolean put(final String name, final Phi object) { + return this.primitive().put(name, object); } @Override diff --git a/eo-runtime/src/main/java/org/eolang/PhDefault.java b/eo-runtime/src/main/java/org/eolang/PhDefault.java index 466a46c9c2..dc3d8a90d6 100644 --- a/eo-runtime/src/main/java/org/eolang/PhDefault.java +++ b/eo-runtime/src/main/java/org/eolang/PhDefault.java @@ -195,12 +195,12 @@ public final Phi copy() { } @Override - public void put(final int pos, final Phi object) { - this.put(this.attr(pos), object); + public boolean put(final int pos, final Phi object) { + return this.put(this.attr(pos), object); } @Override - public void put(final String name, final Phi object) { + public boolean put(final String name, final Phi object) { if (!this.attrs.containsKey(name)) { throw new ExUnset( String.format( @@ -209,7 +209,7 @@ public void put(final String name, final Phi object) { ) ); } - new AtSafe(this.named(this.attrs.get(name), name)).put(object); + return new AtSafe(this.named(this.attrs.get(name), name)).put(object); } @Override @@ -220,7 +220,7 @@ public Phi take(final String name) { object = new AtSafe( this.named( new AtSetRho( - new AtCopied(this.attrs.get(name), name), + this.attrs.get(name), this, name ), diff --git a/eo-runtime/src/main/java/org/eolang/PhLocated.java b/eo-runtime/src/main/java/org/eolang/PhLocated.java index 9acf484af0..33458ae922 100644 --- a/eo-runtime/src/main/java/org/eolang/PhLocated.java +++ b/eo-runtime/src/main/java/org/eolang/PhLocated.java @@ -114,13 +114,13 @@ public Phi take(final String name) { } @Override - public void put(final int pos, final Phi object) { - this.origin.put(pos, object); + public boolean put(final int pos, final Phi object) { + return this.origin.put(pos, object); } @Override - public void put(final String name, final Phi object) { - this.origin.put(name, object); + public boolean put(final String name, final Phi object) { + return this.origin.put(name, object); } @Override diff --git a/eo-runtime/src/main/java/org/eolang/PhLogged.java b/eo-runtime/src/main/java/org/eolang/PhLogged.java index a8ef787b4a..27356f0f29 100644 --- a/eo-runtime/src/main/java/org/eolang/PhLogged.java +++ b/eo-runtime/src/main/java/org/eolang/PhLogged.java @@ -71,17 +71,19 @@ public Phi take(final String name) { } @Override - public void put(final int pos, final Phi object) { + public boolean put(final int pos, final Phi object) { System.out.printf("%d.put(%d, %d)...\n", this.hashCode(), pos, object.hashCode()); - this.origin.put(pos, object); + final boolean ret = this.origin.put(pos, object); System.out.printf("%d.put(%d, %d)!\n", this.hashCode(), pos, object.hashCode()); + return ret; } @Override - public void put(final String name, final Phi object) { + public boolean put(final String name, final Phi object) { System.out.printf("%d.put(\"%s\", %d)...\n", this.hashCode(), name, object.hashCode()); - this.origin.put(name, object); + final boolean ret = this.origin.put(name, object); System.out.printf("%d.put(\"%s\", %d)!\n", this.hashCode(), name, object.hashCode()); + return ret; } @Override diff --git a/eo-runtime/src/main/java/org/eolang/PhNamed.java b/eo-runtime/src/main/java/org/eolang/PhNamed.java index d7f8ad8178..d5b0157b76 100644 --- a/eo-runtime/src/main/java/org/eolang/PhNamed.java +++ b/eo-runtime/src/main/java/org/eolang/PhNamed.java @@ -84,13 +84,13 @@ public Phi take(final String nme) { } @Override - public void put(final int pos, final Phi object) { - this.origin.put(pos, object); + public boolean put(final int pos, final Phi object) { + return this.origin.put(pos, object); } @Override - public void put(final String nme, final Phi object) { - this.origin.put(nme, object); + public boolean put(final String nme, final Phi object) { + return this.origin.put(nme, object); } @Override diff --git a/eo-runtime/src/main/java/org/eolang/PhOnce.java b/eo-runtime/src/main/java/org/eolang/PhOnce.java index bb77647796..466d103e02 100644 --- a/eo-runtime/src/main/java/org/eolang/PhOnce.java +++ b/eo-runtime/src/main/java/org/eolang/PhOnce.java @@ -111,13 +111,13 @@ public Phi take(final String name) { } @Override - public void put(final int pos, final Phi obj) { - this.object.get().put(pos, obj); + public boolean put(final int pos, final Phi obj) { + return this.object.get().put(pos, obj); } @Override - public void put(final String name, final Phi obj) { - this.object.get().put(name, obj); + public boolean put(final String name, final Phi obj) { + return this.object.get().put(name, obj); } @Override diff --git a/eo-runtime/src/main/java/org/eolang/PhPackage.java b/eo-runtime/src/main/java/org/eolang/PhPackage.java index 3c7d14255e..c79d9c1e8b 100644 --- a/eo-runtime/src/main/java/org/eolang/PhPackage.java +++ b/eo-runtime/src/main/java/org/eolang/PhPackage.java @@ -98,22 +98,20 @@ public Phi take(final String name) { if (phi instanceof PhPackage) { res = phi; } else { - res = new AtSetRho( - this.objects.get().get(key).copy(), this, key - ).get(); + res = new AtSetRho(this.objects.get().get(key), this, key).get(); } return res; } @Override - public void put(final int pos, final Phi object) { + public boolean put(final int pos, final Phi object) { throw new IllegalStateException( String.format("Can't #put(%d, %s) to package object '%s'", pos, object, this.pkg) ); } @Override - public void put(final String name, final Phi object) { + public boolean put(final String name, final Phi object) { throw new IllegalStateException( String.format("Can't #put(%s, %s) to package object '%s'", name, object, this.pkg) ); diff --git a/eo-runtime/src/main/java/org/eolang/PhSafe.java b/eo-runtime/src/main/java/org/eolang/PhSafe.java index 561a4ae3d1..3d3b716e5b 100644 --- a/eo-runtime/src/main/java/org/eolang/PhSafe.java +++ b/eo-runtime/src/main/java/org/eolang/PhSafe.java @@ -85,9 +85,9 @@ public Phi take(final String name) { } @Override - public void put(final int pos, final Phi object) { + public boolean put(final int pos, final Phi object) { try { - this.origin.put(pos, object); + return this.origin.put(pos, object); } catch (final ExFailure ex) { throw new EOerror.ExError( new Data.ToPhi(EOerror.message(ex)) @@ -96,9 +96,9 @@ public void put(final int pos, final Phi object) { } @Override - public void put(final String name, final Phi object) { + public boolean put(final String name, final Phi object) { try { - this.origin.put(name, object); + return this.origin.put(name, object); } catch (final ExFailure ex) { throw new EOerror.ExError( new Data.ToPhi(EOerror.message(ex)) diff --git a/eo-runtime/src/main/java/org/eolang/PhTracedLocator.java b/eo-runtime/src/main/java/org/eolang/PhTracedLocator.java index 2d9e87602a..99ef0fde43 100644 --- a/eo-runtime/src/main/java/org/eolang/PhTracedLocator.java +++ b/eo-runtime/src/main/java/org/eolang/PhTracedLocator.java @@ -105,13 +105,17 @@ public Phi take(final String name) { } @Override - public void put(final int pos, final Phi obj) { - this.object.put(pos, obj); + public boolean put(final int pos, final Phi obj) { + return new PhTracedLocator.TracingWhileGetting<>( + () -> this.object.put(pos, obj) + ).get(); } @Override - public void put(final String name, final Phi obj) { - this.object.put(name, obj); + public boolean put(final String name, final Phi obj) { + return new PhTracedLocator.TracingWhileGetting<>( + () -> this.object.put(name, obj) + ).get(); } @Override diff --git a/eo-runtime/src/main/java/org/eolang/Phi.java b/eo-runtime/src/main/java/org/eolang/Phi.java index 4e88577e5a..3f4df95cd5 100644 --- a/eo-runtime/src/main/java/org/eolang/Phi.java +++ b/eo-runtime/src/main/java/org/eolang/Phi.java @@ -81,14 +81,14 @@ public Phi take(final String name) { } @Override - public void put(final int pos, final Phi object) { + public boolean put(final int pos, final Phi object) { throw new IllegalStateException( String.format("Can't #put(%d, %s) to Φ", pos, object) ); } @Override - public void put(final String name, final Phi object) { + public boolean put(final String name, final Phi object) { throw new IllegalStateException( String.format("Can't #put(%s, %s) to Φ", name, object) ); @@ -134,15 +134,17 @@ public byte[] delta() { * Put object by position of the attribute. * @param pos The position of the attribute. * @param object The object to put + * @return Was attribute set */ - void put(int pos, Phi object); + boolean put(int pos, Phi object); /** * Put object by name of the attribute. * @param name The name of the attribute. * @param object The object to put + * @return Was attribute set */ - void put(String name, Phi object); + boolean put(String name, Phi object); /** * Get code locator of the phi. diff --git a/eo-runtime/src/test/eo/org/eolang/malloc-tests.eo b/eo-runtime/src/test/eo/org/eolang/malloc-tests.eo index dd11dc2315..761b06fd5c 100644 --- a/eo-runtime/src/test/eo/org/eolang/malloc-tests.eo +++ b/eo-runtime/src/test/eo/org/eolang/malloc-tests.eo @@ -72,6 +72,10 @@ [e] (QQ.io.stdout e > @) FALSE +# Test. +[] > malloc-pointer-uses-right-size + (malloc 10).pointer.size.eq 10 > @ + # Test. [] > malloc-pointer-cant-write-more-than-allocated (malloc 1).pointer > p diff --git a/eo-runtime/src/test/java/org/eolang/PhDefaultTest.java b/eo-runtime/src/test/java/org/eolang/PhDefaultTest.java index eecaf0423b..2dc937be14 100644 --- a/eo-runtime/src/test/java/org/eolang/PhDefaultTest.java +++ b/eo-runtime/src/test/java/org/eolang/PhDefaultTest.java @@ -114,7 +114,7 @@ void copiesKid() { } @Test - void takesDifferentKidsEveryDispatch() { + void takesDifferentAbstractKidsEveryDispatch() { final Phi phi = new PhDefaultTest.Int(); MatcherAssert.assertThat( "Child attributes should be copied on every dispatch", @@ -232,7 +232,7 @@ void copiesUnsetVoidAttribute() { } @Test - void copiesSetVoidAttribute() { + void copiesSetVoidAttributeOnCopy() { final Phi phi = new PhDefaultTest.Int(); phi.put("void", new Data.ToPhi(10L)); final Phi copy = phi.copy(); @@ -245,6 +245,25 @@ void copiesSetVoidAttribute() { ); } + @Test + void doesNotCopySetVoidAttributeWithRho() { + final Phi phi = new PhDefaultTest.Int(); + phi.put("void", new Data.ToPhi(10L)); + MatcherAssert.assertThat( + phi.take("void"), + Matchers.equalTo(phi.take("void")) + ); + } + + @Test + void doesNotCopyContextAttributeWithRho() { + final Phi phi = new PhDefaultTest.Int(); + MatcherAssert.assertThat( + phi.take("context"), + Matchers.equalTo(phi.take("context")) + ); + } + @Test void hasAccessToDependentOnContextAttribute() { final Phi phi = new PhDefaultTest.Int().copy(); From ef9809d128af0c1c5415c6a6085872449cda1737 Mon Sep 17 00:00:00 2001 From: maxonfjvipon Date: Tue, 9 Apr 2024 17:20:35 +0300 Subject: [PATCH 2/2] fix(#3060): doc --- eo-runtime/src/main/java/org/eolang/AtSetRho.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/eo-runtime/src/main/java/org/eolang/AtSetRho.java b/eo-runtime/src/main/java/org/eolang/AtSetRho.java index 2d97908ec1..86624e7ca8 100644 --- a/eo-runtime/src/main/java/org/eolang/AtSetRho.java +++ b/eo-runtime/src/main/java/org/eolang/AtSetRho.java @@ -25,8 +25,8 @@ package org.eolang; /** - * The attribute tries to set \rho to the given attribute. - * If the name of the attribute is {@link Attr#RHO} or {@link Attr#SIGMA} - just attribute is + * The attribute tries to copy object and set \rho to it. + * If the name of the attribute is {@link Attr#RHO} or {@link Attr#SIGMA} - just object is * returned. * * @since 0.36.0