if x1 = 3 (or any positive number) the correct result (9) is printed.
If x1 = -3 I get no result in the output (nothing is printed on the screen) and no message is shown.
I've tried to define x1 and x2 as integer, with the same problem.
I'm using 1.17.3 version with ZX Basic Studio, but I also tried with Visual Studio Code and Fuse (same result).
I'm doing something wrong or it's a bug?
Thanks
After doing some more changes to my project, zxbc started to complain about "Can't convert non-numeric value to string at compile time", check it out:
Code:
reveni.bas:46: error: Can't convert non-numeric value to string at compile time
reveni.bas:44: error: Can't convert non-numeric value to string at compile time
The second error is signaling a line that... is empty! The first error refers to the following source:
Code:
clrscr()
I think this means that the compiler gets somehow confused about something. I'm attaching the project.
Thanks,
-- Baltasar
$ python ~/bin/zxbasic/zxbc.py --tap --BASIC --autorun reveni.bas
/home/baltasarq/bin/zxbasic/src/lib/arch/zx48k/stdlib/keys.bas:50: warning: [W150] Parameter 'scancode' is never used
/home/baltasarq/bin/zxbasic/src/lib/arch/zx48k/stdlib/print64.bas:20: warning: [W150] Parameter 'characters' is never used
cmd.bas:41: warning: [W150] Parameter 'cmd' is never used
io.bas:222: warning: [W100] Using default implicit type 'float' for 'current_loc'
/home/baltasarq/bin/zxbasic/src/lib/arch/zx48k/stdlib/keys.bas:51: warning: [W190] Function 'MultiKeys' should return a value
/home/baltasarq/bin/zxbasic/src/lib/arch/zx48k/stdlib/keys.bas:72: warning: [W190] Function 'GetKeyScanCode' should return a value
objs.bas:88: warning: [W170] Function 'get_objs_in' is never called and has been ignored
/home/baltasarq/bin/zxbasic/src/lib/arch/zx48k/stdlib/keys.bas:50: warning: [W170] Function 'MultiKeys' is never called and has been ignored
/home/baltasarq/bin/zxbasic/src/lib/arch/zx48k/stdlib/keys.bas:71: warning: [W170] Function 'GetKeyScanCode' is never called and has been ignored
/home/baltasarq/bin/zxbasic/src/lib/arch/zx48k/stdlib/string.bas:29: warning: [W170] Function 'mid' is never called and has been ignored
/home/baltasarq/bin/zxbasic/src/lib/arch/zx48k/stdlib/string.bas:40: warning: [W170] Function 'left' is never called and has been ignored
/home/baltasarq/bin/zxbasic/src/lib/arch/zx48k/stdlib/string.bas:51: warning: [W170] Function 'right' is never called and has been ignored
/home/baltasarq/bin/zxbasic/src/lib/arch/zx48k/stdlib/string.bas:98: warning: [W170] Function 'strpos' is never called and has been ignored
/home/baltasarq/bin/zxbasic/src/lib/arch/zx48k/stdlib/string.bas:124: warning: [W170] Function 'ucase2' is never called and has been ignored
/home/baltasarq/bin/zxbasic/src/lib/arch/zx48k/stdlib/string.bas:174: warning: [W170] Function 'ucase' is never called and has been ignored
/home/baltasarq/bin/zxbasic/src/lib/arch/zx48k/stdlib/string.bas:249: warning: [W170] Function 'ltrim' is never called and has been ignored
/home/baltasarq/bin/zxbasic/src/lib/arch/zx48k/stdlib/string.bas:275: warning: [W170] Function 'rtrim' is never called and has been ignored
/home/baltasarq/bin/zxbasic/src/lib/arch/zx48k/stdlib/string.bas:304: warning: [W170] Function 'trim' is never called and has been ignored
util.bas:47: warning: [W170] Function 'testMultiplyStr' is never called and has been ignored
util.bas:57: warning: [W170] Function 'testFormatStr' is never called and has been ignored
Traceback (most recent call last):
File "/home/baltasarq/bin/zxbasic/zxbc.py", line 12, in <module>
sys.exit(zxbc.main()) # Exit
^^^^^^^^^^^
File "/home/baltasarq/bin/zxbasic/src/zxbc/zxbc.py", line 110, in main
optimizer.visit(zxbparser.ast)
File "/home/baltasarq/bin/zxbasic/src/api/optimize.py", line 199, in visit
return super().visit(node)
^^^^^^^^^^^^^^^^^^^
File "/home/baltasarq/bin/zxbasic/src/api/optimize.py", line 56, in visit
return super().visit(ToVisit(node))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/baltasarq/bin/zxbasic/src/ast/ast.py", line 42, in visit
stack.append(last.send(last_result))
^^^^^^^^^^^^^^^^^^^^^^
File "/home/baltasarq/bin/zxbasic/src/api/optimize.py", line 423, in visit_FOR
if from_ > to_ and step_ > 0:
^^^^^^^^^^^
TypeError: '>' not supported between instances of 'SymbolID' and 'SymbolID'
I was compiling my program when the compiler claimed (correctly) that there was an error in my code:
Code:
util.bas:105: error: Function 'FormatStr' takes 3 parameters, not 1
This message was correct, but instead of signaling the file name and the line where the error was present, it was showing the line number and the file name of where the function was defined!
It also messes with the line number, which corresponds to where the error happened, not where the function was defined. In my case, the error happened at line number 105 of player.bas, calling function FormatStr() defined in line number 39 of util.bas.
I think it would be better to expose both pieces of information, maybe this way:
Code:
player.bas: 105: error: Function 'FormatStr' takes 3 parameters, not 1
util.bas:39: error: Function 'FormatStr' defined here.
' Duplicates the string for times times.
' For instance, MultiPlyStr( "0", 3 ) ' -> "000"
' times must be between 1 and 127
function MultiplyStr(ByVal s as string, ByVal times as byte) as string
dim toret as string = ""
if times > 0
for i = 1 to times
toret = toret + s
next
end if
return toret
end function
' Returns a formatted string with the number n
' and enough preceding chars (the ch parameter),
' so that the length of the string is w or more.
' for instance, FormatStr(15, 4, "0") ' -> "0015"
' w must be between 1 and 127.
function FormatStr(ByVal n as integer, ByVal w as byte, ByVal ch as string) as string
dim toret as string = str( n )
dim len_prefix as byte = w - len( toret )
return MultiplyStr( ch( 0 ), len_prefix ) + toret
end function