This is an automated email from the ASF dual-hosted git repository.

okram pushed a commit to branch tp4
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git

commit 32c5caefe24e470f811da1505a860d2b0d647a10
Author: Marko A. Rodriguez <okramma...@gmail.com>
AuthorDate: Thu Mar 7 06:25:02 2019 -0700

    trucking along. got as() and path() working. Really neat -- as() is a 
pop/push on the Bytecode. Just as specified in the TP4 article. as(), by(), and 
all other step-modulators  will pop/push the instruction stack.
---
 .../{machine/compiler => language}/Symbols.java    |  4 +++-
 .../org/apache/tinkerpop/language/Traversal.java   | 14 ++++++++++-
 .../tinkerpop/machine/bytecode/Bytecode.java       |  4 ++++
 .../tinkerpop/machine/bytecode/Instruction.java    | 13 ++++++++++-
 .../machine/compiler/BytecodeToFunction.java       | 21 +++++++++++------
 .../{GFunction.java => AbstractFunction.java}      | 26 ++++++++++++++++++---
 .../{FilterFunction.java => CFunction.java}        | 11 +++++----
 .../machine/functions/FilterFunction.java          |  2 +-
 .../machine/functions/FlatMapFunction.java         |  2 +-
 .../tinkerpop/machine/functions/IncrMap.java       | 10 ++++----
 .../machine/functions/InitialFunction.java         |  2 +-
 .../tinkerpop/machine/functions/InjectInitial.java |  7 +++---
 .../tinkerpop/machine/functions/IsFilter.java      |  8 ++++---
 .../tinkerpop/machine/functions/MapFunction.java   |  2 +-
 .../functions/{IncrMap.java => PathMap.java}       | 13 +++++++----
 .../Bytecode.java => traversers/Path.java}         | 27 ++++++++++++++--------
 .../tinkerpop/machine/traversers/Traverser.java    | 22 +++++++++++++++++-
 .../apache/tinkerpop/machine/TraversalTest.java    |  2 +-
 .../org/apache/tinkerpop/machine/pipes/Pipes.java  |  8 +++----
 .../org/apache/tinkerpop/machine/pipes/Step.java   |  8 +++----
 .../apache/tinkerpop/machine/pipes/PipesTest.java  |  1 +
 21 files changed, 151 insertions(+), 56 deletions(-)

diff --git 
a/java/core/src/main/java/org/apache/tinkerpop/machine/compiler/Symbols.java 
b/java/core/src/main/java/org/apache/tinkerpop/language/Symbols.java
similarity index 89%
rename from 
java/core/src/main/java/org/apache/tinkerpop/machine/compiler/Symbols.java
rename to java/core/src/main/java/org/apache/tinkerpop/language/Symbols.java
index 7de197f..fdaf642 100644
--- a/java/core/src/main/java/org/apache/tinkerpop/machine/compiler/Symbols.java
+++ b/java/core/src/main/java/org/apache/tinkerpop/language/Symbols.java
@@ -16,14 +16,16 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.tinkerpop.machine.compiler;
+package org.apache.tinkerpop.language;
 
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
  */
 public final class Symbols {
 
+    public static final String AS = "as";
     public static final String IS = "is";
     public static final String INCR = "incr";
     public static final String INJECT = "inject";
+    public static final String PATH = "path";
 }
diff --git 
a/java/core/src/main/java/org/apache/tinkerpop/language/Traversal.java 
b/java/core/src/main/java/org/apache/tinkerpop/language/Traversal.java
index 86d307a..f363342f 100644
--- a/java/core/src/main/java/org/apache/tinkerpop/language/Traversal.java
+++ b/java/core/src/main/java/org/apache/tinkerpop/language/Traversal.java
@@ -19,7 +19,8 @@
 package org.apache.tinkerpop.language;
 
 import org.apache.tinkerpop.machine.bytecode.Bytecode;
-import org.apache.tinkerpop.machine.compiler.Symbols;
+
+import java.util.Map;
 
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
@@ -34,6 +35,11 @@ public class Traversal<C, A, B> {
         this.bytecode = new Bytecode<>();
     }
 
+    public Traversal<C, A, B> as(final String label) {
+        this.bytecode.lastInstruction().addLabel(label);
+        return this;
+    }
+
     public Traversal<C, A, B> is(final B object) {
         this.bytecode.addInstruction(this.currentCoefficient, Symbols.IS, 
object);
         return this;
@@ -49,6 +55,12 @@ public class Traversal<C, A, B> {
         return (Traversal) this;
     }
 
+    public Traversal<C, A, Map<String, ?>> path() {
+        this.bytecode.addInstruction(this.currentCoefficient, Symbols.PATH);
+        return (Traversal) this;
+    }
+
+
     public Bytecode<C> getBytecode() {
         return this.bytecode;
     }
diff --git 
a/java/core/src/main/java/org/apache/tinkerpop/machine/bytecode/Bytecode.java 
b/java/core/src/main/java/org/apache/tinkerpop/machine/bytecode/Bytecode.java
index f58f719..e1ef154 100644
--- 
a/java/core/src/main/java/org/apache/tinkerpop/machine/bytecode/Bytecode.java
+++ 
b/java/core/src/main/java/org/apache/tinkerpop/machine/bytecode/Bytecode.java
@@ -40,6 +40,10 @@ public class Bytecode<C> {
         return this.instructions;
     }
 
+    public Instruction<C> lastInstruction() {
+        return this.instructions.get(this.instructions.size() - 1);
+    }
+
     @Override
     public String toString() {
         return this.instructions.toString();
diff --git 
a/java/core/src/main/java/org/apache/tinkerpop/machine/bytecode/Instruction.java
 
b/java/core/src/main/java/org/apache/tinkerpop/machine/bytecode/Instruction.java
index 1361104..88323c2 100644
--- 
a/java/core/src/main/java/org/apache/tinkerpop/machine/bytecode/Instruction.java
+++ 
b/java/core/src/main/java/org/apache/tinkerpop/machine/bytecode/Instruction.java
@@ -19,6 +19,8 @@
 package org.apache.tinkerpop.machine.bytecode;
 
 import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Set;
 
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
@@ -28,6 +30,7 @@ public final class Instruction<C> {
     private final C coefficient;
     private final String op;
     private final Object[] args;
+    private final Set<String> labels = new HashSet<>();
 
     public Instruction(final C coefficient, final String op, final Object... 
args) {
         this.coefficient = coefficient;
@@ -47,8 +50,16 @@ public final class Instruction<C> {
         return this.args;
     }
 
+    public Set<String> labels() {
+        return this.labels;
+    }
+
+    public void addLabel(final String label) {
+        this.labels.add(label);
+    }
+
     @Override
     public String toString() {
-        return "[" + this.coefficient + "]" + this.op + ":" + 
Arrays.toString(this.args).replace("[", "").replace("]", "");
+        return "[" + this.coefficient + "]" + this.op + ":" + 
Arrays.toString(this.args).replace("[", "").replace("]", "" + "@" + 
this.labels);
     }
 }
diff --git 
a/java/core/src/main/java/org/apache/tinkerpop/machine/compiler/BytecodeToFunction.java
 
b/java/core/src/main/java/org/apache/tinkerpop/machine/compiler/BytecodeToFunction.java
index cd328f8..f63b6a5 100644
--- 
a/java/core/src/main/java/org/apache/tinkerpop/machine/compiler/BytecodeToFunction.java
+++ 
b/java/core/src/main/java/org/apache/tinkerpop/machine/compiler/BytecodeToFunction.java
@@ -18,38 +18,45 @@
  */
 package org.apache.tinkerpop.machine.compiler;
 
+import org.apache.tinkerpop.language.Symbols;
 import org.apache.tinkerpop.machine.bytecode.Bytecode;
 import org.apache.tinkerpop.machine.bytecode.Instruction;
-import org.apache.tinkerpop.machine.functions.GFunction;
+import org.apache.tinkerpop.machine.functions.CFunction;
 import org.apache.tinkerpop.machine.functions.IncrMap;
 import org.apache.tinkerpop.machine.functions.InjectInitial;
 import org.apache.tinkerpop.machine.functions.IsFilter;
+import org.apache.tinkerpop.machine.functions.PathMap;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Set;
 
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
  */
 public final class BytecodeToFunction {
 
-    public static <C> List<GFunction<C>> compile(final Bytecode<C> bytecode) 
throws Exception {
-        final List<GFunction<C>> functions = new ArrayList<>();
+    public static <C> List<CFunction<C>> compile(final Bytecode<C> bytecode) 
throws Exception {
+        final List<CFunction<C>> functions = new ArrayList<>();
         for (final Instruction<C> instruction : bytecode.getInstructions()) {
             functions.add(BytecodeToFunction.generateFunction(instruction));
         }
         return functions;
     }
 
-    private static <C> GFunction<C> generateFunction(final Instruction<C> 
instruction) throws Exception {
+    private static <C> CFunction<C> generateFunction(final Instruction<C> 
instruction) throws Exception {
         final String op = instruction.op();
+        final C coefficient = instruction.coefficient();
+        final Set<String> labels = instruction.labels();
         switch (op) {
             case Symbols.INJECT:
-                return new InjectInitial<>(instruction.coefficient(), 
instruction.args());
+                return new InjectInitial<>(coefficient, labels, 
instruction.args());
             case Symbols.IS:
-                return new IsFilter<>(instruction.coefficient(), 
instruction.args()[0]);
+                return new IsFilter<>(coefficient, labels, 
instruction.args()[0]);
             case Symbols.INCR:
-                return new IncrMap<C>(instruction.coefficient());
+                return new IncrMap<>(coefficient, labels);
+            case Symbols.PATH:
+                return new PathMap<>(coefficient, labels);
             default:
                 throw new Exception("This is an unknown instruction:" + 
instruction.op());
         }
diff --git 
a/java/core/src/main/java/org/apache/tinkerpop/machine/functions/GFunction.java 
b/java/core/src/main/java/org/apache/tinkerpop/machine/functions/AbstractFunction.java
similarity index 65%
rename from 
java/core/src/main/java/org/apache/tinkerpop/machine/functions/GFunction.java
rename to 
java/core/src/main/java/org/apache/tinkerpop/machine/functions/AbstractFunction.java
index 082b679..c918139 100644
--- 
a/java/core/src/main/java/org/apache/tinkerpop/machine/functions/GFunction.java
+++ 
b/java/core/src/main/java/org/apache/tinkerpop/machine/functions/AbstractFunction.java
@@ -18,23 +18,43 @@
  */
 package org.apache.tinkerpop.machine.functions;
 
+import org.apache.tinkerpop.machine.traversers.Traverser;
+
+import java.util.Set;
+
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
  */
-public class GFunction<C> {
+abstract class AbstractFunction<C> implements CFunction<C> {
 
     protected final C coefficient;
+    private Set<String> labels;
 
-    public GFunction(final C coefficient) {
+    public AbstractFunction(final C coefficient, final Set<String> labels) {
         this.coefficient = coefficient;
+        this.labels = labels;
     }
 
+    @Override
     public C coefficient() {
         return this.coefficient;
     }
 
     @Override
+    public Set<String> labels() {
+        return this.labels;
+    }
+
+    protected <A> Traverser<C, A> postProcess(final Traverser<C, A> traverser) 
{
+        for (final String label : labels) {
+            traverser.addLabel(label);
+        }
+        return traverser;
+    }
+
+
+    @Override
     public String toString() {
-        return "[" + this.coefficient + "]" + this.getClass().getSimpleName();
+        return "[" + this.coefficient + "]" + this.getClass().getSimpleName() 
+ "@" + this.labels;
     }
 }
diff --git 
a/java/core/src/main/java/org/apache/tinkerpop/machine/functions/FilterFunction.java
 b/java/core/src/main/java/org/apache/tinkerpop/machine/functions/CFunction.java
similarity index 84%
copy from 
java/core/src/main/java/org/apache/tinkerpop/machine/functions/FilterFunction.java
copy to 
java/core/src/main/java/org/apache/tinkerpop/machine/functions/CFunction.java
index 2835783..2c5cc18 100644
--- 
a/java/core/src/main/java/org/apache/tinkerpop/machine/functions/FilterFunction.java
+++ 
b/java/core/src/main/java/org/apache/tinkerpop/machine/functions/CFunction.java
@@ -18,12 +18,15 @@
  */
 package org.apache.tinkerpop.machine.functions;
 
-import org.apache.tinkerpop.machine.traversers.Traverser;
-
-import java.util.function.Predicate;
+import java.util.Set;
 
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
  */
-public interface FilterFunction<C, A> extends Predicate<Traverser<C, A>> {
+public interface CFunction<C> {
+
+    public C coefficient();
+
+    public Set<String> labels();
+
 }
diff --git 
a/java/core/src/main/java/org/apache/tinkerpop/machine/functions/FilterFunction.java
 
b/java/core/src/main/java/org/apache/tinkerpop/machine/functions/FilterFunction.java
index 2835783..64622d9 100644
--- 
a/java/core/src/main/java/org/apache/tinkerpop/machine/functions/FilterFunction.java
+++ 
b/java/core/src/main/java/org/apache/tinkerpop/machine/functions/FilterFunction.java
@@ -25,5 +25,5 @@ import java.util.function.Predicate;
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
  */
-public interface FilterFunction<C, A> extends Predicate<Traverser<C, A>> {
+public interface FilterFunction<C, A> extends Predicate<Traverser<C, A>>, 
CFunction<C> {
 }
diff --git 
a/java/core/src/main/java/org/apache/tinkerpop/machine/functions/FlatMapFunction.java
 
b/java/core/src/main/java/org/apache/tinkerpop/machine/functions/FlatMapFunction.java
index 6d4db90..8f5933b 100644
--- 
a/java/core/src/main/java/org/apache/tinkerpop/machine/functions/FlatMapFunction.java
+++ 
b/java/core/src/main/java/org/apache/tinkerpop/machine/functions/FlatMapFunction.java
@@ -26,5 +26,5 @@ import java.util.function.Function;
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
  */
-public interface FlatMapFunction<C, A, B> extends Function<Traverser<C, A>, 
Iterator<Traverser<C, B>>> {
+public interface FlatMapFunction<C, A, B> extends Function<Traverser<C, A>, 
Iterator<Traverser<C, B>>>, CFunction<C> {
 }
diff --git 
a/java/core/src/main/java/org/apache/tinkerpop/machine/functions/IncrMap.java 
b/java/core/src/main/java/org/apache/tinkerpop/machine/functions/IncrMap.java
index 2e5fa06..7200bef 100644
--- 
a/java/core/src/main/java/org/apache/tinkerpop/machine/functions/IncrMap.java
+++ 
b/java/core/src/main/java/org/apache/tinkerpop/machine/functions/IncrMap.java
@@ -20,17 +20,19 @@ package org.apache.tinkerpop.machine.functions;
 
 import org.apache.tinkerpop.machine.traversers.Traverser;
 
+import java.util.Set;
+
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
  */
-public class IncrMap<C> extends GFunction<C> implements MapFunction<C, Long, 
Long> {
+public class IncrMap<C> extends AbstractFunction<C> implements MapFunction<C, 
Long, Long> {
 
-    public IncrMap(final C coefficient) {
-        super(coefficient);
+    public IncrMap(final C coefficient, final Set<String> labels) {
+        super(coefficient, labels);
     }
 
     @Override
     public Traverser<C, Long> apply(final Traverser<C, Long> traverser) {
-        return traverser.split(traverser.coefficient(), traverser.object() + 
1);
+        return postProcess(traverser.split(traverser.coefficient(), 
traverser.object() + 1));
     }
 }
diff --git 
a/java/core/src/main/java/org/apache/tinkerpop/machine/functions/InitialFunction.java
 
b/java/core/src/main/java/org/apache/tinkerpop/machine/functions/InitialFunction.java
index c30c46d..f4430ce 100644
--- 
a/java/core/src/main/java/org/apache/tinkerpop/machine/functions/InitialFunction.java
+++ 
b/java/core/src/main/java/org/apache/tinkerpop/machine/functions/InitialFunction.java
@@ -26,5 +26,5 @@ import java.util.function.Supplier;
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
  */
-public interface InitialFunction<C,A> extends 
Supplier<Iterator<Traverser<C,A>>> {
+public interface InitialFunction<C,A> extends 
Supplier<Iterator<Traverser<C,A>>>, CFunction<C> {
 }
diff --git 
a/java/core/src/main/java/org/apache/tinkerpop/machine/functions/InjectInitial.java
 
b/java/core/src/main/java/org/apache/tinkerpop/machine/functions/InjectInitial.java
index 4a5a8bd..9da6d2b 100644
--- 
a/java/core/src/main/java/org/apache/tinkerpop/machine/functions/InjectInitial.java
+++ 
b/java/core/src/main/java/org/apache/tinkerpop/machine/functions/InjectInitial.java
@@ -23,16 +23,17 @@ import org.apache.tinkerpop.machine.traversers.Traverser;
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Set;
 
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
  */
-public class InjectInitial<C, A> extends GFunction<C> implements 
InitialFunction<C, A> {
+public class InjectInitial<C, A> extends AbstractFunction<C> implements 
InitialFunction<C, A> {
 
     private final List<Traverser<C, A>> traversers;
 
-    public InjectInitial(final C coefficient, final A... objects) {
-        super(coefficient);
+    public InjectInitial(final C coefficient, final Set<String> labels, final 
A... objects) {
+        super(coefficient, labels);
         this.traversers = new ArrayList<>();
         for (final A object : objects) {
             this.traversers.add(new Traverser<>(this.coefficient, object));
diff --git 
a/java/core/src/main/java/org/apache/tinkerpop/machine/functions/IsFilter.java 
b/java/core/src/main/java/org/apache/tinkerpop/machine/functions/IsFilter.java
index 892ed0c..8c5d35a 100644
--- 
a/java/core/src/main/java/org/apache/tinkerpop/machine/functions/IsFilter.java
+++ 
b/java/core/src/main/java/org/apache/tinkerpop/machine/functions/IsFilter.java
@@ -20,15 +20,17 @@ package org.apache.tinkerpop.machine.functions;
 
 import org.apache.tinkerpop.machine.traversers.Traverser;
 
+import java.util.Set;
+
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
  */
-public class IsFilter<C, A> extends GFunction<C> implements FilterFunction<C, 
A> {
+public class IsFilter<C, A> extends AbstractFunction<C> implements 
FilterFunction<C, A> {
 
     private final A object;
 
-    public IsFilter(final C coefficient, final A object) {
-        super(coefficient);
+    public IsFilter(final C coefficient, final Set<String> labels, final A 
object) {
+        super(coefficient, labels);
         this.object = object;
     }
 
diff --git 
a/java/core/src/main/java/org/apache/tinkerpop/machine/functions/MapFunction.java
 
b/java/core/src/main/java/org/apache/tinkerpop/machine/functions/MapFunction.java
index e443772..55fb230 100644
--- 
a/java/core/src/main/java/org/apache/tinkerpop/machine/functions/MapFunction.java
+++ 
b/java/core/src/main/java/org/apache/tinkerpop/machine/functions/MapFunction.java
@@ -25,6 +25,6 @@ import java.util.function.Function;
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
  */
-public interface MapFunction<C, A, B> extends Function<Traverser<C, A>, 
Traverser<C, B>> {
+public interface MapFunction<C, A, B> extends Function<Traverser<C, A>, 
Traverser<C, B>>, CFunction<C> {
 
 }
diff --git 
a/java/core/src/main/java/org/apache/tinkerpop/machine/functions/IncrMap.java 
b/java/core/src/main/java/org/apache/tinkerpop/machine/functions/PathMap.java
similarity index 71%
copy from 
java/core/src/main/java/org/apache/tinkerpop/machine/functions/IncrMap.java
copy to 
java/core/src/main/java/org/apache/tinkerpop/machine/functions/PathMap.java
index 2e5fa06..c76a838 100644
--- 
a/java/core/src/main/java/org/apache/tinkerpop/machine/functions/IncrMap.java
+++ 
b/java/core/src/main/java/org/apache/tinkerpop/machine/functions/PathMap.java
@@ -18,19 +18,22 @@
  */
 package org.apache.tinkerpop.machine.functions;
 
+import org.apache.tinkerpop.machine.traversers.Path;
 import org.apache.tinkerpop.machine.traversers.Traverser;
 
+import java.util.Set;
+
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
  */
-public class IncrMap<C> extends GFunction<C> implements MapFunction<C, Long, 
Long> {
+public class PathMap<C, A> extends AbstractFunction<C> implements 
MapFunction<C, A, Path> {
 
-    public IncrMap(final C coefficient) {
-        super(coefficient);
+    public PathMap(final C coefficient, final Set<String> labels) {
+        super(coefficient, labels);
     }
 
     @Override
-    public Traverser<C, Long> apply(final Traverser<C, Long> traverser) {
-        return traverser.split(traverser.coefficient(), traverser.object() + 
1);
+    public Traverser<C, Path> apply(final Traverser<C, A> traverser) {
+        return traverser.split(this.coefficient, traverser.path());
     }
 }
diff --git 
a/java/core/src/main/java/org/apache/tinkerpop/machine/bytecode/Bytecode.java 
b/java/core/src/main/java/org/apache/tinkerpop/machine/traversers/Path.java
similarity index 59%
copy from 
java/core/src/main/java/org/apache/tinkerpop/machine/bytecode/Bytecode.java
copy to 
java/core/src/main/java/org/apache/tinkerpop/machine/traversers/Path.java
index f58f719..d318971 100644
--- 
a/java/core/src/main/java/org/apache/tinkerpop/machine/bytecode/Bytecode.java
+++ b/java/core/src/main/java/org/apache/tinkerpop/machine/traversers/Path.java
@@ -16,32 +16,39 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.tinkerpop.machine.bytecode;
+package org.apache.tinkerpop.machine.traversers;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Set;
 
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
  */
-public class Bytecode<C> {
+public class Path {
 
-    public List<Instruction<C>> instructions;
+    private final List<Object> objects = new ArrayList<>();
+    private final List<Set<String>> labels = new ArrayList<>();
 
-    public Bytecode() {
-        this.instructions = new ArrayList<>();
+    public Path() {
     }
 
-    public void addInstruction(final C coefficient, final String op, final 
Object... args) {
-        this.instructions.add(new Instruction<>(coefficient, op, args));
+    public Path(final Path path) {
+        path.objects.forEach(o -> objects.add(o));
+        path.labels.forEach(l -> labels.add(l));
     }
 
-    public List<Instruction<C>> getInstructions() {
-        return this.instructions;
+    public void add(final Set<String> labels, final Object object) {
+        this.labels.add(labels);
+        this.objects.add(object);
+    }
+
+    public void addLabels(final Set<String> labels) {
+        this.labels.get(this.labels.size() - 1).addAll(labels);
     }
 
     @Override
     public String toString() {
-        return this.instructions.toString();
+        return this.objects.toString();
     }
 }
diff --git 
a/java/core/src/main/java/org/apache/tinkerpop/machine/traversers/Traverser.java
 
b/java/core/src/main/java/org/apache/tinkerpop/machine/traversers/Traverser.java
index 2c8a1ae..6bd2ea1 100644
--- 
a/java/core/src/main/java/org/apache/tinkerpop/machine/traversers/Traverser.java
+++ 
b/java/core/src/main/java/org/apache/tinkerpop/machine/traversers/Traverser.java
@@ -18,6 +18,9 @@
  */
 package org.apache.tinkerpop.machine.traversers;
 
+import java.util.Collections;
+import java.util.HashSet;
+
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
  */
@@ -25,6 +28,7 @@ public class Traverser<C, A> {
 
     private final C coefficient;
     private final A object;
+    private Path path = new Path();
 
     public Traverser(final C coefficient, final A object) {
         this.coefficient = coefficient;
@@ -39,12 +43,28 @@ public class Traverser<C, A> {
         return this.object;
     }
 
+    public Path path() {
+        return this.path;
+    }
+
+    public void addLabel(final String label) {
+        this.path.addLabels(Collections.singleton(label));
+    }
+
     public <B> Traverser<C, B> split(final C coefficient, final B object) {
-        return new Traverser<>(coefficient, object);
+        final Traverser<C, B> traverser = new Traverser<>(coefficient, object);
+        traverser.path = new Path(this.path);
+        traverser.path.add(new HashSet<>(), object);
+        return traverser;
     }
 
     @Override
     public boolean equals(final Object other) {
         return other instanceof Traverser && ((Traverser<C, A>) 
other).object.equals(this.object);
     }
+
+    @Override
+    public String toString() {
+        return this.object.toString();
+    }
 }
diff --git 
a/java/core/src/test/java/org/apache/tinkerpop/machine/TraversalTest.java 
b/java/core/src/test/java/org/apache/tinkerpop/machine/TraversalTest.java
index 41f5504..592c1e7 100644
--- a/java/core/src/test/java/org/apache/tinkerpop/machine/TraversalTest.java
+++ b/java/core/src/test/java/org/apache/tinkerpop/machine/TraversalTest.java
@@ -34,7 +34,7 @@ public class TraversalTest {
     public void shouldHaveBytecode() throws Exception {
         TraversalSource<Long> g = Gremlin.traversal();
         g = g.coefficients(LongCoefficients.instance());
-        final Traversal<Long, Long, Long> traversal = 
g.inject(7L).is(7L).incr().incr();
+        final Traversal<Long, Long, Long> traversal = 
g.inject(7L).is(7L).incr().as("a").incr();
         System.out.println(traversal.getBytecode());
         
System.out.println(BytecodeToFunction.compile(traversal.getBytecode()));
     }
diff --git 
a/java/machine/pipes/src/main/java/org/apache/tinkerpop/machine/pipes/Pipes.java
 
b/java/machine/pipes/src/main/java/org/apache/tinkerpop/machine/pipes/Pipes.java
index c370260..6ecfbf4 100644
--- 
a/java/machine/pipes/src/main/java/org/apache/tinkerpop/machine/pipes/Pipes.java
+++ 
b/java/machine/pipes/src/main/java/org/apache/tinkerpop/machine/pipes/Pipes.java
@@ -20,7 +20,7 @@ package org.apache.tinkerpop.machine.pipes;
 
 import org.apache.tinkerpop.machine.bytecode.Bytecode;
 import org.apache.tinkerpop.machine.compiler.BytecodeToFunction;
-import org.apache.tinkerpop.machine.functions.GFunction;
+import org.apache.tinkerpop.machine.functions.CFunction;
 
 import java.util.ArrayList;
 import java.util.Iterator;
@@ -34,10 +34,10 @@ public class Pipes<C, S, E> implements Iterator<E> {
     private final List<Step<?, ?, ?>> steps = new ArrayList<>();
 
     public Pipes(final Bytecode<C> bytecode) throws Exception {
-        final List<GFunction<C>> functions = 
BytecodeToFunction.compile(bytecode);
+        final List<CFunction<C>> functions = 
BytecodeToFunction.compile(bytecode);
         Step previousStep = null;
-        for (final GFunction<?> function : functions) {
-            previousStep = new Step(previousStep, function);
+        for (final CFunction<?> function : functions) {
+            previousStep = new Step<>(previousStep, function);
             this.steps.add(previousStep);
         }
     }
diff --git 
a/java/machine/pipes/src/main/java/org/apache/tinkerpop/machine/pipes/Step.java 
b/java/machine/pipes/src/main/java/org/apache/tinkerpop/machine/pipes/Step.java
index f2085a7..b82ca3c 100644
--- 
a/java/machine/pipes/src/main/java/org/apache/tinkerpop/machine/pipes/Step.java
+++ 
b/java/machine/pipes/src/main/java/org/apache/tinkerpop/machine/pipes/Step.java
@@ -18,11 +18,11 @@
  */
 package org.apache.tinkerpop.machine.pipes;
 
-import org.apache.tinkerpop.machine.traversers.Traverser;
+import org.apache.tinkerpop.machine.functions.CFunction;
 import org.apache.tinkerpop.machine.functions.FilterFunction;
-import org.apache.tinkerpop.machine.functions.GFunction;
 import org.apache.tinkerpop.machine.functions.InitialFunction;
 import org.apache.tinkerpop.machine.functions.MapFunction;
+import org.apache.tinkerpop.machine.traversers.Traverser;
 import org.apache.tinkerpop.machine.util.FastNoSuchElementException;
 
 import java.util.Iterator;
@@ -32,11 +32,11 @@ import java.util.Iterator;
  */
 public class Step<C, S, E> implements Iterator<Traverser<?, E>> {
 
-    private final GFunction<C> function;
+    private final CFunction<C> function;
     private final Step previousStep;
     private Iterator<Traverser<C, E>> currentIterator = null;
 
-    public Step(final Step previousStep, final GFunction<C> function) {
+    public Step(final Step previousStep, final CFunction<C> function) {
         this.previousStep = previousStep;
         this.function = function;
         if (this.function instanceof InitialFunction) {
diff --git 
a/java/machine/pipes/src/test/java/org/apache/tinkerpop/machine/pipes/PipesTest.java
 
b/java/machine/pipes/src/test/java/org/apache/tinkerpop/machine/pipes/PipesTest.java
index 1b7e020..ceb3fb8 100644
--- 
a/java/machine/pipes/src/test/java/org/apache/tinkerpop/machine/pipes/PipesTest.java
+++ 
b/java/machine/pipes/src/test/java/org/apache/tinkerpop/machine/pipes/PipesTest.java
@@ -37,5 +37,6 @@ public class PipesTest {
         System.out.println(pipes.hasNext());
         System.out.println(pipes.toList());
         System.out.println(pipes.hasNext());
+        System.out.println(new Pipes<>(g.inject(7L, 10L, 
12L).incr().as("a").incr().incr().path().getBytecode()).toList());
     }
 }

Reply via email to