aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJulien Dessaux2021-10-08 23:11:06 +0200
committerJulien Dessaux2021-10-08 23:11:06 +0200
commit4863af23b5280354293524191cba82f09403b741 (patch)
treecfd510775bc16cbe011aa42ec789008a16e284b1
parentCosmetics (diff)
downloadnimfunge98-4863af23b5280354293524191cba82f09403b741.tar.gz
nimfunge98-4863af23b5280354293524191cba82f09403b741.tar.bz2
nimfunge98-4863af23b5280354293524191cba82f09403b741.zip
Fixed failing mycology tests
-rw-r--r--README.md2
-rw-r--r--src/defaultIO.nim5
-rw-r--r--src/pointer.nim9
3 files changed, 11 insertions, 5 deletions
diff --git a/README.md b/README.md
index f0c07e4..7918f60 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,6 @@
# NimFunge98 : a Funge-98 interpreter written in nim
-This repository contains code for a nim program that can interpret a valid [Funge-98](https://github.com/catseye/Funge-98/blob/master/doc/funge98.markdown) program. It will soon pass the [mycology test suite](https://github.com/Deewiant/Mycology).
+This repository contains code for a nim program that can interpret a valid [Funge-98](https://github.com/catseye/Funge-98/blob/master/doc/funge98.markdown) program. It passes the [mycology test suite](https://github.com/Deewiant/Mycology).
Current limitations are :
- currently does not implement any fingerprints
diff --git a/src/defaultIO.nim b/src/defaultIO.nim
index ccf4476..1c3e2ca 100644
--- a/src/defaultIO.nim
+++ b/src/defaultIO.nim
@@ -34,7 +34,10 @@ proc defaultDecimalInput*(): int =
return result
proc defaultCharacterOutput*(v: int) =
- discard stdout.writeChars(@[v.char()], 0, 1)
+ try:
+ discard stdout.writeChars(@[v.char()], 0, 1)
+ except RangeDefect:
+ discard stdout.writeBuffer(unsafeAddr v, 4)
proc defaultDecimalOutput*(v: int) =
stdout.write(&"{v} ")
diff --git a/src/pointer.nim b/src/pointer.nim
index 91fb8be..219fa12 100644
--- a/src/pointer.nim
+++ b/src/pointer.nim
@@ -217,13 +217,16 @@ proc Eval(p: var Pointer, f: var Field, c: int): (bool, ref int) =
of "SHELL": discard
else: continue
p.ss[].Push(0)
- for i in value.len-1..0:
+ for i in countdown(value.len-1, 0):
p.ss[].Push(int(value[i]))
+ p.ss[].Push(int('='))
+ for i in countdown(key.len-1, 0):
+ p.ss[].Push(int(key[i]))
# 19
p.ss[].PushVector((0, 0))
for i in 0..<p.argv.len:
p.ss[].Push(0)
- for j in p.argv[i].len-1..0:
+ for j in countdown(p.argv[i].len-1, 0):
p.ss[].Push(int(p.argv[i][j]))
# 18
for i in 0..<height:
@@ -233,7 +236,7 @@ proc Eval(p: var Pointer, f: var Field, c: int): (bool, ref int) =
# 16
p.ss[].Push(now.hour * 256 * 256 + now.minute * 256 + now.second)
# 15
- p.ss[].Push(now.year * 256 * 256 + int(now.month) * 256 + int(now.monthday))
+ p.ss[].Push((now.year - 1900) * 256 * 256 + int(now.month) * 256 + int(now.monthday))
# 14
p.ss[].PushVector((lx-1, ly-1))
# 13