OLD | NEW |
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2014, 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 import 'package:front_end/src/fasta/scanner.dart' show StringToken, Token; | 5 import 'package:front_end/src/fasta/scanner.dart' show StringToken, Token; |
6 import 'package:front_end/src/fasta/scanner.dart' as Tokens show EOF_TOKEN; | 6 import 'package:front_end/src/fasta/scanner.dart' as Tokens show EOF_TOKEN; |
7 import 'package:front_end/src/scanner/token.dart' show BeginToken; | 7 import 'package:front_end/src/scanner/token.dart' show BeginToken; |
8 | 8 |
9 import '../common.dart'; | 9 import '../common.dart'; |
10 import '../common_elements.dart' show CommonElements, ElementEnvironment; | 10 import '../common_elements.dart' show CommonElements, ElementEnvironment; |
(...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
211 | 211 |
212 class NativeDataResolverImpl extends NativeMemberResolverBase | 212 class NativeDataResolverImpl extends NativeMemberResolverBase |
213 implements NativeDataResolver { | 213 implements NativeDataResolver { |
214 final Compiler _compiler; | 214 final Compiler _compiler; |
215 | 215 |
216 NativeDataResolverImpl(this._compiler); | 216 NativeDataResolverImpl(this._compiler); |
217 | 217 |
218 JavaScriptBackend get _backend => _compiler.backend; | 218 JavaScriptBackend get _backend => _compiler.backend; |
219 DiagnosticReporter get _reporter => _compiler.reporter; | 219 DiagnosticReporter get _reporter => _compiler.reporter; |
220 ElementEnvironment get elementEnvironment => _compiler.elementEnvironment; | 220 ElementEnvironment get elementEnvironment => _compiler.elementEnvironment; |
221 CommonElements get commonElements => _compiler.commonElements; | 221 CommonElements get commonElements => _compiler.resolution.commonElements; |
222 NativeBasicData get nativeBasicData => _backend.nativeBasicData; | 222 NativeBasicData get nativeBasicData => _backend.nativeBasicData; |
223 NativeDataBuilder get nativeDataBuilder => _backend.nativeDataBuilder; | 223 NativeDataBuilder get nativeDataBuilder => _backend.nativeDataBuilder; |
224 | 224 |
225 @override | 225 @override |
226 bool isJsInteropMember(MemberElement element) { | 226 bool isJsInteropMember(MemberElement element) { |
227 // TODO(johnniwinther): Avoid computing this twice for external function; | 227 // TODO(johnniwinther): Avoid computing this twice for external function; |
228 // once from JavaScriptBackendTarget.resolveExternalFunction and once | 228 // once from JavaScriptBackendTarget.resolveExternalFunction and once |
229 // through JavaScriptBackendTarget.resolveNativeMember. | 229 // through JavaScriptBackendTarget.resolveNativeMember. |
230 bool isJsInterop = | 230 bool isJsInterop = |
231 checkJsInteropMemberAnnotations(_compiler, element, nativeDataBuilder); | 231 checkJsInteropMemberAnnotations(_compiler, element, nativeDataBuilder); |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
286 @override | 286 @override |
287 bool _processFieldAnnotations(FieldElement element) { | 287 bool _processFieldAnnotations(FieldElement element) { |
288 if (_compiler.serialization.isDeserialized(element)) { | 288 if (_compiler.serialization.isDeserialized(element)) { |
289 return false; | 289 return false; |
290 } | 290 } |
291 return super._processFieldAnnotations(element); | 291 return super._processFieldAnnotations(element); |
292 } | 292 } |
293 | 293 |
294 @override | 294 @override |
295 NativeBehavior resolveJsCall(Send node, ForeignResolver resolver) { | 295 NativeBehavior resolveJsCall(Send node, ForeignResolver resolver) { |
296 return NativeBehavior.ofJsCallSend(node, _reporter, | 296 return NativeBehavior.ofJsCallSend( |
297 _compiler.parsingContext, _compiler.commonElements, resolver); | 297 node, _reporter, _compiler.parsingContext, commonElements, resolver); |
298 } | 298 } |
299 | 299 |
300 @override | 300 @override |
301 NativeBehavior resolveJsEmbeddedGlobalCall( | 301 NativeBehavior resolveJsEmbeddedGlobalCall( |
302 Send node, ForeignResolver resolver) { | 302 Send node, ForeignResolver resolver) { |
303 return NativeBehavior.ofJsEmbeddedGlobalCallSend( | 303 return NativeBehavior.ofJsEmbeddedGlobalCallSend( |
304 node, _reporter, _compiler.commonElements, resolver); | 304 node, _reporter, commonElements, resolver); |
305 } | 305 } |
306 | 306 |
307 @override | 307 @override |
308 NativeBehavior resolveJsBuiltinCall(Send node, ForeignResolver resolver) { | 308 NativeBehavior resolveJsBuiltinCall(Send node, ForeignResolver resolver) { |
309 return NativeBehavior.ofJsBuiltinCallSend( | 309 return NativeBehavior.ofJsBuiltinCallSend( |
310 node, _reporter, _compiler.commonElements, resolver); | 310 node, _reporter, commonElements, resolver); |
311 } | 311 } |
312 } | 312 } |
313 | 313 |
314 /// Annotation handler for pre-resolution detection of `@Native(...)` | 314 /// Annotation handler for pre-resolution detection of `@Native(...)` |
315 /// annotations. | 315 /// annotations. |
316 class NativeAnnotationHandler extends EagerAnnotationHandler<String> { | 316 class NativeAnnotationHandler extends EagerAnnotationHandler<String> { |
317 final NativeBasicDataBuilder _nativeBasicDataBuilder; | 317 final NativeBasicDataBuilder _nativeBasicDataBuilder; |
318 | 318 |
319 NativeAnnotationHandler(this._nativeBasicDataBuilder); | 319 NativeAnnotationHandler(this._nativeBasicDataBuilder); |
320 | 320 |
(...skipping 19 matching lines...) Expand all Loading... |
340 _nativeBasicDataBuilder.setNativeClassTagInfo(cls, tagText); | 340 _nativeBasicDataBuilder.setNativeClassTagInfo(cls, tagText); |
341 return native; | 341 return native; |
342 } | 342 } |
343 } | 343 } |
344 return null; | 344 return null; |
345 } | 345 } |
346 | 346 |
347 void validate(Compiler compiler, Element element, | 347 void validate(Compiler compiler, Element element, |
348 MetadataAnnotation annotation, ConstantValue constant) { | 348 MetadataAnnotation annotation, ConstantValue constant) { |
349 ResolutionDartType annotationType = | 349 ResolutionDartType annotationType = |
350 constant.getType(compiler.commonElements); | 350 constant.getType(compiler.resolution.commonElements); |
351 if (annotationType.element != | 351 if (annotationType.element != |
352 compiler.commonElements.nativeAnnotationClass) { | 352 compiler.resolution.commonElements.nativeAnnotationClass) { |
353 DiagnosticReporter reporter = compiler.reporter; | 353 DiagnosticReporter reporter = compiler.reporter; |
354 reporter.internalError(annotation, 'Invalid @Native(...) annotation.'); | 354 reporter.internalError(annotation, 'Invalid @Native(...) annotation.'); |
355 } | 355 } |
356 } | 356 } |
357 } | 357 } |
358 | 358 |
359 bool checkJsInteropMemberAnnotations(Compiler compiler, MemberElement element, | 359 bool checkJsInteropMemberAnnotations(Compiler compiler, MemberElement element, |
360 NativeDataBuilder nativeDataBuilder) { | 360 NativeDataBuilder nativeDataBuilder) { |
361 bool isJsInterop = EagerAnnotationHandler.checkAnnotation( | 361 bool isJsInterop = EagerAnnotationHandler.checkAnnotation( |
362 compiler, element, const JsInteropAnnotationHandler()); | 362 compiler, element, const JsInteropAnnotationHandler()); |
(...skipping 13 matching lines...) Expand all Loading... |
376 annotation.beginToken.next.lexeme == 'JS'; | 376 annotation.beginToken.next.lexeme == 'JS'; |
377 | 377 |
378 bool apply( | 378 bool apply( |
379 Compiler compiler, Element element, MetadataAnnotation annotation) { | 379 Compiler compiler, Element element, MetadataAnnotation annotation) { |
380 return hasJsNameAnnotation(annotation); | 380 return hasJsNameAnnotation(annotation); |
381 } | 381 } |
382 | 382 |
383 @override | 383 @override |
384 void validate(Compiler compiler, Element element, | 384 void validate(Compiler compiler, Element element, |
385 MetadataAnnotation annotation, ConstantValue constant) { | 385 MetadataAnnotation annotation, ConstantValue constant) { |
386 ResolutionDartType type = constant.getType(compiler.commonElements); | 386 ResolutionDartType type = |
387 if (type.element != compiler.commonElements.jsAnnotationClass) { | 387 constant.getType(compiler.resolution.commonElements); |
| 388 if (type.element != compiler.resolution.commonElements.jsAnnotationClass) { |
388 compiler.reporter | 389 compiler.reporter |
389 .internalError(annotation, 'Invalid @JS(...) annotation.'); | 390 .internalError(annotation, 'Invalid @JS(...) annotation.'); |
390 } | 391 } |
391 } | 392 } |
392 | 393 |
393 bool get defaultResult => false; | 394 bool get defaultResult => false; |
394 } | 395 } |
395 | 396 |
396 /// Determines all native classes in a set of libraries. | 397 /// Determines all native classes in a set of libraries. |
397 abstract class NativeClassFinder { | 398 abstract class NativeClassFinder { |
(...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
615 | 616 |
616 Iterable<ConstantValue> fields = constructedObject.fields.values; | 617 Iterable<ConstantValue> fields = constructedObject.fields.values; |
617 // TODO(sra): Better validation of the constant. | 618 // TODO(sra): Better validation of the constant. |
618 if (fields.length != 1 || fields.single is! StringConstantValue) { | 619 if (fields.length != 1 || fields.single is! StringConstantValue) { |
619 throw new SpannableAssertionFailure( | 620 throw new SpannableAssertionFailure( |
620 spannable, 'Annotations needs one string: ${value.toStructuredText()}'); | 621 spannable, 'Annotations needs one string: ${value.toStructuredText()}'); |
621 } | 622 } |
622 StringConstantValue specStringConstant = fields.single; | 623 StringConstantValue specStringConstant = fields.single; |
623 return specStringConstant.primitiveValue; | 624 return specStringConstant.primitiveValue; |
624 } | 625 } |
OLD | NEW |