Mercurial > hg > octave-lyh
diff libinterp/parse-tree/pt-except.h @ 17257:923ce8b42db2
improve try-catch-statement to save exception to a variable (bug #33217)
* oct-parse.in.yy (except_command): Handle exception identifiers.
* oct-parse.in.yy, parse.h (octave_base_parser::make_try_command):
New arg, ID.
* pt-except.cc, pt-except.h (tree_try_catch_command::expr_id): New
data member.
(tree_command::tree_command): Initialize it.
(tree_command::~tree_command): Delete it.
(tree_command::identifier): New function.
* pt-check.cc (tree_checker::visit_try_catch_command): Check for valid
expr_id.
* pt-pr-code.cc (tree_print_code::visit_try_catch_command):
Print expr_id.
* pt-eval.cc (tree_evaluator::visit_try_catch_command): Assign message
and identifier to variable.
* try.tst: New test.
* NEWS: Note change.
author | Stefan Mahr <dac922@gmx.de> |
---|---|
date | Tue, 13 Aug 2013 19:35:53 +0200 |
parents | 2fc554ffbc28 |
children |
line wrap: on
line diff
--- a/libinterp/parse-tree/pt-except.h +++ b/libinterp/parse-tree/pt-except.h @@ -29,6 +29,7 @@ #include "comment-list.h" #include "pt-cmd.h" +#include "pt-id.h" #include "symtab.h" // Simple exception handling. @@ -39,19 +40,22 @@ public: tree_try_catch_command (int l = -1, int c = -1) - : tree_command (l, c), try_code (0), catch_code (0), lead_comm (0), + : tree_command (l, c), try_code (0), catch_code (0), expr_id (0), lead_comm (0), mid_comm (0), trail_comm (0) { } tree_try_catch_command (tree_statement_list *tc, tree_statement_list *cc, + tree_identifier *id, octave_comment_list *cl = 0, octave_comment_list *cm = 0, octave_comment_list *ct = 0, int l = -1, int c = -1) - : tree_command (l, c), try_code (tc), catch_code (cc), + : tree_command (l, c), try_code (tc), catch_code (cc), expr_id (id), lead_comm (cl), mid_comm (cm), trail_comm (ct) { } ~tree_try_catch_command (void); + tree_identifier *identifier (void) { return expr_id; } + tree_statement_list *body (void) { return try_code; } tree_statement_list *cleanup (void) { return catch_code; } @@ -75,6 +79,9 @@ // The code to execute if an error occurs in the first block. tree_statement_list *catch_code; + // Identifier to modify. + tree_identifier *expr_id; + // Comment preceding TRY token. octave_comment_list *lead_comm;