@@ -32,9 +32,7 @@ import 'package:kernel/kernel.dart'
32
32
DartType,
33
33
DynamicType,
34
34
Expression,
35
- Extension,
36
35
ExtensionType,
37
- ExtensionTypeDeclaration,
38
36
FunctionNode,
39
37
InterfaceType,
40
38
Library,
@@ -1959,19 +1957,21 @@ class IncrementalCompiler implements IncrementalKernelGenerator {
1959
1957
1960
1958
_ticker.logMs ("Loaded library $libraryUri " );
1961
1959
1960
+ int ? offsetToUse;
1962
1961
Class ? cls;
1963
1962
if (className != null ) {
1964
1963
Builder ? scopeMember = libraryBuilder.libraryNameSpace
1965
1964
.lookup (className)
1966
1965
? .getable;
1967
1966
if (scopeMember is ClassBuilder ) {
1968
1967
cls = scopeMember.cls;
1968
+ offsetToUse = cls.fileOffset;
1969
1969
} else {
1970
1970
return null ;
1971
1971
}
1972
1972
}
1973
- Extension ? extension ;
1974
- ExtensionTypeDeclaration ? extensionType ;
1973
+
1974
+ bool isExtensionOrExtensionType = false ;
1975
1975
String ? extensionName;
1976
1976
if (usedMethodName != null ) {
1977
1977
int indexOfDot = usedMethodName.indexOf ("." );
@@ -1997,15 +1997,17 @@ class IncrementalCompiler implements IncrementalKernelGenerator {
1997
1997
}
1998
1998
extensionName = beforeDot;
1999
1999
if (builder is ExtensionBuilder ) {
2000
- extension = builder.extension ;
2000
+ isExtensionOrExtensionType = true ;
2001
+ offsetToUse = builder.fileOffset;
2001
2002
Builder ? subBuilder = builder.lookupLocalMember (afterDot)? .getable;
2002
2003
if (subBuilder is MemberBuilder ) {
2003
2004
if (subBuilder.isExtensionInstanceMember) {
2004
2005
isStatic = false ;
2005
2006
}
2006
2007
}
2007
2008
} else if (builder is ExtensionTypeDeclarationBuilder ) {
2008
- extensionType = builder.extensionTypeDeclaration;
2009
+ isExtensionOrExtensionType = true ;
2010
+ offsetToUse = builder.fileOffset;
2009
2011
Builder ? subBuilder = builder.lookupLocalMember (afterDot)? .getable;
2010
2012
if (subBuilder is MemberBuilder ) {
2011
2013
if (subBuilder.isExtensionTypeInstanceMember) {
@@ -2042,25 +2044,25 @@ class IncrementalCompiler implements IncrementalKernelGenerator {
2042
2044
return null ;
2043
2045
}
2044
2046
}
2045
- int index = 0 ;
2046
2047
for (String name in usedDefinitions.keys) {
2047
- index++ ;
2048
- if (! (isLegalIdentifier (name) ||
2049
- ((extension != null || extensionType != null ) &&
2050
- ! isStatic &&
2051
- index == 1 &&
2052
- isExtensionThisName (name)))) {
2053
- lastGoodKernelTarget.loader.addProblem (
2054
- codeIncrementalCompilerIllegalParameter.withArgumentsOld (name),
2055
- // TODO: pass variable declarations instead of
2056
- // parameter names for proper location detection.
2057
- // https://github.com/dart-lang/sdk/issues/44158
2058
- - 1 ,
2059
- - 1 ,
2060
- libraryUri,
2061
- );
2062
- return null ;
2048
+ if (isLegalIdentifier (name)) continue ;
2049
+ if (isExtensionThisName (name) &&
2050
+ ! isStatic &&
2051
+ isExtensionOrExtensionType) {
2052
+ // Accept #this for extensions and extension types.
2053
+ continue ;
2063
2054
}
2055
+
2056
+ lastGoodKernelTarget.loader.addProblem (
2057
+ codeIncrementalCompilerIllegalParameter.withArgumentsOld (name),
2058
+ // TODO: pass variable declarations instead of
2059
+ // parameter names for proper location detection.
2060
+ // https://github.com/dart-lang/sdk/issues/44158
2061
+ - 1 ,
2062
+ - 1 ,
2063
+ libraryUri,
2064
+ );
2065
+ return null ;
2064
2066
}
2065
2067
2066
2068
// Setup scope first in two-step process:
@@ -2167,35 +2169,33 @@ class IncrementalCompiler implements IncrementalKernelGenerator {
2167
2169
MemoryFileSystem fs = hfs.memory;
2168
2170
fs.entityForUri (debugExprUri).writeAsStringSync (expression);
2169
2171
2172
+ VariableDeclaration ? extensionThis;
2173
+
2170
2174
// TODO: pass variable declarations instead of
2171
2175
// parameter names for proper location detection.
2172
2176
// https://github.com/dart-lang/sdk/issues/44158
2173
2177
FunctionNode parameters = new FunctionNode (
2174
2178
null ,
2175
2179
typeParameters: typeDefinitions,
2176
- positionalParameters: usedDefinitions.entries
2177
- .map <VariableDeclaration >(
2178
- (MapEntry <String , DartType > def) =>
2179
- new VariableDeclarationImpl (def.key, type: def.value)
2180
- ..fileOffset =
2181
- cls? .fileOffset ??
2182
- extension ? .fileOffset ??
2183
- extensionType? .fileOffset ??
2184
- libraryBuilder.library.fileOffset,
2185
- )
2186
- .toList (),
2180
+ positionalParameters: usedDefinitions.entries.map <VariableDeclaration >((
2181
+ MapEntry <String , DartType > def,
2182
+ ) {
2183
+ VariableDeclarationImpl variable = new VariableDeclarationImpl (
2184
+ def.key,
2185
+ type: def.value,
2186
+ )..fileOffset = offsetToUse ?? libraryBuilder.library.fileOffset;
2187
+
2188
+ if (isExtensionOrExtensionType &&
2189
+ ! isStatic &&
2190
+ isExtensionThisName (def.key) &&
2191
+ extensionThis == null ) {
2192
+ // The `#this` variable is special.
2193
+ extensionThis = variable..isLowered = true ;
2194
+ }
2195
+ return variable;
2196
+ }).toList (),
2187
2197
);
2188
2198
2189
- VariableDeclaration ? extensionThis;
2190
- if ((extension != null || extensionType != null ) &&
2191
- ! isStatic &&
2192
- parameters.positionalParameters.isNotEmpty) {
2193
- // We expect the first parameter to be called #this and be special.
2194
- if (isExtensionThisName (parameters.positionalParameters.first.name)) {
2195
- extensionThis = parameters.positionalParameters.first;
2196
- extensionThis.isLowered = true ;
2197
- }
2198
- }
2199
2199
lastGoodKernelTarget.buildSyntheticLibrariesUntilBuildScopes ([
2200
2200
debugLibrary,
2201
2201
]);
0 commit comments