private static void BuildIntegerTypeSymbol( SymbolTreeBuilder tree, IntegerType integerType, DataType stringType) { var type = new PrimitiveTypeSymbol(integerType); tree.Add(type); var remainderMethod = new MethodSymbol(type, "remainder", integerType, Params(integerType), integerType); var displayStringMethod = new MethodSymbol(type, "to_display_string", integerType, Params(), stringType); tree.Add(remainderMethod); tree.Add(displayStringMethod); }
private void BuildMethodSymbol(IMethodDeclarationSyntax method) { method.Symbol.BeginFulfilling(); var declaringClassSymbol = method.DeclaringClass.Symbol.Result; var resolver = new TypeResolver(method.File, diagnostics); var selfParameterType = ResolveSelfParameterType(method.SelfParameter, method.DeclaringClass); var parameterTypes = ResolveParameterTypes(resolver, method.Parameters, method.DeclaringClass); var returnType = ResolveReturnType(method.ReturnType, resolver); var reachabilityAnnotations = BuildReachabilityAnnotations(method); var symbol = new MethodSymbol(declaringClassSymbol, method.Name, selfParameterType, parameterTypes, returnType, reachabilityAnnotations); method.Symbol.Fulfill(symbol); symbolTree.Add(symbol); BuildSelParameterSymbol(symbol, method.SelfParameter, selfParameterType); BuildParameterSymbols(symbol, method.Parameters, parameterTypes); ResolveReachabilityAnnotations(method); }
private NamespaceOrPackageSymbol BuildNamespaceSymbol( NamespaceOrPackageSymbol containingSymbol, NamespaceName namespaces) { foreach (var nsName in namespaces.Segments) { var nsSymbol = treeBuilder.Children(containingSymbol) .OfType <NamespaceSymbol>() .SingleOrDefault(c => c.Name == nsName); if (nsSymbol is null) { nsSymbol = new NamespaceSymbol(containingSymbol, nsName); treeBuilder.Add(nsSymbol); } containingSymbol = nsSymbol; } return(containingSymbol); }
private static FixedSymbolTree DefineIntrinsicSymbols() { var intrinsicsPackage = new PackageSymbol("intrinsics"); var tree = new SymbolTreeBuilder(intrinsicsPackage); var intrinsicsNamespace = new NamespaceSymbol(intrinsicsPackage, "intrinsics"); // params: length var memAllocate = new FunctionSymbol(intrinsicsNamespace, "mem_allocate", Params(DataType.Size), DataType.Size); tree.Add(memAllocate); // params: ptr var memDeallocate = new FunctionSymbol(intrinsicsNamespace, "mem_deallocate", Params(DataType.Size)); tree.Add(memDeallocate); // params: from_ptr, to_ptr, length var memCopy = new FunctionSymbol(intrinsicsNamespace, "mem_copy", Params(DataType.Size, DataType.Size, DataType.Size)); tree.Add(memCopy); // params: from_ptr, value var memSetByte = new FunctionSymbol(intrinsicsNamespace, "mem_set_byte", Params(DataType.Size, DataType.Byte)); tree.Add(memSetByte); // params: ptr var memGetByte = new FunctionSymbol(intrinsicsNamespace, "mem_get_byte", Params(DataType.Size), DataType.Byte); tree.Add(memGetByte); // params: ptr, length var printUtf8 = new FunctionSymbol(intrinsicsNamespace, "print_utf8", Params(DataType.Size, DataType.Size)); tree.Add(printUtf8); // params: ptr, length var readUtf8Line = new FunctionSymbol(intrinsicsNamespace, "read_utf8_line", Params(DataType.Size, DataType.Size), DataType.Size); tree.Add(readUtf8Line); return(tree.Build()); }
private static void BuildEmptyType(SymbolTreeBuilder tree, EmptyType emptyType) { var symbol = new PrimitiveTypeSymbol(emptyType); tree.Add(symbol); }
private static void BuildBoolSymbol(SymbolTreeBuilder tree) { var symbol = new PrimitiveTypeSymbol(DataType.Bool); tree.Add(symbol); }