Index: compiler/java/com/google/dart/compiler/backend/js/ast/JsFunction.java |
diff --git a/compiler/java/com/google/dart/compiler/backend/js/ast/JsFunction.java b/compiler/java/com/google/dart/compiler/backend/js/ast/JsFunction.java |
deleted file mode 100644 |
index 956f114e4772c11dabd2bd2f577d74c1fe0ad71a..0000000000000000000000000000000000000000 |
--- a/compiler/java/com/google/dart/compiler/backend/js/ast/JsFunction.java |
+++ /dev/null |
@@ -1,225 +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.common.SourceInfo; |
-import com.google.dart.compiler.common.Symbol; |
- |
-import java.util.ArrayList; |
-import java.util.List; |
- |
-/** |
- * Represents a JavaScript function expression. |
- */ |
-public final class JsFunction extends JsLiteral implements HasName { |
- |
- private static void trace(String title, String code) { |
- System.out.println("---------------------------"); |
- System.out.println(title + ":"); |
- System.out.println("---------------------------"); |
- System.out.println(code); |
- } |
- |
- protected JsBlock body; |
- protected final List<JsParameter> params = new ArrayList<JsParameter>(); |
- protected final JsScope scope; |
- private boolean artificiallyRescued; |
- private boolean executeOnce; |
- private boolean fromDart; |
- private JsFunction impliedExecute; |
- private JsName name; |
- private boolean trace = false; |
- private boolean traceFirst = true; |
- private boolean hoisted = false; |
- private boolean constructor = false; |
- |
- /** |
- * Creates an anonymous function. |
- */ |
- public JsFunction(JsScope parent) { |
- this(parent, null, false); |
- } |
- |
- /** |
- * Creates a function that is not derived from Dart source. |
- */ |
- public JsFunction(JsScope parent, JsName name) { |
- this(parent, name, false); |
- } |
- |
- /** |
- * Creates a named function, possibly derived from Dart source. |
- */ |
- public JsFunction(JsScope parent, JsName name, boolean fromDart) { |
- assert (parent != null); |
- this.fromDart = fromDart; |
- setName(name); |
- String scopeName = (name == null) ? "<anonymous>" : name.getIdent(); |
- scopeName = "function " + scopeName; |
- this.scope = new JsScope(parent, scopeName); |
- } |
- |
- public JsBlock getBody() { |
- return body; |
- } |
- |
- /** |
- * If true, this indicates that only the first invocation of the function will |
- * have any effects. Subsequent invocations may be considered to be no-op |
- * calls whose return value is ignored. |
- */ |
- public boolean getExecuteOnce() { |
- return executeOnce; |
- } |
- |
- public JsFunction getImpliedExecute() { |
- return impliedExecute; |
- } |
- |
- @Override |
- public JsName getName() { |
- return name; |
- } |
- |
- @Override |
- public Symbol getSymbol() { |
- return name; |
- } |
- |
- public List<JsParameter> getParameters() { |
- return params; |
- } |
- |
- public JsScope getScope() { |
- return scope; |
- } |
- |
- @Override |
- public boolean hasSideEffects() { |
- // If there's a name, the name is assigned to. |
- return name != null; |
- } |
- |
- public boolean isArtificiallyRescued() { |
- return artificiallyRescued; |
- } |
- |
- @Override |
- public boolean isBooleanFalse() { |
- return false; |
- } |
- |
- @Override |
- public boolean isBooleanTrue() { |
- return true; |
- } |
- |
- @Override |
- public boolean isDefinitelyNotNull() { |
- return true; |
- } |
- |
- @Override |
- public boolean isDefinitelyNull() { |
- return false; |
- } |
- |
- public boolean isFromDart() { |
- return fromDart; |
- } |
- |
- public void setArtificiallyRescued(boolean rescued) { |
- this.artificiallyRescued = rescued; |
- } |
- |
- public void setBody(JsBlock body) { |
- this.body = body; |
- } |
- |
- public void setExecuteOnce(boolean executeOnce) { |
- this.executeOnce = executeOnce; |
- } |
- |
- public void setFromDart(boolean fromDart) { |
- this.fromDart = fromDart; |
- } |
- |
- public void setImpliedExecute(JsFunction impliedExecute) { |
- this.impliedExecute = impliedExecute; |
- } |
- |
- public void setName(JsName name) { |
- this.name = name; |
- if (name != null) { |
- if (isFromDart()) { |
- name.setStaticRef(this); |
- } |
- } |
- } |
- |
- public void setTrace() { |
- this.trace = true; |
- } |
- |
- @Override |
- public void traverse(JsVisitor v, JsContext ctx) { |
- String before = null; |
- if (trace && v instanceof JsModVisitor) { |
- before = this.toSource(); |
- if (traceFirst) { |
- traceFirst = false; |
- trace("SCRIPT INITIAL", before); |
- } |
- } |
- if (v.visit(this, ctx)) { |
- v.acceptWithInsertRemove(params); |
- body = v.accept(body); |
- } |
- v.endVisit(this, ctx); |
- if (trace && v instanceof JsModVisitor) { |
- String after = this.toSource(); |
- if (!after.equals(before)) { |
- String title = v.getClass().getSimpleName(); |
- trace(title, after); |
- } |
- } |
- } |
- |
- public void setHoisted() { |
- hoisted = true; |
- } |
- |
- /** Whether the function has been hoisted */ |
- public boolean isHoisted() { |
- return hoisted; |
- } |
- |
- /** |
- * Rebase the function to a new scope. |
- * @param newScopeParent The scope to add the function to. |
- */ |
- public void rebaseScope(JsScope newScopeParent) { |
- this.scope.rebase(newScopeParent); |
- } |
- |
- @Override |
- public JsFunction setSourceRef(SourceInfo info) { |
- super.setSourceRef(info); |
- return this; |
- } |
- |
- public boolean isConstructor() { |
- return this.constructor; |
- } |
- |
- public boolean setIsConstructor(boolean constructor) { |
- return this.constructor = constructor; |
- } |
- |
- @Override |
- public NodeKind getKind() { |
- return NodeKind.FUNCTION; |
- } |
-} |