From 06d05b1506e7d74aa9ea5c6b4796499e3242f998 Mon Sep 17 00:00:00 2001 From: Dmitry Boulytchev Date: Wed, 31 Oct 2018 21:48:44 +0300 Subject: [PATCH] Added test for .string --- regression/orig/test045.log | 43 +++++++++++++++++++++++++++++++++++++ regression/test045.expr | 12 +++++++++++ regression/test045.input | 1 + runtime/runtime.c | 12 ++++++----- src/Language.ml | 4 ++-- 5 files changed, 65 insertions(+), 7 deletions(-) create mode 100644 regression/orig/test045.log create mode 100644 regression/test045.expr create mode 100644 regression/test045.input diff --git a/regression/orig/test045.log b/regression/orig/test045.log new file mode 100644 index 000000000..5a4da1720 --- /dev/null +++ b/regression/orig/test045.log @@ -0,0 +1,43 @@ +> 49 +34 +97 +98 +99 +34 +91 +93 +91 +49 +44 +32 +50 +44 +32 +51 +93 +96 +99 +111 +110 +115 +32 +40 +49 +44 +32 +96 +99 +111 +110 +115 +32 +40 +50 +44 +32 +96 +110 +105 +108 +41 +41 diff --git a/regression/test045.expr b/regression/test045.expr new file mode 100644 index 000000000..246780277 --- /dev/null +++ b/regression/test045.expr @@ -0,0 +1,12 @@ +fun printString (s) local i { + for i := 0, i < s.length, i := i + 1 do + write (s[i]) + od +} + +x := read (); +printString (1.string); +printString ("abc".string); +printString ([].string); +printString ([1, 2, 3].string); +printString (`cons (1, `cons (2, `nil)).string) \ No newline at end of file diff --git a/regression/test045.input b/regression/test045.input new file mode 100644 index 000000000..573541ac9 --- /dev/null +++ b/regression/test045.input @@ -0,0 +1 @@ +0 diff --git a/runtime/runtime.c b/runtime/runtime.c index c766c4465..c4677c97f 100644 --- a/runtime/runtime.c +++ b/runtime/runtime.c @@ -121,12 +121,14 @@ static void printValue (void *p) { case SEXP_TAG: printStringBuf ("`%s", de_hash (TO_SEXP(p)->tag)); - printStringBuf (" ("); - for (int i = 0; i < LEN(a->tag); i++) { - printValue ((void*)((int*) a->contents)[i]); - if (i != LEN(a->tag) - 1) printStringBuf (", "); + if (LEN(a->tag)) { + printStringBuf (" ("); + for (int i = 0; i < LEN(a->tag); i++) { + printValue ((void*)((int*) a->contents)[i]); + if (i != LEN(a->tag) - 1) printStringBuf (", "); + } + printStringBuf (")"); } - printStringBuf (")"); break; default: diff --git a/src/Language.ml b/src/Language.ml index a0547f7b6..b48a77cad 100644 --- a/src/Language.ml +++ b/src/Language.ml @@ -44,9 +44,9 @@ module Value = | Int n -> append (string_of_int n) | String s -> append "\""; append s; append "\"" | Array a -> let n = List.length a in - append "["; List.iteri (fun i a -> (if i < n-1 then append ", "); inner a) a; append "]" + append "["; List.iteri (fun i a -> (if i > 0 then append ", "); inner a) a; append "]" | Sexp (t, a) -> let n = List.length a in - append "`"; append t; append " ("; List.iteri (fun i a -> (if i < n-1 then append ", "); inner a) a; append ")" + append "`"; append t; (if n > 0 then (append " ("; List.iteri (fun i a -> (if i > 0 then append ", "); inner a) a; append ")")) in inner v; Buffer.contents buf