d6bdd08002
the typechecker project can collect all the top level types from a file, which is pretty cool I think (except for pointers, those aren't implemented yet...)
41 lines
1.5 KiB
C#
41 lines
1.5 KiB
C#
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());
|
|
}
|
|
} |