public ImportIntrinsic(IDependencySystem system) : base(system) { var paramSymbol = new Symbol.Var(null, "path", Symbol.VarKind.Param); var stringType = System.ReferToConstType("@c", "str"); Type = new Type.Proc(true, new List <Type.Proc.Param> { new Type.Proc.Param(paramSymbol, stringType) }, Type.Type_); ReturnType = Lir.Types.Type.User_; }
public Impl(IDependencySystem system, Type returnType) : base(system) { var paramSymbol = new Symbol.Var(null, "path", Symbol.VarKind.Param); var stringType = System.ReferToConstType("@c", "str"); Type = new Type.Proc(true, new List <Type.Proc.Param> { new Type.Proc.Param(paramSymbol, stringType) }, returnType); ReturnType = System.TypeTranslator.ToLirType(returnType); }
public Undependent(IDependencySystem system) : base(system) { // TODO: Ease building these? var typeParamSymbol = new Symbol.Var(null, "T", Symbol.VarKind.Param); Type = new Type.Proc( true, new List <Type.Proc.Param> { new Type.Proc.Param(typeParamSymbol, Type.Type_), }, Type.Type_); }
public ExternIntrinsic(IDependencySystem system) : base(system) { // TODO: Ease building these? var nameParamSymbol = new Symbol.Var(null, "name", Symbol.VarKind.Param); var typeParamSymbol = new Symbol.Var(null, "T", Symbol.VarKind.Param); var stringType = System.ReferToConstType("@c", "str"); var typeType = Type.Type_; Type = new Type.Proc( true, new List <Type.Proc.Param> { new Type.Proc.Param(nameParamSymbol, stringType), new Type.Proc.Param(typeParamSymbol, typeType), }, new Type.Dependent(typeParamSymbol)); }
private Symbol ReferenceImpl(string name, Token?reference, IDependencySystem system) { var symbol = ReferenceRecursive(name); if (symbol != null) { return(symbol); } // No such symbol, find all similar names with an OSA-distance of less than 2 var similarlyNamedSymbol = CollectSimilarlyNamed(name, StringMetrics.OptimalStringAlignmentDistance, 2); // Report var diag = reference == null ? new UndefinedSymbolError(name) : new UndefinedSymbolError(reference); diag.SimilarExistingNames = similarlyNamedSymbol.Select(sym => sym.Name); system.Report(diag); // Return a dummy symbol return(new Symbol.Var(null, name, Symbol.VarKind.Local) { Type = Types.Type.Error }); }
public Codegen(IDependencySystem system) : this(system, new Builder(new UncheckedAssembly(string.Empty))) { }
public Codegen(IDependencySystem system, Builder builder) { System = system; Builder = builder; }
public TypeCheck(IDependencySystem system) { System = system; }
public ElimDependencies(IDependencySystem system) { System = system; }
private void OnCompileError(IDependencySystem system, ICompileError compileError) { Debug.Assert(system == this); errors.Add(compileError); }
/// <summary> /// Searches for a <see cref="Symbol"/> in this or any parent <see cref="Scope"/>. /// </summary> /// <param name="name">The symbol name.</param> /// <param name="system">The <see cref="IDependencySystem"/> to report errors to.</param> /// <returns>The referred <see cref="Symbol"/>.</returns> public Symbol Reference(string name, IDependencySystem system) { return(ReferenceImpl(name, null, system)); }
/// <summary> /// Searches for a <see cref="Symbol"/> in this or any parent <see cref="Scope"/>. /// </summary> /// <param name="name">The symbol name reference <see cref="Token"/>.</param> /// <param name="system">The <see cref="IDependencySystem"/> to report errors to.</param> /// <returns>The referred <see cref="Symbol"/>.</returns> public Symbol Reference(Token name, IDependencySystem system) { return(ReferenceImpl(name.Value, name, system)); }
public CollectDependencies(IDependencySystem system) { System = system; }
/// <summary> /// Initializes a new <see cref="SymbolTable"/>. /// </summary> /// <param name="system">The <see cref="IDependencySystem"/>.</param> public SymbolTable(IDependencySystem system) { System = system; CurrentScope = GlobalScope; }
public TypeEval(IDependencySystem system) { System = system; }
/// <summary> /// Initializes a new <see cref="Intrinsic"/>. /// </summary> /// <param name="system">The <see cref="IDependencySystem"/>.</param> public Intrinsic(IDependencySystem system) { System = system; }