示例#1
0
        public static CatStructureObject CallOperator(string op, CatStructureObject a, CatStructureObject b)
        {
            switch (op)
            {
            case "+": return(a + b);

            case "-": return(a - b);

            case "*": return(a * b);

            case "//": return(a - (a % b));

            case "/": return(a / b);

            case "%": return(a % b);

            case "^": return(a ^ b);

            case "==": return(new CatBool(a == b));

            case "!=": return(new CatBool(a != b));

            case "<=": return(new CatBool(a <= b));

            case ">=": return(new CatBool(a >= b));

            case "<": return(new CatBool(a < b));

            case ">": return(new CatBool(a > b));

            case "|": return(a | b);

            default: return(a + b);
            }
        }
示例#2
0
 public CatVariable SetValue(CatStructureObject value)
 {
     if (value.Type == VariableType)
     {
         Value = value;
     }
     return(this);
 }
示例#3
0
 public CatField(string name, string type, CatStructureObject value, params Modifier[] modifiers) : base(name, "field", modifiers)
 {
     _type = TypeHandler.GetTypeIndex(type);
     Value = value;
     if (!ModifierHandler.IsField(Modifiers))
     {
         Modifiers += (int)Modifier.Field;
     }
 }
 public static void SetVariable(string name, CatStructureObject value,
                                Dictionary <string, CatStructureObject> variables)
 {
     if (name != "_" && name != "null")
     {
         if (variables.ContainsKey(name))
         {
             variables.Remove(name);
         }
         variables.Add(name, value);
     }
 }
示例#5
0
        public void SetVariable(string name, CatStructureObject value)
        {
            if (name != "_" && name != "null")
            {
                if (Variables.ContainsKey(name))
                {
                    Variables.Remove(name);
                }

                Variables.Add(name, new CatVariable(value.Type).SetValue(value)); //todo enable strict typization
            }
        }
        public static CatArray ParseArray(string baseLex, Dictionary <string, CatStructureObject> variables)
        {
            var lexems  = SplitCarefully(baseLex.Substring(1, baseLex.Length - 2), ",");
            var objects = new CatStructureObject[lexems.Length];

            for (var i = 0; i < lexems.Length; i++)
            {
                var lexem = lexems[i];
                objects[i] = ParseAndExecute(lexem, variables, baseLex);
            }

            return(new CatArray(objects));
        }
示例#7
0
        public static int LoadObjectToHeap(CatStructureObject obj)
        {
            if (CatCore.DoesHeapContainSpaces)
            {
                var bestZeroInARow = 0;
                var bestZeroIndex  = 0;
                var zeroInARow     = 0;
                var zeroIndex      = 0;
                for (var i = 0; i < CatCore.Heap.Count; i++)
                {
                    if (CatCore.Heap[i] is null)
                    {
                        if (zeroInARow == 0)
                        {
                            zeroIndex = i;
                        }
                        zeroInARow += 1;
                        if (bestZeroInARow < zeroInARow)
                        {
                            bestZeroIndex  = zeroIndex;
                            bestZeroInARow = zeroInARow;
                        }
                    }
                    else
                    {
                        zeroInARow = 0;
                        zeroIndex  = 0;
                    }
                }

                if (bestZeroInARow >= 1)
                {
                    CatCore.Heap[bestZeroIndex] = obj;
                    return(bestZeroIndex);
                }
            }
            var ret = CatCore.Heap.Count;

            CatCore.Heap.Add(obj);
            return(ret);
        }
示例#8
0
 public void AddVariable(string name, CatStructureObject value, params Modifier[] modifiers)
 {
     Variables.Add(name, new CatVariable(value.Type, modifiers).SetValue(value));
 }