internal object Eval()
        {
            StringBuilder  sb     = new StringBuilder();
            Utf8JsonWriter writer = new Utf8JsonWriter(new StringBuilderStream(sb));

            this.Visit(writer);
            writer.Flush();
            object result = NativeJs.ExecExpr(sb.ToString(), true);

            return(result);
        }
        public override bool TrySetIndex(SetIndexBinder binder, object[] indexes, object value)
        {
            StringBuilder  sb     = new StringBuilder();
            Utf8JsonWriter writer = new Utf8JsonWriter(new StringBuilderStream(sb));

            writer.WriteStartObject();
            writer.WriteString("type", "setindex");
            writer.WritePropertyName("object");
            this.Visit(writer);
            WriteArray(writer, "indexes", indexes);
            writer.WritePropertyName("value");
            WriteValue(writer, value);
            writer.WriteEndObject();
            writer.Flush();
            NativeJs.ExecExpr(sb.ToString(), false);
            return(true);
        }