QB64 IDE bug and an SNL moment...
#1
Bug 
So I start typing away at this itty bitty program when all of a sudden, bam! The crazy IDE eats a piece of my code. Well Jane, I look at the screen and say, "Hey! Why'd you eat a piece of my code?" Now the I-D-E, it can't talk back to me, especially with it's mouth all full of my code, but it just goes to show you, Jane, it's always something...

Try and type then press Enter...
Code: (Select All)
REDIM c$(1000): idx = UBOUND(c$) - _HEIGHT - 125

Sam Samannadanna
Reply
#2
(11-12-2022, 03:09 AM)Pete Wrote: So I start typing away at this itty bitty program when all of a sudden, bam! The crazy IDE eats a piece of my code. Well Jane, I look at the screen and say, "Hey! Why'd you eat a piece of my code?" Now the I-D-E, it can't talk, especially with it's mouth all full of my code.

I tell you Jane, it's always something...

Try and type then press Enter...
Code: (Select All)
REDIM c$(1000): idx = UBOUND(c$) - _HEIGHT - 125

Sam Samannadanna
Weird!
Can't wait for you to explain what happened to the end bit!  Big Grin
Of all the places on Earth, and all the planets in the Universe, I'd rather live here (Perth, W.A.) Big Grin
Reply
#3
It's been ages since I last found a code-eatting bug. Generally this thing is some error checking and formatting going on in the IDE that just loses track of a variable due to them being recycled repeatedly. Without looking at the code, my bet is going to be on e$ getting overwritten somewhere that it shouldn't be. Since this is such a short piece of code which produces the glitch (thanks for that! The last code-eatting bug I chased down would eat two pages of code at once and was a real PITA to narrow down the root source!), I imagine the problem in is _HEIGHT.

If no one else gets around to it first, I'll dig into it and look for the issue once I finish playing around with the load/save dialogs and chasing after your silly SCREEN 0 + _FONT memory leak, which is currently breaking my brain. Tongue
Reply
#4
Actually, I have another one. Failure to capitalize.

Now not everyone has the cap keyword option activated, so if you don't don't bother trying this out. If you do, you'll notice when you hit Enter, the keywords will not be capitalized.

Code: (Select All)
if a then else

Pete
Reply
#5
Quit finding glitches! Or else we're going to make you start debugging them! Big Grin
Reply
#6
Another weird one is in version 3.30, I can't get it to save more than 3 searches in the search history. I tried clearing it. Okay, cleared, but once again after the third search got added, it stopped saving additional searches. Sad

Pete
Reply
#7
(11-12-2022, 03:22 AM)Pete Wrote: Actually, I have another one. Failure to capitalize.
:
Code: (Select All)
if a then else 

Pete
It's because if "THEN" part is to remain empty, it needs to be in a block "IF", that's what the "formatter" is expecting. In fact it should return an error for not having "END IF" at the end of it all, but it defeats itself because the whole thing is a single-line "IF" statement that it knows it should support back to GW-BASIC.

(11-12-2022, 03:09 AM)Pete Wrote: Try and type then press Enter...
Code: (Select All)
REDIM c$(1000): idx = UBOUND(c$) - _HEIGHT - 125
Likely this is the "formatter" thinking the first parameter for "UBOUND" should have parenthesis because it should be the name of an array but doesn't want any parenthesis, which makes it a PITA (wanted to say "special case" but writing a parser for any language is not easy and don't tell me using LISP to write it makes it easier!) So the "formatter" tries to put one for "_HEIGHT". Indeed this is the weirdest I've seen this slow editor doing. :/

BTW changed "UBOUND" to "LBOUND" and does the same thing. Changed "_HEIGHT" to "_WIDTH", no change. Added "(0)" to the end of "_HEIGHT" it didn't dare change it.
Reply
#8
(11-12-2022, 03:32 AM)Pete Wrote: Another weird one is in version 3.30, I can't get it to save more than 3 searches in the search history. I tried clearing it. Okay, cleared, but once again after the third search got added, it stopped saving additional searches. Sad

Pete
Uh,oh, now you're in trouble!
Of all the places on Earth, and all the planets in the Universe, I'd rather live here (Perth, W.A.) Big Grin
Reply
#9
@Pete

I hope that you don't have to call "REDIM _PRESERVE" 50 times or so inside a loop before you transfer the code you showed off in the other thread LOL.
Reply
#10
Au contraire!

Press any key then type in something you want added to the list.
Code: (Select All)
FOR i = 1 TO 50
    REDIM _PRESERVE c$(i)
    c$(i) = LTRIM$(STR$(i))
NEXT
WIDTH 80, 25
idx = -1: GOSUB dsp

DO
    _LIMIT 60
    WHILE _MOUSEINPUT
        mw = mw + _MOUSEWHEEL
    WEND
    IF mw <> oldmw THEN
        adj = SGN(mw - oldmw): mw = 0
        IF idx > 0 AND adj < 0 OR idx <= UBOUND(c$) - (_HEIGHT - 1) AND adj > 0 THEN GOSUB dsp
    END IF
    oldmw = mw
    b$ = INKEY$
    IF LEN(b$) THEN
        LOCATE 1, 10: LINE INPUT "Add what to list? "; ans$
        IF LEN(ans$) THEN
            REDIM _PRESERVE c$(UBOUND(c$) + 1)
            c$(UBOUND(c$)) = ans$
            idx = -1: GOSUB dsp
        END IF
    END IF
LOOP

dsp:
CLS
IF idx < 0 THEN
    idx = UBOUND(c$) - (_HEIGHT - 2)
    IF idx <= 1 THEN idx = 0
ELSE
    idx = idx + adj
END IF
LOCATE 1, 1
i = idx: j = 0
DO
    i = i + 1
    j = j + 1: LOCATE j, 1
    PRINT c$(i)
LOOP UNTIL CSRLIN = _HEIGHT - 1 OR i = UBOUND(c$)
RETURN

So you can add without worry of counting. Also, for testing, you don't need to change a DIM statement plus the array statement. Another plus is this method allows you to use ubounds() instead of a terminal counter.

Pete
Reply




Users browsing this thread: 5 Guest(s)