| OLD | NEW |
| 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, 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 compiler_helper; | 5 library compiler_helper; |
| 6 | 6 |
| 7 import 'dart:async'; | 7 import 'dart:async'; |
| 8 import "package:expect/expect.dart"; | 8 import "package:expect/expect.dart"; |
| 9 | 9 |
| 10 import 'package:compiler/compiler.dart' as api; |
| 11 |
| 10 import 'package:compiler/src/elements/elements.dart' | 12 import 'package:compiler/src/elements/elements.dart' |
| 11 as lego; | 13 as lego; |
| 12 export 'package:compiler/src/elements/elements.dart'; | 14 export 'package:compiler/src/elements/elements.dart'; |
| 13 | 15 |
| 14 import 'package:compiler/src/js_backend/js_backend.dart' | 16 import 'package:compiler/src/js_backend/js_backend.dart' |
| 15 as js; | 17 as js; |
| 16 | 18 |
| 17 import 'package:compiler/src/dart2jslib.dart' | 19 import 'package:compiler/src/dart2jslib.dart' |
| 18 as leg; | 20 as leg; |
| 19 export 'package:compiler/src/dart2jslib.dart' | 21 export 'package:compiler/src/dart2jslib.dart' |
| 20 show Constant, | 22 show Constant, |
| 21 Message, | 23 Message, |
| 22 MessageKind, | 24 MessageKind, |
| 23 Selector, | 25 Selector, |
| 24 TypedSelector, | 26 TypedSelector, |
| 25 SourceSpan, | 27 SourceSpan, |
| 26 World; | 28 World; |
| 27 | 29 |
| 28 import 'package:compiler/src/ssa/ssa.dart' as ssa; | |
| 29 | |
| 30 import 'package:compiler/src/types/types.dart' | 30 import 'package:compiler/src/types/types.dart' |
| 31 as types; | 31 as types; |
| 32 export 'package:compiler/src/types/types.dart' | 32 export 'package:compiler/src/types/types.dart' |
| 33 show TypeMask; | 33 show TypeMask; |
| 34 | 34 |
| 35 import 'package:compiler/src/util/util.dart'; | 35 import 'package:compiler/src/util/util.dart'; |
| 36 export 'package:compiler/src/util/util.dart'; | 36 export 'package:compiler/src/util/util.dart'; |
| 37 | 37 |
| 38 import 'package:compiler/src/source_file.dart'; | |
| 39 | |
| 40 import 'package:compiler/src/dart2jslib.dart' | 38 import 'package:compiler/src/dart2jslib.dart' |
| 41 show Compiler; | 39 show Compiler; |
| 42 | 40 |
| 43 export 'package:compiler/src/tree/tree.dart'; | 41 export 'package:compiler/src/tree/tree.dart'; |
| 44 | 42 |
| 45 import 'mock_compiler.dart'; | 43 import 'mock_compiler.dart'; |
| 46 export 'mock_compiler.dart'; | 44 export 'mock_compiler.dart'; |
| 47 | 45 |
| 46 import 'output_collector.dart'; |
| 47 export 'output_collector.dart'; |
| 48 |
| 48 Future<String> compile(String code, | 49 Future<String> compile(String code, |
| 49 {String entry: 'main', | 50 {String entry: 'main', |
| 50 bool enableTypeAssertions: false, | 51 bool enableTypeAssertions: false, |
| 51 bool minify: false, | 52 bool minify: false, |
| 52 bool analyzeAll: false, | 53 bool analyzeAll: false, |
| 53 bool disableInlining: true, | 54 bool disableInlining: true, |
| 54 void check(String generated)}) { | 55 void check(String generated)}) { |
| 55 MockCompiler compiler = new MockCompiler.internal( | 56 MockCompiler compiler = new MockCompiler.internal( |
| 56 enableTypeAssertions: enableTypeAssertions, | 57 enableTypeAssertions: enableTypeAssertions, |
| 57 // Type inference does not run when manually | 58 // Type inference does not run when manually |
| (...skipping 29 matching lines...) Expand all Loading... |
| 87 | 88 |
| 88 // TODO(herhut): Disallow warnings and errors during compilation by default. | 89 // TODO(herhut): Disallow warnings and errors during compilation by default. |
| 89 MockCompiler compilerFor(String code, Uri uri, | 90 MockCompiler compilerFor(String code, Uri uri, |
| 90 {bool analyzeAll: false, | 91 {bool analyzeAll: false, |
| 91 bool analyzeOnly: false, | 92 bool analyzeOnly: false, |
| 92 Map<String, String> coreSource, | 93 Map<String, String> coreSource, |
| 93 bool disableInlining: true, | 94 bool disableInlining: true, |
| 94 bool minify: false, | 95 bool minify: false, |
| 95 bool trustTypeAnnotations: false, | 96 bool trustTypeAnnotations: false, |
| 96 int expectedErrors, | 97 int expectedErrors, |
| 97 int expectedWarnings}) { | 98 int expectedWarnings, |
| 99 api.CompilerOutputProvider outputProvider}) { |
| 98 MockCompiler compiler = new MockCompiler.internal( | 100 MockCompiler compiler = new MockCompiler.internal( |
| 99 analyzeAll: analyzeAll, | 101 analyzeAll: analyzeAll, |
| 100 analyzeOnly: analyzeOnly, | 102 analyzeOnly: analyzeOnly, |
| 101 coreSource: coreSource, | 103 coreSource: coreSource, |
| 102 disableInlining: disableInlining, | 104 disableInlining: disableInlining, |
| 103 enableMinification: minify, | 105 enableMinification: minify, |
| 104 trustTypeAnnotations: trustTypeAnnotations, | 106 trustTypeAnnotations: trustTypeAnnotations, |
| 105 expectedErrors: expectedErrors, | 107 expectedErrors: expectedErrors, |
| 106 expectedWarnings: expectedWarnings); | 108 expectedWarnings: expectedWarnings, |
| 109 outputProvider: outputProvider); |
| 107 compiler.registerSource(uri, code); | 110 compiler.registerSource(uri, code); |
| 108 return compiler; | 111 return compiler; |
| 109 } | 112 } |
| 110 | 113 |
| 111 Future<String> compileAll(String code, | 114 Future<String> compileAll(String code, |
| 112 {Map<String, String> coreSource, | 115 {Map<String, String> coreSource, |
| 113 bool disableInlining: true, | 116 bool disableInlining: true, |
| 114 bool trustTypeAnnotations: false, | 117 bool trustTypeAnnotations: false, |
| 115 bool minify: false, | 118 bool minify: false, |
| 116 int expectedErrors, | 119 int expectedErrors, |
| 117 int expectedWarnings}) { | 120 int expectedWarnings}) { |
| 118 Uri uri = new Uri(scheme: 'source'); | 121 Uri uri = new Uri(scheme: 'source'); |
| 122 OutputCollector outputCollector = new OutputCollector(); |
| 119 MockCompiler compiler = compilerFor( | 123 MockCompiler compiler = compilerFor( |
| 120 code, uri, coreSource: coreSource, disableInlining: disableInlining, | 124 code, uri, coreSource: coreSource, disableInlining: disableInlining, |
| 121 minify: minify, expectedErrors: expectedErrors, | 125 minify: minify, expectedErrors: expectedErrors, |
| 122 trustTypeAnnotations: trustTypeAnnotations, | 126 trustTypeAnnotations: trustTypeAnnotations, |
| 123 expectedWarnings: expectedWarnings); | 127 expectedWarnings: expectedWarnings, |
| 128 outputProvider: outputCollector); |
| 124 return compiler.runCompiler(uri).then((_) { | 129 return compiler.runCompiler(uri).then((_) { |
| 125 Expect.isFalse(compiler.compilationFailed, | 130 Expect.isFalse(compiler.compilationFailed, |
| 126 'Unexpected compilation error(s): ${compiler.errors}'); | 131 'Unexpected compilation error(s): ${compiler.errors}'); |
| 127 return compiler.assembledCode; | 132 return outputCollector.getOutput('', 'js'); |
| 128 }); | 133 }); |
| 129 } | 134 } |
| 130 | 135 |
| 131 Future compileAndCheck(String code, | 136 Future compileAndCheck(String code, |
| 132 String name, | 137 String name, |
| 133 check(MockCompiler compiler, lego.Element element), | 138 check(MockCompiler compiler, lego.Element element), |
| 134 {int expectedErrors, int expectedWarnings}) { | 139 {int expectedErrors, int expectedWarnings}) { |
| 135 Uri uri = new Uri(scheme: 'source'); | 140 Uri uri = new Uri(scheme: 'source'); |
| 136 MockCompiler compiler = compilerFor(code, uri, | 141 MockCompiler compiler = compilerFor(code, uri, |
| 137 expectedErrors: expectedErrors, | 142 expectedErrors: expectedErrors, |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 175 var sourceName = name; | 180 var sourceName = name; |
| 176 var element = compiler.mainApp.find(sourceName); | 181 var element = compiler.mainApp.find(sourceName); |
| 177 if (element == null) { | 182 if (element == null) { |
| 178 element = compiler.backend.interceptorsLibrary.find(sourceName); | 183 element = compiler.backend.interceptorsLibrary.find(sourceName); |
| 179 } | 184 } |
| 180 if (element == null) { | 185 if (element == null) { |
| 181 element = compiler.coreLibrary.find(sourceName); | 186 element = compiler.coreLibrary.find(sourceName); |
| 182 } | 187 } |
| 183 Expect.isNotNull(element, 'Could not locate $name'); | 188 Expect.isNotNull(element, 'Could not locate $name'); |
| 184 switch (how) { | 189 switch (how) { |
| 185 case 'exact': return new types.TypeMask.exact(element); | 190 case 'exact': |
| 186 case 'nonNullExact': return new types.TypeMask.nonNullExact(element); | 191 return new types.TypeMask.exact(element, compiler.world); |
| 187 case 'subclass': { | 192 case 'nonNullExact': |
| 193 return new types.TypeMask.nonNullExact(element, compiler.world); |
| 194 case 'subclass': |
| 188 return new types.TypeMask.subclass(element, compiler.world); | 195 return new types.TypeMask.subclass(element, compiler.world); |
| 189 } | 196 case 'nonNullSubclass': |
| 190 case 'nonNullSubclass': { | |
| 191 return new types.TypeMask.nonNullSubclass(element, compiler.world); | 197 return new types.TypeMask.nonNullSubclass(element, compiler.world); |
| 192 } | 198 case 'subtype': |
| 193 case 'subtype': { | |
| 194 return new types.TypeMask.subtype(element, compiler.world); | 199 return new types.TypeMask.subtype(element, compiler.world); |
| 195 } | 200 case 'nonNullSubtype': |
| 196 case 'nonNullSubtype': { | |
| 197 return new types.TypeMask.nonNullSubtype(element, compiler.world); | 201 return new types.TypeMask.nonNullSubtype(element, compiler.world); |
| 198 } | |
| 199 } | 202 } |
| 200 Expect.fail('Unknown TypeMask constructor $how'); | 203 Expect.fail('Unknown TypeMask constructor $how'); |
| 204 return null; |
| 201 } | 205 } |
| 202 | 206 |
| 203 String anyIdentifier = "[a-zA-Z][a-zA-Z0-9]*"; | 207 String anyIdentifier = "[a-zA-Z][a-zA-Z0-9]*"; |
| 204 | 208 |
| 205 String getIntTypeCheck(String variable) { | 209 String getIntTypeCheck(String variable) { |
| 206 return "\\($variable ?!== ?\\($variable ?\\| ?0\\)|" | 210 return "\\($variable ?!== ?\\($variable ?\\| ?0\\)|" |
| 207 "\\($variable ?>>> ?0 ?!== ?$variable"; | 211 "\\($variable ?>>> ?0 ?!== ?$variable"; |
| 208 } | 212 } |
| 209 | 213 |
| 210 String getNumberTypeCheck(String variable) { | 214 String getNumberTypeCheck(String variable) { |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 253 regexp = regexp.replaceAll(xRe, '(?:$anyIdentifier)'); | 257 regexp = regexp.replaceAll(xRe, '(?:$anyIdentifier)'); |
| 254 final spaceRe = new RegExp('\\s+'); | 258 final spaceRe = new RegExp('\\s+'); |
| 255 regexp = regexp.replaceAll(spaceRe, '(?:\\s*)'); | 259 regexp = regexp.replaceAll(spaceRe, '(?:\\s*)'); |
| 256 if (shouldMatch) { | 260 if (shouldMatch) { |
| 257 Expect.isTrue(new RegExp(regexp).hasMatch(generated)); | 261 Expect.isTrue(new RegExp(regexp).hasMatch(generated)); |
| 258 } else { | 262 } else { |
| 259 Expect.isFalse(new RegExp(regexp).hasMatch(generated)); | 263 Expect.isFalse(new RegExp(regexp).hasMatch(generated)); |
| 260 } | 264 } |
| 261 }); | 265 }); |
| 262 } | 266 } |
| OLD | NEW |