Esempio n. 1
0
 private BasicAnalyzer(
     SymbolTreeBuilder symbolTreeBuilder,
     SymbolForest symbolTrees,
     ObjectTypeSymbol?stringSymbol,
     Diagnostics diagnostics)
 {
     this.symbolTreeBuilder = symbolTreeBuilder;
     this.symbolTrees       = symbolTrees;
     this.stringSymbol      = stringSymbol;
     this.diagnostics       = diagnostics;
 }
Esempio n. 2
0
 public PackageSyntax(
     Name name,
     FixedSet <ICompilationUnitSyntax> compilationUnits,
     FixedDictionary <Name, PackageIL> references)
 {
     Symbol                = new PackageSymbol(name);
     SymbolTree            = new SymbolTreeBuilder(Symbol);
     CompilationUnits      = compilationUnits;
     AllEntityDeclarations = GetEntityDeclarations(CompilationUnits).ToFixedSet();
     References            = references;
     SymbolTrees           = new SymbolForest(Primitive.SymbolTree, SymbolTree, ReferencedPackages.Select(p => p.SymbolTree));
     Diagnostics           = new Diagnostics(CompilationUnits.SelectMany(cu => cu.Diagnostics));
 }
Esempio n. 3
0
        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 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());
        }
Esempio n. 5
0
        private static PrimitiveSymbolTree DefinePrimitiveSymbols()
        {
            var tree = new SymbolTreeBuilder();

            var stringType = new ObjectType(NamespaceName.Global, "String", false, ReferenceCapability.Shared);

            // Simple Types
            BuildBoolSymbol(tree);

            BuildIntegerTypeSymbol(tree, DataType.Byte, stringType);
            BuildIntegerTypeSymbol(tree, DataType.Int, stringType);
            BuildIntegerTypeSymbol(tree, DataType.UInt, stringType);

            BuildIntegerTypeSymbol(tree, DataType.Size, stringType);
            BuildIntegerTypeSymbol(tree, DataType.Offset, stringType);

            BuildEmptyType(tree, DataType.Void);
            BuildEmptyType(tree, DataType.Never);

            return(tree.BuildPrimitives());
        }
 private NamespaceSymbolBuilder(SymbolTreeBuilder treeBuilder)
 {
     this.treeBuilder = treeBuilder;
 }
Esempio n. 7
0
 private EntitySymbolBuilder(Diagnostics diagnostics, SymbolTreeBuilder symbolTree)
 {
     this.diagnostics = diagnostics;
     this.symbolTree  = symbolTree;
 }
Esempio n. 8
0
        private static void BuildEmptyType(SymbolTreeBuilder tree, EmptyType emptyType)
        {
            var symbol = new PrimitiveTypeSymbol(emptyType);

            tree.Add(symbol);
        }
Esempio n. 9
0
        private static void BuildBoolSymbol(SymbolTreeBuilder tree)
        {
            var symbol = new PrimitiveTypeSymbol(DataType.Bool);

            tree.Add(symbol);
        }