コード例 #1
0
        public UserDefinedRefMethod GetRefMethod(string codeStr)
        {
            if (Config.ICFunction)
            {
                codeStr = codeStr.ToUpper();
            }
            UserDefinedRefMethod ref_method = null;

            if (refmethodDic.TryGetValue(codeStr, out ref_method))
            {
                return(ref_method);
            }
            return(null);
        }
コード例 #2
0
 internal void AddRefMethod(UserDefinedRefMethod refm)
 {
     refmethodDic.Add(refm.Name, refm);
     nameDic.Add(refm.Name, DefinedNameType.UserRefMethod);
 }
コード例 #3
0
        public IOperandTerm GetFunctionMethod(LabelDictionary labelDic, string codeStr, IOperandTerm[] arguments, bool userDefinedOnly)
        {
            if (Config.ICFunction)
            {
                codeStr = codeStr.ToUpper();
            }
            if (arguments == null)            //引数なし、名前のみの探索
            {
                UserDefinedRefMethod ref_method = null;
                if (refmethodDic.TryGetValue(codeStr, out ref_method))
                {
                    return(new UserDefinedRefMethodNoArgTerm(ref_method));
                }
                return(null);
            }
            if ((labelDic != null) && (labelDic.Initialized))
            {
                UserDefinedRefMethod ref_method = null;
                if (refmethodDic.TryGetValue(codeStr, out ref_method))
                {
                    return(new UserDefinedRefMethodTerm(ref_method, arguments));
                }
                FunctionLabelLine func = labelDic.GetNonEventLabel(codeStr);
                if (func != null)
                {
                    if (userDefinedOnly && !func.IsMethod)
                    {
                        throw new CodeEE("#FUNCTIONが指定されていない関数\"@" + func.LabelName + "\"をCALLF系命令で呼び出そうとしました");
                    }
                    if (func.IsMethod)
                    {
                        string       errMes;
                        IOperandTerm ret = UserDefinedMethodTerm.Create(func, arguments, out errMes);
                        if (ret == null)
                        {
                            throw new CodeEE(errMes);
                        }
                        return(ret);
                    }
                    //1.721 #FUNCTIONが定義されていない関数は組み込み関数を上書きしない方向に。 PANCTION.ERBのRANDとか。
                    if (!methodDic.ContainsKey(codeStr))
                    {
                        throw new CodeEE("#FUNCTIONが定義されていない関数(" + func.Position.Filename + ":" + func.Position.LineNo + "行目)を式中で呼び出そうとしました");
                    }
                }
            }
            if (userDefinedOnly)
            {
                return(null);
            }
            FunctionMethod method = null;

            if (!methodDic.TryGetValue(codeStr, out method))
            {
                return(null);
            }
            string errmes = method.CheckArgumentType(codeStr, arguments);

            if (errmes != null)
            {
                throw new CodeEE(errmes);
            }
            return(new FunctionMethodTerm(method, arguments));
        }
コード例 #4
0
ファイル: Argument.cs プロジェクト: windlex/Uniera
 public RefArgument(UserDefinedRefMethod udrm, IOperandTerm src)
 {
     RefMethodToken = udrm;
     SrcTerm        = src;
 }
コード例 #5
0
ファイル: Argument.cs プロジェクト: windlex/Uniera
 public RefArgument(UserDefinedRefMethod udrm, CalledFunction src)
 {
     RefMethodToken    = udrm;
     SrcCalledFunction = src;
 }
コード例 #6
0
ファイル: Argument.cs プロジェクト: windlex/Uniera
 public RefArgument(UserDefinedRefMethod udrm, UserDefinedRefMethod src)
 {
     RefMethodToken    = udrm;
     SrcRefMethodToken = src;
 }