----------------------------------- Insectoid Sun May 21, 2017 8:54 pm A bug in Turing ----------------------------------- I've been using Turing for nine years now and today hunter2 and I found our first bug in the language itself! Neat stuff! Discussion can be found here: http://compsci.ca/v3/viewtopic.php?p=291034 The bug is with Sprites and View.Set. If you change the size of the run window after creating a sprite, that sprite will be automatically freed. Any attempt to use that sprite will crash the program. Here's a program that causes it: [code]var pic := Pic.FileNew ("image.bmp") var Ball := Sprite.New (pic) Sprite.Show (Ball) %this line executes fine View.Set ("graphics:800;700") Sprite.Show (Ball) %this line fails[/code] The following also fails: [code] View.Set ("graphics:800;700") var pic := Pic.FileNew ("image.bmp") var Ball := Sprite.New (pic) Sprite.Show (Ball) %this line executes fine View.Set ("graphics") %resets to default 640x480 Sprite.Show (Ball) %this line fails[/code] The following code executes with no errors: [code]View.Set ("graphics:800;700") var pic := Pic.FileNew ("image.bmp") var Ball := Sprite.New (pic) Sprite.Show (Ball) %this line executes fine View.Set ("graphics:800;700") %window size hasn't changed Sprite.Show (Ball) %this line no longer fails[/code] I suspect that when a sprite is created, it is bound to the active window that created it. Resizing the window does not actually resize, but destroys the original and creates a new one with the new dimensions. The sprites can no longer draw to the original window, but only knows one error ('sprite was freed') and returns that. Or maybe destroying the window recursively destroys everything attached to it. We'll have to poke through the source code (well, somebody will, and it won't be me) to find out for sure what's going on. I can't find anything in the documentation for View.Set, Sprite, or Window that would explain this behavior.