Ok but how does the parser knows whether the input is multiexpression or an error?
I mean it stops parsing in the middle of the string which seems really weird to me.

Peter

On Sun, Jul 5, 2015 at 3:28 PM, Sven Van Caekenberghe <sven@stfx.eu> wrote:
Hi Peter,

> On 05 Jul 2015, at 14:36, Peter Uhn��k <i.uhnak@gmail.com> wrote:
>
> How come this passes?
>
> STON fromString: '{
>�� �� �� ��"a": "b"
> }wtf",
>�� �� �� ��"x": "y"
> '.
>
> The result is dictionary "a" -> "b".
>
> I would expect for it to die on parse error.
>
> Peter

The reason this does not fail is because (1) STON is a stream parser that accepts possibly multiple top-level expression from one stream (2) your input is basically valid and complete until the closing curly brace.

You could enforce the fact that the whole input should be consumed yourself.

| input reader result |
input := '{
�� �� �� �� "a": "b"
}wtf",
�� �� �� �� "x": "y"
' readStream.
reader := STON reader on: input.
result := reader next.
reader consumeWhitespace.
self assert: reader atEnd.
result

Sven