Ejemplo n.º 1
0
        //private void analyzeSharpDim(StringStream st, ScriptPosition position, bool dims)
        //{
        //	//WordCollection wc = LexicalAnalyzer.Analyse(st, LexEndWith.EoL, LexAnalyzeFlag.AllowAssignment);
        //	//UserDefinedVariableData data = UserDefinedVariableData.Create(wc, dims, false, position);
        //	//if (data.Reference)
        //	//	throw new NotImplCodeEE();
        //	//VariableToken var = null;
        //	//if (data.CharaData)
        //	//	var = parentProcess.VEvaluator.VariableData.CreateUserDefCharaVariable(data);
        //	//else
        //	//	var = parentProcess.VEvaluator.VariableData.CreateUserDefVariable(data);
        //	//idDic.AddUseDefinedVariable(var);
        //}

        //1822 #DIMだけまとめておいて後で処理
        private bool analyzeSharpDimLines()
        {
            bool noError  = true;
            bool tryAgain = true;

            while (dimlines.Count > 0)
            {
                int count = dimlines.Count;
                for (int i = 0; i < count; i++)
                {
                    DimLineWC dimline = dimlines.Dequeue();
                    try
                    {
                        UserDefinedVariableData data = UserDefinedVariableData.Create(dimline);
                        if (data.Reference)
                        {
                            throw new NotImplCodeEE();
                        }
                        VariableToken var = null;
                        if (data.CharaData)
                        {
                            var = parentProcess.VEvaluator.VariableData.CreateUserDefCharaVariable(data);
                        }
                        else
                        {
                            var = parentProcess.VEvaluator.VariableData.CreateUserDefVariable(data);
                        }
                        idDic.AddUseDefinedVariable(var);
                    }
                    catch (IdentifierNotFoundCodeEE e)
                    {
                        //繰り返すことで解決する見込みがあるならキューの最後に追加
                        if (tryAgain)
                        {
                            dimline.WC.Pointer = 0;
                            dimlines.Enqueue(dimline);
                        }
                        else
                        {
                            ParserMediator.Warn(e.Message, dimline.SC, 2);
                            noError = true;
                        }
                    }
                    catch (CodeEE e)
                    {
                        ParserMediator.Warn(e.Message, dimline.SC, 2);
                        noError = false;
                    }
                }
                if (dimlines.Count == count)
                {
                    tryAgain = false;
                }
            }
            return(noError);
        }
Ejemplo n.º 2
0
 //1822 Privateの方もDIMだけ遅延させようとしたけどちょっと課題がおおいのでやめとく
 public static UserDefinedVariableData Create(DimLineWC dimline)
 {
     return(Create(dimline.WC, dimline.Dims, dimline.IsPrivate, dimline.SC));
 }