Skip to content

Commit

Permalink
regent: Support multiple annotations
Browse files Browse the repository at this point in the history
  • Loading branch information
magnatelee committed May 7, 2018
1 parent 7ab0dba commit a0e1038
Show file tree
Hide file tree
Showing 2 changed files with 52 additions and 13 deletions.
33 changes: 20 additions & 13 deletions language/src/regent/parser.t
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
32 changes: 32 additions & 0 deletions language/tests/regent/run_pass/annotations_task_multiple.rg
Original file line number Diff line number Diff line change
@@ -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)

0 comments on commit a0e1038

Please sign in to comment.