private object _append(INakoFuncCallInfo info) { object ary = info.StackPop(); // 参照渡しなので変数への参照が得られる object s = info.StackPop(); if (!(ary is NakoVariable)) { throw new NakoPluginRuntimeException("『追加』の引数がvariableではありません"); } NakoVariable ary_link = (NakoVariable)ary; if (ary_link.Body is NakoVarArray) { NakoVarArray arr = (NakoVarArray)ary_link.Body; NakoVariable new_item = new NakoVariable(); new_item.SetBodyAutoType(s); arr.Add(new_item); }else if(ary_link.Body is string && (string)ary_link.Body==""){ NakoVarArray arr = new NakoVarArray(); NakoVariable new_item = new NakoVariable(); new_item.SetBodyAutoType(s); arr.Add(new_item); ary_link.SetBody(arr,NakoVarType.Array); } // 結果をセット return null; }
/// <summary> /// 配列に変数を代入する /// </summary> /// <param name="index"></param> /// <param name="value"></param> public void SetValue(int index, object value) { NakoVariable v = new NakoVariable(); v.SetBodyAutoType(value); this.SetVar(index, v); }
/// <summary> /// 配列変数(ハッシュ)の要素を設定する /// </summary> /// <param name="key"></param> /// <param name="value"></param> public void SetValueFromKey(string key, object value) { NakoVariable v = new NakoVariable(); v.key = key; v.SetBodyAutoType(value); this.SetVarFromKey(key, v); }
private object _getPlugins(INakoFuncCallInfo info) { NakoVarArray a = info.CreateArray(); foreach (KeyValuePair<string, INakoPlugin> pair in NakoAPIFuncBank.Instance.PluginList) { NakoVariable v = new NakoVariable(); v.SetBodyAutoType(pair.Key); a.Add(v); } return a; }
private void st_elem() { object value = StackPop(); object index = StackPop(); object var = StackPop(); if (var is NakoVariable) { NakoVariable var2 = (NakoVariable)var; // null か空の文字列なら NakoArray として生成 if (var2.Body == null || (var2.Type==NakoVarType.String && (string)var2.Body=="")) { var2.SetBody(new NakoVarArray(), NakoVarType.Array); } if (!(var2.Body is NakoVarArray)) { string s = ""; if (var2.Body != null) s = var2.Body.ToString(); var2.SetBody(new NakoVarArray(), NakoVarType.Array); ((NakoVarArray)var2.Body).SetValuesFromString(s); } // NakoArray なら 要素にセット if (var2.Body is NakoVarArray) { NakoVarArray var3 = (NakoVarArray)(var2.Body); NakoVariable elem = var3.GetVarFromObj(index); if (elem == null) { elem = new NakoVariable(); elem.SetBodyAutoType(value); if (index is long) { elem.varNo = Convert.ToInt32(index); } var3.SetVarFromObj(index, elem); } else { elem.SetBodyAutoType(value); } } } }
/// <summary> /// システムに登録する /// </summary> /// <param name="dic"></param> /// <param name="globalVar"></param> public void RegisterToSystem(NakoTokenDic dic, NakoVariableManager globalVar) { // --- 関数 // Tokenizer に登録 for (int i = 0; i < FuncList.Count; i++) { NakoAPIFunc call = FuncList[i]; if (!dic.ContainsKey(call.name)) { dic.Add(call.name, NakoTokenType.FUNCTION_NAME); } else { dic[call.name] = NakoTokenType.FUNCTION_NAME; } } // NakoVariables に登録 for (int i = 0; i < FuncList.Count; i++) { NakoVariable var = new NakoVariable(); var.SetBody(i, NakoVarType.SystemFunc); NakoAPIFunc call = FuncList[i]; globalVar.SetVar(call.name, var); } // --- 変数 foreach (string name in VarList.Keys) { NakoVariable var = new NakoVariable(); var.SetBodyAutoType(VarList[name]); globalVar.SetVar(name, var); } }