From bf7f09879958b4b52ccd4dd8761a4db91d467fdd Mon Sep 17 00:00:00 2001 From: Hackerpilot Date: Wed, 29 Jan 2014 15:39:57 -0800 Subject: [PATCH] Fix bug in HEREDOC string literal lexing --- stdx/d/lexer.d | 12 ++++++++---- stdx/d/parser.d | 2 -- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/stdx/d/lexer.d b/stdx/d/lexer.d index 05071e0..ca05a92 100644 --- a/stdx/d/lexer.d +++ b/stdx/d/lexer.d @@ -1120,17 +1120,21 @@ public struct DLexer if (isNewline()) { popFrontWhitespaceAware(); - if (range.peek(ident.text.length) == ident.text) + if (!range.canPeek(ident.text.length)) { - foreach (i ; 0 .. ident.text.length) - range.popFront(); + error(ident.text ~ " expected"); + break; + } + if (range.peek(ident.text.length - 1) == ident.text) + { + range.popFrontN(ident.text.length); break; } } else range.popFront(); } - if (range.front == '"') + if (!range.empty() && range.front == '"') range.popFront(); else error(`" expected`); diff --git a/stdx/d/parser.d b/stdx/d/parser.d index b977c3c..3b1830e 100644 --- a/stdx/d/parser.d +++ b/stdx/d/parser.d @@ -1780,8 +1780,6 @@ class ClassFour(A, B) if (someTest()) : Super {}}c; auto dos = parseDeclarationOrStatement(); if (dos !is null) node.declarationsAndStatements ~= dos; - /*else - return null;*/ } return node; }