コード例 #1
0
        public void ExternalGenericTypeConstruction()
        {
            const string code =
                "import System.Collections.Generic.List" + Tokens.NewLine +
                "l = List<Str>()" + Tokens.NewLine
            ;

            var moduleLoader = new AssemblyManagerBuilder()
                               .AddSystemCollections()
                               .ToModuleLoader();

            var file = Compile.File(code, moduleLoader);

            var assign = file.CodeBlock.LineAt <AstAssignment>(0);

            var expr = assign.Expression;

            expr.Should().NotBeNull();
            expr.RHS.FunctionReference.Should().NotBeNull();


            var variable = assign.Variable as AstVariableDefinition;

            variable.Should().NotBeNull();
            var typeRef = variable.TypeReference;
            var typeDef = typeRef.TypeDefinition;

            typeDef.Should().NotBeNull();
        }
コード例 #2
0
        public void ExternalGenericTypeUse()
        {
            const string code =
                "import System.Collections.Generic.List" + Tokens.NewLine +
                "l: List<Str>" + Tokens.NewLine
            ;

            var moduleLoader = new AssemblyManagerBuilder()
                               .AddSystemCollections()
                               .ToModuleLoader();

            var file = Compile.File(code, moduleLoader);

            var variable = file.CodeBlock.LineAt <AstVariableDefinition>(0);
            var typeRef  = variable.TypeReference as AstTypeReferenceType;

            typeRef.IsTemplateOrGeneric.Should().BeTrue();

            var templArg = typeRef.TemplateArguments.ElementAt(0);

            templArg.HasParameterDefinition.Should().BeTrue();
            templArg.ParameterDefinitionAs <AstGenericParameterDefinition>().Should().NotBeNull();
            var templType = templArg.TypeReference as AstTypeReferenceType;

            templType.TypeDefinition.Should().NotBeNull();
        }
コード例 #3
0
        public void ConstructorCapacity()
        {
            const string code =
                "arr = Array<U8>(10)" + Tokens.NewLine
            ;

            var moduleLoader = new AssemblyManagerBuilder()
                               .AddZsharpRuntime()
                               .ToModuleLoader();

            var file   = Compile.File(code, moduleLoader);
            var assign = file.CodeBlock.LineAt <AstAssignment>(0);

            assign.Expression.RHS.FunctionReference.Should().NotBeNull();
        }
コード例 #4
0
        public void ResolveConversionFunction_TopVariableAssign()
        {
            const string code =
                "x = U16(42)" + Tokens.NewLine
            ;

            var moduleLoader = new AssemblyManagerBuilder()
                               .AddZsharpRuntime()
                               .ToModuleLoader();

            var file = Compile.File(code, moduleLoader);

            var assign = file.CodeBlock.LineAt <AstAssignment>(0);

            assign.Expression.TypeReference.Should().NotBeNull();
        }
コード例 #5
0
        public void IntrinsicConversion()
        {
            const string code =
                "fn: (p: U8): U16" + Tokens.NewLine +
                Tokens.Indent1 + "return U16(p)" + Tokens.NewLine
            ;

            var moduleLoader = new AssemblyManagerBuilder()
                               .AddZsharpRuntime()
                               .ToModuleLoader();

            var file      = Compile.File(code, moduleLoader);
            var fn        = file.CodeBlock.LineAt <AstFunctionDefinitionImpl>(0);
            var intrinsic = fn.SymbolTable.FindDefinition <AstFunctionDefinition>("U16", AstSymbolKind.Function);

            intrinsic.FunctionType.Parameters.First().IsSelf.Should().BeTrue();
        }
コード例 #6
0
        public void ImportRuntimeGenericType()
        {
            const string code =
                "" + Tokens.NewLine
            ;

            var moduleLoader = new AssemblyManagerBuilder()
                               .AddZsharpRuntime()
                               .ToModuleLoader();

            var file    = Build.File(code, moduleLoader);
            var symbols = file.SymbolTable;

            var type = symbols.FindDefinition <AstTypeDefinitionExternal>("Opt%1", AstSymbolKind.Type);

            type.Should().NotBeNull();
        }
コード例 #7
0
        public void ImportRuntimeGenericFunction()
        {
            const string code =
                "" + Tokens.NewLine
            ;

            var moduleLoader = new AssemblyManagerBuilder(preloadDependencies: false)
                               .AddZsharpRuntime()
                               .ToModuleLoader();

            var file    = Build.File(code, moduleLoader);
            var symbols = file.SymbolTable;

            var fn = symbols.FindDefinition <AstFunctionDefinitionExternal>("Array%1", AstSymbolKind.Function);

            fn.Should().NotBeNull();
        }
コード例 #8
0
        public void ExternalZsharpConversion()
        {
            const string code =
                "v = U16(42)" + Tokens.NewLine
            ;

            var moduleLoader = new AssemblyManagerBuilder()
                               .AddZsharpRuntime()
                               .ToModuleLoader();

            var file = Compile.File(code, moduleLoader);

            var assign = file.CodeBlock.LineAt <AstAssignment>(0);

            assign.Expression.RHS.FunctionReference.FunctionDefinition.Should().NotBeNull();
            assign.Expression.RHS.FunctionReference.FunctionDefinition.IsExternal.Should().BeTrue();
        }
コード例 #9
0
        public void ResolveFunction_Expression()
        {
            const string code =
                "fn: (p: U8): U16" + Tokens.NewLine +
                Tokens.Indent1 + "return U16(p)" + Tokens.NewLine +
                "x = fn(42)" + Tokens.NewLine
            ;

            var moduleLoader = new AssemblyManagerBuilder()
                               .AddZsharpRuntime()
                               .ToModuleLoader();

            var file = Compile.File(code, moduleLoader);
            var a    = file.CodeBlock.LineAt <AstAssignment>(1);

            a.Expression.HasTypeReference.Should().BeTrue();
            a.Variable.HasTypeReference.Should().BeTrue();
        }
コード例 #10
0
        public void ExternalFunctionVoidRet()
        {
            const string code =
                "import System.Console" + Tokens.NewLine +
                "WriteLine(\"Test\")" + Tokens.NewLine
            ;

            var moduleLoader = new AssemblyManagerBuilder()
                               .AddSystemConsole()
                               .ToModuleLoader();

            var file = Compile.File(code, moduleLoader);

            var fn      = file.CodeBlock.LineAt <AstFunctionReference>(0);
            var typeRef = fn.FunctionType.TypeReference;

            typeRef.Symbol.Definition.Should().NotBeNull();
        }
コード例 #11
0
        public void ResolveConversionFunction_Expression()
        {
            const string code =
                "fn1: (p: U8): U16" + Tokens.NewLine +
                Tokens.Indent1 + "return U16(p)" + Tokens.NewLine
            ;

            var moduleLoader = new AssemblyManagerBuilder()
                               .AddZsharpRuntime()
                               .ToModuleLoader();

            var file = Compile.File(code, moduleLoader);

            var fn1     = file.CodeBlock.LineAt <AstFunctionDefinitionImpl>(0);
            var br      = fn1.CodeBlock.LineAt <AstBranchExpression>(0);
            var convRef = br.Expression.RHS.FunctionReference;

            convRef.FunctionDefinition.Should().NotBeNull();
        }
コード例 #12
0
        public void ImportFunctionNameAlias()
        {
            const string code =
                "import Print = System.Console.WriteLine" + Tokens.NewLine +
                "fn: ()" + Tokens.NewLine +
                Tokens.Indent1 + "Print(\"Hello World\")" + Tokens.NewLine
            ;

            var moduleLoader = new AssemblyManagerBuilder()
                               .AddSystemConsole()
                               .ToModuleLoader();

            var file = Compile.File(code, moduleLoader);

            var fn   = file.CodeBlock.LineAt <AstFunctionDefinitionImpl>(0);
            var call = fn.CodeBlock.LineAt <AstFunctionReference>(0);

            call.Symbol.FindFunctionDefinition(call).Should().NotBeNull();
        }
コード例 #13
0
        public void ImportExternalModuleAlias()
        {
            const string code =
                "import Print = System.Console.WriteLine" + Tokens.NewLine
            ;

            var moduleLoader = new AssemblyManagerBuilder()
                               .AddSystemConsole()
                               .ToModuleLoader();

            var file    = Build.File(code, moduleLoader);
            var symbols = file.SymbolTable;

            symbols.Symbols.Any(e => e is null).Should().BeFalse();

            var mod = symbols.FindSymbols(AstSymbolKind.Module).Single();

            mod.SymbolName.FullName.Should().Be("System.Console");
        }
コード例 #14
0
        public void ImportExternalNamespace()
        {
            const string code =
                "import System.*" + Tokens.NewLine
            ;

            var moduleLoader = new AssemblyManagerBuilder(preloadDependencies: false)
                               .AddSystemAll()
                               .ToModuleLoader();

            var file    = Build.File(code, moduleLoader);
            var symbols = file.SymbolTable;

            symbols.Symbols.Any(e => e is null).Should().BeFalse();

            foreach (var mod in symbols.FindSymbols(AstSymbolKind.Module))
            {
                mod.SymbolName.FullName.Should().StartWith("System.");
            }
        }
コード例 #15
0
        public void ExternalFunctionArray()
        {
            const string code =
                "import Zsharp.Runtime.Types" + Tokens.NewLine +
                "import System.Console" + Tokens.NewLine +
                "arr = Array<C16>(2)" + Tokens.NewLine +
                "WriteLine(arr)" + Tokens.NewLine
            ;

            var moduleLoader = new AssemblyManagerBuilder()
                               .AddZsharpRuntime()
                               .AddSystemConsole()
                               .ToModuleLoader();

            var file = Compile.File(code, moduleLoader);

            var fn      = file.CodeBlock.LineAt <AstFunctionReference>(0);
            var typeRef = fn.FunctionType.TypeReference;

            typeRef.Symbol.Definition.Should().NotBeNull();
        }
コード例 #16
0
        public void TemplateFunctionReference_ReturnType()
        {
            const string code =
                "fn: <#T>(p: U8): T" + Tokens.NewLine +
                Tokens.Indent1 + "return p.T()" + Tokens.NewLine +
                "s = fn<Str>(42)" + Tokens.NewLine
            ;

            var moduleLoader = new AssemblyManagerBuilder()
                               .AddZsharpRuntime()
                               .ToModuleLoader();

            var file = Compile.File(code, moduleLoader);

            var assign = file.CodeBlock.LineAt <AstAssignment>(1);
            var fn     = assign.Expression.RHS.FunctionReference;

            fn.Should().NotBeNull();

            var symbols = file.SymbolTable;
            var symbol  = symbols.FindSymbol("fn;Str", AstSymbolKind.Function);

            symbol.Definition.Should().NotBeNull();
        }