| OLD | NEW |
| 1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
| 2 # Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file | 2 # Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file |
| 3 # for details. All rights reserved. Use of this source code is governed by a | 3 # for details. All rights reserved. Use of this source code is governed by a |
| 4 # BSD-style license that can be found in the LICENSE file. | 4 # BSD-style license that can be found in the LICENSE file. |
| 5 | 5 |
| 6 '''Generates the many subtypes of Node as well as a NodeVisitor into | 6 '''Generates the many subtypes of Node as well as a NodeVisitor into |
| 7 tree.g.dart.''' | 7 tree.g.dart.''' |
| 8 | 8 |
| 9 from codegen import CodeWriter | 9 from codegen import CodeWriter |
| 10 | 10 |
| (...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 173 Expression('Var', 'Identifier name'), | 173 Expression('Var', 'Identifier name'), |
| 174 | 174 |
| 175 Expression('This'), | 175 Expression('This'), |
| 176 Expression('Super'), | 176 Expression('Super'), |
| 177 | 177 |
| 178 Expression('Literal', 'Value value'), | 178 Expression('Literal', 'Value value'), |
| 179 | 179 |
| 180 Expression('StringInterp', 'List<Expression> pieces'), | 180 Expression('StringInterp', 'List<Expression> pieces'), |
| 181 | 181 |
| 182 # TODO(jimhug): Split into Simple and Qualified names | 182 # TODO(jimhug): Split into Simple and Qualified names |
| 183 TypeReference('Simple', 'Type type'), |
| 183 TypeReference('Name', | 184 TypeReference('Name', |
| 184 'bool isFinal, Identifier name, List<Identifier> names'), | 185 'bool isFinal, Identifier name, List<Identifier> names'), |
| 185 | 186 |
| 186 TypeReference('Generic', | 187 TypeReference('Generic', |
| 187 'TypeReference baseType, List<TypeReference> typeArguments, int depth'), | 188 'TypeReference baseType, List<TypeReference> typeArguments, int depth'), |
| 188 TypeReference('Function', | 189 TypeReference('Function', |
| 189 'bool isFinal, FunctionDefinition func'), | 190 'bool isFinal, FunctionDefinition func'), |
| 191 # TODO(jimhug): This shouldn't be a subtype of TypeReference. |
| 190 TypeReference('Default', 'bool oldFactory, NameTypeReference baseType, '+ | 192 TypeReference('Default', 'bool oldFactory, NameTypeReference baseType, '+ |
| 191 'List<ParameterType> typeParameters'), | 193 'List<ParameterType> typeParameters'), |
| 192 | 194 |
| 193 Node('Argument', 'Identifier label, Expression value'), | 195 Node('Argument', 'Identifier label, Expression value'), |
| 194 Node('Formal', | 196 Node('Formal', |
| 195 'bool isThis, bool isRest, TypeReference type, Identifier name,'+ | 197 'bool isThis, bool isRest, TypeReference type, Identifier name,'+ |
| 196 'Expression value'), | 198 'Expression value'), |
| 197 | 199 |
| 198 Node('Catch', | 200 Node('Catch', |
| 199 'DeclaredIdentifier exception, DeclaredIdentifier trace, Statement body'), | 201 'DeclaredIdentifier exception, DeclaredIdentifier trace, Statement body'), |
| (...skipping 10 matching lines...) Expand all Loading... |
| 210 Expression('DeclaredIdentifier!', 'TypeReference type, Identifier name'), | 212 Expression('DeclaredIdentifier!', 'TypeReference type, Identifier name'), |
| 211 ] | 213 ] |
| 212 | 214 |
| 213 def main(): | 215 def main(): |
| 214 cw = CodeWriter(__file__) | 216 cw = CodeWriter(__file__) |
| 215 | 217 |
| 216 for node in nodes: | 218 for node in nodes: |
| 217 node.write(cw) | 219 node.write(cw) |
| 218 cw.writeln() | 220 cw.writeln() |
| 219 | 221 |
| 220 # TypeReference is a bit special: it's a base type, but we also create it | |
| 221 # directly. Add it to nodes after we've generated the nodes. | |
| 222 nodes.append(TypeReference('', 'Type type')) | |
| 223 | |
| 224 cw.writeln() | 222 cw.writeln() |
| 225 cw.enterBlock('interface TreeVisitor {') | 223 cw.enterBlock('interface TreeVisitor {') |
| 226 for node in nodes: | 224 for node in nodes: |
| 227 node.writeVisitInterfaceMethod(cw) | 225 node.writeVisitInterfaceMethod(cw) |
| 228 cw.writeln() | 226 cw.writeln() |
| 229 | 227 |
| 230 cw.exitBlock('}') | 228 cw.exitBlock('}') |
| 231 | 229 |
| 232 cw.writeln() | 230 cw.writeln() |
| 233 cw.enterBlock('class TreePrinter implements TreeVisitor {') | 231 cw.enterBlock('class TreePrinter implements TreeVisitor {') |
| 234 | 232 |
| 235 cw.writeln('var output;') | 233 cw.writeln('var output;') |
| 236 cw.writeln('TreePrinter(this.output) { output.printer = this; }') | 234 cw.writeln('TreePrinter(this.output) { output.printer = this; }') |
| 237 for node in nodes: | 235 for node in nodes: |
| 238 node.writePrettyPrintMethod(cw) | 236 node.writePrettyPrintMethod(cw) |
| 239 cw.writeln() | 237 cw.writeln() |
| 240 cw.exitBlock('}') | 238 cw.exitBlock('}') |
| 241 | 239 |
| 242 cw.writeToFile('tree') | 240 cw.writeToFile('tree') |
| 243 | 241 |
| 244 if __name__ == '__main__': main() | 242 if __name__ == '__main__': main() |
| OLD | NEW |