diff --git a/language/src/regent/parser.t b/language/src/regent/parser.t index 366bd4e6a0..d24aca34dd 100644 --- a/language/src/regent/parser.t +++ b/language/src/regent/parser.t @@ -89,23 +89,30 @@ function parser.annotations(p, allow_expr, allow_stat) local level = p:annotation_level() if not level then return annotations end - p:expect("(") - local name = p:annotation_name(true) - annotations = annotations { [name] = level } + local closed = false + while level do + p:expect("(") + local name = p:annotation_name(true) + annotations = annotations { [name] = level } + + while p:nextif(",") do + local name = p:annotation_name(false) + if name then + annotations = annotations { [name] = level } + elseif allow_expr then + local expr = p:expr() + p:expect(")") + return expr { annotations = annotations } + end + end - while p:nextif(",") do - local name = p:annotation_name(false) - if name then - annotations = annotations { [name] = level } - elseif allow_expr then - local expr = p:expr() - p:expect(")") - return expr { annotations = annotations } + if allow_stat and p:nextif(")") then + level = p:annotation_level() + closed = not level end end - if allow_stat then - p:expect(")") + if allow_stat and closed then return annotations else assert(allow_expr) diff --git a/language/tests/regent/run_pass/annotations_task_multiple.rg b/language/tests/regent/run_pass/annotations_task_multiple.rg new file mode 100644 index 0000000000..cb14f19c18 --- /dev/null +++ b/language/tests/regent/run_pass/annotations_task_multiple.rg @@ -0,0 +1,32 @@ +-- Copyright 2018 Stanford University +-- +-- Licensed under the Apache License, Version 2.0 (the "License"); +-- you may not use this file except in compliance with the License. +-- You may obtain a copy of the License at +-- +-- http://www.apache.org/licenses/LICENSE-2.0 +-- +-- Unless required by applicable law or agreed to in writing, software +-- distributed under the License is distributed on an "AS IS" BASIS, +-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +-- See the License for the specific language governing permissions and +-- limitations under the License. + +import "regent" + +-- This tests multiple annotations to a task + +task inc(r : region(int), y : int) +where reads writes(r) do + for x in r do + @x += y + end +end + +__demand(__inner) __forbid(__optimize) +task main() + var r = region(ispace(ptr, 4), int) + fill(r, 0) + inc(r, 100) +end +regentlib.start(main)