diff --git a/eo-maven-plugin/src/test/java/org/eolang/maven/OptimizeMojoTest.java b/eo-maven-plugin/src/test/java/org/eolang/maven/OptimizeMojoTest.java index b7a88ef47f..91149c83b9 100644 --- a/eo-maven-plugin/src/test/java/org/eolang/maven/OptimizeMojoTest.java +++ b/eo-maven-plugin/src/test/java/org/eolang/maven/OptimizeMojoTest.java @@ -279,7 +279,7 @@ void stopsOnCritical(@TempDir final Path temp) throws IOException { .result() .get( String.format( - "target/%s/foo/x/main/28-duplicate-names.xml", + "target/%s/foo/x/main/27-duplicate-names.xml", OptimizeMojo.STEPS ) ) diff --git a/eo-maven-plugin/src/test/resources/org/eolang/maven/packs/pre/converts-to-java-with-arrays-and-scopes.yaml b/eo-maven-plugin/src/test/resources/org/eolang/maven/packs/pre/converts-to-java-with-arrays-and-scopes.yaml index 94bc94f2f8..e3600ffb9e 100644 --- a/eo-maven-plugin/src/test/resources/org/eolang/maven/packs/pre/converts-to-java-with-arrays-and-scopes.yaml +++ b/eo-maven-plugin/src/test/resources/org/eolang/maven/packs/pre/converts-to-java-with-arrays-and-scopes.yaml @@ -1,8 +1,7 @@ # Current test shows optimization and transpilation chain for simple program. # The aim of this test is to check that entire pipeline with -# synthetic-referenses.xsl transformation works as expected without creating -# any warnings or errors. -# Pay attention to scopes.xsl and to-java.xsl transformations. +# scoped objects works as expected without creating any warnings or errors. +# Pay attention and to-java.xsl transformations. xsls: - /org/eolang/parser/errors/not-empty-atoms.xsl - /org/eolang/parser/critical-errors/duplicate-names.xsl @@ -25,7 +24,6 @@ xsls: - /org/eolang/parser/warnings/incorrect-version.xsl - /org/eolang/parser/expand-aliases.xsl - /org/eolang/parser/resolve-aliases.xsl - - /org/eolang/parser/scopes.xsl - /org/eolang/parser/add-default-package.xsl - /org/eolang/parser/errors/broken-refs.xsl - /org/eolang/parser/errors/unknown-names.xsl diff --git a/eo-maven-plugin/src/test/resources/org/eolang/maven/packs/pre/synthetic-attributes-with-to-java.yaml b/eo-maven-plugin/src/test/resources/org/eolang/maven/packs/pre/synthetic-attributes-with-to-java.yaml index 8afd08ed04..ca4a81b20a 100644 --- a/eo-maven-plugin/src/test/resources/org/eolang/maven/packs/pre/synthetic-attributes-with-to-java.yaml +++ b/eo-maven-plugin/src/test/resources/org/eolang/maven/packs/pre/synthetic-attributes-with-to-java.yaml @@ -1,8 +1,7 @@ # Current test shows optimization and transpilation chain for simple program. # The aim of this test is to check that entire pipeline with -# synthetic-referenses.xsl transformation works as expected without creating -# any warnings or errors. -# Pay attention to scopes.xsl and to-java.xsl transformations. +# scoped objects works as expected without creating any warnings or errors. +# Pay attention to to-java.xsl transformations. xsls: - /org/eolang/parser/errors/not-empty-atoms.xsl - /org/eolang/parser/critical-errors/duplicate-names.xsl @@ -25,7 +24,6 @@ xsls: - /org/eolang/parser/warnings/incorrect-version.xsl - /org/eolang/parser/expand-aliases.xsl - /org/eolang/parser/resolve-aliases.xsl - - /org/eolang/parser/scopes.xsl - /org/eolang/parser/add-default-package.xsl - /org/eolang/parser/errors/broken-refs.xsl - /org/eolang/parser/errors/unknown-names.xsl diff --git a/eo-maven-plugin/src/test/resources/org/eolang/maven/packs/pre/tuple-to-java.yaml b/eo-maven-plugin/src/test/resources/org/eolang/maven/packs/pre/tuple-to-java.yaml index a484c83b5f..70bdcb9c62 100644 --- a/eo-maven-plugin/src/test/resources/org/eolang/maven/packs/pre/tuple-to-java.yaml +++ b/eo-maven-plugin/src/test/resources/org/eolang/maven/packs/pre/tuple-to-java.yaml @@ -6,7 +6,8 @@ xsls: - /org/eolang/maven/pre/to-java.xsl tests: - /program/errors[count(*)=0] - - //java[contains(text(), 'Phi ret_a2_a1 = new EOorg.EOeolang.EOint(')] + - //java[contains(text(), 'Phi ret_a0 = new EOorg.EOeolang.EOint(')] + - //java[contains(text(), 'Phi ret_a1 = new EOorg.EOeolang.EOint(')] - //java[contains(text(), 'Phi[] ret_2_a = new Phi[0]')] - //java[contains(text(), 'new String(new byte[]')] eo: | diff --git a/eo-parser/src/main/antlr4/org/eolang/parser/Program.g4 b/eo-parser/src/main/antlr4/org/eolang/parser/Program.g4 index e81b51464a..4f8fbfa6b8 100644 --- a/eo-parser/src/main/antlr4/org/eolang/parser/Program.g4 +++ b/eo-parser/src/main/antlr4/org/eolang/parser/Program.g4 @@ -114,7 +114,6 @@ happlicationExtended happlicationHead : hmethod | applicable - | scope ; // Extended head of horizontal application @@ -123,7 +122,6 @@ happlicationHeadExtended : vmethod | hmethodExtended | applicable - | scopeExtended ; // Simple statements that can be used as head of application diff --git a/eo-parser/src/main/java/org/eolang/parser/Objects.java b/eo-parser/src/main/java/org/eolang/parser/Objects.java index 3e2e54eb26..f3ae36e427 100644 --- a/eo-parser/src/main/java/org/eolang/parser/Objects.java +++ b/eo-parser/src/main/java/org/eolang/parser/Objects.java @@ -23,10 +23,7 @@ */ package org.eolang.parser; -import java.util.Deque; import java.util.Iterator; -import java.util.LinkedList; -import java.util.UUID; import org.xembly.Directive; import org.xembly.Directives; @@ -40,55 +37,51 @@ interface Objects extends Iterable { * Start new object. * @param line At line. * @param pos At position. + * @return Self. */ - void start(int line, int pos); + Objects start(int line, int pos); /** * Add data. * @param data Data. + * @return Self. */ - void data(String data); + Objects data(String data); /** * Property. * @param key Key. * @param value Value. + * @return Self. */ - void prop(String key, Object value); + Objects prop(String key, Object value); /** * Empty propery. * @param key Key. + * @return Self. */ - void prop(String key); + Objects prop(String key); /** * Change property by given xpath. * @param key Key. * @param xpath Xpath. + * @return Self. */ - void xprop(String key, Object xpath); + Objects xprop(String key, Object xpath); /** * Enter last object. + * @return Self. */ - void enter(); + Objects enter(); /** * Leave current object. + * @return Self. */ - void leave(); - - /** - * Mark the next object for scoping. - */ - void scope(); - - /** - * Mark the current object as last inside the scope. - * Last object that relates to the scope. - */ - void closeScope(); + Objects leave(); /** * Xembly object tree. @@ -101,64 +94,45 @@ final class ObjXembly implements Objects { */ private final Directives dirs = new Directives(); - /** - * Generated aliases. - */ - private final Deque scopes = new LinkedList<>(); - @Override - public void start(final int line, final int pos) { + public Objects start(final int line, final int pos) { this.dirs.add("o"); - this.prop("line", line); - this.prop("pos", pos); - if (!this.scopes.isEmpty()) { - this.prop("scope", String.join("-", this.scopes)); - } + return this.prop("line", line).prop("pos", pos); } @Override - public void data(final String data) { + public Objects data(final String data) { this.dirs.set(data); + return this; } @Override - public void prop(final String key, final Object type) { + public Objects prop(final String key, final Object type) { this.dirs.attr(key, type); + return this; } @Override - public void prop(final String key) { - this.prop(key, ""); + public Objects prop(final String key) { + return this.prop(key, ""); } @Override - public void xprop(final String key, final Object xpath) { + public Objects xprop(final String key, final Object xpath) { this.dirs.xattr(key, xpath); + return this; } @Override - public void enter() { + public Objects enter() { this.dirs.xpath("o[last()]").strict(1); + return this; } @Override - public void leave() { + public Objects leave() { this.dirs.up(); - } - - @Override - public void scope() { - this.scopes.push( - String.format( - "scope-%s", - UUID.randomUUID() - ) - ); - } - - @Override - public void closeScope() { - this.scopes.remove(); + return this; } @Override diff --git a/eo-parser/src/main/java/org/eolang/parser/ParsingTrain.java b/eo-parser/src/main/java/org/eolang/parser/ParsingTrain.java index 9870bfe8a9..6f45119dac 100644 --- a/eo-parser/src/main/java/org/eolang/parser/ParsingTrain.java +++ b/eo-parser/src/main/java/org/eolang/parser/ParsingTrain.java @@ -77,7 +77,6 @@ public final class ParsingTrain extends TrEnvelope { "/org/eolang/parser/warnings/incorrect-version.xsl", "/org/eolang/parser/expand-aliases.xsl", "/org/eolang/parser/resolve-aliases.xsl", - "/org/eolang/parser/scopes.xsl", "/org/eolang/parser/add-refs.xsl", "/org/eolang/parser/add-default-package.xsl", "/org/eolang/parser/errors/broken-refs.xsl", diff --git a/eo-parser/src/main/java/org/eolang/parser/XeListener.java b/eo-parser/src/main/java/org/eolang/parser/XeListener.java index 3c946335a9..0c1a5696f6 100644 --- a/eo-parser/src/main/java/org/eolang/parser/XeListener.java +++ b/eo-parser/src/main/java/org/eolang/parser/XeListener.java @@ -221,9 +221,7 @@ public void exitAtom(final ProgramParser.AtomContext ctx) { @Override public void enterAbstraction(final ProgramParser.AbstractionContext ctx) { - this.startObject(ctx); - this.objects.prop("abstract"); - this.objects.leave(); + this.startObject(ctx).prop("abstract").leave(); } @Override @@ -253,8 +251,7 @@ public void exitAttributes(final ProgramParser.AttributesContext ctx) { @Override public void enterAttribute(final ProgramParser.AttributeContext ctx) { - this.startObject(ctx); - this.objects.prop("name", ctx.NAME().getText()); + this.startObject(ctx).prop("name", ctx.NAME().getText()); } @Override @@ -274,9 +271,9 @@ public void exitType(final ProgramParser.TypeContext ctx) { @Override public void enterVararg(final ProgramParser.VarargContext ctx) { - this.startObject(ctx); - this.objects.prop("vararg"); - this.objects.prop("name", ctx.NAME().getText()); + this.startObject(ctx) + .prop("vararg") + .prop("name", ctx.NAME().getText()); } @Override @@ -387,9 +384,7 @@ public void enterHapplicationArg(final ProgramParser.HapplicationArgContext ctx) @Override public void exitHapplicationArg(final ProgramParser.HapplicationArgContext ctx) { if (ctx.DOTS() != null) { - this.objects.enter(); - this.objects.prop("unvar"); - this.objects.leave(); + this.objects.enter().prop("unvar").leave(); } } @@ -419,9 +414,7 @@ public void exitHapplicationArgExtended( final ProgramParser.HapplicationArgExtendedContext ctx ) { if (ctx.DOTS() != null) { - this.objects.enter(); - this.objects.prop("unvar"); - this.objects.leave(); + this.objects.enter().prop("unvar").leave(); } } @@ -477,9 +470,7 @@ public void exitVapplicationArgSpreadable( final ProgramParser.VapplicationArgSpreadableContext ctx ) { if (ctx.DOTS() != null) { - this.objects.enter(); - this.objects.prop("unvar"); - this.objects.leave(); + this.objects.enter().prop("unvar").leave(); } } @@ -525,9 +516,7 @@ public void exitVapplicationHeadAs(final ProgramParser.VapplicationHeadAsContext @Override public void enterVapplicationArgVanonym(final ProgramParser.VapplicationArgVanonymContext ctx) { - this.startObject(ctx); - this.objects.prop("abstract"); - this.objects.leave(); + this.startObject(ctx).prop("abstract").leave(); } @Override @@ -547,9 +536,7 @@ public void exitVapplicationArgHanonym(final ProgramParser.VapplicationArgHanony @Override public void enterHanonym(final ProgramParser.HanonymContext ctx) { - this.startObject(ctx); - this.objects.prop("abstract"); - this.objects.leave(); + this.startObject(ctx).prop("abstract").leave(); } @Override @@ -579,9 +566,7 @@ public void exitAbstractees(final ProgramParser.AbstracteesContext ctx) { @Override public void enterInnerabstract(final ProgramParser.InnerabstractContext ctx) { - this.startObject(ctx); - this.objects.prop("abstract"); - this.objects.leave(); + this.startObject(ctx).prop("abstract").leave(); } @Override @@ -750,18 +735,19 @@ public void enterMethodTail(final ProgramParser.MethodTailContext ctx) { @Override public void exitMethodTail(final ProgramParser.MethodTailContext ctx) { - this.objects.enter(); - this.objects.prop("method"); - this.objects.xprop("base", "concat('.',@base)"); - this.objects.xprop("pos", "@pos - 1"); - this.objects.leave(); + this.objects + .enter() + .prop("method") + .xprop("base", "concat('.',@base)") + .xprop("pos", "@pos - 1") + .leave(); } @Override public void enterMethodTailVersioned(final ProgramParser.MethodTailVersionedContext ctx) { - this.startObject(ctx); - this.objects.prop("base", String.format(".%s", ctx.NAME().getText())); - this.objects.prop("method"); + this.startObject(ctx) + .prop("base", String.format(".%s", ctx.NAME().getText())) + .prop("method"); } @Override @@ -862,17 +848,14 @@ public void enterFinisherCopied(final ProgramParser.FinisherCopiedContext ctx) { @Override public void exitFinisherCopied(final ProgramParser.FinisherCopiedContext ctx) { - this.objects.enter(); if (ctx.COPY() != null) { - this.objects.prop("copy"); + this.objects.enter().prop("copy").leave(); } - this.objects.leave(); } @Override public void enterVersioned(final ProgramParser.VersionedContext ctx) { - this.startObject(ctx); - this.objects.prop("base", ctx.NAME().getText()); + this.startObject(ctx).prop("base", ctx.NAME().getText()); } @Override @@ -887,9 +870,7 @@ public void enterReversed(final ProgramParser.ReversedContext ctx) { @Override public void exitReversed(final ProgramParser.ReversedContext ctx) { - this.objects.enter(); - this.objects.xprop("base", "concat('.',@base)"); - this.objects.leave(); + this.objects.enter().xprop("base", "concat('.',@base)").leave(); } @Override @@ -900,9 +881,7 @@ public void enterOname(final ProgramParser.OnameContext ctx) { @Override public void exitOname(final ProgramParser.OnameContext ctx) { if (ctx.CONST() != null) { - this.objects.enter(); - this.objects.prop("const"); - this.objects.leave(); + this.objects.enter().prop("const").leave(); } } @@ -924,22 +903,22 @@ public void exitSuffix(final ProgramParser.SuffixContext ctx) { @Override public void enterScope(final ProgramParser.ScopeContext ctx) { - this.objects.scope(); + // Nothing here } @Override public void exitScope(final ProgramParser.ScopeContext ctx) { - this.objects.closeScope(); + // Nothing here } @Override public void enterScopeExtended(final ProgramParser.ScopeExtendedContext ctx) { - this.objects.scope(); + // Nothing here } @Override public void exitScopeExtended(final ProgramParser.ScopeExtendedContext ctx) { - this.objects.closeScope(); + // Nothing here } @Override @@ -1088,9 +1067,10 @@ public Iterator iterator() { * Start object. * * @param ctx Context. + * @return Started object. */ - private void startObject(final ParserRuleContext ctx) { - this.objects.start( + private Objects startObject(final ParserRuleContext ctx) { + return this.objects.start( ctx.getStart().getLine(), ctx.getStart().getCharPositionInLine() ); diff --git a/eo-parser/src/main/resources/org/eolang/parser/scopes.xsl b/eo-parser/src/main/resources/org/eolang/parser/scopes.xsl deleted file mode 100644 index f344e58421..0000000000 --- a/eo-parser/src/main/resources/org/eolang/parser/scopes.xsl +++ /dev/null @@ -1,71 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - org.eolang. - - - - - - - org.eolang. - - - - @ - - - - - - - - - - - - - - - - - diff --git a/eo-parser/src/test/resources/org/eolang/parser/packs/full-syntax.yaml b/eo-parser/src/test/resources/org/eolang/parser/packs/full-syntax.yaml index e14e941d0b..4646042972 100644 --- a/eo-parser/src/test/resources/org/eolang/parser/packs/full-syntax.yaml +++ b/eo-parser/src/test/resources/org/eolang/parser/packs/full-syntax.yaml @@ -41,7 +41,7 @@ eo: | f 12 false - (((t' 22) r:t 8.54 "yes".< "\t").print 88 0x1f):hey + ((t' r:t 8.54 "yes".< "\t").print 88 0x1f):hey TRUE.< false > a! [] diff --git a/eo-parser/src/test/resources/org/eolang/parser/packs/optimize/redundant-levels-with-arrays.yaml b/eo-parser/src/test/resources/org/eolang/parser/packs/optimize/redundant-levels-with-arrays.yaml index 6504269285..2a75a5abdc 100644 --- a/eo-parser/src/test/resources/org/eolang/parser/packs/optimize/redundant-levels-with-arrays.yaml +++ b/eo-parser/src/test/resources/org/eolang/parser/packs/optimize/redundant-levels-with-arrays.yaml @@ -1,66 +1,42 @@ xsls: - /org/eolang/parser/wrap-method-calls.xsl - - /org/eolang/parser/scopes.xsl - /org/eolang/parser/optimize/abstracts-float-up.xsl - /org/eolang/parser/optimize/remove-levels.xsl tests: - /program/errors[count(*)=0] # 'main' object - //o[@name='main'] + - //o[@name='main' and count(o)=2] - //o[@name='main']/o[@base='tuple' and @name='arr' and count(o)=2]/o[@base='int'] - //o[@name='main']/o[@base='tuple' and @name='arr' and count(o)=2]/o[not(@base='int')] - //o[@name='main']/o[@base='eq' and @name='@' and count(o)=2] - - //o[@name='main']/o[@base='eq' and @name='@' and count(o)=2]/o[@base='tuple']/o/o[@base='arr'] - - //o[@name='main']/o[@base='eq' and @name='@' and count(o)=2]/o[@base='tuple']/o[@base='int'] - # The first generated object: 'constant-array' from the example below - - //o[@abstract and count(o)=2 and @name] - - //o[@abstract and count(o)=2 and @name]/o[@base='tuple' and count(o)=2] - - //o[@abstract and count(o)=2 and @name]/o[@base='tuple' and count(o)=2]/o[@base='int' and contains(text(), '1')] - - //o[@abstract and count(o)=2 and @name]/o[@base='tuple' and count(o)=2]/o[@base='int' and contains(text(), '2')] - - //o[@abstract and count(o)=2 and @name]/o[@name='@'] - # The second generated object: 'second' from the example below - - //o[@abstract and count(o)=3 and @name] - - //o[@abstract and count(o)=3 and @name]/o[@base='.at' and count(o)=2] - - //o[@abstract and count(o)=3 and @name]/o[@base='.at' and count(o)=2]/o/o[@base='arr'] - - //o[@abstract and count(o)=3 and @name]/o[@base='.at' and count(o)=2]/o[@base='int' and contains(text(), '1')] - - //o[@abstract and count(o)=3 and @name]/o[@name='@'] - # The third generated object: 'first' from the example below - - //o[@abstract and count(o)=3 and @name] - - //o[@abstract and count(o)=3 and @name]/o[@base='.at' and count(o)=2] - - //o[@abstract and count(o)=3 and @name]/o[@base='.at' and count(o)=2]/o[@base='arr'] - - //o[@abstract and count(o)=3 and @name]/o[@base='.at' and count(o)=2]/o[@base='int' and contains(text(), '1')] - - //o[@abstract and count(o)=3 and @name]/o[@name='@'] + - //o[@name='main']/o[@base='eq' and @name='@' and count(o)=2]/o[@base='tuple' and count(o)=1]/o[@base='int'] + # The first tuple - argument of arr from the example below + - //o[@base='tuple' and count(o)=2] + - //o[@base='tuple' and count(o)=2]/o[@base='int' and contains(text(), '1')] + - //o[@base='tuple' and count(o)=2]/o[@base='int' and contains(text(), '2')] + # The second tuple - first argument of eq from the example below + - //o[@base='tuple' and count(o)=1]/o[@base='.at' and count(o)=2]/o[@base='int' and contains(text(), '1')] + - //o[@base='tuple' and count(o)=1]/o[@base='.at' and count(o)=2]/o[@base='.at' and count(o)=2]/o[@base='arr'] + # The third tuple - second argument of eq from the example below + - //o[@base='tuple' and count(o)=1]/o[@base='int' and contains(text(), '2')] # Currently the test converts the code from the snippet to: # ____ # [] > main # tuple > arr # 0 -# constant-array +# tuple +# 1 +# 2 # eq > @ # tuple -# second -# arr +# .at +# .at +# arr +# 1 +# 1 # tuple # 2 -# -# [] > constant-array -# tuple > local-element -# 1 -# 2 -# local-element > @ -# -# [arr] > second -# .at > local-element -# first -# arr -# 1 -# local-element > @ -# -# [arr] > first -# .at > local-element -# arr -# 1 -# local-element > @ # ____ eo: | [] > main diff --git a/eo-parser/src/test/resources/org/eolang/parser/packs/scopes-simple.yaml b/eo-parser/src/test/resources/org/eolang/parser/packs/scope-before-method.yaml similarity index 69% rename from eo-parser/src/test/resources/org/eolang/parser/packs/scopes-simple.yaml rename to eo-parser/src/test/resources/org/eolang/parser/packs/scope-before-method.yaml index 339e3f8bc1..9e51224f64 100644 --- a/eo-parser/src/test/resources/org/eolang/parser/packs/scopes-simple.yaml +++ b/eo-parser/src/test/resources/org/eolang/parser/packs/scope-before-method.yaml @@ -1,5 +1,4 @@ -xsls: - - /org/eolang/parser/scopes.xsl +xsls: [] tests: - //o[@base='foo' and count(o)=1] eo: | @@ -8,5 +7,5 @@ eo: | [y] > @ 42 > @ eq. > @ - (foo 1) 2 + (foo 1).@ 2 42 \ No newline at end of file diff --git a/eo-parser/src/test/resources/org/eolang/parser/packs/scopes-double-scope.yaml b/eo-parser/src/test/resources/org/eolang/parser/packs/scopes-double-scope.yaml index 5373d3a139..35ef00f09f 100644 --- a/eo-parser/src/test/resources/org/eolang/parser/packs/scopes-double-scope.yaml +++ b/eo-parser/src/test/resources/org/eolang/parser/packs/scopes-double-scope.yaml @@ -1,5 +1,4 @@ -xsls: - - /org/eolang/parser/scopes.xsl +xsls: [] tests: - //o[@base='foo' and count(o)=2] - //o[@base='bar' and count(o)=2] diff --git a/eo-parser/src/test/resources/org/eolang/parser/packs/scopes-many-arguments.yaml b/eo-parser/src/test/resources/org/eolang/parser/packs/scopes-many-arguments.yaml deleted file mode 100644 index 4f8a362981..0000000000 --- a/eo-parser/src/test/resources/org/eolang/parser/packs/scopes-many-arguments.yaml +++ /dev/null @@ -1,12 +0,0 @@ -xsls: - - /org/eolang/parser/scopes.xsl -tests: - - //o[@base='foo' and count(o)=3] -eo: | - [] > aliases - [x y z] > foo - [k] > @ - 42 > @ - eq. > @ - (foo 1 2 3) 4 - 42 \ No newline at end of file diff --git a/eo-parser/src/test/resources/org/eolang/parser/packs/scopes-nested.yaml b/eo-parser/src/test/resources/org/eolang/parser/packs/scopes-nested.yaml index 1c7a3f90e8..e80f6bf36b 100644 --- a/eo-parser/src/test/resources/org/eolang/parser/packs/scopes-nested.yaml +++ b/eo-parser/src/test/resources/org/eolang/parser/packs/scopes-nested.yaml @@ -1,9 +1,8 @@ -xsls: - - /org/eolang/parser/scopes.xsl +xsls: [] tests: - //o[@base='foo' and count(o)=2] - //o[@base='bar' and count(o)=2] - - //o[@base='foobar' and count(o)=2] + - //o[@base='foobar' and count(o)=2 and o[@base='foo' and count(o)=2]] eo: | [] > aliases [x y] > foo diff --git a/eo-parser/src/test/resources/org/eolang/parser/packs/scopes-with-add-refs.yaml b/eo-parser/src/test/resources/org/eolang/parser/packs/scopes-with-add-refs.yaml deleted file mode 100644 index 18a4daa330..0000000000 --- a/eo-parser/src/test/resources/org/eolang/parser/packs/scopes-with-add-refs.yaml +++ /dev/null @@ -1,61 +0,0 @@ -# Current test shows optimization chain for simple program. -# The aim of this test is to check that all synthetic attributes are added -# correctly and further optimization chain works as expected without creating -# any warnings or errors. -# Pay attention to scopes.xsl and add-refs.xsl transformations. -xsls: - - /org/eolang/parser/errors/not-empty-atoms.xsl - - /org/eolang/parser/critical-errors/duplicate-names.xsl - - /org/eolang/parser/errors/many-free-attributes.xsl - - /org/eolang/parser/errors/broken-aliases.xsl - - /org/eolang/parser/errors/duplicate-aliases.xsl - - /org/eolang/parser/errors/global-nonames.xsl - - /org/eolang/parser/errors/same-line-names.xsl - - /org/eolang/parser/errors/self-naming.xsl - - /org/eolang/parser/cti/cti-adds-errors.xsl - - /org/eolang/parser/add-refs.xsl - - /org/eolang/parser/wrap-method-calls.xsl - - /org/eolang/parser/expand-qqs.xsl - - /org/eolang/parser/add-probes.xsl - - /org/eolang/parser/vars-float-up.xsl - - /org/eolang/parser/add-refs.xsl - - /org/eolang/parser/warnings/unsorted-metas.xsl - - /org/eolang/parser/warnings/incorrect-architect.xsl - - /org/eolang/parser/warnings/incorrect-home.xsl - - /org/eolang/parser/warnings/incorrect-version.xsl - - /org/eolang/parser/expand-aliases.xsl - - /org/eolang/parser/resolve-aliases.xsl - - /org/eolang/parser/scopes.xsl - - /org/eolang/parser/add-default-package.xsl - - /org/eolang/parser/errors/broken-refs.xsl - - /org/eolang/parser/errors/unknown-names.xsl - - /org/eolang/parser/errors/noname-attributes.xsl - - /org/eolang/parser/critical-errors/duplicate-names.xsl - - /org/eolang/parser/warnings/duplicate-metas.xsl - - /org/eolang/parser/warnings/mandatory-package-meta.xsl - - /org/eolang/parser/warnings/mandatory-home-meta.xsl - - /org/eolang/parser/warnings/mandatory-version-meta.xsl - - /org/eolang/parser/warnings/correct-package-meta.xsl - - /org/eolang/parser/errors/unused-aliases.xsl - - /org/eolang/parser/errors/data-objects.xsl - - /org/eolang/parser/warnings/unit-test-without-phi.xsl - - /org/eolang/parser/set-locators.xsl - - /org/eolang/parser/optimize/globals-to-abstracts.xsl - - /org/eolang/parser/optimize/remove-refs.xsl - - /org/eolang/parser/optimize/abstracts-float-up.xsl - - /org/eolang/parser/optimize/remove-levels.xsl - - /org/eolang/parser/add-refs.xsl -tests: - - /program/errors[count(*)=0] -eo: | - +architect volodya.lombrozo@gmail.com - +home https://github.com/objectionary/eo - +tests - +package org.eolang - +version 0.0.0 - - [] > method - * 1 (* "one" "two") 3 > res - eq > @ - * (res.length) ((res.at 1).at 1) - * 3 "two" \ No newline at end of file diff --git a/eo-parser/src/test/resources/org/eolang/parser/packs/scopes-with-doubled-methods.yaml b/eo-parser/src/test/resources/org/eolang/parser/packs/scopes-with-doubled-methods.yaml index 05498997b5..2d5ed08312 100644 --- a/eo-parser/src/test/resources/org/eolang/parser/packs/scopes-with-doubled-methods.yaml +++ b/eo-parser/src/test/resources/org/eolang/parser/packs/scopes-with-doubled-methods.yaml @@ -1,8 +1,7 @@ xsls: - /org/eolang/parser/wrap-method-calls.xsl - - /org/eolang/parser/scopes.xsl tests: - - //o[@base='.foo' and count(o[@abstract]/o[@base='.bar'])=2] + - //o[@base='.foo' and count(o)=2] - //o[@base='.bar' and count(o)=2] eo: | [] > aliases diff --git a/eo-parser/src/test/resources/org/eolang/parser/packs/scopes-with-nested-methods.yaml b/eo-parser/src/test/resources/org/eolang/parser/packs/scopes-with-nested-methods.yaml index 1884302af5..a88dd33eeb 100644 --- a/eo-parser/src/test/resources/org/eolang/parser/packs/scopes-with-nested-methods.yaml +++ b/eo-parser/src/test/resources/org/eolang/parser/packs/scopes-with-nested-methods.yaml @@ -1,11 +1,9 @@ xsls: - /org/eolang/parser/wrap-method-calls.xsl - - /org/eolang/parser/scopes.xsl tests: - - //o[@base='.with']/o[@abstract]/o[@base='.with']/o[@abstract]/o[@base='.with']/o[@base='foobar'] - - //o[@base='.with']/o[@abstract]/o[@base='.with']/o[@abstract]/o[@base='.with' and count(o)=3] - - //o[@base='.with']/o[@abstract]/o[@base='.with' and count(o)=2] - - //o[@base='.with' and count(o)=2] + - //o[@base='.with' and count(o)=3]/o[@base='foobar'] + - //o[@base='.with' and count(o)=2]/o[@base='.with' and count(o)=3]/o[@base='foobar'] + - //o[@base='.with' and count(o)=2]/o[@base='.with' and count(o)=2]/o[@base='.with' and count(o)=3]/o[@base='foobar'] eo: | [] > aliases [] > foo @@ -19,4 +17,4 @@ eo: | bar > @ eq. > @ ((foobar.with 1 2).with 3).with 4 - 42 \ No newline at end of file + 42 diff --git a/eo-parser/src/test/resources/org/eolang/parser/packs/scopes-without-scope.yaml b/eo-parser/src/test/resources/org/eolang/parser/packs/scopes-without-scope.yaml deleted file mode 100644 index d11d159e31..0000000000 --- a/eo-parser/src/test/resources/org/eolang/parser/packs/scopes-without-scope.yaml +++ /dev/null @@ -1,12 +0,0 @@ -xsls: - - /org/eolang/parser/scopes.xsl -tests: - - //o[@base='foo' and count(o)=2] -eo: | - [] > aliases - [x y] > foo - [z] > @ - 42 > @ - eq. > @ - foo 1 2 - 42 \ No newline at end of file diff --git a/eo-parser/src/test/resources/org/eolang/parser/packs/scopes.yaml b/eo-parser/src/test/resources/org/eolang/parser/packs/scopes.yaml index 4dbde0e1fd..8ff3d7364c 100644 --- a/eo-parser/src/test/resources/org/eolang/parser/packs/scopes.yaml +++ b/eo-parser/src/test/resources/org/eolang/parser/packs/scopes.yaml @@ -1,6 +1,6 @@ xsls: [] tests: - - //objects[count(.//o[@scope])=3] + - //o[@abstract and count(o)=1] eo: | [] > aliases a (b (c d)) \ No newline at end of file diff --git a/eo-runtime/src/test/eo/org/eolang/runtime-tests.eo b/eo-runtime/src/test/eo/org/eolang/runtime-tests.eo index 2f045869c6..ff72bcd7d5 100644 --- a/eo-runtime/src/test/eo/org/eolang/runtime-tests.eo +++ b/eo-runtime/src/test/eo/org/eolang/runtime-tests.eo @@ -478,3 +478,11 @@ 2 build 2 > @ $.equal-to 9 + +[] > application-to-abstract-inside-tuple + [x] > add + x.plus 1 > @ + * add > arr + assert-that > @ + (arr.at 0).@ 5 + $.equal-to 6