Mercurial > octave-libgccjit
diff libinterp/parse-tree/oct-parse.in.yy @ 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 | 9154dc252f47 |
children | f958e8cd6348 |
line wrap: on
line diff
--- a/libinterp/parse-tree/oct-parse.in.yy Sat Feb 22 08:23:26 2014 -0800 +++ b/libinterp/parse-tree/oct-parse.in.yy Sat Feb 22 19:56:17 2014 -0500 @@ -235,6 +235,7 @@ %token <tok_val> PROPERTIES METHODS EVENTS ENUMERATION %token <tok_val> METAQUERY %token <tok_val> SUPERCLASSREF +%token <tok_val> FQ_IDENT %token <tok_val> GET SET %token <tok_val> FCN @@ -485,23 +486,20 @@ : SUPERCLASSREF { std::string method_nm = $1->superclass_method_name (); - std::string package_nm = $1->superclass_package_name (); std::string class_nm = $1->superclass_class_name (); $$ = parser.make_superclass_ref - (method_nm, package_nm, class_nm, + (method_nm, class_nm, $1->line (), $1->column ()); } ; meta_identifier : METAQUERY { - std::string package_nm = $1->meta_package_name (); - std::string class_nm = $1->meta_class_name (); - - $$ = parser.make_meta_class_query - (package_nm, class_nm, - $1->line (), $1->column ()); + std::string class_nm = $1->text (); + + $$ = parser.make_meta_class_query (class_nm, $1->line (), + $1->column ()); } ; @@ -1553,19 +1551,21 @@ { $$ = $1; } ; -superclass_list : EXPR_LT superclass - { $$ = new tree_classdef_superclass_list ($2); } - | superclass_list EXPR_AND superclass +superclass_list : EXPR_LT + { lexer.enable_fq_identifier (); } + superclass + { $$ = new tree_classdef_superclass_list ($3); } + | superclass_list EXPR_AND + { lexer.enable_fq_identifier (); } + superclass { - $1->append ($3); + $1->append ($4); $$ = $1; } ; -superclass : identifier - { $$ = new tree_classdef_superclass ($1); } - | identifier '.' identifier - { $$ = new tree_classdef_superclass ($3, $1); } +superclass : FQ_IDENT + { $$ = new tree_classdef_superclass ($1->text ()); } ; class_body : properties_block @@ -3115,14 +3115,12 @@ tree_funcall * octave_base_parser::make_superclass_ref (const std::string& method_nm, - const std::string& package_nm, const std::string& class_nm, int l, int c) { octave_value_list args; - args(2) = class_nm; - args(1) = package_nm; + args(1) = class_nm; args(0) = method_nm; octave_value fcn @@ -3132,14 +3130,12 @@ } tree_funcall * -octave_base_parser::make_meta_class_query (const std::string& package_nm, - const std::string& class_nm, +octave_base_parser::make_meta_class_query (const std::string& class_nm, int l, int c) { octave_value_list args; - args(1) = class_nm; - args(0) = package_nm; + args(0) = class_nm; octave_value fcn = symbol_table::find_built_in_function ("__meta_class_query__");