diff options
author | Ben Longbons <b.r.longbons@gmail.com> | 2014-11-03 13:35:54 -0800 |
---|---|---|
committer | Ben Longbons <b.r.longbons@gmail.com> | 2014-11-04 20:10:50 -0800 |
commit | 1853e964e96c41e762ca0ab97259ee4e79d86ec7 (patch) | |
tree | edc76f58ed786263a28da79564786f4d75400092 /src/ast/item.cpp | |
parent | 1a00fe4ea75924bfe594c4d92073cc95eaa2f32d (diff) | |
download | tmwa-1853e964e96c41e762ca0ab97259ee4e79d86ec7.tar.gz tmwa-1853e964e96c41e762ca0ab97259ee4e79d86ec7.tar.bz2 tmwa-1853e964e96c41e762ca0ab97259ee4e79d86ec7.tar.xz tmwa-1853e964e96c41e762ca0ab97259ee4e79d86ec7.zip |
Use the new ASTs
Diffstat (limited to 'src/ast/item.cpp')
-rw-r--r-- | src/ast/item.cpp | 27 |
1 files changed, 11 insertions, 16 deletions
diff --git a/src/ast/item.cpp b/src/ast/item.cpp index 99417d8..bd4f295 100644 --- a/src/ast/item.cpp +++ b/src/ast/item.cpp @@ -18,8 +18,6 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see <http://www.gnu.org/licenses/>. -#include "../compat/memory.hpp" - #include "../io/extract.hpp" #include "../io/line.hpp" @@ -36,9 +34,6 @@ namespace item { using io::respan; - // separate file because virtual - ItemOrComment::~ItemOrComment() {} - static void skip_comma_space(io::LineCharReader& lr) { @@ -107,6 +102,7 @@ namespace item opt.implicit_start = true; opt.implicit_end = true; opt.one_line = true; + opt.no_event = true; auto rv = ast::script::parse_script_body(lr, opt); if (rv.get_success().is_some()) { @@ -115,20 +111,19 @@ namespace item return rv; } -#define SPAN_EXTRACT(bitexpr, var) ({ auto bit = bitexpr; if (!extract(bit.data, &var.data)) return Err(bit.span.error_str("failed to extract"_s #var)); var.span = bit.span; }) +#define SPAN_EXTRACT(bitexpr, var) ({ auto bit = bitexpr; if (!extract(bit.data, &var.data)) return Err(bit.span.error_str("failed to extract "_s #var)); var.span = bit.span; }) #define EOL_ERROR(lr) ({ io::LineChar c; lr.get(c) ? Err(c.error_str("unexpected EOL"_s)) : Err("unexpected EOF before unexpected EOL"_s); }) - Result<std::unique_ptr<ItemOrComment>> parse_item(io::LineCharReader& lr) + Option<Result<ItemOrComment>> parse_item(io::LineCharReader& lr) { - std::unique_ptr<ItemOrComment> rv = nullptr; - Spanned<RString> first = TRY_UNWRAP(lex_nonscript(lr, true), return Ok(std::move(rv))); + Spanned<RString> first = TRY_UNWRAP(lex_nonscript(lr, true), return None); if (first.data.startswith("//"_s)) { Comment comment; - comment.span = first.span; comment.comment = first.data; - rv = make_unique<Comment>(std::move(comment)); - return Ok(std::move(rv)); + ItemOrComment rv = std::move(comment); + rv.span = first.span; + return Some(Ok(std::move(rv))); } Item item; SPAN_EXTRACT(first, item.id); @@ -150,10 +145,10 @@ namespace item SPAN_EXTRACT(TRY_UNWRAP(lex_nonscript(lr, false), return EOL_ERROR(lr)), item.view); item.use_script = TRY(lex_script(lr)); item.equip_script = TRY(lex_script(lr)); - item.span.begin = item.id.span.begin; - item.span.end = item.equip_script.span.end; - rv = make_unique<Item>(std::move(item)); - return Ok(std::move(rv)); + ItemOrComment rv = std::move(item); + rv.span.begin = item.id.span.begin; + rv.span.end = item.equip_script.span.end; + return Some(Ok(std::move(rv))); } } // namespace item } // namespace ast |