summaryrefslogtreecommitdiff
path: root/vala/valaobjectcreationexpression.vala
diff options
context:
space:
mode:
authorRico Tzschichholz <ricotz@ubuntu.com>2022-02-22 10:43:10 +0100
committerRico Tzschichholz <ricotz@ubuntu.com>2022-02-22 10:43:10 +0100
commite72804efa476dedc48911d8ed73cd938b4e6fa92 (patch)
tree2e725b7c226720573ab3f6dafc46228a9e20b0b3 /vala/valaobjectcreationexpression.vala
parentbaebb4b5c41ecf4976cab6ca092c7998b06fb4c3 (diff)
downloadvala-e72804efa476dedc48911d8ed73cd938b4e6fa92.tar.gz
vala: Member reference for ObjectCreationExpression is never null
Diffstat (limited to 'vala/valaobjectcreationexpression.vala')
-rw-r--r--vala/valaobjectcreationexpression.vala110
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 ();