public override bool Render(RenderContext dest)
        {
            if (Values.Count == 0)
            {
                dest.Append("{}");
                return(true);
            }

            dest.Append('{');
            dest.Indent();
            for (var i = 0; i < Values.Count; i++)
            {
                if (i > 0)
                {
                    dest.Append(',');
                }

                dest.StartLine();

                // Key - if key is a valid identifier, don't quote it
                var kp = Values[i];
                if (kp.Key.GetType() == typeof(ast.ExprNodeIdentifier))
                {
                    dest.Append(dest.Members.GetObfuscatedSymbol(((ast.ExprNodeIdentifier)kp.Key).Name));
                }
                else if (kp.Key.GetType() == typeof(String) && Tokenizer.IsIdentifier((string)kp.Key) && !Tokenizer.IsKeyword((string)kp.Key))
                {
                    dest.Append((string)kp.Key);
                }
                else
                {
                    ExprNodeLiteral.RenderValue(dest, kp.Key);
                }

                // Value
                dest.Append(':');
                kp.Value.Render(dest);
            }
            dest.Unindent();
            dest.StartLine();
            dest.Append('}');
            return(true);
        }
 public override bool Render(RenderContext dest)
 {
     if (Lhs != null)
     {
         WrapAndRender(dest, Lhs, false);
         dest.Append(".");
         dest.Append(dest.Members.GetObfuscatedSymbol(Name));
     }
     else
     {
         // Find the symbol and check if it's a constant
         var s = dest.CurrentScope.FindSymbol(Name);
         if (s != null && s.ConstValue != null)
         {
             ExprNodeLiteral.RenderValue(dest, s.ConstValue);
         }
         else
         {
             dest.Append(dest.Symbols.GetObfuscatedSymbol(Name));
         }
     }
     return(true);
 }