Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(146)

Side by Side Diff: pkg/compiler/lib/src/native/ssa.dart

Issue 2982783003: Use failedAt in more places (Closed)
Patch Set: Created 3 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 '../common.dart'; 5 import '../common.dart';
6 import '../constants/values.dart'; 6 import '../constants/values.dart';
7 import '../elements/resolution_types.dart'; 7 import '../elements/resolution_types.dart';
8 import '../elements/elements.dart'; 8 import '../elements/elements.dart';
9 import '../js/js.dart' as js; 9 import '../js/js.dart' as js;
10 import '../js_emitter/js_emitter.dart' show NativeEmitter; 10 import '../js_emitter/js_emitter.dart' show NativeEmitter;
(...skipping 30 matching lines...) Expand all
41 // No longer supported, this is now done with @JSName('foo') and case 1. 41 // No longer supported, this is now done with @JSName('foo') and case 1.
42 // 3) foo() native "return 42"; 42 // 3) foo() native "return 42";
43 // hasBody = true 43 // hasBody = true
44 bool hasBody = false; 44 bool hasBody = false;
45 assert(builder.nativeData.isNativeMember(element)); 45 assert(builder.nativeData.isNativeMember(element));
46 String nativeMethodName = builder.nativeData.getFixedBackendName(element); 46 String nativeMethodName = builder.nativeData.getFixedBackendName(element);
47 if (nativeBody != null) { 47 if (nativeBody != null) {
48 LiteralString jsCode = nativeBody.asLiteralString(); 48 LiteralString jsCode = nativeBody.asLiteralString();
49 String str = jsCode.dartString.slowToString(); 49 String str = jsCode.dartString.slowToString();
50 if (nativeRedirectionRegExp.hasMatch(str)) { 50 if (nativeRedirectionRegExp.hasMatch(str)) {
51 throw new SpannableAssertionFailure( 51 failedAt(nativeBody, "Deprecated syntax, use @JSName('name') instead.");
52 nativeBody, "Deprecated syntax, use @JSName('name') instead.");
53 } 52 }
54 hasBody = true; 53 hasBody = true;
55 } 54 }
56 55
57 if (!hasBody) { 56 if (!hasBody) {
58 nativeEmitter.nativeMethods.add(element); 57 nativeEmitter.nativeMethods.add(element);
59 } 58 }
60 59
61 FunctionSignature parameters = element.functionSignature; 60 FunctionSignature parameters = element.functionSignature;
62 if (!hasBody) { 61 if (!hasBody) {
(...skipping 19 matching lines...) Expand all
82 81
83 String foreignParameters = arguments.join(','); 82 String foreignParameters = arguments.join(',');
84 String nativeMethodCall; 83 String nativeMethodCall;
85 if (element.kind == ElementKind.FUNCTION) { 84 if (element.kind == ElementKind.FUNCTION) {
86 nativeMethodCall = '$receiver$nativeMethodName($foreignParameters)'; 85 nativeMethodCall = '$receiver$nativeMethodName($foreignParameters)';
87 } else if (element.kind == ElementKind.GETTER) { 86 } else if (element.kind == ElementKind.GETTER) {
88 nativeMethodCall = '$receiver$nativeMethodName'; 87 nativeMethodCall = '$receiver$nativeMethodName';
89 } else if (element.kind == ElementKind.SETTER) { 88 } else if (element.kind == ElementKind.SETTER) {
90 nativeMethodCall = '$receiver$nativeMethodName = $foreignParameters'; 89 nativeMethodCall = '$receiver$nativeMethodName = $foreignParameters';
91 } else { 90 } else {
92 throw new SpannableAssertionFailure( 91 failedAt(element, 'Unexpected kind: "${element.kind}".');
93 element, 'Unexpected kind: "${element.kind}".');
94 } 92 }
95 93
96 builder.push(new HForeignCode( 94 builder.push(new HForeignCode(
97 // TODO(sra): This could be cached. The number of templates should 95 // TODO(sra): This could be cached. The number of templates should
98 // be proportional to the number of native methods, which is bounded 96 // be proportional to the number of native methods, which is bounded
99 // by the dart: libraries. 97 // by the dart: libraries.
100 js.js.uncachedExpressionTemplate(nativeMethodCall), 98 js.js.uncachedExpressionTemplate(nativeMethodCall),
101 builder.commonMasks.dynamicType, 99 builder.commonMasks.dynamicType,
102 inputs, 100 inputs,
103 effects: new SideEffects())); 101 effects: new SideEffects()));
104 // TODO(johnniwinther): Provide source information. 102 // TODO(johnniwinther): Provide source information.
105 builder 103 builder
106 .close(new HReturn(builder.pop(), null)) 104 .close(new HReturn(builder.pop(), null))
107 .addSuccessor(builder.graph.exit); 105 .addSuccessor(builder.graph.exit);
108 } else { 106 } else {
109 if (parameters.parameterCount != 0) { 107 if (parameters.parameterCount != 0) {
110 throw new SpannableAssertionFailure( 108 failedAt(
111 nativeBody, 109 nativeBody,
112 'native "..." syntax is restricted to ' 110 'native "..." syntax is restricted to '
113 'functions with zero parameters.'); 111 'functions with zero parameters.');
114 } 112 }
115 LiteralString jsCode = nativeBody.asLiteralString(); 113 LiteralString jsCode = nativeBody.asLiteralString();
116 builder.push(new HForeignCode.statement( 114 builder.push(new HForeignCode.statement(
117 js.js.statementTemplateYielding( 115 js.js.statementTemplateYielding(
118 new js.LiteralStatement(jsCode.dartString.slowToString())), 116 new js.LiteralStatement(jsCode.dartString.slowToString())),
119 <HInstruction>[], 117 <HInstruction>[],
120 new SideEffects(), 118 new SideEffects(),
121 null, 119 null,
122 builder.commonMasks.dynamicType)); 120 builder.commonMasks.dynamicType));
123 } 121 }
124 } 122 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/native/resolver.dart ('k') | pkg/compiler/lib/src/parser/node_listener.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698