Skip to content

Commit

Permalink
Fix null aware generic invocation.
Browse files Browse the repository at this point in the history
Fixes #600

BUG=
R=jacobr@google.com

Review URL: https://codereview.chromium.org/2132763002 .
  • Loading branch information
leafpetersen committed Jul 7, 2016
1 parent 1ae094d commit fceb82f
Show file tree
Hide file tree
Showing 4 changed files with 13 additions and 9 deletions.
8 changes: 4 additions & 4 deletions pkg/dev_compiler/lib/runtime/dart_sdk.js
Original file line number Diff line number Diff line change
Expand Up @@ -72786,8 +72786,8 @@ dart_library.library('dart_sdk', null, /* Imports */[
let attributes = opts && 'attributes' in opts ? opts.attributes : null;
let uriAttributes = opts && 'uriAttributes' in opts ? opts.uriAttributes : null;
let tagNameUpper = tagName[dartx.toUpperCase]();
let attrs = dart.nullSafe(attributes, _ => _[dartx.map](dart.fn(name => dart.str`${tagNameUpper}::${name[dartx.toLowerCase]()}`, StringToString$())));
let uriAttrs = dart.nullSafe(uriAttributes, _ => _[dartx.map](dart.fn(name => dart.str`${tagNameUpper}::${name[dartx.toLowerCase]()}`, StringToString$())));
let attrs = dart.nullSafe(attributes, _ => _[dartx.map](core.String)(dart.fn(name => dart.str`${tagNameUpper}::${name[dartx.toLowerCase]()}`, StringToString$())));
let uriAttrs = dart.nullSafe(uriAttributes, _ => _[dartx.map](core.String)(dart.fn(name => dart.str`${tagNameUpper}::${name[dartx.toLowerCase]()}`, StringToString$())));
if (uriPolicy == null) {
uriPolicy = html$.UriPolicy.new();
}
Expand All @@ -72799,8 +72799,8 @@ dart_library.library('dart_sdk', null, /* Imports */[
let uriAttributes = opts && 'uriAttributes' in opts ? opts.uriAttributes : null;
let baseNameUpper = baseName[dartx.toUpperCase]();
let tagNameUpper = tagName[dartx.toUpperCase]();
let attrs = dart.nullSafe(attributes, _ => _[dartx.map](dart.fn(name => dart.str`${baseNameUpper}::${name[dartx.toLowerCase]()}`, StringToString$())));
let uriAttrs = dart.nullSafe(uriAttributes, _ => _[dartx.map](dart.fn(name => dart.str`${baseNameUpper}::${name[dartx.toLowerCase]()}`, StringToString$())));
let attrs = dart.nullSafe(attributes, _ => _[dartx.map](core.String)(dart.fn(name => dart.str`${baseNameUpper}::${name[dartx.toLowerCase]()}`, StringToString$())));
let uriAttrs = dart.nullSafe(uriAttributes, _ => _[dartx.map](core.String)(dart.fn(name => dart.str`${baseNameUpper}::${name[dartx.toLowerCase]()}`, StringToString$())));
if (uriPolicy == null) {
uriPolicy = html$.UriPolicy.new();
}
Expand Down
7 changes: 4 additions & 3 deletions pkg/dev_compiler/lib/src/compiler/ast_builder.dart
Original file line number Diff line number Diff line change
Expand Up @@ -105,10 +105,11 @@ class AstBuilder {
return new PropertyAccess(target, p, name);
}

static MethodInvocation methodInvoke(
Expression target, SimpleIdentifier name, NodeList<Expression> args) {
static MethodInvocation methodInvoke(Expression target, SimpleIdentifier name,
TypeArgumentList typeArguments, NodeList<Expression> args) {
var p = new Token(TokenType.PERIOD, 0);
return new MethodInvocation(target, p, name, null, argumentList(args));
return new MethodInvocation(
target, p, name, typeArguments, argumentList(args));
}

static TokenType getTokenType(String lexeme) {
Expand Down
5 changes: 3 additions & 2 deletions pkg/dev_compiler/lib/src/compiler/code_generator.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4302,8 +4302,9 @@ class CodeGenerator extends GeneralizingAstVisitor
return AstBuilder.propertyAccess(newTarget, node.propertyName);
} else {
var invoke = node as MethodInvocation;
return AstBuilder.methodInvoke(
newTarget, invoke.methodName, invoke.argumentList.arguments);
return AstBuilder.methodInvoke(newTarget, invoke.methodName,
invoke.typeArguments, invoke.argumentList.arguments)
..staticInvokeType = invoke.staticInvokeType;
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,8 @@ test() {
Expect.equals(null, c?.v);
Expect.equals(10, c ?? 10);
Expect.equals(d, d ?? bomb());
Expect.equals(3, [[3]]?.expand((i) => i).toList()[0]);
Expect.equals(null, (null as List<List<int>>)?.expand((i) => i)?.toList());

var e;
// The assignment to e is not executed since d != null.
Expand Down

0 comments on commit fceb82f

Please sign in to comment.