title: Lua userdata not available
body: <p>I have some relatively simple Lua code, which links to some C and some Lua. </p>
  
  <pre><code>local messages = {"Hello World!", "This is some test text", "This is a very long piece of test text with no sense of punctuation or common decency because I want to line wrap okay.", nil}
  local i = 1
  
  return  {
      draw = function()
          local blue = zenith.color_rgba(0, 0, 255, 255)
          local white = zenith.color_rgba(255, 255, 255, 255)
          local red = zenith.color_rgba(255, 0, 0, 255)
          local black = zenith.color_rgba(0, 0, 0, 255)
  
          zenith.clear_to_color(black)
  
          if(messages[i]) then
              zenith.text_box(white, blue, white, messages[i])
          else
              zenith.text_box(black, red, white, "+++PINEAPPLE ERROR+++\n+++REDO FROM START+++")
          end
      end,
  
      event = function(ev)
          if(zenith.event_type(ev) == zenith.ev_key_down and
              zenith.event_key_code(ev) == "SPACE" and
              messages[i] -- don't go off the array end
          ) then
              i = i+1
          end
      end
  }
  </code></pre>
  
  <p>This works as I'd expect it to. As I press space, the on screen message changes until it runs into the end of the array. The the <code>zenith.</code> methods are all implemented in C, using Userdata to store a color (I have multiple ways of constructing a color (rgba, hsl, named, so it made sense to pass it around and not use numeric arguments)</p>
  
  <p>I then tried to change the structure, like so:</p>
  
  <pre><code>local messages = {"Hello World!", "This is some test text", "This is a very long piece of test text with no sense of punctuation or common decency because I want to line wrap okay.", nil}
  local i = 1
  
  local blue = zenith.color_rgba(0, 0, 255, 255)
  local white = zenith.color_rgba(255, 255, 255, 255)
  local red = zenith.color_rgba(255, 0, 0, 255)
  local black = zenith.color_rgba(0, 0, 0, 255)
  
  
  return  {
      draw = function()
  
          zenith.clear_to_color(black)
  
          if(messages[i]) then
              zenith.text_box(white, blue, white, messages[i])
          else
              zenith.text_box(black, red, white, "+++PINEAPPLE ERROR+++\n+++REDO FROM START+++")
          end
      end,
  
      event = function(ev)
          if(zenith.event_type(ev) == zenith.ev_key_down and
              zenith.event_key_code(ev) == "SPACE" and
              messages[i] -- don't go off the array end
          ) then
              i = i+1
          end
      end
  }
  </code></pre>
  
  <p>The only change being I've extracted the colors (which are userdata) to the outermost scope. I expected this to continue to work, but without the constant allocation/collection of the colors. Instead, I just get a black screen. Any tips? are my colors being prematurely garbage collected because they're only available in the closure? Is there some other magic I've missed? The only difference between colors and <code>messages</code> is that they're Userdata. </p>