meowlang/typechecker/TypeChecker.cs

41 lines
1.5 KiB
C#
Raw Normal View History

using meowlang.parser;
namespace meowlang.typechecker;
public static class TypeChecker
{
public static void CheckAndInferTypes(Model model)
{
var typeRegistry = new TypeRegistry();
var topLevelScope = new Scope(typeRegistry);
InitialiseTopLevelScope(topLevelScope);
new CollectTypesVisitor(topLevelScope).Visit(model);
Console.Write(topLevelScope.AutoToString());
Console.Write(typeRegistry.AutoToString());
return;
}
private static void InitialiseTopLevelScope(Scope scope)
{
scope.AddNamedType("s8", 0, new PrimitiveTypeDescription());
scope.AddNamedType("s16", 0, new PrimitiveTypeDescription());
scope.AddNamedType("s32", 0, new PrimitiveTypeDescription());
scope.AddNamedType("s64", 0, new PrimitiveTypeDescription());
scope.AddNamedType("s128", 0, new PrimitiveTypeDescription());
scope.AddNamedType("u8", 0, new PrimitiveTypeDescription());
scope.AddNamedType("u16", 0, new PrimitiveTypeDescription());
scope.AddNamedType("u32", 0, new PrimitiveTypeDescription());
scope.AddNamedType("u64", 0, new PrimitiveTypeDescription());
scope.AddNamedType("u128", 0, new PrimitiveTypeDescription());
scope.AddNamedType("f32", 0, new PrimitiveTypeDescription());
scope.AddNamedType("f64", 0, new PrimitiveTypeDescription());
scope.AddNamedType("bool", 0, new PrimitiveTypeDescription());
}
}