Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   *     http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
 package com.facebook.presto.byteCode;
 
 
 import java.util.List;
 import java.util.Map;
 
 import static com.facebook.presto.byteCode.ParameterizedType.type;
 import static com.google.common.base.Preconditions.checkArgument;
 
 public class CompilerContext
 {
     private final Method defaultBootstrapMethod;
     private final Object[] defaultBootstrapArguments;
 
     private final Map<StringVariablevariables = new TreeMap<>();
     private final List<VariableallVariables = new ArrayList<>();
 
     private int nextSlot;
 
     private final Deque<IterationScopeiterationScopes = new ArrayDeque<>();
 
     private final LabelNode variableStartLabel = new LabelNode("VariableStart");
     private final LabelNode variableEndLabel = new LabelNode("VariableEnd");
 
     private Integer currentLine;
 
     public CompilerContext()
     {
         this(null);
     }
 
     public CompilerContext(Method defaultBootstrapMethod)
     {
         this(defaultBootstrapMethodnew Object[0]);
     }
 
     public CompilerContext(Method defaultBootstrapMethodObject[] defaultBootstrapArguments)
     {
         this. = defaultBootstrapMethod;
         this. = defaultBootstrapArguments;
     }
 
     public Variable createTempVariable(Class<?> type)
     {
         // reserve a slot for this variable
         Variable variable = new Variable("temp_" + type(type));
          += Type.getType(type(type).getType()).getSize();
 
         return variable;
     }
 
     public Variable getVariable(String name)
     {
         Variable variable = .get(name);
         checkArgument(variable != null"Variable %s not defined"name);
         return variable;
     }

    
BE VERY CAREFUL WITH THIS METHOD
 
     public void setVariable(String nameVariable variable)
     {
         Preconditions.checkNotNull(name"name is null");
         Preconditions.checkNotNull(variable"variable is null");
         .put(namevariable);
     }
 
     public void declareThisVariable(ParameterizedType type)
     {
         if (.containsKey("this")) {
             return;
         }
 
         Preconditions.checkState( == 0, "The 'this' variable must be declared before all other parameters and local variables");
         Variable variable = new Variable("this", 0, type);
          = 1;
        .put("this"variable);
    }
    public Variable declareVariable(Class<?> typeString variableName)
    {
        return declareVariable(type(type), variableName);
    }
    public Variable declareVariable(ParameterizedType typeString variableName)
    {
        checkArgument(!.containsKey(variableName), "There is already a variable named %s"variableName);
        Variable variable = new Variable(variableNametype);
         += Type.getType(type.getType()).getSize();
        .add(variable);
        .put(variableNamevariable);
        return variable;
    }
    public void pushIterationScope(LabelNode beginLabelNode end)
    {
        .push(new IterationScope(beginend));
    }
    public void popIterationScope()
    {
        .pop();
    }
    // level 1 is the top of the stack
    public IterationScope peekIterationScope(int level)
    {
        return Iterators.get(.iterator(), level - 1, null);
    }
    {
        return ;
    }
    {
        return ;
    }
    public boolean hasVisitedLine(Integer line)
    {
        return this. != null && line.intValue() == this..intValue();
    }
    public void cleanLineNumber()
    {
        this. = null;
    }
    public void visitLine(int currentLine)
    {
        this. = currentLine;
    }
    {
        return ;
    }
    {
        return ;
    }
    public void addLocalVariables(MethodDefinition methodDefinition)
    {
        for (Variable variable : ) {
            methodDefinition.addLocalVariable(variable);
        }
    }
New to GrepCode? Check out our FAQ X