Add string debugging

This commit is contained in:
nub31
2026-03-05 22:58:20 +01:00
parent 0e099d0baf
commit c9bf212aa2
4 changed files with 145 additions and 21 deletions

View File

@@ -263,6 +263,7 @@ public class TypeChecker
NodeExpressionStringLiteral expression => CheckExpressionStringLiteral(expression, expectedType),
NodeExpressionStructLiteral expression => CheckExpressionStructLiteral(expression, expectedType),
NodeExpressionEnumLiteral expression => CheckExpressionEnumLiteral(expression, expectedType),
NodeExpressionStringConstructor expression => CheckExpressionStringConstructor(expression, expectedType),
_ => throw new ArgumentOutOfRangeException(nameof(node))
};
}
@@ -651,6 +652,17 @@ public class TypeChecker
return new TypedNodeExpressionEnumLiteral(expression.Tokens, type, value);
}
private TypedNodeExpressionStringConstructor CheckExpressionStringConstructor(NodeExpressionStringConstructor expression, NubType? expectedType)
{
var stringPoitnerType = NubTypePointer.Get(NubTypeUInt.Get(8));
var value = CheckExpression(expression.Value, stringPoitnerType);
if (!value.Type.IsAssignableTo(stringPoitnerType))
throw BasicError($"Value of string constructor must be assignable to {stringPoitnerType}", value);
return new TypedNodeExpressionStringConstructor(expression.Tokens, NubTypeString.Instance, value);
}
private NubType ResolveType(NodeType node)
{
return node switch
@@ -932,6 +944,11 @@ public class TypedNodeExpressionEnumLiteral(List<Token> tokens, NubType type, Ty
public TypedNodeExpression? Value { get; } = value;
}
public class TypedNodeExpressionStringConstructor(List<Token> tokens, NubType type, TypedNodeExpression value) : TypedNodeExpression(tokens, type)
{
public TypedNodeExpression Value { get; } = value;
}
public class TypedNodeExpressionStructMemberAccess(List<Token> tokens, NubType type, TypedNodeExpression target, TokenIdent name) : TypedNodeExpression(tokens, type)
{
public TypedNodeExpression Target { get; } = target;