// Path: src/stone/ast/BlockStmnt.java
// public class BlockStmnt extends ASTList {
//     public BlockStmnt(List<ASTree> c) { super(c); }
// }
// 
// Path: src/stone/ast/ParameterList.java
// public class ParameterList extends ASTList {
//     public ParameterList(List<ASTree> c) { super(c); }
//     public String name(int i) { return ((ASTLeaf)child(i)).token().getText(); }
//     public int size() { return numChildren(); }
// }
// 
// Path: src/chap6/Environment.java
// public interface Environment {
//     void put(String name, Object value);
//     Object get(String name);
// }
// 
// Path: src/chap7/Function.java
// public class Function {
//     protected ParameterList parameters;
//     protected BlockStmnt body;
//     protected Environment env;
//     public Function(ParameterList parameters, BlockStmnt body, Environment env) {
//         this.parameters = parameters;
//         this.body = body;
//         this.env = env;
//     }
//     public ParameterList parameters() { return parameters; }
//     public BlockStmnt body() { return body; }
//     public Environment makeEnv() { return new NestedEnv(env); }
//     @Override public String toString() { return "<fun:" + hashCode() + ">"; }
// }


import stone.ast.BlockStmnt;
import stone.ast.ParameterList;
import chap6.Environment;
import chap7.Function;
package chap11;

public class OptFunction extends Function {
    protected int size;
// Path: src/stone/ast/BlockStmnt.java
// public class BlockStmnt extends ASTList {
//     public BlockStmnt(List<ASTree> c) { super(c); }
// }
// 
// Path: src/stone/ast/ParameterList.java
// public class ParameterList extends ASTList {
//     public ParameterList(List<ASTree> c) { super(c); }
//     public String name(int i) { return ((ASTLeaf)child(i)).token().getText(); }
//     public int size() { return numChildren(); }
// }
// 
// Path: src/chap6/Environment.java
// public interface Environment {
//     void put(String name, Object value);
//     Object get(String name);
// }
// 
// Path: src/chap7/Function.java
// public class Function {
//     protected ParameterList parameters;
//     protected BlockStmnt body;
//     protected Environment env;
//     public Function(ParameterList parameters, BlockStmnt body, Environment env) {
//         this.parameters = parameters;
//         this.body = body;
//         this.env = env;
//     }
//     public ParameterList parameters() { return parameters; }
//     public BlockStmnt body() { return body; }
//     public Environment makeEnv() { return new NestedEnv(env); }
//     @Override public String toString() { return "<fun:" + hashCode() + ">"; }
// }


// Path: src/chap11/OptFunction.java
import stone.ast.BlockStmnt;
import stone.ast.ParameterList;
import chap6.Environment;
import chap7.Function;

package chap11;

public class OptFunction extends Function {
    protected int size;
    public OptFunction(ParameterList parameters, BlockStmnt body,