Mercurial > octave
comparison libinterp/parse-tree/lex.ll @ 24356:8b14ba8296af
refactor symbol_record object
When referencing non-local variables, look in correct parent scope
context. Cache pointer to parent scope for non-local access. Don't
cache pointer to declaration scope.
* symrec.h, symrec.cc (symbol_record::symbol_record_rep::m_fwd_scope):
New data member.
(symbol_record::symbol_record_rep::symbol_record_rep):
Eliminate symbol_scope argument. Change all uses.
(symbol_record::symbol_record_rep::assign,
symbol_record::symbol_record_rep::do_non_const_unary_op):
New argument, context Change all uses. Don't look to forward
reference here.
(symbol_record::symbol_record_rep::varref,
symbol_record::symbol_record_rep::varval): New argument, context.
Change all uses. Use context from forward scope when forwarding to
non-local reference.
(symbol_record::symbol_record_rep::clear,
symbol_record::symbol_record_rep::is_defind,
symbol_record::symbol_record_rep::is_variable,
symbol_record::symbol_record_rep::dump): New argument, context.
Change all uses.
(symbol_record::symbol_record_rep::bind_fwd_rep): New argument,
fwd_scope. Change all uses.
(symbol_record::symbol_record_rep::bind_fwd_rep,
symbol_record::symbol_record_rep::unbind_fwd_rep): Return after forwarding.
(symbol_record::symbol_record_rep::get_fwd_scope_context): New function.
(symbol_record::symbol_record_rep::get_decl_scope_context): Delete.
(symbol_record::symbol_record_rep::m_decl_scope): Delete data
member and all uses.
(symbol_record::symbol_record): Eliminate symbol_scope argument.
Change all uses.
(symbol_record::find, symbol_record::assign,
symbol_record::do_non_const_unary_opt, symbol_record::varval,
symbol_record::clear, symbol_record::is_defined,
symbol_record::is_undefined, symbol_record::is_valid,
symbol_record::is_variable, symbol_record::dump): New arg, context.
Change all uses.
(symbol_record::decl_scope): Delete.
(symbol_record::bind_fwd_rep): New arg, fwd_scope. Change all uses.
* load-save.h, load-save.cc (do_save): New argument, context. Change
all uses.
(save_vars): Work with scope instead of symbol table.
* variables.cc (symbol_info::symbol_info, symbol_info::append): New
arg, context. Change all uses.
* oct-lvalue.h, oct-lvalue.cc (octave_lvalue::m_context):
New data member.
(octave_lvalue::octave_lvalue): New argument, context.
Change all uses.
* pt-decl.h (tree_decl_elt::is_defined, tree_decl_elt::is_variable):
New argument, context. Change all uses.
* pt-id.h, pt-id.cc (tree_identifier::link_to_global):
New argument, global_scope.
(tree_identifier::is_defined, tree_identifier::is_variable,
tree_black_hole::is_variable): New argument, context. Change all
uses.
* pt-misc.h, pt-misc.cc (tree_parameter_list::is_defined): New
argument, context. Change all uses.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Mon, 04 Dec 2017 12:30:40 -0500 |
parents | bc3819b7cca1 |
children | 8bcfddad15ec |
comparison
equal
deleted
inserted
replaced
24355:cc3b3ceb155c | 24356:8b14ba8296af |
---|---|
3156 | 3156 |
3157 // Find the token in the symbol table. | 3157 // Find the token in the symbol table. |
3158 | 3158 |
3159 symbol_scope *scope = symtab_context.curr_scope (); | 3159 symbol_scope *scope = symtab_context.curr_scope (); |
3160 | 3160 |
3161 symbol_record sr | 3161 symbol_record sr = (scope ? scope->insert (ident) : symbol_record (ident)); |
3162 = (scope | |
3163 ? scope->insert (ident) | |
3164 : symbol_record (scope, ident)); | |
3165 | 3162 |
3166 token *tok = new token (NAME, sr, input_line_number, current_input_column); | 3163 token *tok = new token (NAME, sr, input_line_number, current_input_column); |
3167 | 3164 |
3168 // The following symbols are handled specially so that things like | 3165 // The following symbols are handled specially so that things like |
3169 // | 3166 // |