From 457945487b53647a9f86857501e564637461b25d Mon Sep 17 00:00:00 2001 From: attila Date: Mon, 11 Nov 2013 14:25:01 +0100 Subject: [PATCH] 8028020: Function parameter as last expression in comma in return value causes bad type calculation Reviewed-by: jlaskey, lagergren, sundar --- src/jdk/nashorn/internal/codegen/Attr.java | 9 ++++- .../internal/codegen/CodeGenerator.java | 2 + test/script/basic/JDK-8028020.js | 40 +++++++++++++++++++ test/script/basic/JDK-8028020.js.EXPECTED | 2 + 4 files changed, 51 insertions(+), 2 deletions(-) create mode 100644 test/script/basic/JDK-8028020.js create mode 100644 test/script/basic/JDK-8028020.js.EXPECTED diff --git a/src/jdk/nashorn/internal/codegen/Attr.java b/src/jdk/nashorn/internal/codegen/Attr.java index d4e378cf..f1ced8ad 100644 --- a/src/jdk/nashorn/internal/codegen/Attr.java +++ b/src/jdk/nashorn/internal/codegen/Attr.java @@ -1265,12 +1265,17 @@ final class Attr extends NodeOperatorVisitor { @Override public Node leaveCOMMARIGHT(final BinaryNode binaryNode) { - return end(ensureSymbol(binaryNode.rhs().getType(), binaryNode)); + return leaveComma(binaryNode, binaryNode.rhs()); } @Override public Node leaveCOMMALEFT(final BinaryNode binaryNode) { - return end(ensureSymbol(binaryNode.lhs().getType(), binaryNode)); + return leaveComma(binaryNode, binaryNode.lhs()); + } + + private Node leaveComma(final BinaryNode commaNode, final Expression effectiveExpr) { + ensureTypeNotUnknown(effectiveExpr); + return end(ensureSymbol(effectiveExpr.getType(), commaNode)); } @Override diff --git a/src/jdk/nashorn/internal/codegen/CodeGenerator.java b/src/jdk/nashorn/internal/codegen/CodeGenerator.java index 206433db..f5c1fb87 100644 --- a/src/jdk/nashorn/internal/codegen/CodeGenerator.java +++ b/src/jdk/nashorn/internal/codegen/CodeGenerator.java @@ -412,6 +412,8 @@ final class CodeGenerator extends NodeOperatorVisitor