001 /*
002 * Copyright 2010-2013 JetBrains s.r.o.
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016
017 package org.jetbrains.jet.lang.cfg.pseudocode;
018
019 public abstract class InstructionVisitorWithResult<R> {
020 public abstract R visitInstruction(Instruction instruction);
021
022 public R visitReadValue(ReadValueInstruction instruction) {
023 return visitInstructionWithNext(instruction);
024 }
025
026 public R visitLocalFunctionDeclarationInstruction(LocalFunctionDeclarationInstruction instruction) {
027 return visitInstructionWithNext(instruction);
028 }
029
030 public R visitVariableDeclarationInstruction(VariableDeclarationInstruction instruction) {
031 return visitInstructionWithNext(instruction);
032 }
033
034 public R visitUnconditionalJump(UnconditionalJumpInstruction instruction) {
035 return visitJump(instruction);
036 }
037
038 public R visitConditionalJump(ConditionalJumpInstruction instruction) {
039 return visitJump(instruction);
040 }
041
042 public R visitReturnValue(ReturnValueInstruction instruction) {
043 return visitJump(instruction);
044 }
045
046 public R visitReturnNoValue(ReturnNoValueInstruction instruction) {
047 return visitJump(instruction);
048 }
049
050 public R visitThrowExceptionInstruction(ThrowExceptionInstruction instruction) {
051 return visitJump(instruction);
052 }
053
054 public R visitNondeterministicJump(NondeterministicJumpInstruction instruction) {
055 return visitInstruction(instruction);
056 }
057
058 public R visitUnsupportedElementInstruction(UnsupportedElementInstruction instruction) {
059 return visitInstructionWithNext(instruction);
060 }
061
062 public R visitSubroutineExit(SubroutineExitInstruction instruction) {
063 return visitInstruction(instruction);
064 }
065
066 public R visitSubroutineSink(SubroutineSinkInstruction instruction) {
067 return visitInstruction(instruction);
068 }
069
070 public R visitJump(AbstractJumpInstruction instruction) {
071 return visitInstruction(instruction);
072 }
073
074 public R visitInstructionWithNext(InstructionWithNext instruction) {
075 return visitInstruction(instruction);
076 }
077
078 public R visitSubroutineEnter(SubroutineEnterInstruction instruction) {
079 return visitInstructionWithNext(instruction);
080 }
081
082 public R visitWriteValue(WriteValueInstruction instruction) {
083 return visitInstructionWithNext(instruction);
084 }
085
086 public R visitLoadUnitValue(LoadUnitValueInstruction instruction) {
087 return visitInstructionWithNext(instruction);
088 }
089
090 public R visitCallInstruction(CallInstruction instruction) {
091 return visitInstructionWithNext(instruction);
092 }
093
094 public R visitCompilationErrorInstruction(CompilationErrorInstruction instruction) {
095 return visitInstructionWithNext(instruction);
096 }
097
098 public R visitMarkInstruction(MarkInstruction instruction) {
099 return visitInstructionWithNext(instruction);
100 }
101
102 }