}
var member = parse_member_name ();
- DataType element_type = UnresolvedType.new_from_expression (member);
+ DataType element_type = new UnresolvedType.from_expression (member);
bool is_pointer_type = false;
while (accept (TokenType.STAR)) {
element_type = new PointerType (element_type, get_src (begin));
this.inner = inner;
}
- public static UnresolvedSymbol? new_from_expression (Expression expr) {
- unowned MemberAccess? ma = expr as MemberAccess;
- if (ma != null) {
- if (ma.inner != null) {
- return new UnresolvedSymbol (new_from_expression (ma.inner), ma.member_name, ma.source_reference);
- } else {
- return new UnresolvedSymbol (null, ma.member_name, ma.source_reference);
- }
+ public UnresolvedSymbol.from_expression (MemberAccess ma) {
+ base (ma.member_name, ma.source_reference);
+ if (ma.inner is MemberAccess) {
+ inner = new UnresolvedSymbol.from_expression ((MemberAccess) ma.inner);
+ } else if (ma.inner != null) {
+ Report.error (ma.source_reference, "Type reference must be simple name or member access expression");
}
-
- Report.error (expr.source_reference, "Type reference must be simple name or member access expression");
- return null;
}
public override string to_string () {
* @param expr member access expression
* @return newly created type reference
*/
- public static UnresolvedType? new_from_expression (Expression expr) {
- var sym = UnresolvedSymbol.new_from_expression (expr);
+ public UnresolvedType.from_expression (MemberAccess expr) {
+ unresolved_symbol = new UnresolvedSymbol.from_expression (expr);
+ source_reference = expr.source_reference;
+ value_owned = true;
- if (sym != null) {
- var type_ref = new UnresolvedType.from_symbol (sym, expr.source_reference);
- type_ref.value_owned = true;
-
- var ma = (MemberAccess) expr;
- foreach (DataType arg in ma.get_type_arguments ()) {
- type_ref.add_type_argument (arg);
- }
-
- return type_ref;
+ foreach (DataType arg in expr.get_type_arguments ()) {
+ add_type_argument (arg);
}
-
- return null;
}
public override DataType copy () {