public GetVarIndex ( VariableName name ) : int | ||
name | VariableName | |
Результат | int |
/// <summary> /// Get merged variable value type. /// </summary> public TypeRefMask GetVarType(string name) { var index = _flowCtx.GetVarIndex(new VariableName(name)); var types = _varsType; return((index >= 0 && index < types.Length) ? types[index] : 0); }
/// <summary> /// Initializes <c>$this</c> variable, its type and initialized state. /// </summary> private static void InitThisVar(FlowContext/*!*/ctx, FlowState/*!*/initialState) { var thisVarType = ctx.TypeRefContext.GetThisTypeMask(); if (thisVarType.IsUninitialized) { thisVarType = TypeRefMask.AnyType; } // var thisIdx = ctx.GetVarIndex(VariableName.ThisVariableName); initialState.SetVarUsed(thisIdx); initialState.SetVar(thisIdx, thisVarType); }
/// <summary> /// Initializes <c>$this</c> variable, its type and initialized state. /// </summary> private static void InitThisVar(FlowContext /*!*/ ctx, FlowState /*!*/ initialState) { var thisVarType = ctx.TypeRefContext.GetThisTypeMask(); if (thisVarType.IsUninitialized) { thisVarType = TypeRefMask.AnyType; } // var thisHandle = ctx.GetVarIndex(VariableName.ThisVariableName); initialState.SetLocalType(thisHandle, thisVarType); // set $this type initialState.VisitLocal(thisHandle); // mark as visited (used) to not report as unused }
/// <summary> /// Initializes <c>$this</c> variable, its type and initialized state. /// </summary> private static void InitThisVar(FlowContext /*!*/ ctx, FlowState /*!*/ initialState) { var thisVarType = ctx.TypeRefContext.GetThisTypeMask(); if (thisVarType.IsUninitialized) { thisVarType = TypeRefMask.AnyType; } // var thisIdx = ctx.GetVarIndex(VariableName.ThisVariableName); initialState.SetVarUsed(thisIdx); initialState.SetVar(thisIdx, thisVarType); }
/// <summary> /// Creates new type context, flow context and flow state for the routine. /// </summary> public static FlowState CreateInitialState(SourceRoutineSymbol /*!*/ routine, FlowContext flowCtx = null) { Contract.ThrowIfNull(routine); // get or create typeCtx var typeCtx = routine.TypeRefContext; // create or reuse FlowContext flowCtx ??= new FlowContext(typeCtx, routine); // pre-allocate locals map // https://github.com/peachpiecompiler/peachpie/issues/1002 foreach (var variable in routine.LocalsTable.Variables) { if (variable is Semantics.LocalVariableReference local && local.VariableKind == VariableKind.LocalVariable) { flowCtx.GetVarIndex(variable.BoundName.NameValue); } } // create FlowState var state = new FlowState(flowCtx); // populate input parameters type foreach (var p in routine.SourceParameters) { var local = state.GetLocalHandle(new VariableName(p.Name)); var ptype = p.GetResultType(typeCtx); state.SetLocalType(local, ptype); } // $this if (routine.GetPhpThisVariablePlace() != null) { InitThisVar(flowCtx, state); } // return(state); }
/// <summary> /// Gets variable handle use for other variable operations. /// </summary> public VariableHandle /*!*/ GetLocalHandle(string varname) { return(_flowCtx.GetVarIndex(new VariableName(varname))); }
/// <summary> /// Gets variable handle use for other variable operations. /// </summary> public VariableHandle /*!*/ GetLocalHandle(VariableName varname) { return(FlowContext.GetVarIndex(varname)); }
/// <summary> /// Gets variable handle use for other variable operations. /// </summary> public VariableHandle /*!*/ GetLocalHandle(VariableName varname) { return(_flowCtx.GetVarIndex(varname)); }