diff options
| author | bculkin2442 <bjculkin@mix.wvu.edu> | 2017-02-20 13:06:48 -0500 |
|---|---|---|
| committer | bculkin2442 <bjculkin@mix.wvu.edu> | 2017-02-20 13:06:48 -0500 |
| commit | 066f03d698601584e053b4f56350a04eec03d88f (patch) | |
| tree | b586722c622ccada6569c109958bbad74abe2bff /dice-lang/src/bjc/dicelang/v2/StreamEngine.java | |
| parent | e03b3f477bcc160b72af4ab09cd8d12081017d2c (diff) | |
Error & dice handling
Diffstat (limited to 'dice-lang/src/bjc/dicelang/v2/StreamEngine.java')
| -rw-r--r-- | dice-lang/src/bjc/dicelang/v2/StreamEngine.java | 40 |
1 files changed, 33 insertions, 7 deletions
diff --git a/dice-lang/src/bjc/dicelang/v2/StreamEngine.java b/dice-lang/src/bjc/dicelang/v2/StreamEngine.java index 39bbc0d..8755e19 100644 --- a/dice-lang/src/bjc/dicelang/v2/StreamEngine.java +++ b/dice-lang/src/bjc/dicelang/v2/StreamEngine.java @@ -2,9 +2,12 @@ package bjc.dicelang.v2; import bjc.utils.funcdata.FunctionalList; import bjc.utils.funcdata.IList; +import bjc.utils.funcutils.ListUtils; import bjc.utils.esodata.SingleTape; import bjc.utils.esodata.Tape; +import static bjc.dicelang.v2.Errors.ErrorKey.*; + public class StreamEngine { private DiceLangEngine eng; @@ -25,11 +28,24 @@ public class StreamEngine { public boolean doStreams(String[] toks, IList<String> dest) { init(); + boolean quoteMode = false; + for(String tk : toks) { - if(tk.startsWith("{@S")) { - if(!processCommand(tk)) return false; + if(tk.startsWith("{@S") && !quoteMode) { + if(tk.equals("{@SQ}")) { + quoteMode = true; + } else if(!processCommand(tk)) { + return false; + } + // Command ran correctly, continue } else { - currStream.add(tk); + if(tk.equals("{@SU}")) { + quoteMode = false; + } else if(tk.equals("\\{@SU}")) { + currStream.add("{@SU}"); + } else { + currStream.add(tk); + } } } @@ -57,7 +73,7 @@ public class StreamEngine { break; case '>': if(!streams.right()) { - System.out.println("\tERROR: Attempted to switch to non-existent stream"); + Errors.inst.printError(EK_STRM_NONEX); return false; } @@ -65,7 +81,7 @@ public class StreamEngine { break; case '<': if(!streams.left()) { - System.out.println("\tERROR: Attempted to switch to non-existent stream"); + Errors.inst.printError(EK_STRM_NONEX); return false; } @@ -73,15 +89,25 @@ public class StreamEngine { break; case '-': if(streams.size() == 1) { - System.out.println("\tERROR: Cannot delete last stream"); + Errors.inst.printError(EK_STRM_LAST); return false; } else { streams.remove(); currStream = streams.item(); } break; + case 'S': + if(streams.size() == 1) { + Errors.inst.printError(EK_STRM_LAST); + return false; + } else { + IList<String> stringLit = streams.remove(); + currStream = streams.item(); + currStream.add(ListUtils.collapseTokens(stringLit, " ")); + } + break; default: - System.out.println("\tERROR: Unknown stream control command: " + tk); + Errors.inst.printError(EK_STRM_INVCOM, tk); return false; } } |
