public void GenerateCode(LogicOperationNode node, ICIL_CodeGenerator codeGenerator)
        {
            switch (node)
            {
            case AndNode andNode:
                GenerateCode(andNode, codeGenerator);
                break;

            case OrNode orNode:
                GenerateCode(orNode, codeGenerator);
                break;
            }
        }
        public void CheckSemantic(LogicOperationNode node, IScope scope = null)
        {
            CheckSemantic(node.OpNode1, scope);
            CheckSemantic(node.OpNode2, scope);

            if (node.OpNode1.ComputedType.Name != "Bool" ||
                node.OpNode2.ComputedType.Name != "Bool")
            {
                Logger.LogError(node.Line, node.CharPositionInLine,
                                $"Operator '{node.Text}' cannot be applied to operands of type '{node.OpNode1.ComputedType}' and {node.OpNode2.ComputedType}");
                return;
            }
            TypeTable.IsDefinedType("Bool", out var booleanType);
            node.ComputedType = booleanType;
        }