}
if (expr.symbol_reference == null) {
- CCodeFunctionCall creation_call = null;
-
// no creation method
- if (expr.type_reference.data_type == glist_type ||
- expr.type_reference.data_type == gslist_type) {
- // NULL is an empty list
- expr.ccodenode = new CCodeConstant ("NULL");
- } else if (expr.type_reference.data_type is Class && expr.type_reference.data_type.is_subtype_of (gobject_type)) {
- generate_class_declaration ((Class) expr.type_reference.data_type, source_declarations);
-
- creation_call = new CCodeFunctionCall (new CCodeIdentifier ("g_object_new"));
- creation_call.add_argument (new CCodeConstant (expr.type_reference.data_type.get_type_id ()));
- creation_call.add_argument (new CCodeConstant ("NULL"));
- } else if (expr.type_reference.data_type is Class) {
- creation_call = new CCodeFunctionCall (new CCodeIdentifier ("g_new0"));
- creation_call.add_argument (new CCodeConstant (expr.type_reference.data_type.get_cname ()));
- creation_call.add_argument (new CCodeConstant ("1"));
- } else if (expr.type_reference.data_type is Struct) {
+ if (expr.type_reference.data_type is Struct) {
// memset needs string.h
source_declarations.add_include ("string.h");
- creation_call = new CCodeFunctionCall (new CCodeIdentifier ("memset"));
+ var creation_call = new CCodeFunctionCall (new CCodeIdentifier ("memset"));
creation_call.add_argument (new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, instance));
creation_call.add_argument (new CCodeConstant ("0"));
creation_call.add_argument (new CCodeIdentifier ("sizeof (%s)".printf (expr.type_reference.get_cname ())));
- }
- creation_expr = creation_call;
+ creation_expr = creation_call;
+ }
+ } else if (expr.type_reference.data_type == glist_type ||
+ expr.type_reference.data_type == gslist_type) {
+ // NULL is an empty list
+ expr.ccodenode = new CCodeConstant ("NULL");
} else if (expr.symbol_reference is Method) {
// use creation method
var m = (Method) expr.symbol_reference;
if (symbol_reference == null) {
symbol_reference = cl.default_construction_method;
- if (symbol_reference != null) {
- // track usage for flow analyzer
- symbol_reference.used = true;
+ if (symbol_reference == null) {
+ error = true;
+ Report.error (source_reference, "`%s' does not have a default constructor".printf (cl.get_full_name ()));
+ return false;
}
+
+ // track usage for flow analyzer
+ symbol_reference.used = true;
}
if (symbol_reference != null && symbol_reference.access == SymbolAccessibility.PRIVATE) {
[Compact]
[CCode (dup_function = "g_list_copy", free_function = "g_list_free")]
public class List<G> {
+ public List ();
+
[ReturnsModifiedPointer ()]
public void append (owned G data);
[ReturnsModifiedPointer ()]
[Compact]
[CCode (dup_function = "g_slist_copy", free_function = "g_slist_free")]
public class SList<G> {
+ public SList ();
+
[ReturnsModifiedPointer ()]
public void append (owned G data);
[ReturnsModifiedPointer ()]