public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc/devel/rust/master] macro-invoc-lexer: Split implementation in its own file
@ 2022-06-08 12:10 Thomas Schwinge
0 siblings, 0 replies; only message in thread
From: Thomas Schwinge @ 2022-06-08 12:10 UTC (permalink / raw)
To: gcc-cvs
https://gcc.gnu.org/g:4e19c2f792e14c2a047a53c913a73d79f91ff277
commit 4e19c2f792e14c2a047a53c913a73d79f91ff277
Author: Arthur Cohen <arthur.cohen@embecosm.com>
Date: Mon Feb 21 17:23:48 2022 +0100
macro-invoc-lexer: Split implementation in its own file
Diff:
---
gcc/rust/Make-lang.in | 1 +
gcc/rust/expand/rust-macro-expand.h | 47 +----------------------
gcc/rust/expand/rust-macro-invoc-lexer.cc | 29 ++++++++++++++
gcc/rust/expand/rust-macro-invoc-lexer.h | 64 +++++++++++++++++++++++++++++++
4 files changed, 95 insertions(+), 46 deletions(-)
diff --git a/gcc/rust/Make-lang.in b/gcc/rust/Make-lang.in
index 65c9bbabc14..739b27de8a3 100644
--- a/gcc/rust/Make-lang.in
+++ b/gcc/rust/Make-lang.in
@@ -74,6 +74,7 @@ GRS_OBJS = \
rust/rust-mangle.o \
rust/rust-compile-resolve-path.o \
rust/rust-macro-expand.o \
+ rust/rust-macro-invoc-lexer.o \
rust/rust-hir-full-test.o \
rust/rust-hir-map.o \
rust/rust-abi.o \
diff --git a/gcc/rust/expand/rust-macro-expand.h b/gcc/rust/expand/rust-macro-expand.h
index d49c77571b2..64bb0b4bc48 100644
--- a/gcc/rust/expand/rust-macro-expand.h
+++ b/gcc/rust/expand/rust-macro-expand.h
@@ -26,6 +26,7 @@
#include "rust-macro.h"
#include "rust-hir-map.h"
#include "rust-name-resolver.h"
+#include "rust-macro-invoc-lexer.h"
// Provides objects and method prototypes for macro expansion
@@ -48,52 +49,6 @@ struct ExpansionCfg
std::string crate_name = "";
};
-class MacroInvocLexer
-{
-public:
- MacroInvocLexer (std::vector<std::unique_ptr<AST::Token>> stream)
- : offs (0), token_stream (std::move (stream))
- {}
-
- // Returns token n tokens ahead of current position.
- const_TokenPtr peek_token (int n)
- {
- if ((offs + n) >= token_stream.size ())
- return Token::make (END_OF_FILE, Location ());
-
- return token_stream.at (offs + n)->get_tok_ptr ();
- }
- // Peeks the current token.
- const_TokenPtr peek_token () { return peek_token (0); }
-
- // Advances current token to n + 1 tokens ahead of current position.
- void skip_token (int n) { offs += (n + 1); }
-
- // Skips the current token.
- void skip_token () { skip_token (0); }
-
- // Splits the current token into two. Intended for use with nested generics
- // closes (i.e. T<U<X>> where >> is wrongly lexed as one token). Note that
- // this will only work with "simple" tokens like punctuation.
- void split_current_token (TokenId /*new_left*/, TokenId /*new_right*/)
- {
- // FIXME
- gcc_unreachable ();
- }
-
- std::string get_filename () const
- {
- gcc_unreachable ();
- return "FIXME";
- }
-
- size_t get_offs () const { return offs; }
-
-private:
- size_t offs;
- std::vector<std::unique_ptr<AST::Token>> token_stream;
-};
-
struct MatchedFragment
{
std::string fragment_ident;
diff --git a/gcc/rust/expand/rust-macro-invoc-lexer.cc b/gcc/rust/expand/rust-macro-invoc-lexer.cc
new file mode 100644
index 00000000000..8a43d29e0d1
--- /dev/null
+++ b/gcc/rust/expand/rust-macro-invoc-lexer.cc
@@ -0,0 +1,29 @@
+#include "rust-macro-invoc-lexer.h"
+
+namespace Rust {
+
+const_TokenPtr
+MacroInvocLexer::peek_token (int n)
+{
+ if ((offs + n) >= token_stream.size ())
+ return Token::make (END_OF_FILE, Location ());
+
+ return token_stream.at (offs + n)->get_tok_ptr ();
+}
+
+// Advances current token to n + 1 tokens ahead of current position.
+void
+MacroInvocLexer::skip_token (int n)
+{
+ offs += (n + 1);
+}
+
+void
+MacroInvocLexer::split_current_token (TokenId new_left __attribute__ ((unused)),
+ TokenId new_right
+ __attribute__ ((unused)))
+{
+ // FIXME
+ gcc_unreachable ();
+}
+} // namespace Rust
diff --git a/gcc/rust/expand/rust-macro-invoc-lexer.h b/gcc/rust/expand/rust-macro-invoc-lexer.h
new file mode 100644
index 00000000000..0fd4554d02f
--- /dev/null
+++ b/gcc/rust/expand/rust-macro-invoc-lexer.h
@@ -0,0 +1,64 @@
+// Copyright (C) 2020-2022 Free Software Foundation, Inc.
+
+// This file is part of GCC.
+
+// GCC 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, or (at your option) any later
+// version.
+
+// GCC 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 GCC; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#ifndef RUST_MACRO_INVOC_LEXER_H
+#define RUST_MACRO_INVOC_LEXER_H
+
+#include "rust-ast.h"
+
+namespace Rust {
+class MacroInvocLexer
+{
+public:
+ MacroInvocLexer (std::vector<std::unique_ptr<AST::Token>> stream)
+ : offs (0), token_stream (std::move (stream))
+ {}
+
+ // Returns token n tokens ahead of current position.
+ const_TokenPtr peek_token (int n);
+
+ // Peeks the current token.
+ const_TokenPtr peek_token () { return peek_token (0); }
+
+ // Advances current token to n + 1 tokens ahead of current position.
+ void skip_token (int n);
+
+ // Skips the current token.
+ void skip_token () { skip_token (0); }
+
+ // Splits the current token into two. Intended for use with nested generics
+ // closes (i.e. T<U<X>> where >> is wrongly lexed as one token). Note that
+ // this will only work with "simple" tokens like punctuation.
+ void split_current_token (TokenId new_left, TokenId new_right);
+
+ std::string get_filename () const
+ {
+ // FIXME
+ gcc_unreachable ();
+ return "FIXME";
+ }
+
+ size_t get_offs () const { return offs; }
+
+private:
+ size_t offs;
+ std::vector<std::unique_ptr<AST::Token>> token_stream;
+};
+} // namespace Rust
+
+#endif // RUST_MACRO_INVOC_LEXER_H
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2022-06-08 12:10 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-06-08 12:10 [gcc/devel/rust/master] macro-invoc-lexer: Split implementation in its own file Thomas Schwinge
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).