# 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
-# 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
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
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\.}
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
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
-# 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
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
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>()" \
-# 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
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;" \
# 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
# "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:
#
# 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"
}
}