<div dir="ltr"><span style="font-size:12.8px">> "Single-character strings can also be assigned to variables of type CHAR."</span><br><div><span style="font-size:12.8px"><br></span></div><div><span style="font-size:12.8px">Yes, I thought about that, but only after I had sent the message. A single character string can be returned, as it may be interpreted as a character literal. Oberon 2 isn't different to other versions of Oberon in this sense.</span></div><div><br></div><div>From the syntax point of view, single-character string literals and character literals look the same in Oberon. One and the same expression "A" can be interpreted in two different ways by the compiler.</div><div><br></div><div><div>(* "A" is interpreted as ARRAY OF CHAR *)</div><div>VAR s: ARRAY 10 OF CHAR;</div><div>BEGIN COPY("A", s)   (* or s := "A" in Oberon-07 *)</div></div><div><div><br></div><div>(* "A" is interpreted as CHAR *)</div><div>VAR ch: CHAR;</div><div>BEGIN ch := "A"</div><div><br></div></div><div>This is not a problem, as the compiler handles this with a simple IF statement (something like "IF (char expected) & (type = string) & (length = 1) THEN type := char END"). This may be more tricky in case of constants:</div><div>CONST x = "A";</div><div>There is nothing about this in the language report; however, Oberon compilers handle these situations very well.</div><div><br></div><div><span style="font-size:12.8px">Arthur Efimov</span></div></div>