Exemplo n.º 1
0
        internal void StoreStringObject(List<JintItem> Object, string Value)
        {
            if (Value.Length == 0) return;
            string ExistingValue = GetStringObject(Object);
            if (ExistingValue.Equals(Value)) return;

            if (ExistingValue.Length > 0)
            {
                int RemovalIndex = -1;
                for (int i = 0; i < InterestingStringHolders[ExistingValue].Count; i++)
                {
                    ItemChecker IC = new ItemChecker(this);
                    if (IC.DoItemsMatch(InterestingStringHolders[ExistingValue][i], Object).NeutralReasons.Count > 0) RemovalIndex = i;
                }
                if (RemovalIndex >= 0) InterestingStringHolders[ExistingValue].RemoveAt(RemovalIndex);
            }

            if (InterestingStringHolders.ContainsKey(Value))
                InterestingStringHolders[Value].Add(Object);
            else
                InterestingStringHolders.Add(Value, new List<List<JintItem>>() { Object });
        }
Exemplo n.º 2
0
        internal string GetStringObject(List<JintItem> Object)
        {
            bool FirstCheck = true;
            ItemChecker IC = new ItemChecker(this);
            int AddedAt = 0;

            foreach (List<JintItem> StrItem in SentForStringConversion)
            {
                if (ItemChecker.IsSimilar(Object, StrItem))
                {
                    FirstCheck = false;
                    break;
                }
            }

            if (FirstCheck)
            {
                SentForStringConversion.Add(Object);
                AddedAt = SentForStringConversion.Count - 1;
            }

            foreach (string Key in InterestingStringHolders.Keys)
            {
                foreach (List<JintItem> Item in InterestingStringHolders[Key])
                {
                    if (FirstCheck)
                    {
                        if (IC.DoItemsMatch(Item, Object).NeutralReasons.Count > 0)
                        {
                            SentForStringConversion.RemoveAt(AddedAt);
                            return Key;
                        }
                    }
                    else
                    {
                        if (ItemChecker.IsSimilar(Item, Object)) return Key;
                    }
                }
            }
            if (FirstCheck) SentForStringConversion.RemoveAt(AddedAt);
            return "";
        }
Exemplo n.º 3
0
 internal void RemoveStringObject(List<JintItem> Object)
 {
     foreach (string Key in InterestingStringHolders.Keys)
     {
         List<int> RemoveIndexes = new List<int>();
         int Index = -1;
         foreach (List<JintItem> Item in InterestingStringHolders[Key])
         {
             Index++;
             ItemChecker IC = new ItemChecker(this);
             if (IC.DoItemsMatch(Item, Object).NeutralReasons.Count > 0) RemoveIndexes.Add(Index);
         }
         for (int i = 0; i < RemoveIndexes.Count; i++ )
         {
             InterestingStringHolders[Key].RemoveAt(RemoveIndexes[i] - i);
         }
     }
 }
Exemplo n.º 4
0
        List<JintItem> GetMappedItem(List<JintItem> LeftItem, List<JintItem> RightItem, List<JintItem> List)
        {
            List<JintItem> EmptyResult = new List<JintItem>();
            if (RightItem.Count == 0 || LeftItem.Count == 0 || List.Count == 0) return EmptyResult;

            ItemChecker IC = new ItemChecker(this);
            if (IC.DoItemsMatch(List, RightItem, false).NeutralReasons.Count == 0) return EmptyResult;
            int RightMatchStopIndex = -1;
            if (RightItem[0].State == JintState.Identifier && LeftItem[0].State == JintState.Identifier && (List[0].State == JintState.Identifier || List[0].State == JintState.MethodCallName))
            {
                if (RightItem[0].Value.Equals(List[0].Value))
                    RightMatchStopIndex++;
                else
                    return EmptyResult;
                for (int i = 1; i < RightItem.Count; i++)
                {
                    if ((RightItem[i].State == JintState.Property || RightItem[i].State == JintState.StringIndex) && (List.Count > i) &&
                        (List[i].State == JintState.Property || List[i].State == JintState.StringIndex || List[i].State == JintState.MethodCallName))
                    {
                        if (RightItem[i].Value.Equals(List[i].Value))
                            RightMatchStopIndex++;
                        else
                            break;
                    }
                    else
                        break;
                }
            }
            else
            {
                return EmptyResult;
            }
            if (RightMatchStopIndex < RightItem.Count -1) return EmptyResult;
            List<JintItem> ResultItem = new List<JintItem>(LeftItem);
            for (int i = RightMatchStopIndex + 1; i < List.Count; i++)
            {
                if (List[i].State == JintState.MethodCallArgument)
                {
                    if (i > 0 && ResultItem.Count > 0)
                    {
                        if (ResultItem[ResultItem.Count - 1].State == JintState.Identifier || ResultItem[ResultItem.Count - 1].State == JintState.Property)
                            ResultItem[ResultItem.Count - 1].State = JintState.MethodCallName;
                    }
                }
                ResultItem.Add(List[i]);
            }
            return ResultItem;
        }