From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 24694 invoked by alias); 26 Jun 2007 11:36:31 -0000 Received: (qmail 24684 invoked by uid 22791); 26 Jun 2007 11:36:30 -0000 X-Spam-Check-By: sourceware.org Received: from viper.snap.net.nz (HELO viper.snap.net.nz) (202.37.101.8) by sourceware.org (qpsmtpd/0.31) with ESMTP; Tue, 26 Jun 2007 11:36:28 +0000 Received: from kahikatea.snap.net.nz (3.61.255.123.dynamic.snap.net.nz [123.255.61.3]) by viper.snap.net.nz (Postfix) with ESMTP id 7BD023D9BBF for ; Tue, 26 Jun 2007 23:36:25 +1200 (NZST) Received: by kahikatea.snap.net.nz (Postfix, from userid 1000) id 36FA18FBF6; Tue, 26 Jun 2007 23:36:17 +1200 (NZST) From: Nick Roberts MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <18048.64048.398970.186217@kahikatea.snap.net.nz> Date: Tue, 26 Jun 2007 11:46:00 -0000 To: gdb-patches@sourceware.org Subject: [MI] lvalues and variable_editable X-Mailer: VM 7.19 under Emacs 22.1.50.1 X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2007-06/txt/msg00457.txt.bz2 I've been wondering what the difference is between varobj_value_is_changeable_p and variable_editable. Recent discussion on the gdb mailing list makes me think that, in essence, a value is only changeable but not editable when it's an lvalue -- but currently varobj.c doesn't capture this difference. Here are two experimental patches: 1) varobj.c: Test if the value of variable object is an lvalue. I think this can only occur for root values. 2) mi-cmd-var.c: Output a field with -var-create and -var-list-children when noneditable. The testsuite only needs to change for 2). It would seem sensible to define variable_editable using varobj_value_is_changeable_p and I don't think language dependent versions aren't needed. WDYT? -- Nick http://www.inet.net.nz/~nickrob *** varobj.c 14 Apr 2007 21:51:29 +1200 1.89 --- varobj.c 26 Jun 2007 23:12:52 +1200 *************** c_type_of_child (struct varobj *parent, *** 2131,2136 **** --- 2131,2151 ---- static int c_variable_editable (struct varobj *var) { + struct expression *exp; + struct value *value; + + if (is_root_p (var)) + { + if (!gdb_evaluate_expression (var->root->exp, &value)) + { + /* We cannot proceed without a valid expression. */ + xfree (exp); + return 0; + } + if (!VALUE_LVAL(value)) + return 0; + } + switch (TYPE_CODE (get_value_type (var))) { case TYPE_CODE_STRUCT: *** mi-cmd-var.c 14 Jun 2007 10:12:15 +1200 1.33 --- mi-cmd-var.c 26 Jun 2007 21:32:26 +1200 *************** print_varobj (struct varobj *var, enum p *** 66,71 **** --- 66,74 ---- xfree (type); } + if (!(varobj_get_attributes (var) & 0x00000001)) + ui_out_field_string (uiout, "attr", "noneditable"); + if (varobj_get_frozen (var)) ui_out_field_int (uiout, "frozen", 1); }