From 6f5c71eef189794ba528303b4d4cda6438d86253 Mon Sep 17 00:00:00 2001 From: Callum Anderson Date: Sat, 22 Feb 2014 14:37:08 +1100 Subject: [PATCH 1/3] Allow function attributes in lambda expression --- stdx/d/parser.d | 2 ++ 1 file changed, 2 insertions(+) diff --git a/stdx/d/parser.d b/stdx/d/parser.d index 1b2d585..9b72755 100644 --- a/stdx/d/parser.d +++ b/stdx/d/parser.d @@ -4149,6 +4149,8 @@ q{(int a, ...) auto b = setBookmark(); advance(); // function | delegate skipParens(); + while (isAttribute()) + parseAttribute(); if (currentIs(tok!"=>")) { goToBookmark(b); From faf17b8afe23eb89dae31df5aa7258cae2f32011 Mon Sep 17 00:00:00 2001 From: Callum Anderson Date: Sat, 22 Feb 2014 15:56:50 +1100 Subject: [PATCH 2/3] Allow typeof expression in template mixin --- stdx/d/parser.d | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stdx/d/parser.d b/stdx/d/parser.d index 9b72755..cb6602f 100644 --- a/stdx/d/parser.d +++ b/stdx/d/parser.d @@ -3384,7 +3384,7 @@ invariant() foo(); { mixin(traceEnterAndExit!(__FUNCTION__)); auto node = new MixinDeclaration; - if (peekIs(tok!"identifier")) + if (peekIs(tok!"identifier") || peekIs(tok!"typeof")) node.templateMixinExpression = parseTemplateMixinExpression(); else if (peekIs(tok!"(")) node.mixinExpression = parseMixinExpression(); From 355791cee698f8edf3680d4467ba6a88690bf110 Mon Sep 17 00:00:00 2001 From: Callum Anderson Date: Sat, 22 Feb 2014 16:53:37 +1100 Subject: [PATCH 3/3] Check for constructor args in new anon class expression --- stdx/d/parser.d | 2 ++ 1 file changed, 2 insertions(+) diff --git a/stdx/d/parser.d b/stdx/d/parser.d index 9b72755..7187166 100644 --- a/stdx/d/parser.d +++ b/stdx/d/parser.d @@ -3527,6 +3527,8 @@ invariant() foo(); if (currentIs(tok!"(")) node.allocatorArguments = parseArguments(); expect(tok!"class"); + if (currentIs(tok!"(")) + node.constructorArguments = parseArguments(); if (!currentIs(tok!"{")) node.baseClassList = parseBaseClassList(); node.structBody = parseStructBody();