If ... Then func() Else ...
Archives Forums/Blitz3D Bug Reports/If ... Then func() Else ...
| ||
Here's a fun one for the BRL team! :DIf blah Then Print Else foo() ; fine, as expected If blah Then foo() Else Print ; SYNTAX ERROR: Expecting expression?! Function foo() End Function I can't believe I haven't run into this until now! |
| ||
I have noticed something similar, but have not tried to pin it down yet. Next time I come across it I will post some code, but it usually results in me having to split the if.then.else statement into multiple lines with if...else...endif. |
| ||
Here is an example taken directly from the code of my current game: this code works: If OtherUnit\IsPlayer Then AddSoundToPlayList(OtherUnit.UnitObject,"body impact") Else AddSoundToPlayList(OtherUnit.UnitObject,"impact") endIf this code does not: If OtherUnit\IsPlayer Then AddSoundToPlayList(OtherUnit.UnitObject,"body impact") Else AddSoundToPlayList(OtherUnit.UnitObject,"impact") does it in both blitzplus and blitz3d (haven't tried it in blitzbasic but probably not much point testing that one..) |
| ||
I've simplified your test case. Your code is causing a problem because you're calling a function with two arguments.If blah Then bar() Else Print ; Expecting Expression If blah Then bar(1) Else Print ; works fine! If blah Then bar(1,2) Else Print ; Expecting ')' If blah Then bar(1,2,3) Else Print ; Expecting ')' If blah Then bar(1,2,3,4) Else Print ; Expecting ')' If blah Then bar(1,2,3,4,5) Else Print ; Expecting ')' Function bar(x1=0,x2=0,x3=0,x4=0,x5=0) End Function As illustrated above, the Blitz3d parser chokes on single-line IF..THEN..ELSE statements where the THEN substatement is a function call with (a) any number of parameters other than one and (b) an ignored return value. |
| ||
Weird. Is this a problem specific to the 1.93 update? I probably haven't hit it before because I hardly ever use If/Then/Else on a single line. |
| ||
I think it's an old problem. I remember having the same problem long ago when I tried:If blah Then Color(255, 255, 255) Else Color(0, 0, 0) |
| ||
I know 1.91 also suffers from this issue because I upgraded from that to see if it'd go away. Regardless of whether it's an old problem this parser bug should be fixed. :) |
| ||
If you have a function that doesn't return a value, then you can call it by taking out the brackets. I know some people prefer to use the brackets all the time, but I prefer to have these sort of functions 'look' like any other command. So... If a=10 Then Color(255,255,255) Else Color(200,200,200)produces the error, but If a=10 Then Color 255,255,255 Else Color 200,200,200does not. |
| ||
Nice catch. Personally, I use parenthesis even with builtin commands. |
| ||
To be on the save side you may use the dedicated command delimiters: if condition: action():else:actions2():endif The structure is about the same. |