/// <summary> /// 読み書き可能な変数を登録し新たな領域を予約します /// </summary> public ElementBase[] RegisterReadwriteVariableAsNew(Variable varbl) { if (varbl.InitialValues.Length == 1) { //単一宣言 ReadwriteElement target = new ReadwriteElement(); target.Index = Readwrites.Count; Readwrites.Add(target); target.InitialValue = varbl.InitialValues[0]; target.GroupedVariables.Add(varbl); varbl.AnalyzeResults = new ElementBase[1] { target }; return(varbl.AnalyzeResults); } else { //配列宣言 ElementBase[] res = new ElementBase[varbl.InitialValues.Length]; for (int contentIdx = 0; contentIdx < varbl.InitialValues.Length; contentIdx++) { ReadwriteElement target = new ReadwriteElement(); target.Index = Readwrites.Count; Readwrites.Add(target); target.InitialValue = varbl.InitialValues[contentIdx]; target.GroupedVariables.Add(varbl); res[contentIdx] = target; } varbl.AnalyzeResults = res; return(varbl.AnalyzeResults); } }
/// <summary> /// 配置位置(PositionHint)が指定された変数のための領域を確保します /// </summary> public ElementBase[] RegisterReadwriteVariablePositionSpecified(Variable varbl) { if (varbl.InitialValues.Length == 1) { //単一宣言 ReadwriteElement target = new ReadwriteElement(); target.Index = 0; target.InitialValue = varbl.InitialValues[0]; target.GroupedVariables.Add(varbl); ReadwriteElement[] res = new ReadwriteElement[1] { target }; varbl.AnalyzeResults = res; if (varbl.PositionHint < 0) { ReadwritePositionSpecifiedHead.Add(res); } else { ReadwritePositionSpecifiedTail.Add(res); } return(res); } else { //配列宣言 ReadwriteElement[] res = new ReadwriteElement[varbl.InitialValues.Length]; for (int contentIdx = 0; contentIdx < varbl.InitialValues.Length; contentIdx++) { ReadwriteElement target = new ReadwriteElement(); target.Index = contentIdx; target.InitialValue = varbl.InitialValues[contentIdx]; target.GroupedVariables.Add(varbl); res[contentIdx] = target; } varbl.AnalyzeResults = res; if (varbl.PositionHint < 0) { ReadwritePositionSpecifiedHead.Add(res); } else { ReadwritePositionSpecifiedTail.Add(res); } return(res); } }
/// <summary> /// 読み書き可能で初期値を持たない変数のための領域を確保します /// </summary> /// <returns>確保された領域の先頭インデックス</returns> public int RegisterReadwriteEmptyRange(int count) { int res = Readwrites.Count; for (int i = 0; i < count; i++) { ReadwriteElement target = new ReadwriteElement(); target.Index = Readwrites.Count; Readwrites.Add(target); target.InitialValue = ValueBase.Zero; target.NeedInitialization = false; } return(res); }