OLD | NEW |
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 library kernel.transformations.closure.mock; | 5 library kernel.transformations.closure.mock; |
6 | 6 |
7 import '../../ast.dart' | 7 import '../../ast.dart' |
8 show | 8 show |
9 Arguments, | 9 Arguments, |
10 Block, | 10 Block, |
(...skipping 16 matching lines...) Expand all Loading... |
27 NullLiteral, | 27 NullLiteral, |
28 Procedure, | 28 Procedure, |
29 ProcedureKind, | 29 ProcedureKind, |
30 Program, | 30 Program, |
31 PropertyGet, | 31 PropertyGet, |
32 ReturnStatement, | 32 ReturnStatement, |
33 Source, | 33 Source, |
34 Statement, | 34 Statement, |
35 StaticInvocation, | 35 StaticInvocation, |
36 Supertype, | 36 Supertype, |
| 37 TreeNode, |
37 VariableDeclaration, | 38 VariableDeclaration, |
38 VariableGet; | 39 VariableGet; |
39 | 40 |
40 import '../../core_types.dart' show CoreTypes; | 41 import '../../core_types.dart' show CoreTypes; |
41 | 42 |
42 import '../../frontend/accessors.dart' | 43 import '../../frontend/accessors.dart' |
43 show | 44 show |
44 Accessor, | 45 Accessor, |
45 IndexAccessor, | 46 IndexAccessor, |
46 PropertyAccessor, | 47 PropertyAccessor, |
(...skipping 18 matching lines...) Expand all Loading... |
65 /// } | 66 /// } |
66 /// } | 67 /// } |
67 /// | 68 /// |
68 /// Returns the mock. | 69 /// Returns the mock. |
69 Class mockUpContext(CoreTypes coreTypes, Program program) { | 70 Class mockUpContext(CoreTypes coreTypes, Program program) { |
70 String fileUri = "dart:mock"; | 71 String fileUri = "dart:mock"; |
71 | 72 |
72 /// final List list; | 73 /// final List list; |
73 Field listField = new Field(new Name("list"), | 74 Field listField = new Field(new Name("list"), |
74 type: coreTypes.listClass.rawType, isFinal: true, fileUri: fileUri); | 75 type: coreTypes.listClass.rawType, isFinal: true, fileUri: fileUri); |
75 Accessor listFieldAccessor = | 76 Accessor listFieldAccessor = new ThisPropertyAccessor( |
76 new ThisPropertyAccessor(listField.name, listField, null); | 77 listField.name, listField, null, TreeNode.noOffset); |
77 | 78 |
78 /// var parent; | 79 /// var parent; |
79 Field parentField = new Field(new Name("parent"), fileUri: fileUri); | 80 Field parentField = new Field(new Name("parent"), fileUri: fileUri); |
80 Accessor parentFieldAccessor = | 81 Accessor parentFieldAccessor = new ThisPropertyAccessor( |
81 new ThisPropertyAccessor(parentField.name, parentField, parentField); | 82 parentField.name, parentField, parentField, TreeNode.noOffset); |
82 | 83 |
83 List<Field> fields = <Field>[listField, parentField]; | 84 List<Field> fields = <Field>[listField, parentField]; |
84 | 85 |
85 /// Context(int i) : list = new List(i); | 86 /// Context(int i) : list = new List(i); |
86 VariableDeclaration iParameter = new VariableDeclaration("i", | 87 VariableDeclaration iParameter = new VariableDeclaration("i", |
87 type: coreTypes.intClass.rawType, isFinal: true); | 88 type: coreTypes.intClass.rawType, isFinal: true); |
88 | 89 |
89 // TODO(karlklose): use the default factory when it is exposed again. | 90 // TODO(karlklose): use the default factory when it is exposed again. |
90 Procedure listConstructor = coreTypes.listClass.procedures | 91 Procedure listConstructor = coreTypes.listClass.procedures |
91 .firstWhere((Procedure p) => p.name.name == 'filled'); | 92 .firstWhere((Procedure p) => p.name.name == 'filled'); |
92 | 93 |
93 Constructor constructor = new Constructor( | 94 Constructor constructor = new Constructor( |
94 new FunctionNode(new EmptyStatement(), | 95 new FunctionNode(new EmptyStatement(), |
95 positionalParameters: <VariableDeclaration>[iParameter]), | 96 positionalParameters: <VariableDeclaration>[iParameter]), |
96 name: new Name(""), | 97 name: new Name(""), |
97 initializers: <Initializer>[ | 98 initializers: <Initializer>[ |
98 new FieldInitializer( | 99 new FieldInitializer( |
99 listField, | 100 listField, |
100 new StaticInvocation( | 101 new StaticInvocation( |
101 listConstructor, | 102 listConstructor, |
102 new Arguments(<Expression>[ | 103 new Arguments(<Expression>[ |
103 new VariableAccessor(iParameter).buildSimpleRead(), | 104 new VariableAccessor(iParameter, null, TreeNode.noOffset) |
| 105 .buildSimpleRead(), |
104 new NullLiteral(), | 106 new NullLiteral(), |
105 ], types: <DartType>[ | 107 ], types: <DartType>[ |
106 const DynamicType() | 108 const DynamicType() |
107 ]))) | 109 ]))) |
108 ]); | 110 ]); |
109 | 111 |
110 /// operator[] (int i) => list[i]; | 112 /// operator[] (int i) => list[i]; |
111 iParameter = new VariableDeclaration("i", | 113 iParameter = new VariableDeclaration("i", |
112 type: coreTypes.intClass.rawType, isFinal: true); | 114 type: coreTypes.intClass.rawType, isFinal: true); |
113 Accessor accessor = IndexAccessor.make(listFieldAccessor.buildSimpleRead(), | 115 Accessor accessor = IndexAccessor.make( |
114 new VariableAccessor(iParameter).buildSimpleRead(), null, null); | 116 listFieldAccessor.buildSimpleRead(), |
| 117 new VariableAccessor(iParameter, null, TreeNode.noOffset) |
| 118 .buildSimpleRead(), |
| 119 null, |
| 120 null); |
115 Procedure indexGet = new Procedure( | 121 Procedure indexGet = new Procedure( |
116 new Name("[]"), | 122 new Name("[]"), |
117 ProcedureKind.Operator, | 123 ProcedureKind.Operator, |
118 new FunctionNode(new ReturnStatement(accessor.buildSimpleRead()), | 124 new FunctionNode(new ReturnStatement(accessor.buildSimpleRead()), |
119 positionalParameters: <VariableDeclaration>[iParameter]), | 125 positionalParameters: <VariableDeclaration>[iParameter]), |
120 fileUri: fileUri); | 126 fileUri: fileUri); |
121 | 127 |
122 /// operator[]= (int i, value) { | 128 /// operator[]= (int i, value) { |
123 /// list[i] = value; | 129 /// list[i] = value; |
124 /// } | 130 /// } |
125 iParameter = new VariableDeclaration("i", | 131 iParameter = new VariableDeclaration("i", |
126 type: coreTypes.intClass.rawType, isFinal: true); | 132 type: coreTypes.intClass.rawType, isFinal: true); |
127 VariableDeclaration valueParameter = | 133 VariableDeclaration valueParameter = |
128 new VariableDeclaration("value", isFinal: true); | 134 new VariableDeclaration("value", isFinal: true); |
129 accessor = IndexAccessor.make(listFieldAccessor.buildSimpleRead(), | 135 accessor = IndexAccessor.make( |
130 new VariableAccessor(iParameter).buildSimpleRead(), null, null); | 136 listFieldAccessor.buildSimpleRead(), |
| 137 new VariableAccessor(iParameter, null, TreeNode.noOffset) |
| 138 .buildSimpleRead(), |
| 139 null, |
| 140 null); |
131 Expression expression = accessor.buildAssignment( | 141 Expression expression = accessor.buildAssignment( |
132 new VariableAccessor(valueParameter).buildSimpleRead(), | 142 new VariableAccessor(valueParameter, null, TreeNode.noOffset) |
| 143 .buildSimpleRead(), |
133 voidContext: true); | 144 voidContext: true); |
134 Procedure indexSet = new Procedure( | 145 Procedure indexSet = new Procedure( |
135 new Name("[]="), | 146 new Name("[]="), |
136 ProcedureKind.Operator, | 147 ProcedureKind.Operator, |
137 new FunctionNode(new ExpressionStatement(expression), | 148 new FunctionNode(new ExpressionStatement(expression), |
138 positionalParameters: <VariableDeclaration>[ | 149 positionalParameters: <VariableDeclaration>[ |
139 iParameter, | 150 iParameter, |
140 valueParameter | 151 valueParameter |
141 ]), | 152 ]), |
142 fileUri: fileUri); | 153 fileUri: fileUri); |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
187 fields: fields, | 198 fields: fields, |
188 procedures: procedures, | 199 procedures: procedures, |
189 fileUri: fileUri); | 200 fileUri: fileUri); |
190 Library mock = new Library(Uri.parse(fileUri), | 201 Library mock = new Library(Uri.parse(fileUri), |
191 name: "mock", classes: [contextClass])..fileUri = fileUri; | 202 name: "mock", classes: [contextClass])..fileUri = fileUri; |
192 program.libraries.add(mock); | 203 program.libraries.add(mock); |
193 mock.parent = program; | 204 mock.parent = program; |
194 program.uriToSource[mock.fileUri] = new Source(<int>[0], const <int>[]); | 205 program.uriToSource[mock.fileUri] = new Source(<int>[0], const <int>[]); |
195 return contextClass; | 206 return contextClass; |
196 } | 207 } |
OLD | NEW |