protected JavaScriptBlock TryParseFunction(MemoryStream<JavaScriptToken> ts)
 {
     int before = ts.Position;
     if (ts.TryMatch((token) => token.Type == JavaScriptTokenType.Keyword && token.Value == "function"))
     {
         JavaScriptBlock block = new JavaScriptBlock(before, JavaScriptBlockType.Function, this, m_TopLevel, m_Tokens);
         block.TryMatchComments(ts);
         block.TryParseLVar(ts); // Too generic for optional function name, but never mind
         block.TryMatchComments(ts);
         block.TryParseBrackets(ts, "(", ")");
         block.TryMatchComments(ts);
         block.m_FunctionBody = block.TryParseBrackets(ts, "{", "}");
         AddBlock(block, ts);
         return block;
     }
     return null;
 }