Mercurial > octave-nkf
view libinterp/parse-tree/token.cc @ 18520:932aca9a7c57
Allow multi-level classdef package.
* lex.h (octave_base_lexer::fq_identifier_contains_keyword,
octave_base_lexer::handle_fq_identifier,
octave_base_lexer::enable_fq_identifier): New methods.
* lex.ll (octave_base_lexer::fq_identifier_contains_keyword,
octave_base_lexer::handle_fq_identifier,
octave_base_lexer::enable_fq_identifier): Likewise.
(FQ_IDENT_START, FQIDENT): New exclusive start condition and regex to
handle fully-qualified identifier.
(superclass reference rule, metaclass query rule): Use FQIDENT.
(octave_base_lexer::handle_superclass_identifier,
octave_base_lexer::handle_meta_identifier): Don't split package name.
* parse.h (octave_base_parser::make_superclass_ref,
octave_base_parser::make_meta_class_query): Remove package_nm argument.
* pt-classdef.h (tree_classdef_superclass::id,
tree_classdef_superclass::pkg): Removed members, replaced by cls_name.
(tree_classdef_superclass::~tree_classdef_superclass): Remove deletion
of removed members.
(tree_classdef_superclass::cls_name): New member.
(tree_classdef_superclass::tree_classdef_superclass): Initialize it.
(tree_classdef_superclass::ident, tree_classdef_superclass::package):
Removed methods.
(tree_classdef_superclass::class_name): New method.
* token.h (token::meta_name_token): Remove enum value.
(token(int, std::string, std::string, std::string, int, int)): Remove
constructor.
(token::superclass_package_name, token::meta_package_name,
token::meta_class_name): Remove methods.
(token::sc::package_nm, token::mc): Remove union members.
* token.cc
(token(int, std::string, std::string, std::string, int, int)): Remove
constructor.
(token::~token): Remove case of meta_name_token.
(token::superclass_package_name, token::meta_package_name,
token::meta_class_name): Remove methods.
* oct-parse.in.yy (FQ_IDENT): New terminal.
(superclass_identifier): Adapt to changes in class token and class
octave_base_parser.
(meta_identifier): Likewise.
(superclass_list): Add mid-rule to enable fully-qualified identifier.
(superclass): Use FQ_IDENT.
(octave_base_parser::make_superclass_ref,
octave_base_parser::make_meta_class_query): Remove package_nm argument.
* ov-classdef.cc (octave_classdef_superclass_ref::do_multi_index_op):
Adapt to removal of package_nm argument.
(F__meta_class_query__): Likewise.
(cdef_class::make_meta_class): Adapt to changes in class
tree_classdef_superclass.
author | Michael Goffioul <michael.goffioul@gmail.com> |
---|---|
date | Sat, 22 Feb 2014 19:56:17 -0500 |
parents | 93b3d03b05e7 |
children | 4197fc428c7d |
line wrap: on
line source
/* Copyright (C) 1993-2013 John W. Eaton This file is part of Octave. Octave 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. Octave 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 Octave; see the file COPYING. If not, see <http://www.gnu.org/licenses/>. */ #ifdef HAVE_CONFIG_H #include <config.h> #endif #include <cassert> #include "error.h" #include "oct-obj.h" #include "symtab.h" #include "token.h" #include "utils.h" token::token (int tv, int l, int c) { maybe_cmd = false; tspc = false; line_num = l; column_num = c; tok_val = tv; type_tag = generic_token; } token::token (int tv, bool is_kw, int l, int c) { maybe_cmd = false; tspc = false; line_num = l; column_num = c; tok_val = tv; type_tag = is_kw ? keyword_token : generic_token; } token::token (int tv, const std::string& s, int l, int c) { maybe_cmd = false; tspc = false; line_num = l; column_num = c; tok_val = tv; type_tag = string_token; str = new std::string (s); } token::token (int tv, double d, const std::string& s, int l, int c) { maybe_cmd = false; tspc = false; line_num = l; column_num = c; tok_val = tv; type_tag = double_token; num = d; orig_text = s; } token::token (int tv, end_tok_type t, int l, int c) { maybe_cmd = false; tspc = false; line_num = l; column_num = c; tok_val = tv; type_tag = ettype_token; et = t; } token::token (int tv, symbol_table::symbol_record *s, int l, int c) { maybe_cmd = false; tspc = false; line_num = l; column_num = c; tok_val = tv; type_tag = sym_rec_token; sr = s; } token::token (int tv, const std::string& mth, const std::string& cls, int l, int c) { maybe_cmd = false; tspc = false; line_num = l; column_num = c; tok_val = tv; type_tag = scls_name_token; sc.method_nm = new std::string (mth); sc.class_nm = new std::string (cls); } token::~token (void) { if (type_tag == string_token) delete str; if (type_tag == scls_name_token) { delete sc.method_nm; delete sc.class_nm; } } std::string token::text (void) const { assert (type_tag == string_token); return *str; } std::string token::symbol_name (void) const { assert (type_tag == sym_rec_token); return sr->name (); } double token::number (void) const { assert (type_tag == double_token); return num; } token::token_type token::ttype (void) const { return type_tag; } token::end_tok_type token::ettype (void) const { assert (type_tag == ettype_token); return et; } symbol_table::symbol_record * token::sym_rec (void) { assert (type_tag == sym_rec_token); return sr; } std::string token::superclass_method_name (void) { assert (type_tag == scls_name_token); return *sc.method_nm; } std::string token::superclass_class_name (void) { assert (type_tag == scls_name_token); return *sc.class_nm; } std::string token::text_rep (void) { return orig_text; }