Branch: refs/heads/master
Revision: 8cf8c2d
Author: dlongnecke-cray
Log Message:
Merge pull request #17722 from dlongnecke-cray/next-add-new
next: Add AST node for new expressions (#17722)
This is for compiler/next
.
Add a new AST node called New
which represents new
expressions.
This interpretation of New
is somewhat different in that New
nodes now appear only as the base expression of a call. E.g., for
the following code:
x = new r(a=b, c);
This creates a FnCall
node where the called expression is new r
(which is a New
node).
Shown in mockup AST:
Assignment:
Lhs: Identifier(x)
Rhs: FnCall
calledExpr: New(r)
args: (a=b, c)
The parser has to build New
nodes in a kind of strange fashion.
Given the following rule:
new_maybe_decorated expr %prec TNEW
And the following new
expression:
new r(a=b, c)
Then $2 (the expr) is actually a function call. What the parser action
does is remove the called expression from the function call (the
r
part) and swap it back in for a New expression (so new r
instead).
We cannot apply new_expr
in call_base_expr
because new calls
actually have a lower precedence than function calls. In practice, I
don't know if this would matter based on a precursory reading of the
current grammar, but I didn't want to risk it.
Reviewed by @lydia-duncan and @mppf. Thanks!
TESTING:
- [x] All
compiler/next
tests pass
Signed-off-by: David Longnecker dlongnecke-cray@users.noreply.github.com
Modified Files:
A compiler/next/include/chpl/uast/New.h
A compiler/next/lib/uast/New.cpp
A compiler/next/test/frontend/testParseNew.cpp
M compiler/next/include/chpl/uast/ASTClassesList.h
M compiler/next/include/chpl/uast/Builder.h
M compiler/next/lib/frontend/Parser/ParserContext.h
M compiler/next/lib/frontend/Parser/ParserContextImpl.h
M compiler/next/lib/frontend/Parser/chapel.ypp
M compiler/next/lib/frontend/Parser/parser-dependencies.h
M compiler/next/lib/uast/CMakeLists.txt
M compiler/next/test/frontend/CMakeLists.txt
Compare: https://github.com/chapel-lang/chapel/compare/e9aa84d8f388...8cf8c2d75b5d