Browse Source

Add swapping functions to Stack class

Added the SwapTwo and SwapThree functions
ApisNecros 1 year ago
parent
commit
cd28d6a923
1 changed files with 19 additions and 4 deletions
  1. 19 4
      starfish.js

+ 19 - 4
starfish.js

@@ -280,9 +280,9 @@ class CodeBox {
             case "$":
             case "$":
                 this.stack.SwapTwo();
                 this.stack.SwapTwo();
                 break;
                 break;
-            // case "@":
-            //     this.stack.SwapThree();
-            //     break;
+            case "@":
+                this.stack.SwapThree();
+                break;
             case "{":
             case "{":
                 this.stack.ShiftLeft();
                 this.stack.ShiftLeft();
                 break;
                 break;
@@ -577,7 +577,22 @@ class Stack {
      * Swaps the top two values of the stack
      * Swaps the top two values of the stack
      */
      */
     SwapTwo() {
     SwapTwo() {
-        // TODO
+        if(this.stack.length < 2) { throw new Error("Something's Fishy"); }
+        const popped = this.stack.splice(this.stack.length - 2, 2);
+        this.stack.push(...popped.reverse());
+    }
+    /**
+     * Implement @
+     * 
+     * Swaps the top three values of the stack
+     */
+    SwapThree() {
+        if(this.stack.length < 3) { throw new Error("Something's Fishy"); }
+        // Get the top three values
+        const popped = this.stack.splice(this.stack.length - 3, 3);
+        // Shift the elements to the right
+        popped.unshift(popped.pop());
+        this.stack.push(...popped);
     }
     }
 
 
     /**
     /**