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; }