| Index: dart/sdk/lib/_internal/compiler/samples/constants/constants.dart
|
| diff --git a/dart/sdk/lib/_internal/compiler/samples/constants/constants.dart b/dart/sdk/lib/_internal/compiler/samples/constants/constants.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..adb782a850d01169f23b283ff66006960fb5640a
|
| --- /dev/null
|
| +++ b/dart/sdk/lib/_internal/compiler/samples/constants/constants.dart
|
| @@ -0,0 +1,141 @@
|
| +// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
|
| +// for details. All rights reserved. Use of this source code is governed by a
|
| +// BSD-style license that can be found in the LICENSE file.
|
| +
|
| +import 'dart:io';
|
| +
|
| +import 'dart:mirrors';
|
| +
|
| +import '../../../libraries.dart'
|
| + show LIBRARIES, LibraryInfo;
|
| +
|
| +import '../../implementation/mirrors/analyze.dart'
|
| + show analyze;
|
| +
|
| +import '../../implementation/mirrors/dart2js_mirrors.dart' show
|
| + BackDoor,
|
| + ResolvedNode;
|
| +
|
| +import '../../implementation/mirrors/mirrors_util.dart' show nameOf;
|
| +
|
| +import '../../implementation/filenames.dart';
|
| +import '../../implementation/source_file.dart';
|
| +import '../../implementation/source_file_provider.dart';
|
| +import '../../implementation/util/uri_extras.dart';
|
| +import '../../implementation/tree/tree.dart';
|
| +
|
| +const SDK_ROOT = '../../../../../';
|
| +
|
| +var handler;
|
| +RandomAccessFile output;
|
| +
|
| +main(List<String> arguments) {
|
| + handler = new FormattingDiagnosticHandler()
|
| + ..throwOnError = true;
|
| +
|
| + Uri myLocation =
|
| + handler.provider.cwd.resolveUri(Platform.script);
|
| +
|
| + List uris = arguments.map(Uri.base.resolve).toList();
|
| +
|
| +
|
| + analyze(uris, myLocation.resolve(SDK_ROOT), null, handler.provider, handler)
|
| + .then((mirrors) => processLibraries(uris, mirrors));
|
| +}
|
| +
|
| +void processLibraries(List<Uri> uris, MirrorSystem mirrors) {
|
| + for (Uri uri in uris) {
|
| + processLibrary(mirrors.libraries[uri]);
|
| + }
|
| +}
|
| +
|
| +void processLibrary(LibraryMirror library) {
|
| + library.declarations.values.forEach(processMirror);
|
| +}
|
| +
|
| +void processMirror(Mirror mirror) {
|
| + if (mirror is MethodMirror) {
|
| + processMethod(mirror);
|
| + } else if (mirror is ParameterMirror) {
|
| + processParameter(mirror);
|
| + } else if (mirror is VariableMirror) {
|
| + processVariable(mirror);
|
| + } else if (mirror is DeclarationMirror) {
|
| + processDeclaration(mirror);
|
| + }
|
| +}
|
| +
|
| +void processMethod(MethodMirror mirror) {
|
| + processDeclaration(mirror);
|
| + print('(');
|
| + for (var parameter in mirror.parameters) {
|
| + processParameter(parameter);
|
| + }
|
| + print(');');
|
| +}
|
| +
|
| +void processParameter(ParameterMirror mirror) {
|
| + processDeclaration(mirror);
|
| + ResolvedNode defaultValue = BackDoor.defaultValueSyntaxOf(mirror);
|
| + if (defaultValue != null) {
|
| + String delimiter = mirror.isNamed ? ':' : '=';
|
| + print(" $delimiter ${formatResolvedNode(defaultValue)}");
|
| + }
|
| +}
|
| +
|
| +void processVariable(VariableMirror mirror) {
|
| + processDeclaration(mirror);
|
| + ResolvedNode initializer = BackDoor.initializerSyntaxOf(mirror);
|
| + if (initializer != null) {
|
| + print(" = ${formatResolvedNode(initializer)}");
|
| + }
|
| +}
|
| +
|
| +void processDeclaration(DeclarationMirror mirror) {
|
| + for (ResolvedNode node in BackDoor.metadataSyntaxOf(mirror)) {
|
| + print("@${formatResolvedNode(node)}");
|
| + }
|
| +
|
| + print(MirrorSystem.getName(mirror.qualifiedName));
|
| +}
|
| +
|
| +String formatResolvedNode(ResolvedNode node) {
|
| + ResolvedPrinter printer = new ResolvedPrinter(node);
|
| + printer.unparse(node.node);
|
| + return printer.result.toString();
|
| +}
|
| +
|
| +class ResolvedPrinter extends Unparser {
|
| + final ResolvedNode resolvedNode;
|
| +
|
| + ResolvedPrinter(this.resolvedNode);
|
| +
|
| + visitSend(Send node) {
|
| + var m = resolvedNode.resolvedMirror(node);
|
| + String after = '';
|
| + if (m != null) {
|
| + add('<a href="#${MirrorSystem.getName(m.qualifiedName)}">');
|
| + after = '</a>';
|
| + }
|
| +
|
| + Operator op = node.selector.asOperator();
|
| + String opString = op != null ? op.source : null;
|
| + bool spacesNeeded = identical(opString, 'is') || identical(opString, 'as');
|
| +
|
| + if (node.isPrefix) visit(node.selector);
|
| + unparseSendReceiver(node, spacesNeeded: spacesNeeded);
|
| + if (!node.isPrefix && !node.isIndex) visit(node.selector);
|
| + if (spacesNeeded) sb.write(' ');
|
| + // Also add a space for sequences like x + +1 and y - -y.
|
| + // TODO(ahe): remove case for '+' when we drop the support for it.
|
| + if (node.argumentsNode != null && (identical(opString, '-')
|
| + || identical(opString, '+'))) {
|
| + Token beginToken = node.argumentsNode.getBeginToken();
|
| + if (beginToken != null && identical(beginToken.stringValue, opString)) {
|
| + sb.write(' ');
|
| + }
|
| + }
|
| + add(after);
|
| + visit(node.argumentsNode);
|
| + }
|
| +}
|
|
|