From 2f4d53338e40c8da7191ac0ce07620770b981984 Mon Sep 17 00:00:00 2001 From: Liran Zvibel Date: Thu, 24 Apr 2014 21:11:46 +0300 Subject: [PATCH] Parser: Support {start,end}Location for ReturnStatement --- std/d/ast.d | 2 ++ std/d/parser.d | 8 ++++++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/std/d/ast.d b/std/d/ast.d index 9e508bf..a44b473 100644 --- a/std/d/ast.d +++ b/std/d/ast.d @@ -2302,6 +2302,8 @@ public: mixin (visitIfNotNull!(expression)); } /** */ Expression expression; + /** */ size_t startLocation; + /** */ size_t endLocation; mixin OpEquals; } diff --git a/std/d/parser.d b/std/d/parser.d index 65cdc51..22b81d3 100644 --- a/std/d/parser.d +++ b/std/d/parser.d @@ -4425,10 +4425,14 @@ q{(int a, ...) { mixin(traceEnterAndExit!(__FUNCTION__)); auto node = allocate!ReturnStatement; - if (expect(tok!"return") is null) return null; + auto start = expect(tok!"return"); + if (start is null) return null; + node.startLocation = start.index; if (!currentIs(tok!";")) node.expression = parseExpression(); - if (expect(tok!";") is null) return null; + auto semicolon = expect(tok!";"); + if (semicolon is null) return null; + node.endLocation = semicolon.index; return node; }