vala r1679 - in trunk: . gobject vala



Author: juergbi
Date: Mon Jul  7 10:07:20 2008
New Revision: 1679
URL: http://svn.gnome.org/viewvc/vala?rev=1679&view=rev

Log:
2008-07-07  JÃrg Billeter  <j bitron ch>

	* vala/valaparser.vala:
	* vala/valasourcefile.vala:
	* vala/valasymbol.vala:
	* gobject/valaccodegenerator.vala:
	* gobject/valaccodegeneratorsourcefile.vala:

	Support methods and property accessors with body in VAPI files


Modified:
   trunk/ChangeLog
   trunk/gobject/valaccodegenerator.vala
   trunk/gobject/valaccodegeneratorsourcefile.vala
   trunk/vala/valaparser.vala
   trunk/vala/valasourcefile.vala
   trunk/vala/valasymbol.vala

Modified: trunk/gobject/valaccodegenerator.vala
==============================================================================
--- trunk/gobject/valaccodegenerator.vala	(original)
+++ trunk/gobject/valaccodegenerator.vala	Mon Jul  7 10:07:20 2008
@@ -771,10 +771,16 @@
 
 		next_temp_var_id = old_next_temp_var_id;
 
-		// FIXME: omit real struct types for now since they cannot be expressed as gobject property yet
-		// don't register private properties
-		if (prop.parent_symbol is Class && !prop.property_type.is_real_struct_type () && prop.access != SymbolAccessibility.PRIVATE) {
-			prop_enum.add_value (new CCodeEnumValue (prop.get_upper_case_cname ()));
+		var cl = prop.parent_symbol as Class;
+		if (cl != null && cl.is_subtype_of (gobject_type)) {
+			// GObject property
+			// FIXME: omit real struct types for now since they
+			// cannot be expressed as gobject property yet
+			// don't register private properties
+			if (!prop.property_type.is_real_struct_type ()
+			    && prop.access != SymbolAccessibility.PRIVATE) {
+				prop_enum.add_value (new CCodeEnumValue (prop.get_upper_case_cname ()));
+			}
 		}
 	}
 

Modified: trunk/gobject/valaccodegeneratorsourcefile.vala
==============================================================================
--- trunk/gobject/valaccodegeneratorsourcefile.vala	(original)
+++ trunk/gobject/valaccodegeneratorsourcefile.vala	Mon Jul  7 10:07:20 2008
@@ -238,6 +238,11 @@
 				used_includes.add (filename);
 			}
 		}
+		foreach (Symbol symbol in source_file.get_source_symbol_dependencies ()) {
+			if (!symbol.external && symbol.external_package) {
+				symbol.accept (this);
+			}
+		}
 		if (source_file.is_cycle_head) {
 			foreach (SourceFile cycle_file in source_file.cycle.files) {
 				foreach (CodeNode node in cycle_file.get_nodes ()) {

Modified: trunk/vala/valaparser.vala
==============================================================================
--- trunk/vala/valaparser.vala	(original)
+++ trunk/vala/valaparser.vala	Mon Jul  7 10:07:20 2008
@@ -1936,6 +1936,9 @@
 			cl.is_static = true;
 			Report.warning (get_last_src (), "static classes are deprecated, use namespaces");
 		}
+		if (ModifierFlags.EXTERN in flags || scanner.source_file.external_package) {
+			cl.external = true;
+		}
 		set_attributes (cl, attrs);
 		foreach (TypeParameter type_param in type_param_list) {
 			cl.add_type_parameter (type_param);
@@ -2014,7 +2017,7 @@
 	Constant parse_constant_declaration (Gee.List<Attribute>? attrs) throws ParseError {
 		var begin = get_location ();
 		var access = parse_access_modifier ();
-		parse_member_declaration_modifiers ();
+		var flags = parse_member_declaration_modifiers ();
 		expect (TokenType.CONST);
 		var type = parse_type (false);
 		string id = parse_identifier ();
@@ -2032,6 +2035,9 @@
 
 		var c = new Constant (id, type, initializer, get_src_com (begin));
 		c.access = access;
+		if (ModifierFlags.EXTERN in flags || scanner.source_file.external_package) {
+			c.external = true;
+		}
 		set_attributes (c, attrs);
 		return c;
 	}
@@ -2055,6 +2061,9 @@
 		    || ModifierFlags.OVERRIDE in flags) {
 			Report.error (f.source_reference, "abstract, virtual, and override modifiers are not applicable to fields");
 		}
+		if (ModifierFlags.EXTERN in flags || scanner.source_file.external_package) {
+			f.external = true;
+		}
 		if (accept (TokenType.ASSIGN)) {
 			f.initializer = parse_expression ();
 		}
@@ -2141,6 +2150,8 @@
 		}
 		if (!accept (TokenType.SEMICOLON)) {
 			method.body = parse_block ();
+		} else if (scanner.source_file.external_package) {
+			method.external = true;
 		}
 		return method;
 	}
@@ -2164,6 +2175,9 @@
 		if (ModifierFlags.OVERRIDE in flags) {
 			prop.overrides = true;
 		}
+		if (ModifierFlags.EXTERN in flags || scanner.source_file.external_package) {
+			prop.external = true;
+		}
 		expect (TokenType.OPEN_BRACE);
 		while (current () != TokenType.CLOSE_BRACE) {
 			if (accept (TokenType.DEFAULT)) {
@@ -2190,6 +2204,7 @@
 					Block block = null;
 					if (!accept (TokenType.SEMICOLON)) {
 						block = parse_block ();
+						prop.external = false;
 					}
 					prop.get_accessor = new PropertyAccessor (true, false, false, block, get_src (accessor_begin));
 					set_attributes (prop.get_accessor, attrs);
@@ -2211,6 +2226,7 @@
 					Block block = null;
 					if (!accept (TokenType.SEMICOLON)) {
 						block = parse_block ();
+						prop.external = false;
 					}
 					prop.set_accessor = new PropertyAccessor (false, writable, _construct, block, get_src (accessor_begin));
 					set_attributes (prop.set_accessor, attrs);
@@ -2298,7 +2314,7 @@
 	Symbol parse_struct_declaration (Gee.List<Attribute>? attrs) throws ParseError {
 		var begin = get_location ();
 		var access = parse_access_modifier ();
-		parse_type_declaration_modifiers ();
+		var flags = parse_type_declaration_modifiers ();
 		expect (TokenType.STRUCT);
 		var sym = parse_symbol_name ();
 		var type_param_list = parse_type_parameter_list ();
@@ -2310,6 +2326,9 @@
 		}
 		var st = new Struct (sym.name, get_src_com (begin));
 		st.access = access;
+		if (ModifierFlags.EXTERN in flags || scanner.source_file.external_package) {
+			st.external = true;
+		}
 		set_attributes (st, attrs);
 		foreach (TypeParameter type_param in type_param_list) {
 			st.add_type_parameter (type_param);
@@ -2354,7 +2373,7 @@
 	Symbol parse_interface_declaration (Gee.List<Attribute>? attrs) throws ParseError {
 		var begin = get_location ();
 		var access = parse_access_modifier ();
-		parse_type_declaration_modifiers ();
+		var flags = parse_type_declaration_modifiers ();
 		expect (TokenType.INTERFACE);
 		var sym = parse_symbol_name ();
 		var type_param_list = parse_type_parameter_list ();
@@ -2367,6 +2386,9 @@
 		}
 		var iface = new Interface (sym.name, get_src_com (begin));
 		iface.access = access;
+		if (ModifierFlags.EXTERN in flags || scanner.source_file.external_package) {
+			iface.external = true;
+		}
 		set_attributes (iface, attrs);
 		foreach (TypeParameter type_param in type_param_list) {
 			iface.add_type_parameter (type_param);
@@ -2421,11 +2443,14 @@
 	Symbol parse_enum_declaration (Gee.List<Attribute>? attrs) throws ParseError {
 		var begin = get_location ();
 		var access = parse_access_modifier ();
-		parse_type_declaration_modifiers ();
+		var flags = parse_type_declaration_modifiers ();
 		expect (TokenType.ENUM);
 		var sym = parse_symbol_name ();
 		var en = new Enum (sym.name, get_src_com (begin));
 		en.access = access;
+		if (ModifierFlags.EXTERN in flags || scanner.source_file.external_package) {
+			en.external = true;
+		}
 		set_attributes (en, attrs);
 
 		expect (TokenType.OPEN_BRACE);
@@ -2478,11 +2503,14 @@
 	Symbol parse_errordomain_declaration (Gee.List<Attribute>? attrs) throws ParseError {
 		var begin = get_location ();
 		var access = parse_access_modifier ();
-		parse_type_declaration_modifiers ();
+		var flags = parse_type_declaration_modifiers ();
 		expect (TokenType.ERRORDOMAIN);
 		var sym = parse_symbol_name ();
 		var ed = new ErrorDomain (sym.name, get_src_com (begin));
 		ed.access = access;
+		if (ModifierFlags.EXTERN in flags || scanner.source_file.external_package) {
+			ed.external = true;
+		}
 		set_attributes (ed, attrs);
 
 		expect (TokenType.OPEN_BRACE);
@@ -2651,7 +2679,7 @@
 	CreationMethod parse_creation_method_declaration (Gee.List<Attribute>? attrs) throws ParseError {
 		var begin = get_location ();
 		var access = parse_access_modifier ();
-		parse_member_declaration_modifiers ();
+		var flags = parse_member_declaration_modifiers ();
 		var sym = parse_symbol_name ();
 		CreationMethod method;
 		if (sym.inner == null) {
@@ -2659,6 +2687,9 @@
 		} else {
 			method = new CreationMethod (sym.inner.name, sym.name, get_src_com (begin));
 		}
+		if (ModifierFlags.EXTERN in flags) {
+			method.external = true;
+		}
 		expect (TokenType.OPEN_PARENS);
 		if (current () != TokenType.CLOSE_PARENS) {
 			do {
@@ -2677,6 +2708,8 @@
 		method.binding = MemberBinding.STATIC;
 		if (!accept (TokenType.SEMICOLON)) {
 			method.body = parse_block ();
+		} else if (scanner.source_file.external_package) {
+			method.external = true;
 		}
 		return method;
 	}
@@ -2695,6 +2728,9 @@
 		if (!(ModifierFlags.STATIC in flags)) {
 			d.has_target = true;
 		}
+		if (ModifierFlags.EXTERN in flags || scanner.source_file.external_package) {
+			d.external = true;
+		}
 		foreach (TypeParameter type_param in type_param_list) {
 			d.add_type_parameter (type_param);
 		}

Modified: trunk/vala/valasourcefile.vala
==============================================================================
--- trunk/vala/valasourcefile.vala	(original)
+++ trunk/vala/valasourcefile.vala	Mon Jul  7 10:07:20 2008
@@ -85,6 +85,8 @@
 	private Gee.List<weak SourceFile> header_internal_full_dependencies = new ArrayList<weak SourceFile> ();
 	private Gee.List<weak SourceFile> header_internal_dependencies = new ArrayList<weak SourceFile> ();
 
+	private Gee.Set<Symbol> source_symbol_dependencies = new HashSet<Symbol> ();
+
 	private Gee.ArrayList<string> source_array = null;
 
 	private MappedFile mapped_file = null;
@@ -264,6 +266,7 @@
 		}
 		
 		if (dep_type == SourceFileDependencyType.SOURCE) {
+			source_symbol_dependencies.add (s);
 			if (s.external_package) {
 				foreach (string fn in s.get_cheader_filenames ()) {
 					source_external_includes.add (fn);
@@ -380,6 +383,10 @@
 		return new ReadOnlyList<weak SourceFile> (header_internal_dependencies);
 	}
 
+	public Gee.Set<Symbol> get_source_symbol_dependencies () {
+		return new ReadOnlySet<Symbol> (source_symbol_dependencies);
+	}
+
 	/**
 	 * Returns the requested line from this file, loading it if needed.
 	 *

Modified: trunk/vala/valasymbol.vala
==============================================================================
--- trunk/vala/valasymbol.vala	(original)
+++ trunk/vala/valasymbol.vala	Mon Jul  7 10:07:20 2008
@@ -82,6 +82,11 @@
 	 * and checking their accessibility.
 	 */
 	public bool is_internal_symbol () {
+		if (!external && external_package) {
+			// non-external symbols in VAPI files are internal symbols
+			return true;
+		}
+
 		for (Symbol sym = this; null != sym; sym = sym.parent_symbol) {
 			if (SymbolAccessibility.PRIVATE == sym.access) {
 				return true;
@@ -99,13 +104,7 @@
 	 * Specifies whether the implementation is external, for example in
 	 * a separate C source file or in an external library.
 	 */
-	public bool external {
-		get {
-			return _external || (parent_symbol != null && parent_symbol.external)
-			       || external_package;
-		}
-		set { _external = value; }
-	}
+	public bool external { get; set; }
 
 	/**
 	 * Specifies whether the implementation is in an external library.
@@ -119,8 +118,6 @@
 	private weak Scope _owner;
 	private Scope _scope;
 
-	private bool _external;
-
 	construct {
 		_scope = new Scope (this);
 		active = true;



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]