From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 3177 invoked by alias); 4 Jan 2008 20:11:33 -0000 Received: (qmail 3165 invoked by uid 22791); 4 Jan 2008 20:11:32 -0000 X-Spam-Check-By: sourceware.org Received: from rock.gnat.com (HELO rock.gnat.com) (205.232.38.15) by sourceware.org (qpsmtpd/0.31) with ESMTP; Fri, 04 Jan 2008 20:11:05 +0000 Received: from localhost (localhost.localdomain [127.0.0.1]) by filtered-rock.gnat.com (Postfix) with ESMTP id 907A52A9619 for ; Fri, 4 Jan 2008 15:11:03 -0500 (EST) Received: from rock.gnat.com ([127.0.0.1]) by localhost (rock.gnat.com [127.0.0.1]) (amavisd-new, port 10024) with LMTP id bLs2EIhOUkr3 for ; Fri, 4 Jan 2008 15:11:03 -0500 (EST) Received: from joel.gnat.com (localhost.localdomain [127.0.0.1]) by rock.gnat.com (Postfix) with ESMTP id B3C562A95E7 for ; Fri, 4 Jan 2008 15:11:01 -0500 (EST) Received: by joel.gnat.com (Postfix, from userid 1000) id 282CFE7ACB; Fri, 4 Jan 2008 12:10:19 -0800 (PST) Date: Fri, 04 Jan 2008 20:11:00 -0000 From: Joel Brobecker To: gdb-patches@sourceware.org Subject: [commit/Ada] Allow "{TYPE} ADDR" expression on left hand side of assignment Message-ID: <20080104201019.GL726@adacore.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="IpbVkmxF4tDyP/Kb" Content-Disposition: inline User-Agent: Mutt/1.4.2.2i 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: 2008-01/txt/msg00066.txt.bz2 --IpbVkmxF4tDyP/Kb Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-length: 658 Hello, This patch allows the Ada-specific "{TYPE_NAME} ADDR" syntax to be on the left hand side of an assignement. Before the patch, the parser would error out saying: (gdb) set {Integer} $addr := 19 Error in expression, near ` 19'. 2008-01-04 Paul N. Hilfinger * ada-exp.y: Allow '{type} ADDRESS' notation on left of assignment. With a new testcase: 2008-01-04 Joel Brobecker * gdb.ada/type_coercion/ident.adb, gdb.ada/type_coercion/assign.adb: New files. * gdb.ada/type_coercion.exp: New testcase. Tested on x86-linux, no regression. Checked in. -- Joel --IpbVkmxF4tDyP/Kb Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename="type_coercion.diff" Content-length: 360 Index: ada-exp.y =================================================================== --- ada-exp.y (revision 75) +++ ada-exp.y (revision 76) @@ -353,7 +353,7 @@ arglist : exp { $$ = $1 + 1; } ; -simple_exp : '{' var_or_type '}' simple_exp %prec '.' +primary : '{' var_or_type '}' primary %prec '.' /* GDB extension */ { if ($2 == NULL) --IpbVkmxF4tDyP/Kb Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename="type_coercion-tc.diff" Content-length: 4101 Index: gdb.ada/type_coercion.exp =================================================================== --- gdb.ada/type_coercion.exp (revision 0) +++ gdb.ada/type_coercion.exp (revision 77) @@ -0,0 +1,63 @@ +# Copyright 2008 Free Software Foundation, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +if $tracelevel then { + strace $tracelevel +} + +load_lib "ada.exp" + +set testdir "type_coercion" +set testfile "${testdir}/assign" +set srcfile ${srcdir}/${subdir}/${testfile}.adb +set binfile ${objdir}/${subdir}/${testfile} + +file mkdir ${objdir}/${subdir}/${testdir} +if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug]] != "" } { + return -1 +} + +gdb_exit +gdb_start +gdb_reinitialize_dir $srcdir/$subdir +gdb_load ${binfile} + +set bp_location [gdb_get_line_number "START" ${testdir}/assign.adb] +runto "assign.adb:$bp_location" + +gdb_test "p q" \ + "\\(2, 3, 5, 7, 11\\)" \ + "p q" + +gdb_test "set \$addr := q'address" \ + "" \ + "save q'address in convenience variable" + +gdb_test "p {Integer} \$addr" \ + "2" \ + "print {Integer} \$addr" + +# Now change the value at $addr using the same "{TYPE}" syntax. + +gdb_test "set {Integer} \$addr := 19" \ + "" \ + "set {Integer} \$addr := 19" + +gdb_test "p q" \ + "\\(19, 3, 5, 7, 11\\)" \ + "p q" + + + Index: gdb.ada/type_coercion/ident.adb =================================================================== --- gdb.ada/type_coercion/ident.adb (revision 0) +++ gdb.ada/type_coercion/ident.adb (revision 77) @@ -0,0 +1,19 @@ +-- Copyright 2008 Free Software Foundation, Inc. +-- +-- This program is free software; you can redistribute it and/or modify +-- it under the terms of the GNU General Public License as published by +-- the Free Software Foundation; either version 3 of the License, or +-- (at your option) any later version. +-- +-- This program is distributed in the hope that it will be useful, +-- but WITHOUT ANY WARRANTY; without even the implied warranty of +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-- GNU General Public License for more details. +-- +-- You should have received a copy of the GNU General Public License +-- along with this program. If not, see . + +function Ident (X : Integer) return Integer is +begin + return X; +end Ident; Index: gdb.ada/type_coercion/assign.adb =================================================================== --- gdb.ada/type_coercion/assign.adb (revision 0) +++ gdb.ada/type_coercion/assign.adb (revision 77) @@ -0,0 +1,25 @@ +-- Copyright 2008 Free Software Foundation, Inc. +-- +-- This program is free software; you can redistribute it and/or modify +-- it under the terms of the GNU General Public License as published by +-- the Free Software Foundation; either version 3 of the License, or +-- (at your option) any later version. +-- +-- This program is distributed in the hope that it will be useful, +-- but WITHOUT ANY WARRANTY; without even the implied warranty of +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-- GNU General Public License for more details. +-- +-- You should have received a copy of the GNU General Public License +-- along with this program. If not, see . + +with Ident; +procedure Assign is + + Q: array (1..5) of Integer := (2, 3, 5, 7, 11); + +begin + + Q(1) := Ident (Q(3)); -- START + +end Assign; --IpbVkmxF4tDyP/Kb--