]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
CompileExpression redesign and enable/fix print tests.
authorKeith Seitz <keiths@redhat.com>
Thu, 8 Dec 2016 20:49:59 +0000 (12:49 -0800)
committerKeith Seitz <keiths@redhat.com>
Tue, 10 Jan 2017 19:38:24 +0000 (11:38 -0800)
gdb/testsuite/gdb.compile/cp-simple-anonymous.exp
gdb/testsuite/gdb.compile/cp-simple-inherit.exp
gdb/testsuite/gdb.compile/cp-simple-member.exp
gdb/testsuite/gdb.compile/cp-simple-method.exp
gdb/testsuite/gdb.compile/cp-simple-nested.exp
gdb/testsuite/gdb.compile/cp-simple-ns.exp
gdb/testsuite/gdb.compile/cp-simple-template.exp
gdb/testsuite/gdb.compile/cp-simple-virtual.exp
gdb/testsuite/gdb.compile/cp-special-function.exp
gdb/testsuite/lib/compiler-support.exp

index 8822187c8684c75a070c93659248226b5fa21337..46db50f1d93b0e13c43b800f971889ac46e16f72 100644 (file)
@@ -44,14 +44,12 @@ gdb_continue_to_breakpoint "testing location"
 
 # Reminder, "var" is an integer; all these types get converted to `int'.
 CompileExpression::new "var"
-CompileExpression::add_imp "anon_e" 3
-CompileExpression::add_imp "anon_u.aa" {97( 'a')?}
-CompileExpression::add_imp "anon_s.len" 11
-CompileExpression::add_imp "a.u.b" 0
-CompileExpression::add_imp "a.s.len" 5
-CompileExpression::add_imp "a.e" 10
-CompileExpression::add_imp "(*anon_s.ptr == 'a')" (1|true)
-CompileExpression::add_imp "(*a.s.ptr != 'h')" (0|false)
-CompileExpression::add_imp "A::BB" 11
-CompileExpression::run_tests "code"
-#CompileExpression::run_tests "print"
+CompileExpression::test "anon_e" 3
+CompileExpression::test "anon_u.aa" {97( 'a')?}
+CompileExpression::test "anon_s.len" 11
+CompileExpression::test "a.u.b" 0
+CompileExpression::test "a.s.len" 5
+CompileExpression::test "a.e" 10
+CompileExpression::test "(*anon_s.ptr == 'a')" (1|true)
+CompileExpression::test "(*a.s.ptr != 'h')" (0|false)
+CompileExpression::test "A::BB" 11
index 3f5dc6da3477d4b61ec15d5a1943c03da66af67e..8293ccbe8539d6c56eb95bdc35e8512b40d7d499 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright 2015 Free Software Foundation, Inc.
+# Copyright 2015, 2016 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
@@ -43,12 +43,10 @@ gdb_breakpoint [gdb_get_line_number "break here" $srcfile]
 gdb_continue_to_breakpoint "testing location"
 
 CompileExpression::new "var"
-CompileExpression::add_imp "d.a_" 1
-CompileExpression::add_imp "d.b_" 2
-CompileExpression::add_imp "d.c_" 3
-CompileExpression::add_imp "d.d_" 4
-CompileExpression::add_imp "d.A::do_it (1);" 2
-CompileExpression::add_imp "d.B::do_it (1);" 1
-CompileExpression::add_imp "d.C::do_it (1);" 3
-CompileExpression::run_tests "code"
-#CompileExpression::run_tests "print"
+CompileExpression::test "d.a_" 1
+CompileExpression::test "d.b_" 2
+CompileExpression::test "d.c_" 3
+CompileExpression::test "d.d_" 4
+CompileExpression::test "d.A::do_it (1);" 2
+CompileExpression::test "d.B::do_it (1);" 1
+CompileExpression::test "d.C::do_it (1);" 3
index cd1af8aae9db7b2f1b97b8ed9bd1f7126aaad695..5d759bcf17fa66701725dca7b6cb364ce415dfec 100644 (file)
@@ -43,22 +43,21 @@ gdb_breakpoint [gdb_get_line_number "break here" $srcfile]
 gdb_continue_to_breakpoint "testing location"
 
 CompileExpression::new "var"
-CompileExpression::add_imp "a.public_" 1
-CompileExpression::add_imp "a.protected_" 21
-CompileExpression::add_imp "a.private_" 3
-CompileExpression::add_imp "A::s_public_" 10
-CompileExpression::add_imp "A::s_protected_" 20
-CompileExpression::add_imp "A::s_private_" 12
-CompileExpression::add_exp "A::ATYPE i = 10; var = i;" 10
-CompileExpression::add_imp "get_values (a)" 85
-CompileExpression::add_exp "myenum me = E_B; var = me;" 11
-CompileExpression::add_exp "A::s_protected_ = N::AB; var = A::s_protected_;" 21
-CompileExpression::add_exp "A::s_private_ = E_B; var = A::s_private_;" 11
-CompileExpression::add_exp "N::ANON_E ae = N::AD; var = ae;" 23
-CompileExpression::add_imp {a.*pmi} 1
-CompileExpression::add_exp {a.public_ = 2; var = a.*pmi; a.public_ = 1} 2
-CompileExpression::run_tests "code"
-#CompileExpression::run_tests "print"
+CompileExpression::test "a.public_" 1
+CompileExpression::test "a.protected_" {(21|N::AB)}
+CompileExpression::test "a.private_" 3
+CompileExpression::test "A::s_public_" 10
+CompileExpression::test "A::s_protected_" {(20|N::AA)}
+CompileExpression::test "A::s_private_" 12
+CompileExpression::test "A::ATYPE i = 10; var = i;" 10 -explicit
+CompileExpression::test "get_values (a)" 85
+CompileExpression::test "myenum me = E_B; var = me;" 11 -explicit
+CompileExpression::test "A::s_protected_ = N::AB; var = A::s_protected_;" \
+    21 -explicit
+CompileExpression::test "A::s_private_ = E_B; var = A::s_private_;" 11 -explicit
+CompileExpression::test "N::ANON_E ae = N::AD; var = ae;" 23 -explicit
+CompileExpression::test {a.*pmi} 1
+CompileExpression::test {a.public_ = 2; var = a.*pmi; a.public_ = 1} 2 -explicit
 
 # Test some compilation failures
 set failed {\r\nCompilation failed\.}
index 6a18e51a7187cbc603d633053eb010b8e41a3411..9387c8fb9801e21481bfe0c612d810f9e64186b8 100644 (file)
@@ -43,26 +43,24 @@ gdb_breakpoint [gdb_get_line_number "break here" $srcfile]
 gdb_continue_to_breakpoint "testing location"
 
 CompileExpression::new "var"
-CompileExpression::add_imp "a->get_var ();" 21
-CompileExpression::add_imp "a->get_var (static_cast<unsigned long> (1));" 100
-CompileExpression::add_imp "a->get_var (static_cast<int> (1));" 101
-CompileExpression::add_imp "a->get_var (static_cast<float> (1));" 102
-CompileExpression::add_imp "a->get_var (static_cast<void *> (a));" 103
-CompileExpression::add_imp "a->get_var (*a);" 104
-CompileExpression::add_imp "a->get_var (*ac);" 105
-CompileExpression::add_imp "a->get_var1 (1);" 42
-CompileExpression::add_imp "a->get_var2 (1, 2);" 88
-CompileExpression::add_imp "A::get_1 (1);" 2
-CompileExpression::add_imp "A::get_2 (1, 2);" 5
-CompileExpression::add_imp "A::get_1 (a->get_var ());" 22
-CompileExpression::add_imp "a->get_var1 (a->get_var () - 16);" 672
-CompileExpression::add_imp "a->get_var2 (a->get_var (), A::get_1 (2));" 336
-CompileExpression::add_imp "get_value ()" 200
-CompileExpression::add_imp "get_value (a)" 21
-CompileExpression::add_imp "get_value (get_value ())" 200
-CompileExpression::add_imp {(a->*pmf) (1)} 101
-CompileExpression::add_exp {pmf = &A::get_var1; var = (a->*pmf) (2); pmf = &A::get_var} 84
-CompileExpression::add_imp {(a->**pmf_p) (1)} 101
-
-CompileExpression::run_tests "code"
-#CompileExpression::run_tests "print"
+CompileExpression::test "a->get_var ();" 21
+CompileExpression::test "a->get_var (static_cast<unsigned long> (1));" 100
+CompileExpression::test "a->get_var (static_cast<int> (1));" 101
+CompileExpression::test "a->get_var (static_cast<float> (1));" 102
+CompileExpression::test "a->get_var (static_cast<void *> (a));" 103
+CompileExpression::test "a->get_var (*a);" 104
+CompileExpression::test "a->get_var (*ac);" 105
+CompileExpression::test "a->get_var1 (1);" 42
+CompileExpression::test "a->get_var2 (1, 2);" 88
+CompileExpression::test "A::get_1 (1);" 2
+CompileExpression::test "A::get_2 (1, 2);" 5
+CompileExpression::test "A::get_1 (a->get_var ());" 22
+CompileExpression::test "a->get_var1 (a->get_var () - 16);" 672
+CompileExpression::test "a->get_var2 (a->get_var (), A::get_1 (2));" 336
+CompileExpression::test "get_value ()" 200
+CompileExpression::test "get_value (a)" 21
+CompileExpression::test "get_value (get_value ())" 200
+CompileExpression::test {(a->*pmf) (1)} 101
+CompileExpression::test \
+    {pmf = &A::get_var1; var = (a->*pmf) (2); pmf = &A::get_var} 84 -explicit
+CompileExpression::test {(a->**pmf_p) (1)} 101
index ea94476ff56bc380c50759098399873586e2176c..74d3d6a962ab21852e5f08b7587d9ef48b23fea3 100644 (file)
@@ -43,11 +43,10 @@ gdb_breakpoint [gdb_get_line_number "break here" $srcfile]
 gdb_continue_to_breakpoint "testing location"
 
 CompileExpression::new "var"
-CompileExpression::add_imp "i1.a_" 2
-CompileExpression::add_imp "i2.a_" 3
-CompileExpression::add_exp "A::Inner1 *i1p = &i1; var = i1p->a_;" 2
-CompileExpression::add_exp "A::Inner1::Inner2 *i2p = &i2; var = i2p->a_;" 3
-CompileExpression::add_exp "A::Inner1 &r1 = i1; var = r1.a_;" 2
-CompileExpression::add_exp "A::Inner1::Inner2 &r2 = i2; var = r2.a_;" 3
-CompileExpression::run_tests "code"
-#CompileExpression::run_tests "print"
+CompileExpression::test "i1.a_" 2
+CompileExpression::test "i2.a_" 3
+CompileExpression::test "A::Inner1 *i1p = &i1; var = i1p->a_;" 2 -explicit
+CompileExpression::test "A::Inner1::Inner2 *i2p = &i2; var = i2p->a_;" 3 \
+    -explicit
+CompileExpression::test "A::Inner1 &r1 = i1; var = r1.a_;" 2 -explicit
+CompileExpression::test "A::Inner1::Inner2 &r2 = i2; var = r2.a_;" 3 -explicit
index adc6af2ffbbcc627712c98c77e9e99f0cd3c6695..0c5ff1d0e7f136f4c8dfd0ed3b876c11ed4f077f 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright 2015 Free Software Foundation, Inc.
+# Copyright 2015, 2016 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
@@ -41,10 +41,8 @@ gdb_breakpoint [gdb_get_line_number "break here" $srcfile]
 gdb_continue_to_breakpoint "testing location"
 
 CompileExpression::new "var"
-CompileExpression::add_imp "N1::N2::N3::N4::n4static;" 400
-CompileExpression::add_imp "N1::N2::N3::N4::S4::s4static;" 40
-CompileExpression::add_imp "s.s4int_;" 4
-CompileExpression::add_imp "N1::N2::N3::N4::S4::get_svar ();" 40
-CompileExpression::add_imp "s.get_var ();" 4
-CompileExpression::run_tests "code"
-#CompileExpression::run_tests "print"
+CompileExpression::test "N1::N2::N3::N4::n4static;" 400
+CompileExpression::test "N1::N2::N3::N4::S4::s4static;" 40
+CompileExpression::test "s.s4int_;" 4
+CompileExpression::test "N1::N2::N3::N4::S4::get_svar ();" 40
+CompileExpression::test "s.get_var ();" 4
index c670aa7379c8ca064c0f050bb6eec549ad5e22d5..9919c24b42dff42871a7c27371991f91f596248c 100644 (file)
@@ -43,37 +43,34 @@ gdb_breakpoint [gdb_get_line_number "break here" $srcfile]
 gdb_continue_to_breakpoint "testing location"
 
 CompileExpression::new "var"
-CompileExpression::add_imp "mytemplate<int, 1> ()" -1
-CompileExpression::add_imp "mytemplate<int, 1> (1)" 2
-CompileExpression::add_imp "mytemplate<0> ()" 0
-CompileExpression::add_imp "mytemplate ()" 100
-CompileExpression::add_imp "a.tempmethod ()" 20 \
+CompileExpression::test "mytemplate<int, 1> ()" -1
+CompileExpression::test "mytemplate<int, 1> (1)" 2
+CompileExpression::test "mytemplate<0> ()" 0
+CompileExpression::test "mytemplate ()" 100
+CompileExpression::test "a.tempmethod ()" {(20|{value = 20})} \
     -print {xfail *-*-* gcc/debug/49348} \
     -value {xfail *-*-* gcc/debug/49348}
-CompileExpression::add_imp "a.tempmethod<A> ()" 20
-CompileExpression::add_imp "a.tempmethod<int> ()" -20
-CompileExpression::add_imp "defaultvals ()" 10
-CompileExpression::add_imp "defaultvals<int, 20> ()" 20
-CompileExpression::add_imp "deduct (1234)" 1234
-CompileExpression::add_imp "o + 3" -33
-CompileExpression::add_imp "mod_test (i)" 1
-CompileExpression::add_imp "mod_test (cpi)" 2
-CompileExpression::add_imp "mod_test (cpci)" 3
-CompileExpression::add_imp "cddd.get1 ()" -30
-CompileExpression::add_imp "cddd.get2 ()" 107
-CompileExpression::add_imp "cddd.get3 ()" 3
-CompileExpression::add_imp "cdd.get1 ()" 100
-CompileExpression::add_imp "cdd.get2 ()" 107
-CompileExpression::add_imp "cdd.get3 ()" 3
-CompileExpression::add_imp "cd.get1 ()" 101
-CompileExpression::add_imp "cd.get2 ()" 107
-CompileExpression::add_imp "cd.get3 ()" 3
-CompileExpression::add_imp "c.get1 ()" 102
-CompileExpression::add_imp "c.get2 ()" 107
-CompileExpression::add_imp "c.get3 ()" 12
-
-CompileExpression::run_tests "code"
-#CompileExpression::run_tests "print"
+CompileExpression::test "a.tempmethod<A> ()" {(20|{value = 20})}
+CompileExpression::test "a.tempmethod<int> ()" -20
+CompileExpression::test "defaultvals ()" {(10|{value = 10})}
+CompileExpression::test "defaultvals<int, 20> ()" 20
+CompileExpression::test "deduct (1234)" 1234
+CompileExpression::test "o + 3" {(-33|{v_ = 33})}
+CompileExpression::test "mod_test (i)" 1
+CompileExpression::test "mod_test (cpi)" 2
+CompileExpression::test "mod_test (cpci)" 3
+CompileExpression::test "cddd.get1 ()" {(-30|{v_ = 30})}
+CompileExpression::test "cddd.get2 ()" 107
+CompileExpression::test "cddd.get3 ()" 3
+CompileExpression::test "cdd.get1 ()" 100
+CompileExpression::test "cdd.get2 ()" 107
+CompileExpression::test "cdd.get3 ()" 3
+CompileExpression::test "cd.get1 ()" 101
+CompileExpression::test "cd.get2 ()" {107( 'k')?}
+CompileExpression::test "cd.get3 ()" 3
+CompileExpression::test "c.get1 ()" 102
+CompileExpression::test "c.get2 ()" {107( 'k')?}
+CompileExpression::test "c.get3 ()" 12
 
 # Some explicit tests that don't fit neatly into CompileExpression (yet)
 gdb_test "compile print ret_test<char>()" \
index eb2cce666fc97fb793014940b5d4bad071f5ad56..f56fe0414fffd1c932ae1d1df1f8ce209bb90b40 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright 2015 Free Software Foundation, Inc.
+# Copyright 2015, 2016 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
@@ -43,32 +43,29 @@ gdb_breakpoint [gdb_get_line_number "break here" $srcfile]
 gdb_continue_to_breakpoint "testing location"
 
 CompileExpression::new "var"
-CompileExpression::add_imp "b.doit ()" 2
-CompileExpression::add_imp "c.doit ()" 3
-CompileExpression::add_imp "d.doit ()" 4
-CompileExpression::add_imp "ap->doit ()" 4
-CompileExpression::add_imp "b.doit2 ()" 22
-CompileExpression::add_imp "c.doit2 ()" 33
-CompileExpression::add_imp "d.doit2 ()" 44
-CompileExpression::add_imp "ap->doit2 ()" 44
-CompileExpression::add_imp "b.doit3 ()" -3
-CompileExpression::add_imp "c.doit3 ()" -3
-CompileExpression::add_imp "d.doit3 ()" -3
-CompileExpression::add_imp "foo.doit ()" 1111
-CompileExpression::add_imp "bar.doit2 ()" 2222
+CompileExpression::test "b.doit ()" 2
+CompileExpression::test "c.doit ()" 3
+CompileExpression::test "d.doit ()" 4
+CompileExpression::test "ap->doit ()" 4
+CompileExpression::test "b.doit2 ()" 22
+CompileExpression::test "c.doit2 ()" 33
+CompileExpression::test "d.doit2 ()" 44
+CompileExpression::test "ap->doit2 ()" 44
+CompileExpression::test "b.doit3 ()" -3
+CompileExpression::test "c.doit3 ()" -3
+CompileExpression::test "d.doit3 ()" -3
+CompileExpression::test "foo.doit ()" 1111
+CompileExpression::test "bar.doit2 ()" 2222
 
 # These two tests are "disabled".  They represent new/future features.
-# CompileExpression::add_exp \
+# CompileExpression::test \
     [concat "struct ABC {int doit2(void) { return 3333; }} abc;" \
         "var = abc.doit2()"] \
-    3333
-# CompileExpression::add_exp \
+    3333 -explicit
+# CompileExpression::test \
     [concat "struct ABC : A {int doit2(void) { return 4444; }} abc;" \
         "var = abc.doit2()"] \
-    4444
-
-CompileExpression::run_tests "code"
-#CompileExpression::run_tests "print"
+    4444 -explicit
 
 # Test some error conditions
 gdb_test "compile code A a;" \
index d69d89c1ae4950a4cd572197f19f5138f7cd04d4..26d4de5fbcf35f65debc75310d246af27c4f4fd6 100644 (file)
@@ -44,215 +44,217 @@ gdb_continue_to_breakpoint "testing location"
 
 # Reminder, "var" is an integer; all these types get converted to `int'.
 CompileExpression::new "var"
-CompileExpression::add_imp "a + 1" 2
-CompileExpression::add_imp "a + b" 3
-CompileExpression::add_imp "a + b + 3" 6
-CompileExpression::add_imp "1 + a + a" 3
-CompileExpression::add_imp "1 + b + 1" 4
-CompileExpression::add_imp "(+a).get ()" 11
-CompileExpression::add_imp "(+c).get ()" 7
-CompileExpression::add_imp "a + (+c).get ()" 8
-
-CompileExpression::add_imp "a - 2" -1
-CompileExpression::add_imp "a - b" -1
-CompileExpression::add_imp "a - b - 3" -4
-CompileExpression::add_imp "2 - a - a" 0
-CompileExpression::add_imp "2 - b - 2" -2
-CompileExpression::add_imp "(-a).get ()" 21
-CompileExpression::add_imp "(-c).get ()" 17
-CompileExpression::add_imp "a - (-c).get ()" -16
-
-CompileExpression::add_imp "a & 3" 1
-CompileExpression::add_imp "a & b" 0
-CompileExpression::add_imp "a & b & 3" 0
-CompileExpression::add_imp "3 & a & a" 1
-CompileExpression::add_imp "3 & b & 3" 2
-CompileExpression::add_imp "(&a).get ()" 31
-CompileExpression::add_imp "(&c).get ()" 27
-CompileExpression::add_imp "a & (&c).get ()" 1
-
-CompileExpression::add_imp "a * 4" 4
-CompileExpression::add_imp "a * b" 2
-CompileExpression::add_imp "a * b * 4" 8
-CompileExpression::add_imp "4 * a * a" 4
-CompileExpression::add_imp "4 * b * 4" 32
-CompileExpression::add_imp "(*a).get ()" 41
-CompileExpression::add_imp "(*c).get ()" 37
-CompileExpression::add_imp "a * (*c).get ()" 37
-
-CompileExpression::add_imp "(~a).get ()" -2
-CompileExpression::add_imp "(~b).get ()" -3
-CompileExpression::add_imp "(~c).get ()" 2
-
-CompileExpression::add_imp "a / 1" 1
-CompileExpression::add_imp "10 / b" 5
-CompileExpression::add_imp "b / a" 2
-CompileExpression::add_imp "-3 / c / 1 / a" 1
-
-CompileExpression::add_imp "a % 1" 0
-CompileExpression::add_imp "5 % c" 2
-CompileExpression::add_imp "a % c" 1
-CompileExpression::add_imp "-2 % c % b % 1" 0
-
-CompileExpression::add_imp "a | 1" 1
-CompileExpression::add_imp "1 | b" 3
-CompileExpression::add_imp "b | c" -1
-CompileExpression::add_imp "1 | a | b | 4" 7
-
-CompileExpression::add_imp "a ^ 1" 0
-CompileExpression::add_imp "1 ^ b" 3
-CompileExpression::add_imp "b ^ c" -1
-CompileExpression::add_imp "1 ^ a ^ b ^ 4" 6
+CompileExpression::test "a + 1" 2
+CompileExpression::test "a + b" 3
+CompileExpression::test "a + b + 3" 6
+CompileExpression::test "1 + a + a" 3
+CompileExpression::test "1 + b + 1" 4
+CompileExpression::test "(+a).get ()" 11
+CompileExpression::test "(+c).get ()" 7
+CompileExpression::test "a + (+c).get ()" 8
+
+CompileExpression::test "a - 2" -1
+CompileExpression::test "a - b" -1
+CompileExpression::test "a - b - 3" -4
+CompileExpression::test "2 - a - a" 0
+CompileExpression::test "2 - b - 2" -2
+CompileExpression::test "(-a).get ()" 21
+CompileExpression::test "(-c).get ()" 17
+CompileExpression::test "a - (-c).get ()" -16
+
+CompileExpression::test "a & 3" 1
+CompileExpression::test "a & b" 0
+CompileExpression::test "a & b & 3" 0
+CompileExpression::test "3 & a & a" 1
+CompileExpression::test "3 & b & 3" 2
+CompileExpression::test "(&a).get ()" 31
+CompileExpression::test "(&c).get ()" 27
+CompileExpression::test "a & (&c).get ()" 1
+
+CompileExpression::test "a * 4" 4
+CompileExpression::test "a * b" 2
+CompileExpression::test "a * b * 4" 8
+CompileExpression::test "4 * a * a" 4
+CompileExpression::test "4 * b * 4" 32
+CompileExpression::test "(*a).get ()" 41
+CompileExpression::test "(*c).get ()" 37
+CompileExpression::test "a * (*c).get ()" 37
+
+CompileExpression::test "(~a).get ()" -2
+CompileExpression::test "(~b).get ()" -3
+CompileExpression::test "(~c).get ()" 2
+
+CompileExpression::test "a / 1" 1
+CompileExpression::test "10 / b" 5
+CompileExpression::test "b / a" 2
+CompileExpression::test "-3 / c / 1 / a" 1
+
+CompileExpression::test "a % 1" 0
+CompileExpression::test "5 % c" 2
+CompileExpression::test "a % c" 1
+CompileExpression::test "-2 % c % b % 1" 0
+
+CompileExpression::test "a | 1" 1
+CompileExpression::test "1 | b" 3
+CompileExpression::test "b | c" -1
+CompileExpression::test "1 | a | b | 4" 7
+
+CompileExpression::test "a ^ 1" 0
+CompileExpression::test "1 ^ b" 3
+CompileExpression::test "b ^ c" -1
+CompileExpression::test "1 ^ a ^ b ^ 4" 6
 
 # !!keiths: I don't know why this is failing...
-CompileExpression::add_exp "d = b; var = d.get ();" 2
-CompileExpression::add_exp "d = 21; var = d.get ();" 21
-CompileExpression::add_exp "d = 0; var = d.get ();" 0
-
-CompileExpression::add_exp "d.int_ = 1; var = d.get ()" 1
-CompileExpression::add_exp "d += a; var = d.get ();" 2
-CompileExpression::add_exp "d += 2; var = d.get ();" 4
-
-CompileExpression::add_exp "d.int_ = 2; var = d.get ()" 2
-CompileExpression::add_exp "d -= a; var = d.get ();" 1
-CompileExpression::add_exp "d -= 2; var = d.get ();" -1
-
-CompileExpression::add_exp "d.int_ = 3; var = d.get ()" 3
-CompileExpression::add_exp "d *= 2; var = d.get ()" 6
-CompileExpression::add_exp  "d *= d; var = d.get ()" 36
-
-CompileExpression::add_exp "d.int_ = 6; var = d.get ()" 6
-CompileExpression::add_exp "d /= 2; var = d.get ()" 3
-CompileExpression::add_exp  "d /= d; var = d.get ()" 1
-
-CompileExpression::add_exp "d.int_ = 4; var = d.get ()" 4
-CompileExpression::add_exp "d %= 3; var = d.get ()" 1
-CompileExpression::add_exp  "d %= d; var = d.get ()" 0
-
-CompileExpression::add_exp "d.int_ = 5; var = d.get ()" 5
-CompileExpression::add_exp "d &= 4; var = d.get ()" 4
-CompileExpression::add_exp  "d &= a; var = d.get ()" 0
-
-CompileExpression::add_exp "d.int_ = 8; var = d.get ()" 8
-CompileExpression::add_exp "d |= a; var = d.get ()" 9
-CompileExpression::add_exp  "d |= 16; var = d.get ()" 25
-
-CompileExpression::add_exp "d.int_ = 9; var = d.get ()" 9
-CompileExpression::add_exp "d ^= 2; var = d.get ()" 11
-CompileExpression::add_exp  "d ^= d; var = d.get ()" 0
-
-CompileExpression::add_imp "d.int_ = 10; var = d.get ()" 10
-CompileExpression::add_imp "d << 2" 40
-CompileExpression::add_imp "d << a" 20
-CompileExpression::add_imp "1 << b" 4
-
-CompileExpression::add_imp "d.int_ = 12; var = d.get ()" 12
-CompileExpression::add_imp "d >> 2" 3
-CompileExpression::add_imp "d >> a" 6
-CompileExpression::add_imp "10 >> a" 5
-
-CompileExpression::add_exp "d.int_ = 13; var = d.get ()" 13
-CompileExpression::add_exp "d <<= 2; var = d.get ()" 52
-CompileExpression::add_exp  "d <<= a; var = d.get ()" 104
-
-CompileExpression::add_exp "d.int_ = 14; var = d.get ()" 14
-CompileExpression::add_exp "d >>= 2; var = d.get ()" 3
-CompileExpression::add_exp  "d >>= a; var = d.get ()" 1
-
-CompileExpression::add_imp "d.int_ = 1013; var = d.get ()" 1013
-CompileExpression::add_imp "d == 2" 0
-CompileExpression::add_imp "d == d" 1
-CompileExpression::add_imp "1 == d" 0
-
-CompileExpression::add_imp "d.int_ = 1014; var = d.get ()" 1014
-CompileExpression::add_imp "d != 2" 1
-CompileExpression::add_imp "d != d" 0
-CompileExpression::add_imp "1014 == d" 1
-
-CompileExpression::add_imp "d.int_ = 15; var = d.get ()" 15
-CompileExpression::add_imp "d < 2" 0
-CompileExpression::add_imp "a < d" 1
-CompileExpression::add_imp "16 < d" 0
-
-CompileExpression::add_imp "d.int_ = 16; var = d.get ()" 16
-CompileExpression::add_imp "d > 2" 1
-CompileExpression::add_imp "d < a" 0
-CompileExpression::add_imp "15 < d" 1
-
-CompileExpression::add_imp "d.int_ = 17; var = d.get ()" 17
-CompileExpression::add_imp "d <= 2" 0
-CompileExpression::add_imp "a <= d" 1
-CompileExpression::add_imp "18 <= d" 0
-
-CompileExpression::add_imp "d.int_ = 18; var = d.get ()" 18
-CompileExpression::add_imp "d >= 2" 1
-CompileExpression::add_imp "d <= a" 0
-CompileExpression::add_imp "15 <= d" 1
-
-CompileExpression::add_imp "d.int_ = 19; var = d.get ()" 19
-CompileExpression::add_imp "!d" 0
-
-CompileExpression::add_imp "d.int_ = 20; var = d.get ()" 20
-CompileExpression::add_imp "d && 0" 0
-CompileExpression::add_imp "d && a" 1
-CompileExpression::add_imp "0 && d" 0
-
-CompileExpression::add_imp "d.int_ = 21; var = d.get ()" 21
-CompileExpression::add_imp "d || 0" 1
-CompileExpression::add_imp "d || a" 1
-CompileExpression::add_imp "0 || d" 1
-
-CompileExpression::add_exp "d.int_ = 22; var = d.get ()" 22
-CompileExpression::add_imp "(d++).get ()" 22
-CompileExpression::add_imp "d.get ()" 23 "get value of post-incr d"
-CompileExpression::add_imp "(++d).get ()" 24
-
-CompileExpression::add_exp "d.int_ = 23; var = d.get ()" 23
-CompileExpression::add_imp "(d--).get ()" 23
-CompileExpression::add_imp "d.get ()" 22 "get value of post-decr d"
-CompileExpression::add_imp "(--d).get ()" 21
-
-CompileExpression::add_exp "d.int_ = 24; var = d.get ()" 24
-CompileExpression::add_imp "(a,d).get ()" 1
-CompileExpression::add_imp "(d,a).get ()" 24
-
-CompileExpression::add_exp "d.int_ = 25; var = d.get ()" 25
-CompileExpression::add_imp "d->*3" 28
-CompileExpression::add_imp "d->*b" 27 "d->*b 1"
-
-CompileExpression::add_exp "d.int_ = 26; var = d.get ()" 26
-CompileExpression::add_imp "d->*4" 30
-CompileExpression::add_imp "d->*b" 28 "d->*b 2"
-
-CompileExpression::add_exp "d.pub_var = 1; var = d.pub_var" 1
-CompileExpression::add_imp "d->pub_var" -21
+CompileExpression::test "d = b; var = d.get ();" 2 -explicit
+CompileExpression::test "d = 21; var = d.get ();" 21 -explicit
+CompileExpression::test "d = 0; var = d.get ();" 0 -explicit
+
+CompileExpression::test "d.int_ = 1; var = d.get ()" 1 -explicit
+CompileExpression::test "d += a; var = d.get ();" 2 -explicit
+CompileExpression::test "d += 2; var = d.get ();" 4 -explicit
+
+CompileExpression::test "d.int_ = 2; var = d.get ()" 2 -explicit
+CompileExpression::test "d -= a; var = d.get ();" 1 -explicit
+CompileExpression::test "d -= 2; var = d.get ();" -1 -explicit
+
+CompileExpression::test "d.int_ = 3; var = d.get ()" 3 -explicit
+CompileExpression::test "d *= 2; var = d.get ()" 6 -explicit
+CompileExpression::test  "d *= d; var = d.get ()" 36 -explicit
+
+CompileExpression::test "d.int_ = 6; var = d.get ()" 6 -explicit
+CompileExpression::test "d /= 2; var = d.get ()" 3 -explicit
+CompileExpression::test  "d /= d; var = d.get ()" 1 -explicit
+
+CompileExpression::test "d.int_ = 4; var = d.get ()" 4 -explicit
+CompileExpression::test "d %= 3; var = d.get ()" 1 -explicit
+CompileExpression::test  "d %= d; var = d.get ()" 0 -explicit
+
+CompileExpression::test "d.int_ = 5; var = d.get ()" 5 -explicit
+CompileExpression::test "d &= 4; var = d.get ()" 4 -explicit
+CompileExpression::test  "d &= a; var = d.get ()" 0 -explicit
+
+CompileExpression::test "d.int_ = 8; var = d.get ()" 8 -explicit
+CompileExpression::test "d |= a; var = d.get ()" 9 -explicit
+CompileExpression::test  "d |= 16; var = d.get ()" 25 -explicit
+
+CompileExpression::test "d.int_ = 9; var = d.get ()" 9 -explicit
+CompileExpression::test "d ^= 2; var = d.get ()" 11 -explicit
+CompileExpression::test  "d ^= d; var = d.get ()" 0 -explicit
+
+CompileExpression::test "d.int_ = 10; var = d.get ()" 10 -explicit
+CompileExpression::test "d << 2" 40
+CompileExpression::test "d << a" 20
+CompileExpression::test "1 << b" 4
+
+CompileExpression::test "d.int_ = 12; var = d.get ()" 12 -explicit
+CompileExpression::test "d >> 2" 3
+CompileExpression::test "d >> a" 6
+CompileExpression::test "10 >> a" 5
+
+CompileExpression::test "d.int_ = 13; var = d.get ()" 13 -explicit
+CompileExpression::test "d <<= 2; var = d.get ()" 52 -explicit
+CompileExpression::test  "d <<= a; var = d.get ()" 104 -explicit
+
+CompileExpression::test "d.int_ = 14; var = d.get ()" 14 -explicit
+CompileExpression::test "d >>= 2; var = d.get ()" 3 -explicit
+CompileExpression::test  "d >>= a; var = d.get ()" 1 -explicit
+
+CompileExpression::test "d.int_ = 1013; var = d.get ()" 1013 -explicit
+CompileExpression::test "d == 2" {(0|false)}
+CompileExpression::test "d == d" {(1|true)}
+CompileExpression::test "1 == d" {(0|false)}
+
+CompileExpression::test "d.int_ = 1014; var = d.get ()" 1014 -explicit
+CompileExpression::test "d != 2" {(1|true)}
+CompileExpression::test "d != d" {(0|false)}
+CompileExpression::test "1014 == d" {(1|true)}
+
+CompileExpression::test "d.int_ = 15; var = d.get ()" 15 -explicit
+CompileExpression::test "d < 2" {(0|false)}
+CompileExpression::test "a < d" {(1|true)}
+CompileExpression::test "16 < d" {(0|false)}
+
+CompileExpression::test "d.int_ = 16; var = d.get ()" 16 -explicit
+CompileExpression::test "d > 2" {(1|true)}
+CompileExpression::test "d < a" {(0|false)}
+CompileExpression::test "15 < d" {(1|true)}
+
+CompileExpression::test "d.int_ = 17; var = d.get ()" 17 -explicit
+CompileExpression::test "d <= 2" {(0|false)}
+CompileExpression::test "a <= d" {(1|true)}
+CompileExpression::test "18 <= d" {(0|false)}
+
+CompileExpression::test "d.int_ = 18; var = d.get ()" 18 -explicit
+CompileExpression::test "d >= 2" {(1|true)}
+CompileExpression::test "d <= a" {(0|false)}
+CompileExpression::test "15 <= d" {(1|true)}
+
+CompileExpression::test "d.int_ = 19; var = d.get ()" 19 -explicit
+CompileExpression::test "!d" {(0|false)}
+
+CompileExpression::test "d.int_ = 20; var = d.get ()" 20 -explicit
+CompileExpression::test "d && 0" {(0|false)}
+CompileExpression::test "d && a" {(1|true)}
+CompileExpression::test "0 && d" {(0|false)}
+
+CompileExpression::test "d.int_ = 21; var = d.get ()" 21 -explicit
+CompileExpression::test "d || 0" {(1|true)}
+CompileExpression::test "d || a" {(1|true)}
+CompileExpression::test "0 || d" {(1|true)}
+
+CompileExpression::test "d.int_ = 22; var = d.get ()" 22 -explicit
+CompileExpression::test "(d++).get ()" 22 -noprint
+CompileExpression::test "(d++).get ()" 23 -nocode
+CompileExpression::test "d.get ()" 24 -name "get value of post-incr d"
+CompileExpression::test "(++d).get ()" 25 -noprint
+CompileExpression::test "(++d).get ()" 26 -nocode
+
+CompileExpression::test "d.int_ = 23; var = d.get ()" 23 -explicit
+CompileExpression::test "(d--).get ()" 23 -noprint
+CompileExpression::test "(d--).get ()" 22 -nocode
+CompileExpression::test "d.get ()" 21 -name "get value of post-decr d"
+CompileExpression::test "(--d).get ()" 20 -noprint
+CompileExpression::test "(--d).get ()" 19 -nocode
+
+CompileExpression::test "d.int_ = 24; var = d.get ()" 24 -explicit
+CompileExpression::test "(a,d).get ()" 1
+CompileExpression::test "(d,a).get ()" 24
+
+CompileExpression::test "d.int_ = 25; var = d.get ()" 25 -explicit
+CompileExpression::test "d->*3" 28
+CompileExpression::test "d->*b" 27 "d->*b 1"
+
+CompileExpression::test "d.int_ = 26; var = d.get ()" 26 -explicit
+CompileExpression::test "d->*4" 30
+CompileExpression::test "d->*b" 28 "d->*b 2"
+
+CompileExpression::test "d.pub_var = 1; var = d.pub_var" 1 -explicit
+CompileExpression::test "d->pub_var" -21
 
 # "'d' cannot be used as function"
- CompileExpression::add_exp "d.int_ = 27; var = d.get ()" 27
- CompileExpression::add_imp "d ()" -27
- CompileExpression::add_imp "d (3)" 30
- CompileExpression::add_imp "a (b)" 3
+ CompileExpression::test "d.int_ = 27; var = d.get ()" 27 -explicit
+ CompileExpression::test "d ()" -27
+ CompileExpression::test "d (3)" 30
+ CompileExpression::test "a (b)" 3
 
-CompileExpression::add_exp "d.int_ = 28; var = d.get ()" 28
-CompileExpression::add_imp "d\[10\]" 18
-CompileExpression::add_imp "d\[b\]" 26
+CompileExpression::test "d.int_ = 28; var = d.get ()" 28 -explicit
+CompileExpression::test "d\[10\]" 18
+CompileExpression::test "d\[b\]" 26
 
 # "unable to find XYZ literal operator 'operator""_MI'"
- CompileExpression::add_imp "10_MI" 100
- CompileExpression::add_imp "'c'_MI" 200
- CompileExpression::add_imp "\"foo\"_MI" 300
+ CompileExpression::test "10_MI" 100
+ CompileExpression::test "'c'_MI" 200
+ CompileExpression::test "\"foo\"_MI" 300
 
 # crash
- CompileExpression::add_exp \
-     "MyInteger *myint_ptr = new MyInteger (1); var = myint_ptr->pub_var" 1234
+ CompileExpression::test \
+    "MyInteger *myint_ptr = new MyInteger (1); var = myint_ptr->pub_var" \
+    1234 -explicit
 
-CompileExpression::add_exp "d.int_ = 29; var = d.int_" 29
-CompileExpression::add_exp "ch = d; var = ch;" 29
-CompileExpression::add_exp "char a_char = d; var = a_char - 9" 20
+CompileExpression::test "d.int_ = 29; var = d.int_" 29 -explicit
+CompileExpression::test "ch = d; var = ch;" 29 -explicit
+CompileExpression::test "char a_char = d; var = a_char - 9" 20 -explicit
 
-CompileExpression::add_exp "d.int_ = 30; var = d.int_" 30
-CompileExpression::add_imp "d" -30
-CompileExpression::add_exp "int integer = d; var = integer - 10" -40
-
-CompileExpression::run_tests "code"
-#CompileExpression::run_tests "print"
+CompileExpression::test "d.int_ = 30; var = d.int_" 30 -explicit
+CompileExpression::test "d" {(-30|{pub_var = 1, int_ = 30})}
+CompileExpression::test "int integer = d; var = integer - 10" -40 -explicit
index 97d0b5fc9ee8772bada553e9d12990998f0ce8b1..935ea5522f67e89cd075e398237bcf91ea17ba14 100644 (file)
@@ -46,46 +46,51 @@ proc skip_compile_feature_tests {} {
 # "compile code" expressions.
 # CompileExpression::new "var"
 #
-# Add the expression "foo;" with result/value 3.
-# CompileExpression::add_imp "foo;" 3
-#
-# Add the expression "a = function (3); var = a;" with the result 21.
-# CompileExpression::add_exp "a = function (3); var = a;" 21
-#
-# Run tests using "compile print".
-# CompileExpression::run_tests "print"
+# Test the implicit expression "foo;" with result/value 3.
+# CompileExpression::test "foo;" 3
 # ---> Runs the following tests (name of tests ignored for illustration)
+#    gdb_test_no_output "compile code var = foo;"
+#    gdb_test "p var" "= 3"
 #    gdb_test "compile print foo;" "= 3"
-#    # "explicit" expressions are ignored
 #
-# Run the tests using "compile code".
-# CompileExpression::run_tests "code"
+# Test the explicit expression "a = function (3); var = a;" with the result 21.
+# CompileExpression::test "a = function (3); var = a;" 21 -explicit
 # ---> Runs the following tests (name of tests ignored for illustration)
-#    gdb_test_no_output "compile code var = foo;"
-#    gdb_test "p var" "= 3"
-#    gdb_test_no_output "compoile code a = function (3); var = a;"
+#    gdb_test_no_output "compile code a = function (3); var = a;"
 #    gdb_test "p var" "= 21"
 #
-# Additional option flags that may be passed to add_mp or add_exp:
+# Additional option flags may be passed to test to control the behavior
+# of the test harness:
+#
+# Pass -explicit to specify that the test uses an explicit expression,
+# one which sets the value of the variable (see above).  Only the code test
+# will be run.
+#
+# Otherwise, all expressions are considered implicit.
+#
 # Pass -value, -compile, and/or -print to indicate that the value,
-# compile, or print steps will optionally fail. Specify -xfail or
-# -kfail to indicate how each particular step will fail.  These may be
+# compile, or print steps will optionally fail. Specify "xfail" or
+# "kfail" to indicate how each particular step will fail.  These may be
 # followed by any accepted DejaGNU parameters such as architecture and
 # bug#.
 #
-# -compile and -value are used when "code" tests are run, the former
+# -compile and -value are used when a "code" test is run, the former
 # specifying that the "compile code" command (to GDB) will fail or pass
 # in the prescribed manner.  -value indicates that the "print $VARIABLE"
 # command (to GDB) will fail in the prescribed manner.
 #
 # -print is used to specify that an expression will fail in the presribed
-# manner when "print" tests are run.
+# manner when "print" test is executed.
 #
 # Pass "-name NAME" to set an optional test name.  If not specified,
 # the harness will use test names such as "compile code EXPR" and
 # "result of compile code EXPR".
 #
-# These options must be passed LAST to the add_imp/add_exp.
+# Pass "-noprint" or "-nocode" to suppress print or code tests, respectively,
+# This is useful when the expression being tested modifies the object
+# being tested, e.g., "a++".
+#
+# These options must be passed LAST to CompileExpression::test.
 #
 # Examples:
 #
@@ -103,103 +108,79 @@ namespace eval ::CompileExpression {
     # must be in scope when tests are run.
     variable varName_ {}
 
-    # A list containing all the expressions to test.
-    # The format is EXPR RESULT IS_EXPLICIT TEST_NAME OPT_FAIL_LIST
-    variable expr_list_ {}
-
     # Start a new expression list.  VARNAME is the name of the variable
     # that will be printed to check if the result of the test was
     # successful.
     proc new {varname} {
        variable varName_
-       variable expr_list_
 
        set varName_ $varname
-       set expr_list_ {}
     }
 
-    # Add an "implicit" expression to the list of tests to run.
+    # Test an expression.
+    #
+    # See the preamble for a list of valid optional arguments.
     #
     # Implicit expressions will be sent to GDB in the form
     # "$varName = $EXP".  "p $varName" will be used to decide the pass
     # or fail status of the test.
     #
-    # The name of the test may be optionally specified.
+    # Explicit expressions will be sent to GDB as-is and tested using only
+    # "compile code".  The expression should set the value of the variable
+    # $varName, which is then printed to determine whether the test passed
+    # or failed.
     #
-    # Unlike explicit expressions, implicit expressions may be tested
-    # with both "compile print" and "compile code".
+    # Unlike explicit expressions, implicit expressions are tested with both
+    # "compile print" and "compile code".
 
-    proc add_imp {exp result {tst ""} args} {
-       variable expr_list_
+    proc test {exp result args} {
+       parse_args {{compile {"" ""}} {value {"" ""}} {print {"" ""}} {name ""}
+           {noprint} {nocode} {explicit}}
 
-       parse_args {{compile {"" ""}} {value {"" ""}} {print {"" ""}} {name ""}}
-       lappend expr_list_ [list $exp $result 0 $name \
-                               [list $compile $value $print]]
-    }
-
-    # Add an "explicit" expression to the list of tests to run.
-    #
-    # Explicit expressions will be sent to GDB as-is.  The expression
-    # should set the value of the variable $varName, which is then printed
-    # to determine whether the test passed or failed.
-    #
-    # The name of the test may be optionally specified.
-    #
-    # Unlike implicit expressions, explicit expressions cannot be tested
-    # with "compile print."  If run_tests is called with "print", any
-    # explicit expressions in the expression list will be ignored.
-
-    proc add_exp {exp result args} {
-       variable expr_list_
-
-       parse_args {{compile {"" ""}} {value {"" ""}} {print {"" ""}} {name ""}}
-       lappend expr_list_ [list $exp $result 1 $name \
-                               [list $compile $value $print]]
+       if {!$nocode} {
+           do_test_ code $exp $result $explicit $name \
+               [list $compile $value $print]
+       }
+       if {!$noprint} {
+           do_test_ print $exp $result $explicit $name \
+               [list $compile $value $print]
+       }
     }
 
-    # Run compile tests for CMD ("print" or "code").
+    # Run a compile test for CMD ("print" or "code").
 
-    proc run_tests {cmd} {
+    proc do_test_ {cmd exp result is_explicit tst fail_list} {
        variable varName_
-       variable expr_list_
 
        if {![string match $cmd "code"]
            && ![string match $cmd "print"]} {
            error "invalid command, $cmd; should be \"print\" or \"compile\""
        }
 
-       foreach exp_test $expr_list_ {
-           set exp [lindex $exp_test 0]
-           set result [lindex $exp_test 1]
-           set is_explicit [lindex $exp_test 2]
-           set tst [lindex $exp_test 3]
-           set fail_list [lindex $exp_test 4]
+       # Get expected result of test.  Will be "" if test is
+       # expected to PASS.
+       lassign $fail_list fail_compile fail_value fail_print
 
-           # Get expected result of test.  Will be "" if test is
-           # expected to PASS.
-           lassign $fail_list fail_compile fail_value fail_print
+       # Set a test name if one hasn't been provided.
+       if {$tst == ""} {
+           set tst "compile $cmd $exp"
+       }
 
-           # Set a test name if one hasn't been provided.
-           if {$tst == ""} {
-               set tst "compile $cmd $exp"
+       if {[string match $cmd "print"]} {
+           if {!$is_explicit} {
+               eval setup_failures_ $fail_print
+               gdb_test "compile print $exp" $result $tst
            }
-
-           if {[string match $cmd "print"]} {
-               if {!$is_explicit} {
-                   eval setup_failures_ $fail_print
-                   gdb_test "compile print $exp" $result $tst
-               }
+       } else {
+           if {$is_explicit} {
+               set command "compile code $exp"
            } else {
-               if {$is_explicit} {
-                   set command "compile code $exp"
-               } else {
-                   set command "compile code $varName_ = $exp"
-               }
-               eval setup_failures_ $fail_compile
-               gdb_test_no_output $command $tst
-               eval setup_failures_ $fail_value
-               gdb_test "p $varName_" "= $result" "result of $tst"
+               set command "compile code $varName_ = $exp"
            }
+           eval setup_failures_ $fail_compile
+           gdb_test_no_output $command $tst
+           eval setup_failures_ $fail_value
+           gdb_test "p $varName_" "= $result" "result of $tst"
        }
     }