...
This commit is contained in:
@@ -159,6 +159,7 @@ public sealed class Generator(List<NodeDefinition> nodes)
|
||||
{
|
||||
EmitStatement(statement.Block);
|
||||
}
|
||||
|
||||
writer.WriteLine("}");
|
||||
}
|
||||
|
||||
@@ -166,6 +167,7 @@ public sealed class Generator(List<NodeDefinition> nodes)
|
||||
{
|
||||
return node switch
|
||||
{
|
||||
NodeExpressionBinary expression => EmitExpressionBinary(expression),
|
||||
NodeExpressionBoolLiteral expression => expression.Value.Value ? "true" : "false",
|
||||
NodeExpressionIntLiteral expression => expression.Value.Value.ToString(),
|
||||
NodeExpressionStringLiteral expression => $"(struct string){{ \"{expression.Value.Value}\", {expression.Value.Value.Length} }}",
|
||||
@@ -174,6 +176,32 @@ public sealed class Generator(List<NodeDefinition> nodes)
|
||||
};
|
||||
}
|
||||
|
||||
private string EmitExpressionBinary(NodeExpressionBinary expression)
|
||||
{
|
||||
var left = EmitExpression(expression.Left);
|
||||
var right = EmitExpression(expression.Right);
|
||||
|
||||
return expression.Operation switch
|
||||
{
|
||||
NodeExpressionBinary.Op.Add => $"({left} + {right})",
|
||||
NodeExpressionBinary.Op.Subtract => $"({left} - {right})",
|
||||
NodeExpressionBinary.Op.Multiply => $"({left} * {right})",
|
||||
NodeExpressionBinary.Op.Divide => $"({left} / {right})",
|
||||
NodeExpressionBinary.Op.Modulo => $"({left} % {right})",
|
||||
NodeExpressionBinary.Op.Equal => $"({left} == {right})",
|
||||
NodeExpressionBinary.Op.NotEqual => $"({left} != {right})",
|
||||
NodeExpressionBinary.Op.LessThan => $"({left} < {right})",
|
||||
NodeExpressionBinary.Op.LessThanOrEqual => $"({left} <= {right})",
|
||||
NodeExpressionBinary.Op.GreaterThan => $"({left} > {right})",
|
||||
NodeExpressionBinary.Op.GreaterThanOrEqual => $"({left} >= {right})",
|
||||
NodeExpressionBinary.Op.LeftShift => $"({left} << {right})",
|
||||
NodeExpressionBinary.Op.RightShift => $"({left} >> {right})",
|
||||
NodeExpressionBinary.Op.LogicalAnd => $"({left} && {right})",
|
||||
NodeExpressionBinary.Op.LogicalOr => $"({left} || {right})",
|
||||
_ => throw new ArgumentOutOfRangeException()
|
||||
};
|
||||
}
|
||||
|
||||
private static string CType(NodeType node, string? varName = null)
|
||||
{
|
||||
return node switch
|
||||
|
||||
Reference in New Issue
Block a user