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(); }
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(); }
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(); }
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(); }
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(); }
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(); }
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(); }
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(); }
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(); }
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(); }
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(); }
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(); }
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"); }
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."); } }
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(); }
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(); }