LibreLogo: fix RANGE with a single function argument
in a FOR loop, by removing the range(x,,)-like double commas in this case, too, during program compilation. Previous empty (missing) argument of RANGE was checked by the terminating comma, but it can be a white space after it, as in the following example: FOR i IN RANGE COUNT 'letter' [ PRINT i ] Change-Id: I67d0a4f089be06f30003d1b979b8f1801dbfa2e9 Reviewed-on: https://gerrit.libreoffice.org/71263 Tested-by: Jenkins Reviewed-by: László Németh <nemeth@numbertext.org>
This commit is contained in:
@@ -1764,10 +1764,10 @@ def __l2p__(i, par, insub, inarray):
|
||||
for j in range(par["names"][subname]):
|
||||
# add commas, except if already added, eg. with special RANGE
|
||||
# (variable argument counts: RANGE 1 or RANGE 1 100 or RANGE 1 100 10)
|
||||
if j > 0 and par["out"][-1] != ",":
|
||||
par["out"] = re.sub("( *),$",",\\1", par["out"] + ",")
|
||||
if j > 0 and par["out"].rstrip()[-1] != ",":
|
||||
par["out"] = re.sub("( +),$",",\\1", par["out"] + ",")
|
||||
__l2p__(i, par, True, False)
|
||||
par["out"] = re.sub("( *)\\)$", ")\\1", par["out"] + ")")
|
||||
par["out"] = re.sub("( +)\\)$", ")\\1", par["out"] + ")")
|
||||
# operators
|
||||
elif pos in par["op"]:
|
||||
op = i[pos:par["op"][pos]]
|
||||
|
@@ -74,6 +74,7 @@ class LibreLogoCompileTest(UITestCase):
|
||||
("WHILE REPCOUNT < 10 [ ]", "REPCOUNT2 = 1\nwhile REPCOUNT2 < 10 :\n __checkhalt__()\n REPCOUNT = REPCOUNT2\n REPCOUNT2 += 1"),
|
||||
# for
|
||||
("FOR i in [1, 2, 3] [ ]", "REPCOUNT4 = 1\nfor i in [1, 2, 3] :\n __checkhalt__()\n REPCOUNT = REPCOUNT4\n REPCOUNT4 += 1"),
|
||||
("FOR i IN RANGE COUNT 'letters' [ ]", "REPCOUNT6 = 1\nfor i in range(len(u'letters'),) :\n __checkhalt__()\n REPCOUNT = REPCOUNT6\n REPCOUNT6 += 1"),
|
||||
# PROCEDURE
|
||||
("TO x\nLABEL 2\nEND", "global x\ndef x():\n __checkhalt__()\n %s\n label(2)\n %s" % (((self.LS),)*2)),
|
||||
# FUNCTION
|
||||
|
Reference in New Issue
Block a user