vala r1679 - in trunk: . gobject vala
- From: juergbi svn gnome org
- To: svn-commits-list gnome org
- Subject: vala r1679 - in trunk: . gobject vala
- Date: Mon, 7 Jul 2008 10:07:21 +0000 (UTC)
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]