From: Jürg Billeter Date: Sat, 8 Jul 2006 14:09:42 +0000 (+0000) Subject: check method signatures of overriding methods support abstract classes add X-Git-Tag: VALA_0_0_1~6 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=2a1a351cb2d9767b624818130f5cf7b3ca320b17;p=platform%2Fupstream%2Fvala.git check method signatures of overriding methods support abstract classes add 2006-07-08 Jürg Billeter * vala/valasemanticanalyzer.vala: check method signatures of overriding methods * vala/parser.y, vala/valaclassregisterfunction.vala, vala/valatyperegisterfunction.vala: support abstract classes * vala/valamethod.vala: add equals method * vala/valatypereference.vala: add equals method * corrects overriding methods to match signatures of overridden methods to fix build with current compiler svn path=/trunk/; revision=73 --- diff --git a/vala/ChangeLog b/vala/ChangeLog index 2598ef5..cfda68d 100644 --- a/vala/ChangeLog +++ b/vala/ChangeLog @@ -1,5 +1,16 @@ 2006-07-08 Jürg Billeter + * vala/valasemanticanalyzer.vala: check method signatures of overriding + methods + * vala/parser.y, vala/valaclassregisterfunction.vala, + vala/valatyperegisterfunction.vala: support abstract classes + * vala/valamethod.vala: add equals method + * vala/valatypereference.vala: add equals method + * corrects overriding methods to match signatures of overridden methods + to fix build with current compiler + +2006-07-08 Jürg Billeter + * vala/parser.y, vala/valacodegenerator.vala: adapt to ForStatement API changes * vala/valaclass.vala: make {get,set}_lower_case_csuffix methods private diff --git a/vala/ccode/valaccodeassignment.vala b/vala/ccode/valaccodeassignment.vala index 702c3cd..cb53c61 100644 --- a/vala/ccode/valaccodeassignment.vala +++ b/vala/ccode/valaccodeassignment.vala @@ -41,7 +41,7 @@ public class Vala.CCodeAssignment : CCodeExpression { */ public CCodeExpression right { get; construct; } - public override void write (CCodeWriter writer) { + public override void write (CCodeWriter! writer) { if (left != null) { left.write (writer); } diff --git a/vala/ccode/valaccodebinaryexpression.vala b/vala/ccode/valaccodebinaryexpression.vala index a733abf..894c8ea 100644 --- a/vala/ccode/valaccodebinaryexpression.vala +++ b/vala/ccode/valaccodebinaryexpression.vala @@ -28,7 +28,7 @@ namespace Vala { public CCodeExpression left { get; construct; } public CCodeExpression right { get; construct; } - public override void write (CCodeWriter writer) { + public override void write (CCodeWriter! writer) { if (left != null) { left.write (writer); } diff --git a/vala/ccode/valaccodeblock.vala b/vala/ccode/valaccodeblock.vala index a310ca9..61819ab 100644 --- a/vala/ccode/valaccodeblock.vala +++ b/vala/ccode/valaccodeblock.vala @@ -36,7 +36,7 @@ namespace Vala { statements.append (statement); } - public override void write (CCodeWriter writer) { + public override void write (CCodeWriter! writer) { writer.write_begin_block (); foreach (CCodeNode statement in statements) { statement.write (writer); diff --git a/vala/ccode/valaccodebreakstatement.vala b/vala/ccode/valaccodebreakstatement.vala index b38cb9b..22e1fd2 100644 --- a/vala/ccode/valaccodebreakstatement.vala +++ b/vala/ccode/valaccodebreakstatement.vala @@ -24,7 +24,7 @@ using GLib; namespace Vala { public class CCodeBreakStatement : CCodeStatement { - public override void write (CCodeWriter writer) { + public override void write (CCodeWriter! writer) { writer.write_indent (); writer.write_string ("break;"); writer.write_newline (); diff --git a/vala/ccode/valaccodecasestatement.vala b/vala/ccode/valaccodecasestatement.vala index 0f4ba3e..8ad468a 100644 --- a/vala/ccode/valaccodecasestatement.vala +++ b/vala/ccode/valaccodecasestatement.vala @@ -27,11 +27,11 @@ namespace Vala { public CCodeExpression expression { get; construct; } List statements; - public void add_statement (CCodeStatement stmt) { + public void add_statement (CCodeStatement! stmt) { statements.append (stmt); } - public override void write (CCodeWriter writer) { + public override void write (CCodeWriter! writer) { writer.write_indent (); writer.write_string ("case "); expression.write (writer); diff --git a/vala/ccode/valaccodecommaexpression.vala b/vala/ccode/valaccodecommaexpression.vala index fc507d9..a2bb424 100644 --- a/vala/ccode/valaccodecommaexpression.vala +++ b/vala/ccode/valaccodecommaexpression.vala @@ -26,7 +26,7 @@ namespace Vala { public class CCodeCommaExpression : CCodeExpression { public List inner; - public override void write (CCodeWriter writer) { + public override void write (CCodeWriter! writer) { bool first = true; writer.write_string ("("); diff --git a/vala/ccode/valaccodecomment.vala b/vala/ccode/valaccodecomment.vala index 37ca8cd..a1eeb14 100644 --- a/vala/ccode/valaccodecomment.vala +++ b/vala/ccode/valaccodecomment.vala @@ -26,7 +26,7 @@ namespace Vala { public class CCodeComment : CCodeNode { public string text { get; construct; } - public override void write (CCodeWriter writer) { + public override void write (CCodeWriter! writer) { writer.write_comment (text); } } diff --git a/vala/ccode/valaccodeconditionalexpression.vala b/vala/ccode/valaccodeconditionalexpression.vala index f1e2f3a..27a9b96 100644 --- a/vala/ccode/valaccodeconditionalexpression.vala +++ b/vala/ccode/valaccodeconditionalexpression.vala @@ -28,7 +28,7 @@ namespace Vala { public CCodeExpression true_expression { get; construct; } public CCodeExpression false_expression { get; construct; } - public override void write (CCodeWriter writer) { + public override void write (CCodeWriter! writer) { writer.write_string ("("); condition.write (writer); writer.write_string (" ? "); diff --git a/vala/ccode/valaccodeconstant.vala b/vala/ccode/valaccodeconstant.vala index 72fe06c..5142cbb 100644 --- a/vala/ccode/valaccodeconstant.vala +++ b/vala/ccode/valaccodeconstant.vala @@ -26,7 +26,7 @@ namespace Vala { public class CCodeConstant : CCodeExpression { public string name { get; construct; } - public override void write (CCodeWriter writer) { + public override void write (CCodeWriter! writer) { writer.write_string (name); } } diff --git a/vala/ccode/valaccodecontinuestatement.vala b/vala/ccode/valaccodecontinuestatement.vala index 7bf8d62..299b421 100644 --- a/vala/ccode/valaccodecontinuestatement.vala +++ b/vala/ccode/valaccodecontinuestatement.vala @@ -24,7 +24,7 @@ using GLib; namespace Vala { public class CCodeContinueStatement : CCodeStatement { - public override void write (CCodeWriter writer) { + public override void write (CCodeWriter! writer) { writer.write_indent (); writer.write_string ("continue;"); writer.write_newline (); diff --git a/vala/ccode/valaccodedeclaration.vala b/vala/ccode/valaccodedeclaration.vala index 06067e2..51d9c30 100644 --- a/vala/ccode/valaccodedeclaration.vala +++ b/vala/ccode/valaccodedeclaration.vala @@ -28,11 +28,11 @@ namespace Vala { public CCodeModifiers modifiers; List declarators; - public void add_declarator (CCodeDeclarator decl) { + public void add_declarator (CCodeDeclarator! decl) { declarators.append (decl); } - public override void write (CCodeWriter writer) { + public override void write (CCodeWriter! writer) { writer.write_indent (); if ((modifiers & CCodeModifiers.STATIC) == CCodeModifiers.STATIC) { writer.write_string ("static "); diff --git a/vala/ccode/valaccodeemptystatement.vala b/vala/ccode/valaccodeemptystatement.vala index 4b8df11..ecc76f8 100644 --- a/vala/ccode/valaccodeemptystatement.vala +++ b/vala/ccode/valaccodeemptystatement.vala @@ -24,7 +24,7 @@ using GLib; namespace Vala { public class CCodeEmptyStatement : CCodeStatement { - public override void write (CCodeWriter writer) { + public override void write (CCodeWriter! writer) { writer.write_indent (); writer.write_string (";"); writer.write_newline (); diff --git a/vala/ccode/valaccodeenum.vala b/vala/ccode/valaccodeenum.vala index 6ccd1ea..5b747da 100644 --- a/vala/ccode/valaccodeenum.vala +++ b/vala/ccode/valaccodeenum.vala @@ -27,7 +27,7 @@ namespace Vala { public string name { get; construct; } List values; - public void add_value (string name, string value) { + public void add_value (string! name, string value = null) { if (value == null) { values.append (name); } else { @@ -35,7 +35,7 @@ namespace Vala { } } - public override void write (CCodeWriter writer) { + public override void write (CCodeWriter! writer) { if (name != null) { writer.write_string ("typedef "); } diff --git a/vala/ccode/valaccodeexpressionstatement.vala b/vala/ccode/valaccodeexpressionstatement.vala index 9ff35ad..a4703ba 100644 --- a/vala/ccode/valaccodeexpressionstatement.vala +++ b/vala/ccode/valaccodeexpressionstatement.vala @@ -26,7 +26,7 @@ namespace Vala { public class CCodeExpressionStatement : CCodeStatement { public CCodeExpression expression { get; construct; } - public override void write (CCodeWriter writer) { + public override void write (CCodeWriter! writer) { writer.write_indent (); if (expression != null) { expression.write (writer); diff --git a/vala/ccode/valaccodeformalparameter.vala b/vala/ccode/valaccodeformalparameter.vala index 655728a..98bff02 100644 --- a/vala/ccode/valaccodeformalparameter.vala +++ b/vala/ccode/valaccodeformalparameter.vala @@ -27,7 +27,7 @@ namespace Vala { public string name { get; construct; } public string type_name { get; construct; } - public override void write (CCodeWriter writer) { + public override void write (CCodeWriter! writer) { writer.write_string (type_name); writer.write_string (" "); writer.write_string (name); diff --git a/vala/ccode/valaccodeforstatement.vala b/vala/ccode/valaccodeforstatement.vala index 32f9463..98ca104 100644 --- a/vala/ccode/valaccodeforstatement.vala +++ b/vala/ccode/valaccodeforstatement.vala @@ -30,15 +30,15 @@ namespace Vala { List initializer; List iterator; - public void add_initializer (CCodeExpression expr) { + public void add_initializer (CCodeExpression! expr) { initializer.append (expr); } - public void add_iterator (CCodeExpression expr) { + public void add_iterator (CCodeExpression! expr) { iterator.append (expr); } - public override void write (CCodeWriter writer) { + public override void write (CCodeWriter! writer) { bool first; writer.write_indent (); diff --git a/vala/ccode/valaccodefragment.vala b/vala/ccode/valaccodefragment.vala index 52cc952..eb616d8 100644 --- a/vala/ccode/valaccodefragment.vala +++ b/vala/ccode/valaccodefragment.vala @@ -26,11 +26,11 @@ namespace Vala { public class CCodeFragment : CCodeNode { public GLib.List children { get; construct; } - public void append (CCodeNode node) { + public void append (CCodeNode! node) { _children.append (node); } - public override void write (CCodeWriter writer) { + public override void write (CCodeWriter! writer) { foreach (CCodeNode node in children) { node.write (writer); } diff --git a/vala/ccode/valaccodefunction.vala b/vala/ccode/valaccodefunction.vala index cfaffcd..a590fc5 100644 --- a/vala/ccode/valaccodefunction.vala +++ b/vala/ccode/valaccodefunction.vala @@ -30,11 +30,11 @@ namespace Vala { List parameters; public CCodeBlock block; - public void add_parameter (CCodeFormalParameter param) { + public void add_parameter (CCodeFormalParameter!param) { parameters.append (param); } - public ref CCodeFunction copy () { + public ref CCodeFunction! copy () { var func = new CCodeFunction (name = name, return_type = return_type); func.modifiers = modifiers; @@ -49,7 +49,7 @@ namespace Vala { return func; } - public override void write (CCodeWriter writer) { + public override void write (CCodeWriter! writer) { writer.write_indent (); if ((modifiers & CCodeModifiers.STATIC) == CCodeModifiers.STATIC) { writer.write_string ("static "); diff --git a/vala/ccode/valaccodefunctiondeclarator.vala b/vala/ccode/valaccodefunctiondeclarator.vala index a74011a..9699057 100644 --- a/vala/ccode/valaccodefunctiondeclarator.vala +++ b/vala/ccode/valaccodefunctiondeclarator.vala @@ -27,11 +27,11 @@ namespace Vala { public string name { get; construct; } List parameters; - public void add_parameter (CCodeFormalParameter param) { + public void add_parameter (CCodeFormalParameter! param) { parameters.append (param); } - public override void write (CCodeWriter writer) { + public override void write (CCodeWriter! writer) { writer.write_string ("(*"); writer.write_string (name); writer.write_string (") ("); diff --git a/vala/ccode/valaccodeidentifier.vala b/vala/ccode/valaccodeidentifier.vala index e5f5647..c99f070 100644 --- a/vala/ccode/valaccodeidentifier.vala +++ b/vala/ccode/valaccodeidentifier.vala @@ -26,7 +26,7 @@ namespace Vala { public class CCodeIdentifier : CCodeExpression { public string name { get; construct; } - public override void write (CCodeWriter writer) { + public override void write (CCodeWriter! writer) { writer.write_string (name); } } diff --git a/vala/ccode/valaccodeifstatement.vala b/vala/ccode/valaccodeifstatement.vala index b5fc61d..7d47d29 100644 --- a/vala/ccode/valaccodeifstatement.vala +++ b/vala/ccode/valaccodeifstatement.vala @@ -29,7 +29,7 @@ namespace Vala { public CCodeStatement false_statement { get; construct; } public bool else_if; - public override void write (CCodeWriter writer) { + public override void write (CCodeWriter! writer) { if (!else_if) { writer.write_indent (); } else { diff --git a/vala/ccode/valaccodeincludedirective.vala b/vala/ccode/valaccodeincludedirective.vala index 9e59f3d..2bbaab0 100644 --- a/vala/ccode/valaccodeincludedirective.vala +++ b/vala/ccode/valaccodeincludedirective.vala @@ -26,7 +26,7 @@ namespace Vala { public class CCodeIncludeDirective : CCodeNode { public string filename { get; construct; } - public override void write (CCodeWriter writer) { + public override void write (CCodeWriter! writer) { writer.write_indent (); writer.write_string ("#include <"); writer.write_string (filename); diff --git a/vala/ccode/valaccodeinitializerlist.vala b/vala/ccode/valaccodeinitializerlist.vala index 5d9b1cd..df9a0b4 100644 --- a/vala/ccode/valaccodeinitializerlist.vala +++ b/vala/ccode/valaccodeinitializerlist.vala @@ -26,11 +26,11 @@ namespace Vala { public class CCodeInitializerList : CCodeExpression { List initializers; - public void append (CCodeExpression expr) { + public void append (CCodeExpression! expr) { initializers.append (expr); } - public override void write (CCodeWriter writer) { + public override void write (CCodeWriter! writer) { writer.write_string ("{"); bool first = true; diff --git a/vala/ccode/valaccodemacroreplacement.vala b/vala/ccode/valaccodemacroreplacement.vala index afb128f..bdab833 100644 --- a/vala/ccode/valaccodemacroreplacement.vala +++ b/vala/ccode/valaccodemacroreplacement.vala @@ -27,7 +27,7 @@ namespace Vala { public string name { get; construct; } public string replacement { get; construct; } - public override void write (CCodeWriter writer) { + public override void write (CCodeWriter! writer) { writer.write_indent (); writer.write_string ("#define "); writer.write_string (name); diff --git a/vala/ccode/valaccodememberaccess.vala b/vala/ccode/valaccodememberaccess.vala index e24de21..2bd9176 100644 --- a/vala/ccode/valaccodememberaccess.vala +++ b/vala/ccode/valaccodememberaccess.vala @@ -28,7 +28,7 @@ namespace Vala { public string member_name { get; construct; } public bool is_pointer { get; construct; } - public override void write (CCodeWriter writer) { + public override void write (CCodeWriter! writer) { inner.write (writer); if (is_pointer) { writer.write_string ("->"); diff --git a/vala/ccode/valaccodenewline.vala b/vala/ccode/valaccodenewline.vala index 235d78b..81011d8 100644 --- a/vala/ccode/valaccodenewline.vala +++ b/vala/ccode/valaccodenewline.vala @@ -24,7 +24,7 @@ using GLib; namespace Vala { public class CCodeNewline : CCodeNode { - public override void write (CCodeWriter writer) { + public override void write (CCodeWriter! writer) { writer.write_newline (); } } diff --git a/vala/ccode/valaccodeoncesection.vala b/vala/ccode/valaccodeoncesection.vala index 5280d4d..94ed831 100644 --- a/vala/ccode/valaccodeoncesection.vala +++ b/vala/ccode/valaccodeoncesection.vala @@ -26,7 +26,7 @@ namespace Vala { public class CCodeOnceSection : CCodeFragment { public string define { get; construct; } - public override void write (CCodeWriter writer) { + public override void write (CCodeWriter! writer) { writer.write_indent (); writer.write_string ("#ifndef "); writer.write_string (define); diff --git a/vala/ccode/valaccodeparenthesizedexpression.vala b/vala/ccode/valaccodeparenthesizedexpression.vala index d8c818e..a65c746 100644 --- a/vala/ccode/valaccodeparenthesizedexpression.vala +++ b/vala/ccode/valaccodeparenthesizedexpression.vala @@ -26,7 +26,7 @@ namespace Vala { public class CCodeParenthesizedExpression : CCodeExpression { public CCodeExpression inner { get; construct; } - public override void write (CCodeWriter writer) { + public override void write (CCodeWriter! writer) { writer.write_string ("("); inner.write (writer); diff --git a/vala/ccode/valaccodereturnstatement.vala b/vala/ccode/valaccodereturnstatement.vala index d087b2d..0460219 100644 --- a/vala/ccode/valaccodereturnstatement.vala +++ b/vala/ccode/valaccodereturnstatement.vala @@ -26,7 +26,7 @@ namespace Vala { public class CCodeReturnStatement : CCodeStatement { public CCodeExpression return_expression { get; construct; } - public override void write (CCodeWriter writer) { + public override void write (CCodeWriter! writer) { writer.write_indent (); writer.write_string ("return "); diff --git a/vala/ccode/valaccodestruct.vala b/vala/ccode/valaccodestruct.vala index 6a0ab7a..f3bc01a 100644 --- a/vala/ccode/valaccodestruct.vala +++ b/vala/ccode/valaccodestruct.vala @@ -27,17 +27,17 @@ namespace Vala { public string name { get; construct; } List declarations; - public void add_declaration (CCodeDeclaration decl) { + public void add_declaration (CCodeDeclaration! decl) { declarations.append (decl); } - public void add_field (string type_name, string name) { + public void add_field (string! type_name, string! name) { var decl = new CCodeDeclaration (type_name = type_name); decl.add_declarator (new CCodeVariableDeclarator (name = name)); add_declaration (decl); } - public override void write (CCodeWriter writer) { + public override void write (CCodeWriter! writer) { writer.write_string ("struct "); writer.write_string (name); writer.write_begin_block (); diff --git a/vala/ccode/valaccodeswitchstatement.vala b/vala/ccode/valaccodeswitchstatement.vala index aede4e4..ad0ea23 100644 --- a/vala/ccode/valaccodeswitchstatement.vala +++ b/vala/ccode/valaccodeswitchstatement.vala @@ -27,11 +27,11 @@ namespace Vala { public CCodeExpression expression { get; construct; } List case_statements; - public void add_case (CCodeCaseStatement case_stmt) { + public void add_case (CCodeCaseStatement! case_stmt) { case_statements.append (case_stmt); } - public override void write (CCodeWriter writer) { + public override void write (CCodeWriter! writer) { writer.write_indent (); writer.write_string ("switch ("); expression.write (writer); diff --git a/vala/ccode/valaccodetypedefinition.vala b/vala/ccode/valaccodetypedefinition.vala index 6d8ee50..0eb9f3c 100644 --- a/vala/ccode/valaccodetypedefinition.vala +++ b/vala/ccode/valaccodetypedefinition.vala @@ -36,7 +36,7 @@ public class Vala.CCodeTypeDefinition : CCodeNode { */ public CCodeDeclarator declarator { get; set; } - public override void write (CCodeWriter writer) { + public override void write (CCodeWriter! writer) { writer.write_indent (); writer.write_string ("typedef "); diff --git a/vala/ccode/valaccodeunaryexpression.vala b/vala/ccode/valaccodeunaryexpression.vala index eb7cd2b..d125441 100644 --- a/vala/ccode/valaccodeunaryexpression.vala +++ b/vala/ccode/valaccodeunaryexpression.vala @@ -27,7 +27,7 @@ namespace Vala { public CCodeUnaryOperator operator { get; construct; } public CCodeExpression inner { get; construct; } - public override void write (CCodeWriter writer) { + public override void write (CCodeWriter! writer) { if (operator == CCodeUnaryOperator.PLUS) { writer.write_string ("+"); } else if (operator == CCodeUnaryOperator.MINUS) { diff --git a/vala/ccode/valaccodevariabledeclarator.vala b/vala/ccode/valaccodevariabledeclarator.vala index e5ead17..c5cccae 100644 --- a/vala/ccode/valaccodevariabledeclarator.vala +++ b/vala/ccode/valaccodevariabledeclarator.vala @@ -27,7 +27,7 @@ namespace Vala { public string name { get; construct; } public CCodeExpression initializer { get; construct; } - public override void write (CCodeWriter writer) { + public override void write (CCodeWriter! writer) { writer.write_string (name); if (initializer != null) { diff --git a/vala/ccode/valaccodewhilestatement.vala b/vala/ccode/valaccodewhilestatement.vala index 57e62e4..bc1f1b3 100644 --- a/vala/ccode/valaccodewhilestatement.vala +++ b/vala/ccode/valaccodewhilestatement.vala @@ -27,7 +27,7 @@ namespace Vala { public CCodeExpression condition { get; construct; } public CCodeStatement body { get; construct; } - public override void write (CCodeWriter writer) { + public override void write (CCodeWriter! writer) { writer.write_indent (); writer.write_string ("while ("); diff --git a/vala/vala/parser.y b/vala/vala/parser.y index 068ea6e..3d8f15e 100644 --- a/vala/vala/parser.y +++ b/vala/vala/parser.y @@ -1525,6 +1525,9 @@ class_declaration if ($3 != 0) { VALA_DATA_TYPE(current_class)->access = $3; } + if (($4 & VALA_MODIFIER_ABSTRACT) == VALA_MODIFIER_ABSTRACT) { + vala_class_set_is_abstract (current_class, TRUE); + } for (l = $8; l != NULL; l = l->next) { vala_class_add_type_parameter (current_class, l->data); g_object_unref (l->data); diff --git a/vala/vala/valacallback.vala b/vala/vala/valacallback.vala index ab4fed2..ce4462b 100644 --- a/vala/vala/valacallback.vala +++ b/vala/vala/valacallback.vala @@ -119,7 +119,7 @@ public class Vala.Callback : DataType { visitor.visit_end_callback (this); } - public override string! get_cname () { + public override string get_cname () { if (cname == null) { cname = "%s%s".printf (@namespace.get_cprefix (), name); } diff --git a/vala/vala/valacastexpression.vala b/vala/vala/valacastexpression.vala index b961629..e70f9ee 100644 --- a/vala/vala/valacastexpression.vala +++ b/vala/vala/valacastexpression.vala @@ -47,7 +47,7 @@ public class Vala.CastExpression : Expression { return (new CastExpression (inner = inner, type_reference = type, source_reference = source)); } - public override void accept (CodeVisitor visitor) { + public override void accept (CodeVisitor! visitor) { inner.accept (visitor); type_reference.accept (visitor); diff --git a/vala/vala/valaclass.vala b/vala/vala/valaclass.vala index 0534769..d101e3b 100644 --- a/vala/vala/valaclass.vala +++ b/vala/vala/valaclass.vala @@ -279,7 +279,7 @@ public class Vala.Class : DataType { return "%s%s%s".printf (@namespace.get_lower_case_cprefix (), infix, get_lower_case_csuffix ()); } - public override ref string get_upper_case_cname (string! infix) { + public override ref string get_upper_case_cname (string infix) { return get_lower_case_cname (infix).up (); } diff --git a/vala/vala/valaclassregisterfunction.vala b/vala/vala/valaclassregisterfunction.vala index a2faf00..4213651 100644 --- a/vala/vala/valaclassregisterfunction.vala +++ b/vala/vala/valaclassregisterfunction.vala @@ -55,6 +55,14 @@ public class Vala.ClassRegisterFunction : TypeRegisterFunction { return class_reference.base_class.get_upper_case_cname ("TYPE_"); } + public override string get_type_flags () { + if (class_reference.is_abstract) { + return "G_TYPE_FLAG_ABSTRACT"; + } else { + return "0"; + } + } + public override ref CCodeFragment! get_type_interface_init_statements () { var frag = new CCodeFragment (); diff --git a/vala/vala/valaconstant.vala b/vala/vala/valaconstant.vala index ff19657..df336cc 100644 --- a/vala/vala/valaconstant.vala +++ b/vala/vala/valaconstant.vala @@ -56,7 +56,7 @@ public class Vala.Constant : CodeNode { return (new Constant (name = name, type_reference = type, initializer = init, source_reference = source)); } - public override void accept (CodeVisitor visitor) { + public override void accept (CodeVisitor! visitor) { type_reference.accept (visitor); initializer.accept (visitor); diff --git a/vala/vala/valadatatype.vala b/vala/vala/valadatatype.vala index 7d61835..ad0383a 100644 --- a/vala/vala/valadatatype.vala +++ b/vala/vala/valadatatype.vala @@ -152,7 +152,7 @@ public abstract class Vala.DataType : CodeNode { * name or null * @return the upper case name to be used in C code */ - public abstract ref string! get_upper_case_cname (string infix); + public abstract ref string get_upper_case_cname (string infix); /** * Returns the C name of this data type in lower case. Words are @@ -163,7 +163,7 @@ public abstract class Vala.DataType : CodeNode { * name or null * @return the lower case name to be used in C code */ - public abstract ref string! get_lower_case_cname (string infix); + public abstract ref string get_lower_case_cname (string infix); /** * Returns a list of C header filenames users of this data type must diff --git a/vala/vala/valaenum.vala b/vala/vala/valaenum.vala index dbf8391..4a9e38c 100644 --- a/vala/vala/valaenum.vala +++ b/vala/vala/valaenum.vala @@ -50,7 +50,7 @@ public class Vala.Enum : DataType { values.append (value); } - public override void accept (CodeVisitor visitor) { + public override void accept (CodeVisitor! visitor) { visitor.visit_begin_enum (this); foreach (EnumValue value in values) { diff --git a/vala/vala/valaflags.vala b/vala/vala/valaflags.vala index 19427a9..70aab5e 100644 --- a/vala/vala/valaflags.vala +++ b/vala/vala/valaflags.vala @@ -59,14 +59,14 @@ public class Vala.Flags : DataType { visitor.visit_end_flags (this); } - public override string! get_cname () { + public override string get_cname () { if (cname == null) { cname = "%s%s".printf (@namespace.get_cprefix (), name); } return cname; } - public override string! get_upper_case_cname (string infix) { + public override ref string get_upper_case_cname (string infix) { return "%s%s".printf (@namespace.get_lower_case_cprefix (), Namespace.camel_case_to_lower_case (name)).up (); } diff --git a/vala/vala/valaformalparameter.vala b/vala/vala/valaformalparameter.vala index 103c7c1..ebaea26 100644 --- a/vala/vala/valaformalparameter.vala +++ b/vala/vala/valaformalparameter.vala @@ -68,7 +68,7 @@ public class Vala.FormalParameter : CodeNode { return (new FormalParameter (ellipsis = true, source_reference = source)); } - public override void accept (CodeVisitor visitor) { + public override void accept (CodeVisitor! visitor) { if (!ellipsis) { type_reference.accept (visitor); } diff --git a/vala/vala/valaifstatement.vala b/vala/vala/valaifstatement.vala index e47d1b0..ad92ae8 100644 --- a/vala/vala/valaifstatement.vala +++ b/vala/vala/valaifstatement.vala @@ -32,7 +32,7 @@ namespace Vala { return (new IfStatement (condition = cond, true_statement = true_stmt, false_statement = false_stmt, source_reference = source)); } - public override void accept (CodeVisitor visitor) { + public override void accept (CodeVisitor! visitor) { condition.accept (visitor); visitor.visit_end_full_expression (condition); diff --git a/vala/vala/valainitializerlist.vala b/vala/vala/valainitializerlist.vala index 13da330..0b42076 100644 --- a/vala/vala/valainitializerlist.vala +++ b/vala/vala/valainitializerlist.vala @@ -30,7 +30,7 @@ namespace Vala { return (new InitializerList (initializers = initializers, source_reference = source)); } - public override void accept (CodeVisitor visitor) { + public override void accept (CodeVisitor! visitor) { foreach (Expression expr in initializers) { expr.accept (visitor); } diff --git a/vala/vala/valainterface.vala b/vala/vala/valainterface.vala index 94473a7..0efedf4 100644 --- a/vala/vala/valainterface.vala +++ b/vala/vala/valainterface.vala @@ -121,7 +121,7 @@ public class Vala.Interface : DataType { private string cname; private string lower_case_csuffix; - public override string! get_cname () { + public override string get_cname () { if (cname == null) { cname = "%s%s".printf (@namespace.get_cprefix (), name); } @@ -151,14 +151,14 @@ public class Vala.Interface : DataType { this.lower_case_csuffix = csuffix; } - public override ref string! get_lower_case_cname (string infix) { + public override ref string get_lower_case_cname (string infix) { if (infix == null) { infix = ""; } return "%s%s%s".printf (@namespace.get_lower_case_cprefix (), infix, get_lower_case_csuffix ()); } - public override ref string! get_upper_case_cname (string infix) { + public override ref string get_upper_case_cname (string infix) { return get_lower_case_cname (infix).up (); } diff --git a/vala/vala/valainterfaceregisterfunction.vala b/vala/vala/valainterfaceregisterfunction.vala index e9be8d1..a38f2f4 100644 --- a/vala/vala/valainterfaceregisterfunction.vala +++ b/vala/vala/valainterfaceregisterfunction.vala @@ -31,27 +31,27 @@ public class Vala.InterfaceRegisterFunction : TypeRegisterFunction { */ public Interface interface_reference { get; construct; } - public override DataType get_type_declaration () { + public override DataType! get_type_declaration () { return interface_reference; } - public override ref string get_type_struct_name () { + public override ref string! get_type_struct_name () { return "%sInterface".printf (interface_reference.get_cname ()); } - public override ref string get_class_init_func_name () { + public override ref string! get_class_init_func_name () { return "NULL"; } - public override ref string get_instance_struct_size () { + public override ref string! get_instance_struct_size () { return "0"; } - public override ref string get_instance_init_func_name () { + public override ref string! get_instance_init_func_name () { return "NULL"; } - public override ref string get_parent_type_name () { + public override ref string! get_parent_type_name () { return "G_TYPE_INTERFACE"; } diff --git a/vala/vala/valainterfacewriter.vala b/vala/vala/valainterfacewriter.vala index 0dacb68..977673a 100644 --- a/vala/vala/valainterfacewriter.vala +++ b/vala/vala/valainterfacewriter.vala @@ -56,11 +56,11 @@ public class Vala.InterfaceWriter : CodeVisitor { stream = null; } - public override void visit_begin_source_file (SourceFile source_file) { + public override void visit_begin_source_file (SourceFile! source_file) { current_cheader_filename = source_file.get_cheader_filename (); } - public override void visit_begin_namespace (Namespace ns) { + public override void visit_begin_namespace (Namespace! ns) { if (ns.name == null) { return; } @@ -75,7 +75,7 @@ public class Vala.InterfaceWriter : CodeVisitor { write_begin_block (); } - public override void visit_end_namespace (Namespace ns) { + public override void visit_end_namespace (Namespace! ns) { if (ns.name == null) { return; } @@ -84,7 +84,7 @@ public class Vala.InterfaceWriter : CodeVisitor { write_newline (); } - public override void visit_begin_class (Class cl) { + public override void visit_begin_class (Class! cl) { if (cl.access != MemberAccessibility.PUBLIC) { internal_scope = true; return; @@ -115,7 +115,7 @@ public class Vala.InterfaceWriter : CodeVisitor { write_begin_block (); } - public override void visit_end_class (Class cl) { + public override void visit_end_class (Class! cl) { if (cl.access != MemberAccessibility.PUBLIC) { internal_scope = false; return; @@ -125,7 +125,7 @@ public class Vala.InterfaceWriter : CodeVisitor { write_newline (); } - public override void visit_begin_struct (Struct st) { + public override void visit_begin_struct (Struct! st) { if (st.access != MemberAccessibility.PUBLIC) { internal_scope = true; return; @@ -137,7 +137,7 @@ public class Vala.InterfaceWriter : CodeVisitor { write_begin_block (); } - public override void visit_end_struct (Struct st) { + public override void visit_end_struct (Struct! st) { if (st.access != MemberAccessibility.PUBLIC) { internal_scope = false; return; @@ -147,7 +147,7 @@ public class Vala.InterfaceWriter : CodeVisitor { write_newline (); } - public override void visit_begin_enum (Enum en) { + public override void visit_begin_enum (Enum! en) { if (en.access != MemberAccessibility.PUBLIC) { internal_scope = true; return; @@ -159,7 +159,7 @@ public class Vala.InterfaceWriter : CodeVisitor { write_begin_block (); } - public override void visit_end_enum (Enum en) { + public override void visit_end_enum (Enum! en) { if (en.access != MemberAccessibility.PUBLIC) { internal_scope = false; return; @@ -169,7 +169,7 @@ public class Vala.InterfaceWriter : CodeVisitor { write_newline (); } - public override void visit_enum_value (EnumValue ev) { + public override void visit_enum_value (EnumValue! ev) { if (internal_scope) { return; } @@ -180,10 +180,10 @@ public class Vala.InterfaceWriter : CodeVisitor { write_newline (); } - public override void visit_constant (Constant c) { + public override void visit_constant (Constant! c) { } - public override void visit_field (Field f) { + public override void visit_field (Field! f) { if (internal_scope || f.access != MemberAccessibility.PUBLIC) { return; } @@ -213,7 +213,7 @@ public class Vala.InterfaceWriter : CodeVisitor { write_newline (); } - public override void visit_begin_method (Method m) { + public override void visit_begin_method (Method! m) { if (internal_scope || m.access != MemberAccessibility.PUBLIC || m.overrides) { return; } @@ -278,7 +278,7 @@ public class Vala.InterfaceWriter : CodeVisitor { write_newline (); } - public override void visit_begin_property (Property prop) { + public override void visit_begin_property (Property! prop) { if (internal_scope) { return; } @@ -322,14 +322,14 @@ public class Vala.InterfaceWriter : CodeVisitor { bol = false; } - private void write_identifier (string s) { + private void write_identifier (string! s) { if (s == "namespace") { stream.putc ('@'); } write_string (s); } - private void write_string (string s) { + private void write_string (string! s) { stream.printf ("%s", s); bol = false; } diff --git a/vala/vala/valainvocationexpression.vala b/vala/vala/valainvocationexpression.vala index fb9a836..b4a9746 100644 --- a/vala/vala/valainvocationexpression.vala +++ b/vala/vala/valainvocationexpression.vala @@ -31,11 +31,11 @@ namespace Vala { return (new InvocationExpression (call = call, argument_list = argument_list, source_reference = source)); } - public void add_argument (Expression arg) { + public void add_argument (Expression! arg) { _argument_list.append (arg); } - public override void accept (CodeVisitor visitor) { + public override void accept (CodeVisitor! visitor) { call.accept (visitor); visitor.visit_begin_invocation_expression (this); diff --git a/vala/vala/valaliteralexpression.vala b/vala/vala/valaliteralexpression.vala index 4ce5d53..b04d2b0 100644 --- a/vala/vala/valaliteralexpression.vala +++ b/vala/vala/valaliteralexpression.vala @@ -30,7 +30,7 @@ namespace Vala { return (new LiteralExpression (literal = literal, source_reference = source)); } - public override void accept (CodeVisitor visitor) { + public override void accept (CodeVisitor! visitor) { literal.accept (visitor); visitor.visit_literal_expression (this); diff --git a/vala/vala/valalocalvariabledeclaration.vala b/vala/vala/valalocalvariabledeclaration.vala index ac926f6..c2226e3 100644 --- a/vala/vala/valalocalvariabledeclaration.vala +++ b/vala/vala/valalocalvariabledeclaration.vala @@ -35,7 +35,7 @@ namespace Vala { return (new LocalVariableDeclaration (variable_declarators = declarators, source_reference = source)); } - public override void accept (CodeVisitor visitor) { + public override void accept (CodeVisitor! visitor) { if (type_reference != null) { type_reference.accept (visitor); } diff --git a/vala/vala/valamemberaccess.vala b/vala/vala/valamemberaccess.vala index 8c3adaf..bc77ad1 100644 --- a/vala/vala/valamemberaccess.vala +++ b/vala/vala/valamemberaccess.vala @@ -48,7 +48,7 @@ public class Vala.MemberAccess : Expression { return new MemberAccess (inner = inner, member_name = member, source_reference = source); } - public override void accept (CodeVisitor visitor) { + public override void accept (CodeVisitor! visitor) { if (inner != null) { inner.accept (visitor); } diff --git a/vala/vala/valamemorymanager.vala b/vala/vala/valamemorymanager.vala index 91775d7..06736fa 100644 --- a/vala/vala/valamemorymanager.vala +++ b/vala/vala/valamemorymanager.vala @@ -60,7 +60,7 @@ public class Vala.MemoryManager : CodeVisitor { current_symbol = m.symbol; } - public override void visit_begin_property (Property prop) { + public override void visit_begin_property (Property! prop) { current_symbol = prop.symbol; } diff --git a/vala/vala/valamethod.vala b/vala/vala/valamethod.vala index 196cc72..2da57d5 100644 --- a/vala/vala/valamethod.vala +++ b/vala/vala/valamethod.vala @@ -137,7 +137,7 @@ public class Vala.Method : CodeNode { return parameters.copy (); } - public override void accept (CodeVisitor visitor) { + public override void accept (CodeVisitor! visitor) { visitor.visit_begin_method (this); return_type.accept (visitor); @@ -221,4 +221,40 @@ public class Vala.Method : CodeNode { } } } + + /** + * Checks whether the arguments and return type of the specified method + * matches this method. + * + * @param m a method + * @return true if the specified method is compatible to this method + */ + public bool equals (Method! m2) { + if (!m2.return_type.equals (return_type)) { + return false; + } + + var method_params = m2.get_parameters (); + var method_params_it = method_params; + foreach (FormalParameter param in parameters) { + /* method may not expect less arguments */ + if (method_params_it == null) { + return false; + } + + var method_param = (FormalParameter) method_params_it.data; + if (!method_param.type_reference.equals (param.type_reference)) { + return false; + } + + method_params_it = method_params_it.next; + } + + /* method may not expect more arguments */ + if (method_params_it != null) { + return false; + } + + return true; + } } diff --git a/vala/vala/valanamedargument.vala b/vala/vala/valanamedargument.vala index 8399f01..9b5ecab 100644 --- a/vala/vala/valanamedargument.vala +++ b/vala/vala/valanamedargument.vala @@ -31,7 +31,7 @@ namespace Vala { return (new NamedArgument (name = name, argument = arg, source_reference = source)); } - public override void accept (CodeVisitor visitor) { + public override void accept (CodeVisitor! visitor) { argument.accept (visitor); visitor.visit_named_argument (this); diff --git a/vala/vala/valanamespace.vala b/vala/vala/valanamespace.vala index f7b519a..aa57041 100644 --- a/vala/vala/valanamespace.vala +++ b/vala/vala/valanamespace.vala @@ -38,41 +38,41 @@ namespace Vala { public string cprefix; public string lower_case_cprefix; - public static ref Namespace new (string name, SourceReference source) { + public static ref Namespace! new (string! name, SourceReference source) { return (new Namespace (name = name, source_reference = source)); } - public void add_class (Class cl) { + public void add_class (Class! cl) { classes.append (cl); cl.@namespace = this; } - public void remove_class (Class cl) { + public void remove_class (Class! cl) { classes.remove (cl); cl.@namespace = null; } - public void add_interface (Interface iface) { + public void add_interface (Interface! iface) { interfaces.append (iface); iface.@namespace = this; } - public void add_struct (Struct st) { + public void add_struct (Struct! st) { structs.append (st); st.@namespace = this; } - public void remove_struct (Struct st) { + public void remove_struct (Struct! st) { structs.remove (st); st.@namespace = null; } - public void add_enum (Enum en) { + public void add_enum (Enum! en) { enums.append (en); en.@namespace = this; } - public void add_flags (Flags fl) { + public void add_flags (Flags! fl) { flags_.append (fl); fl.@namespace = this; } @@ -90,15 +90,15 @@ namespace Vala { return classes.copy (); } - public void add_field (Field f) { + public void add_field (Field! f) { fields.append (f); } - public void add_method (Method m) { + public void add_method (Method! m) { methods.append (m); } - public override void accept (CodeVisitor visitor) { + public override void accept (CodeVisitor! visitor) { visitor.visit_begin_namespace (this); foreach (Class cl in classes) { @@ -210,7 +210,7 @@ namespace Vala { return cheader_filenames.copy (); } - void process_ccode_attribute (Attribute a) { + void process_ccode_attribute (Attribute! a) { foreach (NamedArgument arg in a.args) { if (arg.name == "cprefix") { /* this will already be checked during semantic analysis */ diff --git a/vala/vala/valanamespacereference.vala b/vala/vala/valanamespacereference.vala index 89c7bcc..45ea525 100644 --- a/vala/vala/valanamespacereference.vala +++ b/vala/vala/valanamespacereference.vala @@ -31,7 +31,7 @@ namespace Vala { return (new NamespaceReference (name = name, source_reference = source)); } - public override void accept (CodeVisitor visitor) { + public override void accept (CodeVisitor! visitor) { visitor.visit_namespace_reference (this); } } diff --git a/vala/vala/valaobjectcreationexpression.vala b/vala/vala/valaobjectcreationexpression.vala index d1499a1..e5f4917 100644 --- a/vala/vala/valaobjectcreationexpression.vala +++ b/vala/vala/valaobjectcreationexpression.vala @@ -31,7 +31,7 @@ namespace Vala { return (new ObjectCreationExpression (type_reference = type, named_argument_list = named_argument_list, source_reference = source)); } - public override void accept (CodeVisitor visitor) { + public override void accept (CodeVisitor! visitor) { type_reference.accept (visitor); foreach (NamedArgument arg in named_argument_list) { diff --git a/vala/vala/valaparenthesizedexpression.vala b/vala/vala/valaparenthesizedexpression.vala index 32dbdb7..1d8f88c 100644 --- a/vala/vala/valaparenthesizedexpression.vala +++ b/vala/vala/valaparenthesizedexpression.vala @@ -30,7 +30,7 @@ namespace Vala { return (new ParenthesizedExpression (inner = inner, source_reference = source)); } - public override void accept (CodeVisitor visitor) { + public override void accept (CodeVisitor! visitor) { inner.accept (visitor); visitor.visit_parenthesized_expression (this); diff --git a/vala/vala/valaparser.vala b/vala/vala/valaparser.vala index 6138965..9c2aa86 100644 --- a/vala/vala/valaparser.vala +++ b/vala/vala/valaparser.vala @@ -27,16 +27,16 @@ namespace Vala { string comment; string _file_comment; - public void parse (CodeContext context) { + public void parse (CodeContext! context) { context.accept (this); } - public override void visit_begin_source_file (SourceFile source_file) { + public override void visit_begin_source_file (SourceFile! source_file) { parse_file (source_file); source_file.comment = _file_comment; } - public void push_comment (string comment_item, bool file_comment) { + public void push_comment (string! comment_item, bool file_comment) { if (comment == null) { comment = comment_item; } else { @@ -65,6 +65,6 @@ namespace Vala { } [Import ()] - public void parse_file (SourceFile source_file); + public void parse_file (SourceFile! source_file); } } diff --git a/vala/vala/valapostfixexpression.vala b/vala/vala/valapostfixexpression.vala index a96fdd3..4ac29ea 100644 --- a/vala/vala/valapostfixexpression.vala +++ b/vala/vala/valapostfixexpression.vala @@ -23,15 +23,15 @@ using GLib; namespace Vala { - public abstract class PostfixExpression : Expression { - public Expression inner { get; construct; } - public bool increment { get; construct; } - - public static ref PostfixExpression new (Expression inner, bool inc, SourceReference source) { + public class PostfixExpression : Expression { + public Expression! inner { get; set construct; } + public bool increment { get; set; } + + public static ref PostfixExpression! new (Expression! inner, bool inc, SourceReference source) { return (new PostfixExpression (inner = inner, increment = inc, source_reference = source)); } - public override void accept (CodeVisitor visitor) { + public override void accept (CodeVisitor! visitor) { inner.accept (visitor); visitor.visit_postfix_expression (this); diff --git a/vala/vala/valaproperty.vala b/vala/vala/valaproperty.vala index 343aa14..a0b6ee4 100644 --- a/vala/vala/valaproperty.vala +++ b/vala/vala/valaproperty.vala @@ -36,7 +36,7 @@ namespace Vala { return (new Property (name = name, type_reference = type, get_accessor = get_accessor, set_accessor = set_accessor, source_reference = source)); } - public override void accept (CodeVisitor visitor) { + public override void accept (CodeVisitor! visitor) { visitor.visit_begin_property (this); type_reference.accept (visitor); diff --git a/vala/vala/valapropertyaccessor.vala b/vala/vala/valapropertyaccessor.vala index 2fecd43..fecbd3d 100644 --- a/vala/vala/valapropertyaccessor.vala +++ b/vala/vala/valapropertyaccessor.vala @@ -34,7 +34,7 @@ namespace Vala { return (new PropertyAccessor (readable = readable, writable = writable, construct_ = construct_, body = body, source_reference = source)); } - public override void accept (CodeVisitor visitor) { + public override void accept (CodeVisitor! visitor) { visitor.visit_begin_property_accessor (this); if (body != null) { diff --git a/vala/vala/valareturnstatement.vala b/vala/vala/valareturnstatement.vala index b865013..5643249 100644 --- a/vala/vala/valareturnstatement.vala +++ b/vala/vala/valareturnstatement.vala @@ -30,7 +30,7 @@ namespace Vala { return (new ReturnStatement (return_expression = result, source_reference = source)); } - public override void accept (CodeVisitor visitor) { + public override void accept (CodeVisitor! visitor) { if (return_expression != null) { return_expression.accept (visitor); diff --git a/vala/vala/valasemanticanalyzer.vala b/vala/vala/valasemanticanalyzer.vala index 73286ba..279b9e7 100644 --- a/vala/vala/valasemanticanalyzer.vala +++ b/vala/vala/valasemanticanalyzer.vala @@ -148,6 +148,12 @@ public class Vala.SemanticAnalyzer : CodeVisitor { if (sym != null && sym.node is Method) { var base_method = (Method) sym.node; if (base_method.is_abstract || base_method.is_virtual) { + if (!m.equals (base_method)) { + m.error = true; + Report.error (m.source_reference, "Return type and or parameters of overridding method `%s' do not match overridden method `%s'.".printf (m.symbol.get_full_name (), base_method.symbol.get_full_name ())); + return; + } + m.base_method = base_method; break; } @@ -398,7 +404,7 @@ public class Vala.SemanticAnalyzer : CodeVisitor { expr.static_type.type = (DataType) root_symbol.lookup ("int").node; } - public override void visit_real_literal (IntegerLiteral! expr) { + public override void visit_real_literal (RealLiteral! expr) { expr.static_type = new TypeReference (); expr.static_type.type = (DataType) root_symbol.lookup ("double").node; } diff --git a/vala/vala/valatypecheck.vala b/vala/vala/valatypecheck.vala index 6ceac96..3ca4e11 100644 --- a/vala/vala/valatypecheck.vala +++ b/vala/vala/valatypecheck.vala @@ -31,7 +31,7 @@ namespace Vala { return (new TypeCheck (expression = expr, type_reference = type, source_reference = source)); } - public override void accept (CodeVisitor visitor) { + public override void accept (CodeVisitor! visitor) { expression.accept (visitor); type_reference.accept (visitor); diff --git a/vala/vala/valatypeofexpression.vala b/vala/vala/valatypeofexpression.vala index 100a64d..26f5c03 100644 --- a/vala/vala/valatypeofexpression.vala +++ b/vala/vala/valatypeofexpression.vala @@ -30,7 +30,7 @@ namespace Vala { return (new TypeofExpression (type_reference = type, source_reference = source)); } - public override void accept (CodeVisitor visitor) { + public override void accept (CodeVisitor! visitor) { type_reference.accept (visitor); visitor.visit_typeof_expression (this); diff --git a/vala/vala/valatypeparameter.vala b/vala/vala/valatypeparameter.vala index 30bd35d..86adaf3 100644 --- a/vala/vala/valatypeparameter.vala +++ b/vala/vala/valatypeparameter.vala @@ -31,7 +31,7 @@ namespace Vala { return (new TypeParameter (name = name, source_reference = source)); } - public override void accept (CodeVisitor visitor) { + public override void accept (CodeVisitor! visitor) { visitor.visit_type_parameter (this); } } diff --git a/vala/vala/valatypereference.vala b/vala/vala/valatypereference.vala index b70392b..ba892f7 100644 --- a/vala/vala/valatypereference.vala +++ b/vala/vala/valatypereference.vala @@ -61,7 +61,7 @@ namespace Vala { return null; } - public void add_type_argument (TypeReference arg) { + public void add_type_argument (TypeReference! arg) { type_argument_list.append (arg); } @@ -69,7 +69,7 @@ namespace Vala { return type_argument_list.copy (); } - public override void accept (CodeVisitor visitor) { + public override void accept (CodeVisitor! visitor) { foreach (TypeReference type_arg in type_argument_list) { type_arg.accept (visitor); } @@ -152,5 +152,40 @@ namespace Vala { return result; } + + public bool equals (TypeReference! type2) { + if (type2.is_ref != is_ref) { + return false; + } + if (type2.is_lvalue_ref != is_lvalue_ref) { + return false; + } + if (type2.is_weak != is_weak) { + return false; + } + if (type2.is_out != is_out) { + return false; + } + if (type2.array != array) { + return false; + } + if (type2.array_own != array_own) { + return false; + } + if (type2.non_null != non_null) { + return false; + } + if (type2.type != type) { + return false; + } + if (type2.type_parameter != type_parameter) { + return false; + } + if (type2.floating_reference != floating_reference) { + return false; + } + + return true; + } } } diff --git a/vala/vala/valatyperegisterfunction.vala b/vala/vala/valatyperegisterfunction.vala index 0173c62..3e946c8 100644 --- a/vala/vala/valatyperegisterfunction.vala +++ b/vala/vala/valatyperegisterfunction.vala @@ -50,7 +50,7 @@ public abstract class Vala.TypeRegisterFunction : CCodeFunction { reg_call.add_argument (new CCodeIdentifier (name = get_parent_type_name ())); reg_call.add_argument (new CCodeConstant (name = "\"%s\"".printf (get_type_declaration ().get_cname ()))); reg_call.add_argument (new CCodeIdentifier (name = "&g_define_type_info")); - reg_call.add_argument (new CCodeConstant (name = "0")); + reg_call.add_argument (new CCodeConstant (name = get_type_flags ())); type_init.add_statement (new CCodeExpressionStatement (expression = new CCodeAssignment (left = new CCodeIdentifier (name = "g_define_type_id"), right = reg_call))); type_init.add_statement (get_type_interface_init_statements ()); @@ -105,6 +105,15 @@ public abstract class Vala.TypeRegisterFunction : CCodeFunction { public abstract ref string! get_parent_type_name (); /** + * Returns the set of type flags to be applied when registering. + * + * @return type flags + */ + public virtual string get_type_flags () { + return "0"; + } + + /** * Returns additional C initialization statements to setup interfaces. * * @return C statements diff --git a/vala/vala/valaunaryexpression.vala b/vala/vala/valaunaryexpression.vala index 61ad00d..cbb168b 100644 --- a/vala/vala/valaunaryexpression.vala +++ b/vala/vala/valaunaryexpression.vala @@ -31,7 +31,7 @@ namespace Vala { return (new UnaryExpression (operator = op, inner = inner, source_reference = source)); } - public override void accept (CodeVisitor visitor) { + public override void accept (CodeVisitor! visitor) { inner.accept (visitor); visitor.visit_unary_expression (this); diff --git a/vala/vala/valavariabledeclarator.vala b/vala/vala/valavariabledeclarator.vala index dbfc20f..4da005c 100644 --- a/vala/vala/valavariabledeclarator.vala +++ b/vala/vala/valavariabledeclarator.vala @@ -32,7 +32,7 @@ namespace Vala { return (new VariableDeclarator (name = name, initializer = init, source_reference = source)); } - public override void accept (CodeVisitor visitor) { + public override void accept (CodeVisitor! visitor) { if (initializer != null) { initializer.accept (visitor); diff --git a/vala/vala/valawhilestatement.vala b/vala/vala/valawhilestatement.vala index bda6034..c8724a1 100644 --- a/vala/vala/valawhilestatement.vala +++ b/vala/vala/valawhilestatement.vala @@ -31,7 +31,7 @@ namespace Vala { return (new WhileStatement (condition = cond, body = body, source_reference = source)); } - public override void accept (CodeVisitor visitor) { + public override void accept (CodeVisitor! visitor) { condition.accept (visitor); visitor.visit_end_full_expression (condition);