internal static Expression FromPtr(IntPtr expr, NativeGU.NativeMemoryPool pool) { var Tag = (PgfExprTag)NativeGU.gu_variant_open(expr).Tag; if (factories.ContainsKey(Tag)) { return(factories[Tag](expr, pool)); } else { return(new UnsupportedExpression(expr, pool)); } }
internal new static Expression FromPtr(IntPtr expr, NativeGU.NativeMemoryPool pool) { var dataPtr = NativeGU.gu_variant_open(expr).Data; // PgfExprLit* var data = Marshal.PtrToStructure <NativePgfExprLit>(dataPtr); var literalTag = (PgfLiteralTag)NativeGU.gu_variant_open(data.lit).Tag; switch (literalTag) { case PgfLiteralTag.PGF_LITERAL_STR: return(new LiteralStringExpression(expr, pool)); case PgfLiteralTag.PGF_LITERAL_INT: return(new LiteralIntExpression(expr, pool)); case PgfLiteralTag.PGF_LITERAL_FLT: return(new LiteralFloatExpression(expr, pool)); default: throw new ArgumentException(); } }