| Index: compiler/java/com/google/dart/compiler/backend/js/ast/JsModVisitor.java
|
| diff --git a/compiler/java/com/google/dart/compiler/backend/js/ast/JsModVisitor.java b/compiler/java/com/google/dart/compiler/backend/js/ast/JsModVisitor.java
|
| deleted file mode 100644
|
| index ef6e75ce994462273ce56ab05b88f947d7d458ce..0000000000000000000000000000000000000000
|
| --- a/compiler/java/com/google/dart/compiler/backend/js/ast/JsModVisitor.java
|
| +++ /dev/null
|
| @@ -1,189 +0,0 @@
|
| -// Copyright (c) 2011, 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.
|
| -
|
| -package com.google.dart.compiler.backend.js.ast;
|
| -
|
| -import com.google.dart.compiler.util.Hack;
|
| -
|
| -import java.util.List;
|
| -
|
| -/**
|
| - * A visitor for iterating through and modifying an AST.
|
| - */
|
| -public class JsModVisitor extends JsVisitor {
|
| -
|
| - private class ListContext<T extends JsVisitable> implements JsContext {
|
| -
|
| - private List<T> collection;
|
| - private int index;
|
| - private boolean removed;
|
| - private boolean replaced;
|
| -
|
| - @Override
|
| - public boolean canInsert() {
|
| - return true;
|
| - }
|
| -
|
| - @Override
|
| - public boolean canRemove() {
|
| - return true;
|
| - }
|
| -
|
| - @Override
|
| - public void insertAfter(JsVisitable node) {
|
| - checkRemoved();
|
| - collection.add(index + 1, Hack.<T>cast(node));
|
| - didChange = true;
|
| - }
|
| -
|
| - @Override
|
| - public void insertBefore(JsVisitable node) {
|
| - checkRemoved();
|
| - collection.add(index++, Hack.<T>cast(node));
|
| - didChange = true;
|
| - }
|
| -
|
| - @Override
|
| - public boolean isLvalue() {
|
| - return false;
|
| - }
|
| -
|
| - @Override
|
| - public void removeMe() {
|
| - checkState();
|
| - collection.remove(index--);
|
| - didChange = removed = true;
|
| - }
|
| -
|
| - @Override
|
| - public void replaceMe(JsVisitable node) {
|
| - checkState();
|
| - checkReplacement(collection.get(index), node);
|
| - collection.set(index, Hack.<T>cast(node));
|
| - didChange = replaced = true;
|
| - }
|
| -
|
| - protected void traverse(List<T> collection) {
|
| - this.collection = collection;
|
| - for (index = 0; index < collection.size(); ++index) {
|
| - removed = replaced = false;
|
| - doTraverse(collection.get(index), this);
|
| - }
|
| - }
|
| -
|
| - private void checkRemoved() {
|
| - if (removed) {
|
| - throw new RuntimeException("Node was already removed");
|
| - }
|
| - }
|
| -
|
| - private void checkState() {
|
| - checkRemoved();
|
| - if (replaced) {
|
| - throw new RuntimeException("Node was already replaced");
|
| - }
|
| - }
|
| - }
|
| -
|
| - private class LvalueContext extends NodeContext<JsExpression> {
|
| - @Override
|
| - public boolean isLvalue() {
|
| - return true;
|
| - }
|
| - }
|
| -
|
| - private class NodeContext<T extends JsVisitable> implements JsContext {
|
| - private T node;
|
| - private boolean replaced;
|
| -
|
| - @Override
|
| - public boolean canInsert() {
|
| - return false;
|
| - }
|
| -
|
| - @Override
|
| - public boolean canRemove() {
|
| - return false;
|
| - }
|
| -
|
| - @Override
|
| - public void insertAfter(JsVisitable node) {
|
| - throw new UnsupportedOperationException();
|
| - }
|
| -
|
| - @Override
|
| - public void insertBefore(JsVisitable node) {
|
| - throw new UnsupportedOperationException();
|
| - }
|
| -
|
| - @Override
|
| - public boolean isLvalue() {
|
| - return false;
|
| - }
|
| -
|
| - @Override
|
| - public void removeMe() {
|
| - throw new UnsupportedOperationException();
|
| - }
|
| -
|
| - @Override
|
| - public void replaceMe(JsVisitable node) {
|
| - if (replaced) {
|
| - throw new RuntimeException("Node was already replaced");
|
| - }
|
| - checkReplacement(this.node, node);
|
| - this.node = Hack.<T>cast(node);
|
| - didChange = replaced = true;
|
| - }
|
| -
|
| - protected T traverse(T node) {
|
| - this.node = node;
|
| - replaced = false;
|
| - doTraverse(node, this);
|
| - return this.node;
|
| - }
|
| - }
|
| -
|
| - protected static <T extends JsVisitable> void checkReplacement(T origNode, T newNode) {
|
| - if (newNode == null) {
|
| - throw new RuntimeException("Cannot replace with null");
|
| - }
|
| - if (newNode == origNode) {
|
| - throw new RuntimeException("The replacement is the same as the original");
|
| - }
|
| - }
|
| -
|
| - protected boolean didChange = false;
|
| -
|
| - @Override
|
| - public boolean didChange() {
|
| - return didChange;
|
| - }
|
| -
|
| - @Override
|
| - protected <T extends JsVisitable> T doAccept(T node) {
|
| - return new NodeContext<T>().traverse(node);
|
| - }
|
| -
|
| - @Override
|
| - protected <T extends JsVisitable> void doAcceptList(List<T> collection) {
|
| - NodeContext<T> ctx = new NodeContext<T>();
|
| - for (int i = 0, c = collection.size(); i < c; ++i) {
|
| - ctx.traverse(collection.get(i));
|
| - if (ctx.replaced) {
|
| - collection.set(i, ctx.node);
|
| - }
|
| - }
|
| - }
|
| -
|
| - @Override
|
| - protected JsExpression doAcceptLvalue(JsExpression expr) {
|
| - return new LvalueContext().traverse(expr);
|
| - }
|
| -
|
| - @Override
|
| - protected <T extends JsVisitable> void doAcceptWithInsertRemove(List<T> collection) {
|
| - new ListContext<T>().traverse(collection);
|
| - }
|
| -}
|
|
|