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 
22 package com.sun.org.apache.xalan.internal.xsltc.compiler;
23 
24 import com.sun.org.apache.bcel.internal.generic.ConstantPoolGen;
25 import com.sun.org.apache.bcel.internal.generic.InstructionList;
26 import com.sun.org.apache.xalan.internal.xsltc.compiler.util.ClassGenerator;
27 import com.sun.org.apache.xalan.internal.xsltc.compiler.util.MethodGenerator;
28 import com.sun.org.apache.xalan.internal.xsltc.compiler.util.Type;
29 import com.sun.org.apache.xalan.internal.xsltc.compiler.util.TypeCheckError;
30 
31 /**
32  * @author Morten Jorgensen
33  */
34 final class Fallback extends Instruction {
35 
36     private boolean _active = false;
37 
38     /**
39      * This element never produces any data on the stack
40      */
typeCheck(SymbolTable stable)41     public Type typeCheck(SymbolTable stable) throws TypeCheckError {
42         if (_active) {
43             return(typeCheckContents(stable));
44         }
45         else {
46             return Type.Void;
47         }
48     }
49 
50     /**
51      * Activate this fallback element
52      */
activate()53     public void activate() {
54         _active = true;
55     }
56 
toString()57     public String toString() {
58         return("fallback");
59     }
60 
61     /**
62      * Parse contents only if this fallback element is put in place of
63      * some unsupported element or non-XSLTC extension element
64      */
parseContents(Parser parser)65     public void parseContents(Parser parser) {
66         if (_active) parseChildren(parser);
67     }
68 
69     /**
70      * Translate contents only if this fallback element is put in place of
71      * some unsupported element or non-XSLTC extension element
72      */
translate(ClassGenerator classGen, MethodGenerator methodGen)73     public void translate(ClassGenerator classGen, MethodGenerator methodGen) {
74         final ConstantPoolGen cpg = classGen.getConstantPool();
75         final InstructionList il = methodGen.getInstructionList();
76 
77         if (_active) translateContents(classGen, methodGen);
78     }
79 }
80