1/*
2 * reserved comment block
3 * DO NOT REMOVE OR ALTER!
4 */
5/*
6 * Licensed to the Apache Software Foundation (ASF) under one or more
7 * contributor license agreements.  See the NOTICE file distributed with
8 * this work for additional information regarding copyright ownership.
9 * The ASF licenses this file to You under the Apache License, Version 2.0
10 * (the "License"); you may not use this file except in compliance with
11 * the License.  You may obtain a copy of the License at
12 *
13 *      http://www.apache.org/licenses/LICENSE-2.0
14 *
15 * Unless required by applicable law or agreed to in writing, software
16 * distributed under the License is distributed on an "AS IS" BASIS,
17 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18 * See the License for the specific language governing permissions and
19 * limitations under the License.
20 */
21
22package com.sun.org.apache.xalan.internal.xsltc.compiler;
23
24import java.util.Vector;
25
26import com.sun.org.apache.bcel.internal.generic.InstructionList;
27import com.sun.org.apache.xalan.internal.xsltc.compiler.util.ClassGenerator;
28import com.sun.org.apache.xalan.internal.xsltc.compiler.util.ErrorMsg;
29import com.sun.org.apache.xalan.internal.xsltc.compiler.util.MethodGenerator;
30import com.sun.org.apache.xalan.internal.xsltc.compiler.util.Type;
31import com.sun.org.apache.xalan.internal.xsltc.compiler.util.TypeCheckError;
32import com.sun.org.apache.xalan.internal.xsltc.compiler.util.Util;
33
34class TopLevelElement extends SyntaxTreeNode {
35
36    /*
37     * List of dependencies with other variables, parameters or
38     * keys defined at the top level.
39     */
40    protected Vector _dependencies = null;
41
42    /**
43     * Type check all the children of this node.
44     */
45    public Type typeCheck(SymbolTable stable) throws TypeCheckError {
46        return typeCheckContents(stable);
47    }
48
49    /**
50     * Translate this node into JVM bytecodes.
51     */
52    public void translate(ClassGenerator classGen, MethodGenerator methodGen) {
53        ErrorMsg msg = new ErrorMsg(ErrorMsg.NOT_IMPLEMENTED_ERR,
54                                    getClass(), this);
55        getParser().reportError(FATAL, msg);
56    }
57
58    /**
59     * Translate this node into a fresh instruction list.
60     * The original instruction list is saved and restored.
61     */
62    public InstructionList compile(ClassGenerator classGen,
63                                   MethodGenerator methodGen) {
64        final InstructionList result, save = methodGen.getInstructionList();
65        methodGen.setInstructionList(result = new InstructionList());
66        translate(classGen, methodGen);
67        methodGen.setInstructionList(save);
68        return result;
69    }
70
71    public void display(int indent) {
72        indent(indent);
73        Util.println("TopLevelElement");
74        displayContents(indent + IndentIncrement);
75    }
76
77    /**
78     * Add a dependency with other top-level elements like
79     * variables, parameters or keys.
80     */
81    public void addDependency(TopLevelElement other) {
82        if (_dependencies == null) {
83            _dependencies = new Vector();
84        }
85        if (!_dependencies.contains(other)) {
86            _dependencies.addElement(other);
87        }
88    }
89
90    /**
91     * Get the list of dependencies with other top-level elements
92     * like variables, parameteres or keys.
93     */
94    public Vector getDependencies() {
95        return _dependencies;
96    }
97
98}
99