diff options
author | Adrian Kummerlaender | 2017-04-15 14:02:50 +0200 |
---|---|---|
committer | Adrian Kummerlaender | 2017-04-15 14:02:50 +0200 |
commit | 47611c4938363346be414b1cf00a63b438e043c4 (patch) | |
tree | a08a727821c074d513a95e192ad3b43fcdfa4405 /source/app.d | |
parent | 5ca4d7acb5545050a731b0adc2e39b3ed65b7fc9 (diff) | |
download | slang-47611c4938363346be414b1cf00a63b438e043c4.tar slang-47611c4938363346be414b1cf00a63b438e043c4.tar.gz slang-47611c4938363346be414b1cf00a63b438e043c4.tar.bz2 slang-47611c4938363346be414b1cf00a63b438e043c4.tar.lz slang-47611c4938363346be414b1cf00a63b438e043c4.tar.xz slang-47611c4938363346be414b1cf00a63b438e043c4.tar.zst slang-47611c4938363346be414b1cf00a63b438e043c4.zip |
Perform custom word definition at the same level as conditional primitives
Diffstat (limited to 'source/app.d')
-rw-r--r-- | source/app.d | 21 |
1 files changed, 9 insertions, 12 deletions
diff --git a/source/app.d b/source/app.d index 7d25f7f..0f17afc 100644 --- a/source/app.d +++ b/source/app.d @@ -9,7 +9,7 @@ import base.stack; import definition = base.definition; import primitives = primitives.eval; -Stack!Token resolve(Token token) { +Stack!Token evaluate(Token token) { try { if ( primitives.evaluate(token) ) { return primitives.result; @@ -31,17 +31,14 @@ void process(string value) { auto buffer = make!(Stack!Token)(toToken(value)); do { - Token current = buffer.pop; - - if ( !definition.handle(current) ) { - Stack!Token resolved = resolve(current); - - if ( !resolved.empty ) { - if ( resolved.front == current ) { - stack.push(current); - } else { - buffer.insertFront(resolved[]); - } + Token current = buffer.pop; + Stack!Token result = evaluate(current); + + if ( !result.empty ) { + if ( result.front == current ) { + stack.push(current); + } else { + buffer.insertFront(result[]); } } } |