OLD | NEW |
1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 library fasta.kernel_procedure_builder; | 5 library fasta.kernel_procedure_builder; |
6 | 6 |
7 import 'package:kernel/ast.dart' | 7 import 'package:kernel/ast.dart' |
8 show | 8 show |
9 Arguments, | 9 Arguments, |
10 AsyncMarker, | 10 AsyncMarker, |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
74 | 74 |
75 abstract class KernelFunctionBuilder | 75 abstract class KernelFunctionBuilder |
76 extends ProcedureBuilder<KernelTypeBuilder> { | 76 extends ProcedureBuilder<KernelTypeBuilder> { |
77 final String nativeMethodName; | 77 final String nativeMethodName; |
78 | 78 |
79 FunctionNode function; | 79 FunctionNode function; |
80 | 80 |
81 Statement actualBody; | 81 Statement actualBody; |
82 | 82 |
83 KernelFunctionBuilder( | 83 KernelFunctionBuilder( |
| 84 String documentationComment, |
84 List<MetadataBuilder> metadata, | 85 List<MetadataBuilder> metadata, |
85 int modifiers, | 86 int modifiers, |
86 KernelTypeBuilder returnType, | 87 KernelTypeBuilder returnType, |
87 String name, | 88 String name, |
88 List<TypeVariableBuilder> typeVariables, | 89 List<TypeVariableBuilder> typeVariables, |
89 List<FormalParameterBuilder> formals, | 90 List<FormalParameterBuilder> formals, |
90 KernelLibraryBuilder compilationUnit, | 91 KernelLibraryBuilder compilationUnit, |
91 int charOffset, | 92 int charOffset, |
92 this.nativeMethodName) | 93 this.nativeMethodName) |
93 : super(metadata, modifiers, returnType, name, typeVariables, formals, | 94 : super(documentationComment, metadata, modifiers, returnType, name, |
94 compilationUnit, charOffset); | 95 typeVariables, formals, compilationUnit, charOffset); |
95 | 96 |
96 void set body(Statement newBody) { | 97 void set body(Statement newBody) { |
97 if (newBody != null) { | 98 if (newBody != null) { |
98 if (isAbstract) { | 99 if (isAbstract) { |
99 return internalProblem(messageInternalProblemBodyOnAbstractMethod, | 100 return internalProblem(messageInternalProblemBodyOnAbstractMethod, |
100 newBody.fileOffset, fileUri); | 101 newBody.fileOffset, fileUri); |
101 } | 102 } |
102 if (isExternal) { | 103 if (isExternal) { |
103 return library.addCompileTimeError( | 104 return library.addCompileTimeError( |
104 messageExternalMethodWithBody, newBody.fileOffset, fileUri); | 105 messageExternalMethodWithBody, newBody.fileOffset, fileUri); |
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
200 | 201 |
201 class KernelProcedureBuilder extends KernelFunctionBuilder { | 202 class KernelProcedureBuilder extends KernelFunctionBuilder { |
202 final KernelProcedure procedure; | 203 final KernelProcedure procedure; |
203 final int charOpenParenOffset; | 204 final int charOpenParenOffset; |
204 | 205 |
205 AsyncMarker actualAsyncModifier = AsyncMarker.Sync; | 206 AsyncMarker actualAsyncModifier = AsyncMarker.Sync; |
206 | 207 |
207 final ConstructorReferenceBuilder redirectionTarget; | 208 final ConstructorReferenceBuilder redirectionTarget; |
208 | 209 |
209 KernelProcedureBuilder( | 210 KernelProcedureBuilder( |
| 211 String documentationComment, |
210 List<MetadataBuilder> metadata, | 212 List<MetadataBuilder> metadata, |
211 int modifiers, | 213 int modifiers, |
212 KernelTypeBuilder returnType, | 214 KernelTypeBuilder returnType, |
213 String name, | 215 String name, |
214 List<TypeVariableBuilder> typeVariables, | 216 List<TypeVariableBuilder> typeVariables, |
215 List<FormalParameterBuilder> formals, | 217 List<FormalParameterBuilder> formals, |
216 ProcedureKind kind, | 218 ProcedureKind kind, |
217 KernelLibraryBuilder compilationUnit, | 219 KernelLibraryBuilder compilationUnit, |
218 int charOffset, | 220 int charOffset, |
219 this.charOpenParenOffset, | 221 this.charOpenParenOffset, |
220 int charEndOffset, | 222 int charEndOffset, |
221 [String nativeMethodName, | 223 [String nativeMethodName, |
222 this.redirectionTarget]) | 224 this.redirectionTarget]) |
223 : procedure = new KernelProcedure(null, kind, null, returnType == null, | 225 : procedure = new KernelProcedure(null, kind, null, returnType == null, |
224 fileUri: compilationUnit?.relativeFileUri) | 226 fileUri: compilationUnit?.relativeFileUri) |
225 ..fileOffset = charOffset | 227 ..fileOffset = charOffset |
226 ..fileEndOffset = charEndOffset, | 228 ..fileEndOffset = charEndOffset, |
227 super(metadata, modifiers, returnType, name, typeVariables, formals, | 229 super( |
228 compilationUnit, charOffset, nativeMethodName); | 230 documentationComment, |
| 231 metadata, |
| 232 modifiers, |
| 233 returnType, |
| 234 name, |
| 235 typeVariables, |
| 236 formals, |
| 237 compilationUnit, |
| 238 charOffset, |
| 239 nativeMethodName); |
229 | 240 |
230 ProcedureKind get kind => procedure.kind; | 241 ProcedureKind get kind => procedure.kind; |
231 | 242 |
232 AsyncMarker get asyncModifier => actualAsyncModifier; | 243 AsyncMarker get asyncModifier => actualAsyncModifier; |
233 | 244 |
234 Statement get body { | 245 Statement get body { |
235 if (actualBody == null && | 246 if (actualBody == null && |
236 redirectionTarget == null && | 247 redirectionTarget == null && |
237 !isAbstract && | 248 !isAbstract && |
238 !isExternal) { | 249 !isExternal) { |
(...skipping 30 matching lines...) Expand all Loading... |
269 if (procedure.name == null) { | 280 if (procedure.name == null) { |
270 procedure.function = buildFunction(library); | 281 procedure.function = buildFunction(library); |
271 procedure.function.parent = procedure; | 282 procedure.function.parent = procedure; |
272 procedure.function.fileOffset = charOpenParenOffset; | 283 procedure.function.fileOffset = charOpenParenOffset; |
273 procedure.function.fileEndOffset = procedure.fileEndOffset; | 284 procedure.function.fileEndOffset = procedure.fileEndOffset; |
274 procedure.isAbstract = isAbstract; | 285 procedure.isAbstract = isAbstract; |
275 procedure.isStatic = isStatic; | 286 procedure.isStatic = isStatic; |
276 procedure.isExternal = isExternal; | 287 procedure.isExternal = isExternal; |
277 procedure.isConst = isConst; | 288 procedure.isConst = isConst; |
278 procedure.name = new Name(name, library.target); | 289 procedure.name = new Name(name, library.target); |
| 290 procedure.documentationComment = documentationComment; |
279 } | 291 } |
280 if (isEligibleForTopLevelInference) { | 292 if (isEligibleForTopLevelInference) { |
281 library.loader.typeInferenceEngine.recordMember(procedure); | 293 library.loader.typeInferenceEngine.recordMember(procedure); |
282 } | 294 } |
283 return procedure; | 295 return procedure; |
284 } | 296 } |
285 | 297 |
286 Procedure get target => procedure; | 298 Procedure get target => procedure; |
287 | 299 |
288 @override | 300 @override |
(...skipping 14 matching lines...) Expand all Loading... |
303 | 315 |
304 final int charOpenParenOffset; | 316 final int charOpenParenOffset; |
305 | 317 |
306 bool hasMovedSuperInitializer = false; | 318 bool hasMovedSuperInitializer = false; |
307 | 319 |
308 SuperInitializer superInitializer; | 320 SuperInitializer superInitializer; |
309 | 321 |
310 RedirectingInitializer redirectingInitializer; | 322 RedirectingInitializer redirectingInitializer; |
311 | 323 |
312 KernelConstructorBuilder( | 324 KernelConstructorBuilder( |
| 325 String documentationComment, |
313 List<MetadataBuilder> metadata, | 326 List<MetadataBuilder> metadata, |
314 int modifiers, | 327 int modifiers, |
315 KernelTypeBuilder returnType, | 328 KernelTypeBuilder returnType, |
316 String name, | 329 String name, |
317 List<TypeVariableBuilder> typeVariables, | 330 List<TypeVariableBuilder> typeVariables, |
318 List<FormalParameterBuilder> formals, | 331 List<FormalParameterBuilder> formals, |
319 KernelLibraryBuilder compilationUnit, | 332 KernelLibraryBuilder compilationUnit, |
320 int charOffset, | 333 int charOffset, |
321 this.charOpenParenOffset, | 334 this.charOpenParenOffset, |
322 int charEndOffset, | 335 int charEndOffset, |
323 [String nativeMethodName]) | 336 [String nativeMethodName]) |
324 : constructor = new Constructor(null) | 337 : constructor = new Constructor(null) |
325 ..fileOffset = charOffset | 338 ..fileOffset = charOffset |
326 ..fileEndOffset = charEndOffset, | 339 ..fileEndOffset = charEndOffset, |
327 super(metadata, modifiers, returnType, name, typeVariables, formals, | 340 super( |
328 compilationUnit, charOffset, nativeMethodName); | 341 documentationComment, |
| 342 metadata, |
| 343 modifiers, |
| 344 returnType, |
| 345 name, |
| 346 typeVariables, |
| 347 formals, |
| 348 compilationUnit, |
| 349 charOffset, |
| 350 nativeMethodName); |
329 | 351 |
330 bool get isInstanceMember => false; | 352 bool get isInstanceMember => false; |
331 | 353 |
332 bool get isConstructor => true; | 354 bool get isConstructor => true; |
333 | 355 |
334 AsyncMarker get asyncModifier => AsyncMarker.Sync; | 356 AsyncMarker get asyncModifier => AsyncMarker.Sync; |
335 | 357 |
336 ProcedureKind get kind => null; | 358 ProcedureKind get kind => null; |
337 | 359 |
338 bool get isRedirectingGenerativeConstructor { | 360 bool get isRedirectingGenerativeConstructor { |
339 return isRedirectingGenerativeConstructorImplementation(constructor); | 361 return isRedirectingGenerativeConstructorImplementation(constructor); |
340 } | 362 } |
341 | 363 |
342 Constructor build(SourceLibraryBuilder library) { | 364 Constructor build(SourceLibraryBuilder library) { |
343 if (constructor.name == null) { | 365 if (constructor.name == null) { |
344 constructor.function = buildFunction(library); | 366 constructor.function = buildFunction(library); |
345 constructor.function.parent = constructor; | 367 constructor.function.parent = constructor; |
346 constructor.function.fileOffset = charOpenParenOffset; | 368 constructor.function.fileOffset = charOpenParenOffset; |
347 constructor.function.fileEndOffset = constructor.fileEndOffset; | 369 constructor.function.fileEndOffset = constructor.fileEndOffset; |
348 constructor.isConst = isConst; | 370 constructor.isConst = isConst; |
349 constructor.isExternal = isExternal; | 371 constructor.isExternal = isExternal; |
350 constructor.name = new Name(name, library.target); | 372 constructor.name = new Name(name, library.target); |
| 373 constructor.documentationComment = documentationComment; |
351 } | 374 } |
352 return constructor; | 375 return constructor; |
353 } | 376 } |
354 | 377 |
355 FunctionNode buildFunction(LibraryBuilder library) { | 378 FunctionNode buildFunction(LibraryBuilder library) { |
356 // TODO(ahe): Should complain if another type is explicitly set. | 379 // TODO(ahe): Should complain if another type is explicitly set. |
357 return super.buildFunction(library)..returnType = const VoidType(); | 380 return super.buildFunction(library)..returnType = const VoidType(); |
358 } | 381 } |
359 | 382 |
360 Constructor get target => constructor; | 383 Constructor get target => constructor; |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
412 } | 435 } |
413 } | 436 } |
414 initializers.add(initializer..parent = constructor); | 437 initializers.add(initializer..parent = constructor); |
415 initializers.add(superInitializer); | 438 initializers.add(superInitializer); |
416 return; | 439 return; |
417 } | 440 } |
418 initializers.add(initializer); | 441 initializers.add(initializer); |
419 initializer.parent = constructor; | 442 initializer.parent = constructor; |
420 } | 443 } |
421 } | 444 } |
OLD | NEW |