+2008-01-22 Miguel de Icaza <miguel@novell.com>
+
+ * typemanager.cs (LinqExpression): renamed from
+ ExpressionTreeManager, for a shorter name.
+
+ Use TypeManager.CoreLookupType to lookup types from our core
+ assemblies and turn those into "Type" variables.
+
+ Consumers that previously used "Namespace" and "Type" from this
+ class should instead use the TypeExpression which is a type that
+ is fully resolved (without involving the regular C# resolution
+ rules).
+
+ This typically looks like this:
+
+ TypeExpression texpr = new TypeExpression (LinqExpression.expression_type, loc);
+ new MemberAccess (texpr, name, type_arguments, loc)
+
+ This avoids the problem in: #355178
+
2008-01-21 Marek Safar <marek.safar@gmail.com>
* cs-parser.jay, expression.cs: Check `namespace alias qualifier' language
public static Expression CreateExpressionFactoryCall (string name, TypeArguments typeArguments, ArrayList args, Location loc)
{
- return new Invocation (
- new MemberAccess (ExpressionTreeManager.Type, name, typeArguments, loc),
- args);
+ TypeExpression texpr = new TypeExpression (LinqExpression.expression_type, loc);
+ return new Invocation (new MemberAccess (texpr, name, typeArguments, loc), args);
}
}
if (parameter_expr_tree_type != null)
return parameter_expr_tree_type;
- MemberAccess ma = new MemberAccess (
- ExpressionTreeManager.Namespace, "ParameterExpression", location);
- parameter_expr_tree_type = ma.ResolveAsTypeTerminal (ec, false);
+ parameter_expr_tree_type = new TypeExpression (LinqExpression.parameter_expression_type, location).
+ ResolveAsTypeTerminal (ec, false);
+
return parameter_expr_tree_type;
}
}
//
// Common expressions used by expression trees
//
- static class ExpressionTreeManager
+ static class LinqExpression
{
- public static MemberAccess Namespace = new MemberAccess (
- new MemberAccess (new SimpleName ("System", Location.Null), "Linq", Location.Null),
- "Expressions", Location.Null);
-
- public static MemberAccess Type =
- new MemberAccess (Namespace, "Expression", Location.Null);
- }
+ //
+ // These represent types thare are loaded from System.Core, similar
+ // in spirit to the TypeManger _type variables.
+ //
+ public static Type expression_type;
+ public static Type parameter_expression_type;
+ //
+ // The expressions represeing the internal types, if used
+ //
+ public static TypeExpr expression_type_expr;
+
+ static LinqExpression ()
+ {
+ expression_type = TypeManager.CoreLookupType ("System.Linq.Expressions", "Expression");
+ parameter_expression_type = TypeManager.CoreLookupType ("System.Linq.Expressions", "ParameterExpression");
+
+ expression_type_expr = new TypeExpression (expression_type, Location.Null);
+ }
+ }
}