vala r1103 - in trunk: . vala
- From: juergbi svn gnome org
- To: svn-commits-list gnome org
- Subject: vala r1103 - in trunk: . vala
- Date: Tue, 4 Mar 2008 23:00:18 +0000 (GMT)
Author: juergbi
Date: Tue Mar 4 23:00:17 2008
New Revision: 1103
URL: http://svn.gnome.org/viewvc/vala?rev=1103&view=rev
Log:
2008-03-04 Juerg Billeter <j bitron ch>
* vala/Makefile.am, vala/valasemanticanalyzer.vala,
vala/valasymbolresolver.vala, vala/valatypeparametertype.vala:
reduce use of raw DataType instances
Added:
trunk/vala/valatypeparametertype.vala
Modified:
trunk/ChangeLog
trunk/vala/Makefile.am
trunk/vala/valasemanticanalyzer.vala
trunk/vala/valasymbolresolver.vala
Modified: trunk/vala/Makefile.am
==============================================================================
--- trunk/vala/Makefile.am (original)
+++ trunk/vala/Makefile.am Tue Mar 4 23:00:17 2008
@@ -129,6 +129,7 @@
valatypecheck.vala \
valatypeofexpression.vala \
valatypeparameter.vala \
+ valatypeparametertype.vala \
valatypesymbol.vala \
valaunaryexpression.vala \
valaunresolvedsymbol.vala \
Modified: trunk/vala/valasemanticanalyzer.vala
==============================================================================
--- trunk/vala/valasemanticanalyzer.vala (original)
+++ trunk/vala/valasemanticanalyzer.vala Tue Mar 4 23:00:17 2008
@@ -967,7 +967,7 @@
stmt.collection_variable_declarator.active = true;
var collection_type = stmt.collection.static_type;
- var element_data_type = new DataType ();
+ DataType element_data_type = null;
bool need_type_check = false;
if (collection_type.is_array ()) {
@@ -2930,7 +2930,7 @@
var args = ea.container.static_type.get_type_arguments ();
if (args.size != 1) {
a.error = true;
- Report.error (ea.source_reference, "internal error: array reference without type arguments");
+ Report.error (ea.source_reference, "internal error: array reference with %d type arguments".printf (args.size));
return;
}
var element_type = args.get (0);
Modified: trunk/vala/valasymbolresolver.vala
==============================================================================
--- trunk/vala/valasymbolresolver.vala (original)
+++ trunk/vala/valasymbolresolver.vala Tue Mar 4 23:00:17 2008
@@ -219,17 +219,7 @@
}
private DataType! resolve_type (UnresolvedType! unresolved_type) {
- var type = new DataType ();
- type.source_reference = unresolved_type.source_reference;
- type.takes_ownership = unresolved_type.takes_ownership;
- type.transfers_ownership = unresolved_type.transfers_ownership;
- type.is_ref = unresolved_type.is_ref;
- type.is_out = unresolved_type.is_out;
- type.nullable = unresolved_type.nullable;
- type.requires_null_check = unresolved_type.requires_null_check;
- foreach (DataType type_arg in unresolved_type.get_type_arguments ()) {
- type.add_type_argument (type_arg);
- }
+ DataType type = null;
// still required for vapigen
if (unresolved_type.unresolved_symbol.name == "void") {
@@ -240,58 +230,56 @@
if (sym == null) {
// don't report same error twice
if (!unresolved_type.unresolved_symbol.error) {
- Report.error (type.source_reference, "The type name `%s' could not be found".printf (unresolved_type.unresolved_symbol.to_string ()));
+ Report.error (unresolved_type.source_reference, "The type name `%s' could not be found".printf (unresolved_type.unresolved_symbol.to_string ()));
}
return new InvalidType ();
}
if (sym is TypeParameter) {
- type.type_parameter = (TypeParameter) sym;
+ type = new TypeParameterType ((TypeParameter) sym);
} else if (sym is Typesymbol) {
if (sym is Delegate) {
type = new DelegateType ((Delegate) sym);
+ } else if (sym is Class) {
+ var cl = (Class) sym;
+ if (cl.is_error_base) {
+ type = new ErrorType (null);
+ } else {
+ type = new ClassType (cl);
+ }
+ } else if (sym is Interface) {
+ type = new InterfaceType ((Interface) sym);
+ } else if (sym is Struct) {
+ type = new ValueType ((Struct) sym);
+ } else if (sym is Enum) {
+ type = new ValueType ((Enum) sym);
+ } else if (sym is ErrorDomain) {
+ type = new ErrorType ((ErrorDomain) sym);
} else {
- type.data_type = (Typesymbol) sym;
+ Report.error (unresolved_type.source_reference, "internal error: `%s' is not a supported type".printf (sym.get_full_name ()));
+ return new InvalidType ();
}
} else {
- Report.error (type.source_reference, "`%s' is not a type".printf (sym.get_full_name ()));
+ Report.error (unresolved_type.source_reference, "`%s' is not a type".printf (sym.get_full_name ()));
return new InvalidType ();
}
+ type.source_reference = unresolved_type.source_reference;
+ type.takes_ownership = unresolved_type.takes_ownership;
+ type.transfers_ownership = unresolved_type.transfers_ownership;
+ type.is_ref = unresolved_type.is_ref;
+ type.is_out = unresolved_type.is_out;
+ type.nullable = unresolved_type.nullable;
+ type.requires_null_check = unresolved_type.requires_null_check;
+ foreach (DataType type_arg in unresolved_type.get_type_arguments ()) {
+ type.add_type_argument (type_arg);
+ }
+
for (int pointer_level = unresolved_type.pointer_level; pointer_level > 0; pointer_level--) {
type = new PointerType (type);
}
- /* check for array */
- if (unresolved_type.array_rank > 0) {
- var element_type = new DataType ();
- element_type.data_type = type.data_type;
- element_type.type_parameter = type.type_parameter;
- foreach (DataType type_arg in type.get_type_arguments ()) {
- element_type.add_type_argument (type_arg);
- }
-
- if (type.data_type != null) {
- if (type.data_type.is_reference_type ()) {
- element_type.takes_ownership = type.takes_ownership;
- }
- } else {
- element_type.takes_ownership = type.takes_ownership;
- }
-
- type = new ArrayType (element_type, unresolved_type.array_rank);
- type.add_type_argument (element_type);
-
- type.source_reference = unresolved_type.source_reference;
- type.takes_ownership = unresolved_type.takes_ownership;
- type.transfers_ownership = unresolved_type.transfers_ownership;
- type.is_ref = unresolved_type.is_ref;
- type.is_out = unresolved_type.is_out;
- type.nullable = unresolved_type.nullable;
- type.requires_null_check = unresolved_type.nullable;
- }
-
- if (type.data_type != null && !type.data_type.is_reference_type ()) {
+ if (!type.is_reference_type_or_type_parameter ()) {
/* reset takes_ownership and transfers_ownership of
* value-types for contexts where types are ref by
* default (field declarations and method return types)
@@ -305,9 +293,23 @@
}
}
- /* check whether this type resolved to a ErrorBase class */
- if (type.data_type is Class && ((Class)type.data_type).is_error_base) {
- type = new ErrorType (null);
+ /* check for array */
+ if (unresolved_type.array_rank > 0) {
+ var element_type = type;
+ element_type.transfers_ownership = false;
+ element_type.is_ref = false;
+ element_type.is_out = false;
+
+ type = new ArrayType (element_type, unresolved_type.array_rank);
+ type.add_type_argument (element_type);
+
+ type.source_reference = unresolved_type.source_reference;
+ type.takes_ownership = unresolved_type.takes_ownership;
+ type.transfers_ownership = unresolved_type.transfers_ownership;
+ type.is_ref = unresolved_type.is_ref;
+ type.is_out = unresolved_type.is_out;
+ type.nullable = unresolved_type.nullable;
+ type.requires_null_check = unresolved_type.nullable;
}
return type;
Added: trunk/vala/valatypeparametertype.vala
==============================================================================
--- (empty file)
+++ trunk/vala/valatypeparametertype.vala Tue Mar 4 23:00:17 2008
@@ -0,0 +1,32 @@
+/* valatypeparametertype.vala
+ *
+ * Copyright (C) 2008 JÃrg Billeter
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Author:
+ * JÃrg Billeter <j bitron ch>
+ */
+
+using GLib;
+
+/**
+ * The type of a generic type parameter.
+ */
+public class Vala.TypeParameterType : DataType {
+ public TypeParameterType (TypeParameter type_parameter) {
+ this.type_parameter = type_parameter;
+ }
+}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]