public ISymbolValue Visit(IdentifierExpression id) { var ImplicitlyExecute = this.ImplicitlyExecute; this.ImplicitlyExecute = true; if (id.IsIdentifier) { var o = ExpressionTypeEvaluation.EvaluateTypes(id, ctxt); if (o == null || o.Length == 0) { EvalError(id, "Symbol could not be found"); return(null); } return(TryDoCTFEOrGetValueRefs(o, id, ImplicitlyExecute)); } byte tt; switch (id.Format) { case Parser.LiteralFormat.CharLiteral: var tk = id.Subformat == LiteralSubformat.Utf32 ? DTokens.Dchar : id.Subformat == LiteralSubformat.Utf16 ? DTokens.Wchar : DTokens.Char; return(new PrimitiveValue(tk, Convert.ToDecimal((int)(char)id.Value), id)); case LiteralFormat.FloatingPoint | LiteralFormat.Scalar: var im = id.Subformat.HasFlag(LiteralSubformat.Imaginary); tt = im ? DTokens.Idouble : DTokens.Double; if (id.Subformat.HasFlag(LiteralSubformat.Float)) { tt = im ? DTokens.Ifloat : DTokens.Float; } else if (id.Subformat.HasFlag(LiteralSubformat.Real)) { tt = im ? DTokens.Ireal : DTokens.Real; } var v = Convert.ToDecimal(id.Value); return(new PrimitiveValue(tt, im ? 0 : v, id, im ? v : 0)); case LiteralFormat.Scalar: var unsigned = id.Subformat.HasFlag(LiteralSubformat.Unsigned); if (id.Subformat.HasFlag(LiteralSubformat.Long)) { tt = unsigned ? DTokens.Ulong : DTokens.Long; } else { tt = unsigned ? DTokens.Uint : DTokens.Int; } return(new PrimitiveValue(tt, Convert.ToDecimal(id.Value), id)); case Parser.LiteralFormat.StringLiteral: case Parser.LiteralFormat.VerbatimStringLiteral: return(new ArrayValue(GetStringType(id.Subformat), id)); default: return(null); } }
public ISymbolValue Visit(NewExpression nex) { //TODO: Create virtual object and call the appropriate ctor, then return the object return(TryDoCTFEOrGetValueRefs(ExpressionTypeEvaluation.EvaluateTypes(nex, ctxt), nex)); }