Beispiel #1
0
        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));
        }
Beispiel #5
0
        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
            });
        }
Beispiel #6
0
 public Codegen(IDependencySystem system)
     : this(system, new Builder(new UncheckedAssembly(string.Empty)))
 {
 }
Beispiel #7
0
 public Codegen(IDependencySystem system, Builder builder)
 {
     System  = system;
     Builder = builder;
 }
Beispiel #8
0
 public TypeCheck(IDependencySystem system)
 {
     System = system;
 }
Beispiel #9
0
 public ElimDependencies(IDependencySystem system)
 {
     System = system;
 }
Beispiel #10
0
 private void OnCompileError(IDependencySystem system, ICompileError compileError)
 {
     Debug.Assert(system == this);
     errors.Add(compileError);
 }
Beispiel #11
0
 /// <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));
 }
Beispiel #12
0
 /// <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));
 }
Beispiel #13
0
 public CollectDependencies(IDependencySystem system)
 {
     System = system;
 }
Beispiel #14
0
 /// <summary>
 /// Initializes a new <see cref="SymbolTable"/>.
 /// </summary>
 /// <param name="system">The <see cref="IDependencySystem"/>.</param>
 public SymbolTable(IDependencySystem system)
 {
     System       = system;
     CurrentScope = GlobalScope;
 }
Beispiel #15
0
 public TypeEval(IDependencySystem system)
 {
     System = system;
 }
Beispiel #16
0
 /// <summary>
 /// Initializes a new <see cref="Intrinsic"/>.
 /// </summary>
 /// <param name="system">The <see cref="IDependencySystem"/>.</param>
 public Intrinsic(IDependencySystem system)
 {
     System = system;
 }