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; }
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; } } } }
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(); }
public GlobalValue(GlobalSymbol symbol) { Symbol = symbol ?? throw new ArgumentNullException(nameof(symbol)); }
public BoundGlobalExpression(SyntaxNode syntax, GlobalSymbol symbol) : base(BoundNodeKind.GlobalExpression, syntax) { Type = symbol.ValueType; Symbol = symbol; }