diff options
author | Rico Tzschichholz <ricotz@ubuntu.com> | 2022-02-22 10:43:10 +0100 |
---|---|---|
committer | Rico Tzschichholz <ricotz@ubuntu.com> | 2022-02-22 10:43:10 +0100 |
commit | e72804efa476dedc48911d8ed73cd938b4e6fa92 (patch) | |
tree | 2e725b7c226720573ab3f6dafc46228a9e20b0b3 /vala/valaobjectcreationexpression.vala | |
parent | baebb4b5c41ecf4976cab6ca092c7998b06fb4c3 (diff) | |
download | vala-e72804efa476dedc48911d8ed73cd938b4e6fa92.tar.gz |
vala: Member reference for ObjectCreationExpression is never null
Diffstat (limited to 'vala/valaobjectcreationexpression.vala')
-rw-r--r-- | vala/valaobjectcreationexpression.vala | 110 |
1 files changed, 48 insertions, 62 deletions
diff --git a/vala/valaobjectcreationexpression.vala b/vala/valaobjectcreationexpression.vala index dc2bd8f6c..9cea93417 100644 --- a/vala/valaobjectcreationexpression.vala +++ b/vala/valaobjectcreationexpression.vala @@ -41,13 +41,11 @@ public class Vala.ObjectCreationExpression : Expression, CallableExpression { * The construction method to use or the data type to be created * with the default construction method. */ - public MemberAccess? member_name { + public MemberAccess member_name { get { return _member_name; } private set { _member_name = value; - if (_member_name != null) { - _member_name.parent_node = this; - } + _member_name.parent_node = this; } } @@ -62,7 +60,7 @@ public class Vala.ObjectCreationExpression : Expression, CallableExpression { private List<MemberInitializer> object_initializer = new ArrayList<MemberInitializer> (); private DataType _data_type; - private MemberAccess? _member_name; + private MemberAccess _member_name; /** * Creates a new object creation expression. @@ -71,7 +69,7 @@ public class Vala.ObjectCreationExpression : Expression, CallableExpression { * @param source_reference reference to source code * @return newly created object creation expression */ - public ObjectCreationExpression (MemberAccess? member_name, SourceReference? source_reference = null) { + public ObjectCreationExpression (MemberAccess member_name, SourceReference? source_reference = null) { this.source_reference = source_reference; this.member_name = member_name; } @@ -183,76 +181,64 @@ public class Vala.ObjectCreationExpression : Expression, CallableExpression { checked = true; - if (member_name != null) { - if (!member_name.check (context)) { - error = true; - return false; - } + if (!member_name.check (context)) { + error = true; + return false; } TypeSymbol type; - if (type_reference == null) { - if (member_name == null) { - error = true; - Report.error (source_reference, "Incomplete object creation expression"); - return false; - } - - if (member_name.symbol_reference == null) { - error = true; - return false; - } - - var constructor_sym = member_name.symbol_reference; - var type_sym = member_name.symbol_reference; - - var type_args = member_name.get_type_arguments (); - - if (constructor_sym is Method) { - type_sym = constructor_sym.parent_symbol; + if (member_name.symbol_reference == null) { + error = true; + return false; + } - var constructor = (Method) constructor_sym; - if (!(constructor_sym is CreationMethod)) { - error = true; - Report.error (source_reference, "`%s' is not a creation method", constructor.get_full_name ()); - return false; - } + var constructor_sym = member_name.symbol_reference; + var type_sym = member_name.symbol_reference; - symbol_reference = constructor; + var type_args = member_name.get_type_arguments (); - // inner expression can also be base access when chaining constructors - unowned MemberAccess? ma = member_name.inner as MemberAccess; - if (ma != null) { - type_args = ma.get_type_arguments (); - } - } + if (constructor_sym is Method) { + type_sym = constructor_sym.parent_symbol; - if (type_sym is Class) { - type = (TypeSymbol) type_sym; - if (((Class) type).is_error_base) { - type_reference = new ErrorType (null, null, source_reference); - } else { - type_reference = new ObjectType ((Class) type, source_reference); - } - } else if (type_sym is Struct) { - type = (TypeSymbol) type_sym; - type_reference = new StructValueType ((Struct) type, source_reference); - } else if (type_sym is ErrorCode) { - type = (TypeSymbol) type_sym; - type_reference = new ErrorType ((ErrorDomain) type_sym.parent_symbol, (ErrorCode) type_sym, source_reference); - symbol_reference = type_sym; - } else { + var constructor = (Method) constructor_sym; + if (!(constructor_sym is CreationMethod)) { error = true; - Report.error (source_reference, "`%s' is not a class, struct, or error code", type_sym.get_full_name ()); + Report.error (source_reference, "`%s' is not a creation method", constructor.get_full_name ()); return false; } - foreach (DataType type_arg in type_args) { - type_reference.add_type_argument (type_arg); + symbol_reference = constructor; + + // inner expression can also be base access when chaining constructors + unowned MemberAccess? ma = member_name.inner as MemberAccess; + if (ma != null) { + type_args = ma.get_type_arguments (); } + } + + if (type_sym is Class) { + type = (TypeSymbol) type_sym; + if (((Class) type).is_error_base) { + type_reference = new ErrorType (null, null, source_reference); + } else { + type_reference = new ObjectType ((Class) type, source_reference); + } + } else if (type_sym is Struct) { + type = (TypeSymbol) type_sym; + type_reference = new StructValueType ((Struct) type, source_reference); + } else if (type_sym is ErrorCode) { + type = (TypeSymbol) type_sym; + type_reference = new ErrorType ((ErrorDomain) type_sym.parent_symbol, (ErrorCode) type_sym, source_reference); + symbol_reference = type_sym; } else { - type = type_reference.type_symbol; + error = true; + Report.error (source_reference, "`%s' is not a class, struct, or error code", type_sym.get_full_name ()); + return false; + } + + foreach (DataType type_arg in type_args) { + type_reference.add_type_argument (type_arg); } value_type = type_reference.copy (); |