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

Side by Side Diff: lib/src/codegen/reify_coercions.dart

Issue 1141013002: Fixes #179 -- compile error if editing files during server mode (Closed) Base URL: git@github.com:dart-lang/dev_compiler.git@master
Patch Set: Created 5 years, 7 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
« no previous file with comments | « lib/src/codegen/js_codegen.dart ('k') | lib/src/dependency_graph.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2015, 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 dev_compiler.src.codegen.reify_coercions; 5 library dev_compiler.src.codegen.reify_coercions;
6 6
7 import 'package:analyzer/analyzer.dart' as analyzer; 7 import 'package:analyzer/analyzer.dart' as analyzer;
8 import 'package:analyzer/src/generated/ast.dart'; 8 import 'package:analyzer/src/generated/ast.dart';
9 import 'package:analyzer/src/generated/element.dart'; 9 import 'package:analyzer/src/generated/element.dart';
10 import 'package:analyzer/src/generated/engine.dart' show AnalysisContext;
10 import 'package:logging/logging.dart' as logger; 11 import 'package:logging/logging.dart' as logger;
11 import 'package:source_span/source_span.dart' show SourceFile;
12 12
13 import 'package:dev_compiler/devc.dart' show AbstractCompiler;
13 import 'package:dev_compiler/src/checker/rules.dart'; 14 import 'package:dev_compiler/src/checker/rules.dart';
14 import 'package:dev_compiler/src/info.dart'; 15 import 'package:dev_compiler/src/info.dart';
15 import 'package:dev_compiler/src/options.dart' show CompilerOptions; 16 import 'package:dev_compiler/src/options.dart' show CompilerOptions;
16 import 'package:dev_compiler/src/utils.dart' as utils; 17 import 'package:dev_compiler/src/utils.dart' as utils;
17 18
18 import 'ast_builder.dart'; 19 import 'ast_builder.dart';
19 20
20 final _log = new logger.Logger('dev_compiler.reify_coercions'); 21 final _log = new logger.Logger('dev_compiler.reify_coercions');
21 22
22 // TODO(leafp) Factor this out or use an existing library 23 // TODO(leafp) Factor this out or use an existing library
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
101 void annotateFunctionExpression(FunctionExpression e, DartType returnType) { 102 void annotateFunctionExpression(FunctionExpression e, DartType returnType) {
102 // Implicitly changes e.staticType 103 // Implicitly changes e.staticType
103 (e.element as ExecutableElementImpl).returnType = returnType; 104 (e.element as ExecutableElementImpl).returnType = returnType;
104 } 105 }
105 } 106 }
106 107
107 // This class implements a pass which modifies (in place) the ast replacing 108 // This class implements a pass which modifies (in place) the ast replacing
108 // abstract coercion nodes with their dart implementations. 109 // abstract coercion nodes with their dart implementations.
109 class CoercionReifier extends analyzer.GeneralizingAstVisitor<Object> 110 class CoercionReifier extends analyzer.GeneralizingAstVisitor<Object>
110 with ConversionVisitor<Object> { 111 with ConversionVisitor<Object> {
112 final AnalysisContext _context;
111 final CoercionManager _cm; 113 final CoercionManager _cm;
112 final TypeManager _tm; 114 final TypeManager _tm;
113 final VariableManager _vm; 115 final VariableManager _vm;
114 final LibraryUnit _library; 116 final LibraryUnit _library;
115 SourceFile _file;
116 bool _skipCoercions = false; 117 bool _skipCoercions = false;
117 final TypeRules _rules; 118 final TypeRules _rules;
118 final _Inference _inferrer; 119 final _Inference _inferrer;
119 final InstrumentedRuntime _runtime; 120 final InstrumentedRuntime _runtime;
120 final CompilerOptions _options; 121 final CompilerOptions _options;
121 122
123 CompilationUnit _unit;
124
122 CoercionReifier._(this._cm, this._tm, this._vm, this._library, this._rules, 125 CoercionReifier._(this._cm, this._tm, this._vm, this._library, this._rules,
123 this._inferrer, this._runtime, this._options); 126 this._inferrer, this._runtime, this._context, this._options);
124 127
125 factory CoercionReifier( 128 factory CoercionReifier(LibraryUnit library, AbstractCompiler compiler,
126 LibraryUnit library, TypeRules rules, CompilerOptions options,
127 [InstrumentedRuntime runtime]) { 129 [InstrumentedRuntime runtime]) {
128 var vm = new VariableManager(); 130 var vm = new VariableManager();
129 var tm = 131 var tm =
130 new TypeManager(library.library.element.enclosingElement, vm, runtime); 132 new TypeManager(library.library.element.enclosingElement, vm, runtime);
133 var rules = compiler.rules;
131 var cm = new CoercionManager(vm, tm, rules, runtime); 134 var cm = new CoercionManager(vm, tm, rules, runtime);
132 var inferrer = new _Inference(rules, tm); 135 var inferrer = new _Inference(rules, tm);
136 var context = compiler.context;
137 var options = compiler.options;
133 return new CoercionReifier._( 138 return new CoercionReifier._(
134 cm, tm, vm, library, rules, inferrer, runtime, options); 139 cm, tm, vm, library, rules, inferrer, runtime, context, options);
135 } 140 }
136 141
137 // This should be the entry point for this class. Entering via the 142 // This should be the entry point for this class. Entering via the
138 // visit functions directly may not do the right thing with respect 143 // visit functions directly may not do the right thing with respect
139 // to discharging the collected definitions. 144 // to discharging the collected definitions.
140 // Returns the set of new type identifiers added by the reifier 145 // Returns the set of new type identifiers added by the reifier
141 Map<Identifier, NewTypeIdDesc> reify() { 146 Map<Identifier, NewTypeIdDesc> reify() {
142 _library.partsThenLibrary.forEach(generateUnit); 147 _library.partsThenLibrary.forEach(generateUnit);
143 return _tm.addedTypes; 148 return _tm.addedTypes;
144 } 149 }
145 150
146 void generateUnit(CompilationUnit unit) { 151 void generateUnit(CompilationUnit unit) {
147 _file = new SourceFile(unit.element.source.contents.data, 152 _unit = unit;
148 url: unit.element.source.uri);
149 visitCompilationUnit(unit); 153 visitCompilationUnit(unit);
150 _file = null; 154 _unit = null;
151 } 155 }
152 156
153 ///////////////// Private ////////////////////////////////// 157 ///////////////// Private //////////////////////////////////
154 158
155 String _locationInfo(Expression e) { 159 String _locationInfo(Expression e) {
156 if (_file != null) { 160 if (_unit != null) {
157 final begin = e is AnnotatedNode 161 final begin = e is AnnotatedNode
158 ? (e as AnnotatedNode).firstTokenAfterCommentAndMetadata.offset 162 ? (e as AnnotatedNode).firstTokenAfterCommentAndMetadata.offset
159 : e.offset; 163 : e.offset;
160 if (begin != 0 && e.end > begin) { 164 if (begin != 0 && e.end > begin) {
161 var span = _file.span(begin, e.end); 165 var span = utils.createSpan(_context, _unit, begin, e.end);
162 var s = span.message("Cast"); 166 var s = span.message("Cast");
163 return s.substring(0, s.indexOf("Cast")); 167 return s.substring(0, s.indexOf("Cast"));
164 } 168 }
165 } 169 }
166 return null; 170 return null;
167 } 171 }
168 172
169 static String _conversionKind(Conversion node) { 173 static String _conversionKind(Conversion node) {
170 if (node is ClosureWrapLiteral) return "WrapLiteral"; 174 if (node is ClosureWrapLiteral) return "WrapLiteral";
171 if (node is ClosureWrap) return "Wrap"; 175 if (node is ClosureWrap) return "Wrap";
(...skipping 685 matching lines...) Expand 10 before | Expand all | Expand 10 after
857 assert(_runtime != null); 861 assert(_runtime != null);
858 if (t.typeArguments != null && t.typeArguments.length > 0) { 862 if (t.typeArguments != null && t.typeArguments.length > 0) {
859 var w = AstBuilder.identifierFromString("_"); 863 var w = AstBuilder.identifierFromString("_");
860 var fp = AstBuilder.simpleFormal(w, t); 864 var fp = AstBuilder.simpleFormal(w, t);
861 var f = AstBuilder.blockFunction(<FormalParameter>[fp], <Statement>[]); 865 var f = AstBuilder.blockFunction(<FormalParameter>[fp], <Statement>[]);
862 return _runtime.type(f); 866 return _runtime.type(f);
863 } 867 }
864 return t.name; 868 return t.name;
865 } 869 }
866 } 870 }
OLDNEW
« no previous file with comments | « lib/src/codegen/js_codegen.dart ('k') | lib/src/dependency_graph.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698