Example #1
0
 public GlobalVariable(GlobalSymbol symbol, LType type, Value initializer, bool isPrivate, bool isExternal, bool isConstant)
 {
     Symbol      = symbol;
     Type        = type ?? throw new ArgumentNullException(nameof(type));
     Initializer = initializer;
     IsPrivate   = isPrivate;
     IsExternal  = isExternal;
     IsConstant  = isConstant;
 }
Example #2
0
        public FunctionDefinition(LType returnType, GlobalSymbol symbol, IEnumerable <Parameter> parameters, IEnumerable <Block> blocks, bool isExternal, SymbolTable <MetaSymbol> metaRefs = null)
        {
            ReturnType = returnType;
            Symbol     = symbol;
            IsExternal = isExternal;

            var implicitLocalCounter = 0;

            var ps = new List <Parameter> ();

            foreach (var p in parameters)
            {
                if (p.Symbol == LocalSymbol.None)
                {
                    var s = (LocalSymbol)Iril.Symbol.Intern('%', implicitLocalCounter);
                    ps.Add(p.WithSymbol(s));
                    implicitLocalCounter++;
                }
            }

            var bs = new List <Block> ();

            foreach (var b in blocks)
            {
                if (b.Symbol == LocalSymbol.None)
                {
                    var s = (LocalSymbol)Iril.Symbol.Intern('%', implicitLocalCounter);
                    bs.Add(b.WithSymbol(s));
                    implicitLocalCounter++;
                }
                foreach (var a in b.AllAssignments)
                {
                    if (a.HasResult && a.Result.HasNumericValue)
                    {
                        implicitLocalCounter = a.Result.NumericValue + 1;
                    }
                }
            }

            Parameters = ps.ToArray();
            Blocks     = bs.ToArray();
            MetaRefs   = metaRefs ?? new SymbolTable <MetaSymbol> ();

            Phis = new SymbolTable <Assignment> ();
            foreach (var b in blocks)
            {
                foreach (var a in b.Assignments)
                {
                    if (a.HasResult && a.Instruction is PhiInstruction)
                    {
                        Phis[a.Result] = a;
                    }
                }
            }
        }
Example #3
0
        public FunctionDeclaration(LType returnType, GlobalSymbol symbol, IEnumerable <Parameter> parameters)
        {
            if (parameters == null)
            {
                throw new ArgumentNullException(nameof(parameters));
            }

            ReturnType = returnType ?? throw new ArgumentNullException(nameof(returnType));
            Symbol     = symbol ?? throw new ArgumentNullException(nameof(symbol));
            Parameters = parameters.ToArray();
        }
Example #4
0
 public GlobalValue(GlobalSymbol symbol)
 {
     Symbol = symbol ?? throw new ArgumentNullException(nameof(symbol));
 }
Example #5
0
 public BoundGlobalExpression(SyntaxNode syntax, GlobalSymbol symbol)
     : base(BoundNodeKind.GlobalExpression, syntax)
 {
     Type   = symbol.ValueType;
     Symbol = symbol;
 }