Add string debugging
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user