Skip to content

Commit 563134b

Browse files
committed
fix defined() context
1 parent cb9c7fe commit 563134b

File tree

1 file changed

+5
-1
lines changed

1 file changed

+5
-1
lines changed

src/main/java/org/perlonjava/parser/OperatorParser.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,10 @@ static Node parseDoOperator(Parser parser) {
3939
token = TokenUtils.peek(parser);
4040
if (token.type == LexerTokenType.OPERATOR && token.text.equals("{")) {
4141
TokenUtils.consume(parser, LexerTokenType.OPERATOR, "{");
42+
boolean parsingTakeReference = parser.parsingTakeReference;
43+
parser.parsingTakeReference = false;
4244
block = ParseBlock.parseBlock(parser);
45+
parser.parsingTakeReference = parsingTakeReference;
4346
TokenUtils.consume(parser, LexerTokenType.OPERATOR, "}");
4447
return block;
4548
}
@@ -438,9 +441,10 @@ static BinaryOperatorNode parseBless(Parser parser, int currentIndex) {
438441
static OperatorNode parseDefined(Parser parser, LexerToken token, int currentIndex) {
439442
Node operand;
440443
// Handle 'defined' operator with special parsing context
444+
boolean parsingTakeReference = parser.parsingTakeReference;
441445
parser.parsingTakeReference = true; // don't call `&subr` while parsing "Take reference"
442446
operand = ListParser.parseZeroOrOneList(parser, 0);
443-
parser.parsingTakeReference = false;
447+
parser.parsingTakeReference = parsingTakeReference;
444448
if (((ListNode) operand).elements.isEmpty()) {
445449
// `defined` without arguments means `defined $_`
446450
((ListNode) operand).elements.add(

0 commit comments

Comments
 (0)