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

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

Issue 2335203005: kernel -> ssa: implement literal maps (Closed)
Patch Set: Created 4 years, 3 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) 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 import 'package:kernel/ast.dart' as ir; 5 import 'package:kernel/ast.dart' as ir;
6 6
7 import '../common.dart'; 7 import '../common.dart';
8 import '../compiler.dart'; 8 import '../compiler.dart';
9 import '../constants/values.dart'; 9 import '../constants/values.dart';
10 import '../dart_types.dart'; 10 import '../dart_types.dart';
11 import '../elements/elements.dart'; 11 import '../elements/elements.dart';
12 import '../js_backend/js_backend.dart'; 12 import '../js_backend/js_backend.dart';
13 import '../kernel/kernel.dart';
13 import '../resolution/tree_elements.dart'; 14 import '../resolution/tree_elements.dart';
14 import '../tree/tree.dart' as ast; 15 import '../tree/tree.dart' as ast;
15 import '../types/masks.dart'; 16 import '../types/masks.dart';
16 import '../universe/call_structure.dart'; 17 import '../universe/call_structure.dart';
17 import '../universe/selector.dart'; 18 import '../universe/selector.dart';
18 import '../universe/side_effects.dart'; 19 import '../universe/side_effects.dart';
19
20 import 'types.dart'; 20 import 'types.dart';
21 21
22 /// A helper class that abstracts all accesses of the AST from Kernel nodes. 22 /// A helper class that abstracts all accesses of the AST from Kernel nodes.
23 /// 23 ///
24 /// The goal is to remove all need for the AST from the Kernel SSA builder. 24 /// The goal is to remove all need for the AST from the Kernel SSA builder.
25 class KernelAstAdapter { 25 class KernelAstAdapter {
26 final Kernel kernel;
26 final JavaScriptBackend _backend; 27 final JavaScriptBackend _backend;
27 final ResolvedAst _resolvedAst; 28 final ResolvedAst _resolvedAst;
28 final Map<ir.Node, ast.Node> _nodeToAst; 29 final Map<ir.Node, ast.Node> _nodeToAst;
29 final Map<ir.Node, Element> _nodeToElement; 30 final Map<ir.Node, Element> _nodeToElement;
30 DartTypeConverter _typeConverter; 31 DartTypeConverter _typeConverter;
31 32
32 KernelAstAdapter( 33 KernelAstAdapter(this.kernel, this._backend, this._resolvedAst,
33 this._backend, 34 this._nodeToAst, this._nodeToElement) {
34 this._resolvedAst,
35 this._nodeToAst,
36 this._nodeToElement,
37 Map<FieldElement, ir.Field> fields,
38 Map<FunctionElement, ir.Member> functions,
39 Map<ClassElement, ir.Class> classes,
40 Map<LibraryElement, ir.Library> libraries) {
41 // TODO(het): Maybe just use all of the kernel maps directly? 35 // TODO(het): Maybe just use all of the kernel maps directly?
42 for (FieldElement fieldElement in fields.keys) { 36 for (FieldElement fieldElement in kernel.fields.keys) {
43 _nodeToElement[fields[fieldElement]] = fieldElement; 37 _nodeToElement[kernel.fields[fieldElement]] = fieldElement;
44 } 38 }
45 for (FunctionElement functionElement in functions.keys) { 39 for (FunctionElement functionElement in kernel.functions.keys) {
46 _nodeToElement[functions[functionElement]] = functionElement; 40 _nodeToElement[kernel.functions[functionElement]] = functionElement;
47 } 41 }
48 for (ClassElement classElement in classes.keys) { 42 for (ClassElement classElement in kernel.classes.keys) {
49 _nodeToElement[classes[classElement]] = classElement; 43 _nodeToElement[kernel.classes[classElement]] = classElement;
50 } 44 }
51 for (LibraryElement libraryElement in libraries.keys) { 45 for (LibraryElement libraryElement in kernel.libraries.keys) {
52 _nodeToElement[libraries[libraryElement]] = libraryElement; 46 _nodeToElement[kernel.libraries[libraryElement]] = libraryElement;
53 } 47 }
54 _typeConverter = new DartTypeConverter(this); 48 _typeConverter = new DartTypeConverter(this);
55 } 49 }
56 50
57 Compiler get _compiler => _backend.compiler; 51 Compiler get _compiler => _backend.compiler;
58 TreeElements get _elements => _resolvedAst.elements; 52 TreeElements get _elements => _resolvedAst.elements;
59 53
60 ConstantValue getConstantForSymbol(ir.SymbolLiteral node) { 54 ConstantValue getConstantForSymbol(ir.SymbolLiteral node) {
61 ast.Node astNode = getNode(node); 55 ast.Node astNode = getNode(node);
62 ConstantValue constantValue = _backend.constants 56 ConstantValue constantValue = _backend.constants
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
156 bool isIntercepted(ir.Node node) { 150 bool isIntercepted(ir.Node node) {
157 Selector selector; 151 Selector selector;
158 if (node is ir.PropertyGet) { 152 if (node is ir.PropertyGet) {
159 selector = getGetterSelector(node); 153 selector = getGetterSelector(node);
160 } else { 154 } else {
161 selector = getSelector(node); 155 selector = getSelector(node);
162 } 156 }
163 return _backend.isInterceptedSelector(selector); 157 return _backend.isInterceptedSelector(selector);
164 } 158 }
165 159
160 ir.Procedure get mapLiteralConstructor =>
161 kernel.functions[_backend.helpers.mapLiteralConstructor];
162
163 ir.Procedure get mapLiteralConstructorEmpty =>
164 kernel.functions[_backend.helpers.mapLiteralConstructorEmpty];
165
166 DartType getDartType(ir.DartType type) { 166 DartType getDartType(ir.DartType type) {
167 return type.accept(_typeConverter); 167 return type.accept(_typeConverter);
168 } 168 }
169 } 169 }
170 170
171 class DartTypeConverter extends ir.DartTypeVisitor<DartType> { 171 class DartTypeConverter extends ir.DartTypeVisitor<DartType> {
172 final KernelAstAdapter astAdapter; 172 final KernelAstAdapter astAdapter;
173 173
174 DartTypeConverter(this.astAdapter); 174 DartTypeConverter(this.astAdapter);
175 175
(...skipping 26 matching lines...) Expand all
202 @override 202 @override
203 DartType visitDynamicType(ir.DynamicType node) { 203 DartType visitDynamicType(ir.DynamicType node) {
204 return const DynamicType(); 204 return const DynamicType();
205 } 205 }
206 206
207 @override 207 @override
208 DartType visitInvalidType(ir.InvalidType node) { 208 DartType visitInvalidType(ir.InvalidType node) {
209 throw new UnimplementedError("Invalid types not currently supported"); 209 throw new UnimplementedError("Invalid types not currently supported");
210 } 210 }
211 } 211 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/ssa/builder_kernel.dart ('k') | pkg/compiler/lib/src/ssa/kernel_impact.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698