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); } }
public CatVariable SetValue(CatStructureObject value) { if (value.Type == VariableType) { Value = value; } return(this); }
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); } }
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)); }
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); }
public void AddVariable(string name, CatStructureObject value, params Modifier[] modifiers) { Variables.Add(name, new CatVariable(value.Type, modifiers).SetValue(value)); }