valaccodecontrolflowmodule.vala \
valaccodedeclarationspace.vala \
valaccodedelegatemodule.vala \
- valaccodegenerator.vala \
valaccodememberaccessmodule.vala \
valaccodemethodcallmodule.vala \
valaccodemethodmodule.vala \
- valaccodemodule.vala \
valaccodestructmodule.vala \
valaclassregisterfunction.vala \
valactype.vala \
int next_array_dup_id = 0;
int next_array_add_id = 0;
- public CCodeArrayModule (CCodeGenerator codegen, CCodeModule? next) {
- base (codegen, next);
- }
-
void append_initializer_list (CCodeCommaExpression ce, CCodeExpression name_cnode, InitializerList initializer_list, int rank, ref int i) {
foreach (Expression e in initializer_list.get_initializers ()) {
if (rank > 1) {
var memberaccess = expr.container as MemberAccess;
if (lit != null && memberaccess != null) {
int dim = lit.value.to_int ();
- expr.ccodenode = head.get_array_length_cexpression (memberaccess.inner, dim + 1);
+ expr.ccodenode = get_array_length_cexpression (memberaccess.inner, dim + 1);
} else {
Report.error (expr.source_reference, "only integer literals supported as index");
}
} else {
// access to element in an array
for (int i = 1; i < rank; i++) {
- var cmul = new CCodeBinaryExpression (CCodeBinaryOperator.MUL, cindex, head.get_array_length_cexpression (expr.container, i + 1));
+ var cmul = new CCodeBinaryExpression (CCodeBinaryOperator.MUL, cindex, get_array_length_cexpression (expr.container, i + 1));
cindex = new CCodeBinaryExpression (CCodeBinaryOperator.PLUS, cmul, (CCodeExpression) indices[i].ccodenode);
}
expr.ccodenode = new CCodeElementAccess (ccontainer, cindex);
}
for (int dim = 1; dim <= array_type.rank; dim++) {
- var cparam = new CCodeFormalParameter (head.get_array_length_cname (get_variable_cname (param.name), dim), length_ctype);
+ var cparam = new CCodeFormalParameter (get_array_length_cname (get_variable_cname (param.name), dim), length_ctype);
cparam_map.set (get_param_pos (param.carray_length_parameter_position + 0.01 * dim), cparam);
if (carg_map != null) {
carg_map.set (get_param_pos (param.carray_length_parameter_position + 0.01 * dim), get_variable_cexpression (cparam.name));
* The link between an assignment and generated code.
*/
public class Vala.CCodeAssignmentModule : CCodeMemberAccessModule {
- public CCodeAssignmentModule (CCodeGenerator codegen, CCodeModule? next) {
- base (codegen, next);
- }
-
CCodeExpression emit_property_assignment (Assignment assignment) {
var ma = assignment.left as MemberAccess;
}
if (prop.set_accessor.construction && current_type_symbol is Class && current_class.is_subtype_of (gobject_type) && in_creation_method) {
- return head.get_construct_property_assignment (prop.get_canonical_cconstant (), prop.property_type, (CCodeExpression) assignment.right.ccodenode);
+ return get_construct_property_assignment (prop.get_canonical_cconstant (), prop.property_type, (CCodeExpression) assignment.right.ccodenode);
} else {
CCodeExpression cexpr = (CCodeExpression) assignment.right.ccodenode;
if (array) {
var array_type = (ArrayType) assignment.left.value_type;
for (int dim = 1; dim <= array_type.rank; dim++) {
- var lhs_array_len = head.get_array_length_cexpression (assignment.left, dim);
- var rhs_array_len = head.get_array_length_cexpression (assignment.right, dim);
+ var lhs_array_len = get_array_length_cexpression (assignment.left, dim);
+ var rhs_array_len = get_array_length_cexpression (assignment.right, dim);
ccomma.append_expression (new CCodeAssignment (lhs_array_len, rhs_array_len));
}
if (array_type.rank == 1) {
var array_local = array_var as LocalVariable;
if (array_var != null && array_var.is_internal_symbol ()
&& ((array_var is LocalVariable && !array_local.captured) || array_var is Field)) {
- var lhs_array_size = head.get_array_size_cexpression (assignment.left);
- var rhs_array_len = head.get_array_length_cexpression (assignment.left, 1);
+ var lhs_array_size = get_array_size_cexpression (assignment.left);
+ var rhs_array_len = get_array_length_cexpression (assignment.left, 1);
ccomma.append_expression (new CCodeAssignment (lhs_array_size, rhs_array_len));
}
}
/**
* Code visitor generating C Code.
*/
-public class Vala.CCodeBaseModule : CCodeModule {
+public class Vala.CCodeBaseModule : CodeGenerator {
public CodeContext context { get; set; }
public Symbol root_symbol;
public Map<string,string> variable_name_map = new HashMap<string,string> (str_hash, str_equal);
- public CCodeBaseModule (CCodeGenerator codegen, CCodeModule? next) {
- base (codegen, next);
-
+ public CCodeBaseModule () {
predefined_marshal_set = new HashSet<string> (str_hash, str_equal);
predefined_marshal_set.add ("VOID:VOID");
predefined_marshal_set.add ("VOID:BOOLEAN");
var source_files = context.get_source_files ();
foreach (SourceFile file in source_files) {
if (!file.external_package) {
- file.accept (codegen);
+ file.accept (this);
}
}
}
}
- public override CCodeIdentifier get_value_setter_function (DataType type_reference) {
+ public CCodeIdentifier get_value_setter_function (DataType type_reference) {
var array_type = type_reference as ArrayType;
if (type_reference.data_type != null) {
return new CCodeIdentifier (type_reference.data_type.get_set_value_function ());
}
}
- public override CCodeIdentifier get_value_taker_function (DataType type_reference) {
+ public CCodeIdentifier get_value_taker_function (DataType type_reference) {
var array_type = type_reference as ArrayType;
if (type_reference.data_type != null) {
return new CCodeIdentifier (type_reference.data_type.get_take_value_function ());
source_declarations.add_include ("glib-object.h");
}
- source_file.accept_children (codegen);
+ source_file.accept_children (this);
if (context.report.get_errors () > 0) {
return;
flag_shift += 1;
}
} else {
- ev.value.emit (codegen);
+ ev.value.emit (this);
c_ev = new CCodeEnumValue (ev.get_cname (), (CCodeExpression) ev.value.ccodenode);
}
c_ev.deprecated = ev.deprecated;
}
public override void visit_enum (Enum en) {
- en.accept_children (codegen);
+ en.accept_children (this);
if (en.comment != null) {
source_type_member_definition.append (new CCodeComment (en.comment.content));
}
}
- public override void visit_member (Symbol m) {
+ public void visit_member (Symbol m) {
/* stuff meant for all lockable members */
if (m is Lockable && ((Lockable) m).get_lock_used ()) {
CCodeExpression l = new CCodeIdentifier ("self");
if (!c.external) {
generate_type_declaration (c.type_reference, decl_space);
- c.value.emit (codegen);
+ c.value.emit (this);
var initializer_list = c.value as InitializerList;
if (initializer_list != null) {
var len_type = int_type.copy ();
cdecl = new CCodeDeclaration (len_type.get_cname ());
- cdecl.add_declarator (new CCodeVariableDeclarator (head.get_array_length_cname (f.get_cname (), dim)));
+ cdecl.add_declarator (new CCodeVariableDeclarator (get_array_length_cname (f.get_cname (), dim)));
if (f.is_private_symbol ()) {
cdecl.modifiers = CCodeModifiers.STATIC;
} else {
check_type (f.variable_type);
if (f.initializer != null) {
- f.initializer.emit (codegen);
+ f.initializer.emit (this);
}
var cl = f.parent_symbol as Class;
List<Expression> sizes = ((ArrayCreationExpression) f.initializer).get_sizes ();
for (int dim = 1; dim <= array_type.rank; dim++) {
- var array_len_lhs = head.get_array_length_cexpression (ma, dim);
+ var array_len_lhs = get_array_length_cexpression (ma, dim);
var size = sizes[dim - 1];
instance_init_fragment.append (new CCodeExpressionStatement (new CCodeAssignment (array_len_lhs, (CCodeExpression) size.ccodenode)));
}
if (array_type.rank == 1 && f.is_internal_symbol ()) {
- var lhs_array_size = head.get_array_size_cexpression (ma);
- var rhs_array_len = head.get_array_length_cexpression (ma, 1);
+ var lhs_array_size = get_array_size_cexpression (ma);
+ var rhs_array_len = get_array_length_cexpression (ma, 1);
instance_init_fragment.append (new CCodeExpressionStatement (new CCodeAssignment (lhs_array_size, rhs_array_len)));
}
}
var len_type = int_type.copy ();
var len_def = new CCodeDeclaration (len_type.get_cname ());
- len_def.add_declarator (new CCodeVariableDeclarator (head.get_array_length_cname (f.get_cname (), dim), new CCodeConstant ("0")));
+ len_def.add_declarator (new CCodeVariableDeclarator (get_array_length_cname (f.get_cname (), dim), new CCodeConstant ("0")));
if (!f.is_private_symbol ()) {
len_def.modifiers = CCodeModifiers.EXTERN;
} else {
var len_type = int_type.copy ();
var cdecl = new CCodeDeclaration (len_type.get_cname ());
- cdecl.add_declarator (new CCodeVariableDeclarator (head.get_array_size_cname (f.get_cname ()), new CCodeConstant ("0")));
+ cdecl.add_declarator (new CCodeVariableDeclarator (get_array_size_cname (f.get_cname ()), new CCodeConstant ("0")));
cdecl.modifiers = CCodeModifiers.STATIC;
source_declarations.add_type_member_declaration (cdecl);
}
List<Expression> sizes = ((ArrayCreationExpression) f.initializer).get_sizes ();
for (int dim = 1; dim <= array_type.rank; dim++) {
- var array_len_lhs = head.get_array_length_cexpression (ma, dim);
+ var array_len_lhs = get_array_length_cexpression (ma, dim);
var size = sizes[dim - 1];
class_init_fragment.append (new CCodeExpressionStatement (new CCodeAssignment (array_len_lhs, (CCodeExpression) size.ccodenode)));
}
temp_ref_vars = new ArrayList<LocalVariable> ();
variable_name_map = new HashMap<string,string> (str_hash, str_equal);
- prop.accept_children (codegen);
+ prop.accept_children (this);
next_temp_var_id = old_next_temp_var_id;
temp_vars = old_temp_vars;
}
for (int dim = 1; dim <= array_type.rank; dim++) {
- function.add_parameter (new CCodeFormalParameter (head.get_array_length_cname (acc.readable ? "result" : "value", dim), length_ctype));
+ function.add_parameter (new CCodeFormalParameter (get_array_length_cname (acc.readable ? "result" : "value", dim), length_ctype));
}
} else if ((acc.value_type is DelegateType) && ((DelegateType) acc.value_type).delegate_symbol.has_target) {
function.add_parameter (new CCodeFormalParameter (get_delegate_target_cname (acc.readable ? "result" : "value"), acc.readable ? "gpointer*" : "gpointer"));
bool returns_real_struct = acc.readable && prop.property_type.is_real_non_null_struct_type ();
if (acc.result_var != null) {
- acc.result_var.accept (codegen);
+ acc.result_var.accept (this);
}
if (acc.body != null) {
- acc.body.emit (codegen);
+ acc.body.emit (this);
}
var t = (TypeSymbol) prop.parent_symbol;
}
for (int dim = 1; dim <= array_type.rank; dim++) {
- function.add_parameter (new CCodeFormalParameter (head.get_array_length_cname (acc.readable ? "result" : "value", dim), length_ctype));
+ function.add_parameter (new CCodeFormalParameter (get_array_length_cname (acc.readable ? "result" : "value", dim), length_ctype));
}
} else if ((acc.value_type is DelegateType) && ((DelegateType) acc.value_type).delegate_symbol.has_target) {
function.add_parameter (new CCodeFormalParameter (get_delegate_target_cname (acc.readable ? "result" : "value"), acc.readable ? "gpointer*" : "gpointer"));
var array_type = (ArrayType) acc.value_type;
for (int dim = 1; dim <= array_type.rank; dim++) {
- var len_expr = new CCodeIdentifier (head.get_array_length_cname ("result", dim));
+ var len_expr = new CCodeIdentifier (get_array_length_cname ("result", dim));
vcall.add_argument (len_expr);
}
}
var array_type = (ArrayType) acc.value_type;
for (int dim = 1; dim <= array_type.rank; dim++) {
- var len_expr = new CCodeIdentifier (head.get_array_length_cname ("value", dim));
+ var len_expr = new CCodeIdentifier (get_array_length_cname ("value", dim));
vcall.add_argument (len_expr);
}
}
}
for (int dim = 1; dim <= array_type.rank; dim++) {
- function.add_parameter (new CCodeFormalParameter (head.get_array_length_cname (acc.readable ? "result" : "value", dim), length_ctype));
+ function.add_parameter (new CCodeFormalParameter (get_array_length_cname (acc.readable ? "result" : "value", dim), length_ctype));
}
} else if ((acc.value_type is DelegateType) && ((DelegateType) acc.value_type).delegate_symbol.has_target) {
function.add_parameter (new CCodeFormalParameter (get_delegate_target_cname (acc.readable ? "result" : "value"), acc.readable ? "gpointer*" : "gpointer"));
bool old_method_inner_error = current_method_inner_error;
current_method_inner_error = false;
- d.body.emit (codegen);
+ d.body.emit (this);
if (d.binding == MemberBinding.STATIC && !in_plugin) {
Report.error (d.source_reference, "static destructors are only supported for dynamic types");
}
public override void visit_block (Block b) {
- var old_symbol = current_symbol;
- current_symbol = b;
+ emit_context.push_symbol (b);
foreach (Statement stmt in b.get_statements ()) {
- stmt.emit (codegen);
+ stmt.emit (this);
}
var local_vars = b.get_local_variables ();
b.ccodenode = cblock;
- current_symbol = old_symbol;
+ emit_context.pop_symbol ();
}
public override void visit_empty_statement (EmptyStatement stmt) {
}
public override void visit_declaration_statement (DeclarationStatement stmt) {
- stmt.declaration.accept (codegen);
+ stmt.declaration.accept (this);
stmt.ccodenode = stmt.declaration.ccodenode;
check_type (local.variable_type);
if (local.initializer != null) {
- local.initializer.emit (codegen);
+ local.initializer.emit (this);
visit_end_full_expression (local.initializer);
}
if (!array_type.fixed_length) {
for (int dim = 1; dim <= array_type.rank; dim++) {
- var len_var = new LocalVariable (int_type.copy (), head.get_array_length_cname (get_variable_cname (local.name), dim));
+ var len_var = new LocalVariable (int_type.copy (), get_array_length_cname (get_variable_cname (local.name), dim));
temp_vars.add (len_var);
}
if (array_type.rank == 1) {
- var size_var = new LocalVariable (int_type.copy (), head.get_array_size_cname (get_variable_cname (local.name)));
+ var size_var = new LocalVariable (int_type.copy (), get_array_size_cname (get_variable_cname (local.name)));
temp_vars.add (size_var);
}
}
ccomma.append_expression (new CCodeAssignment (get_variable_cexpression (temp_var.name), rhs));
for (int dim = 1; dim <= array_type.rank; dim++) {
- var lhs_array_len = head.get_array_length_cexpression (ma, dim);
- var rhs_array_len = head.get_array_length_cexpression (local.initializer, dim);
+ var lhs_array_len = get_array_length_cexpression (ma, dim);
+ var rhs_array_len = get_array_length_cexpression (local.initializer, dim);
ccomma.append_expression (new CCodeAssignment (lhs_array_len, rhs_array_len));
}
if (array_type.rank == 1 && !local.captured) {
- var lhs_array_size = head.get_array_size_cexpression (ma);
- var rhs_array_len = head.get_array_length_cexpression (ma, 1);
+ var lhs_array_size = get_array_size_cexpression (ma);
+ var rhs_array_len = get_array_length_cexpression (ma, 1);
ccomma.append_expression (new CCodeAssignment (lhs_array_size, rhs_array_len));
}
var ccomma = new CCodeCommaExpression ();
for (int dim = 1; dim <= array_type.rank; dim++) {
- ccomma.append_expression (new CCodeAssignment (get_variable_cexpression (head.get_array_length_cname (get_variable_cname (local.name), dim)), new CCodeConstant ("0")));
+ ccomma.append_expression (new CCodeAssignment (get_variable_cexpression (get_array_length_cname (get_variable_cname (local.name), dim)), new CCodeConstant ("0")));
}
ccomma.append_expression (rhs);
}
if (local.initializer != null && local.initializer.tree_can_fail) {
- head.add_simple_check (local.initializer, cfrag);
+ add_simple_check (local.initializer, cfrag);
}
local.ccodenode = cfrag;
bool first = true;
for (int dim = 1; dim <= array_type.rank; dim++) {
if (first) {
- csizeexpr = head.get_array_length_cexpression (expr, dim);
+ csizeexpr = get_array_length_cexpression (expr, dim);
first = false;
} else {
- csizeexpr = new CCodeBinaryExpression (CCodeBinaryOperator.MUL, csizeexpr, head.get_array_length_cexpression (expr, dim));
+ csizeexpr = new CCodeBinaryExpression (CCodeBinaryOperator.MUL, csizeexpr, get_array_length_cexpression (expr, dim));
}
}
if (stmt.tree_can_fail && stmt.expression.tree_can_fail) {
// simple case, no node breakdown necessary
- head.add_simple_check (stmt.expression, cfrag);
+ add_simple_check (stmt.expression, cfrag);
}
stmt.ccodenode = cfrag;
var array_type = (ArrayType) current_return_type;
for (int dim = 1; dim <= array_type.rank; dim++) {
- var len_l = get_result_cexpression (head.get_array_length_cname ("result", dim));
+ var len_l = get_result_cexpression (get_array_length_cname ("result", dim));
if (current_method == null || !current_method.coroutine) {
len_l = new CCodeUnaryExpression (CCodeUnaryOperator.POINTER_INDIRECTION, len_l);
}
- var len_r = head.get_array_length_cexpression (stmt.return_expression, dim);
+ var len_r = get_array_length_cexpression (stmt.return_expression, dim);
ccomma.append_expression (new CCodeAssignment (len_l, len_r));
}
CCodeExpression csizeexpr = null;
for (int dim = 1; dim <= array_type.rank; dim++) {
if (first) {
- csizeexpr = head.get_array_length_cexpression (expr, dim);
+ csizeexpr = get_array_length_cexpression (expr, dim);
first = false;
} else {
- csizeexpr = new CCodeBinaryExpression (CCodeBinaryOperator.MUL, csizeexpr, head.get_array_length_cexpression (expr, dim));
+ csizeexpr = new CCodeBinaryExpression (CCodeBinaryOperator.MUL, csizeexpr, get_array_length_cexpression (expr, dim));
}
}
if (!param.no_array_length && param.variable_type is ArrayType) {
var array_type = (ArrayType) param.variable_type;
for (int dim = 1; dim <= array_type.rank; dim++) {
- carg_map.set (get_param_pos (param.carray_length_parameter_position + 0.01 * dim), head.get_array_length_cexpression (arg, dim));
+ carg_map.set (get_param_pos (param.carray_length_parameter_position + 0.01 * dim), get_array_length_cexpression (arg, dim));
}
} else if (param.variable_type is DelegateType) {
var deleg_type = (DelegateType) param.variable_type;
/* evaluate default expression here as the code
* generator might not have visited the formal
* parameter yet */
- param.initializer.emit (codegen);
+ param.initializer.emit (this);
carg_map.set (get_param_pos (param.cparameter_position), (CCodeExpression) param.initializer.ccodenode);
i++;
// cast the return value of the creation method back to the intended type if
// it requested a special C return type
- if (head.get_custom_creturn_type (m) != null) {
+ if (get_custom_creturn_type (m) != null) {
creation_expr = new CCodeCastExpression (creation_expr, expr.type_reference.get_cname ());
}
} else if (expr.symbol_reference is ErrorCode) {
var array_type = (ArrayType) f.variable_type;
for (int dim = 1; dim <= array_type.rank; dim++) {
if (expr.type_reference.data_type is Struct) {
- lhs = new CCodeMemberAccess (typed_inst, head.get_array_length_cname (f.get_cname (), dim));
+ lhs = new CCodeMemberAccess (typed_inst, get_array_length_cname (f.get_cname (), dim));
} else {
- lhs = new CCodeMemberAccess.pointer (typed_inst, head.get_array_length_cname (f.get_cname (), dim));
+ lhs = new CCodeMemberAccess.pointer (typed_inst, get_array_length_cname (f.get_cname (), dim));
}
- var rhs_array_len = head.get_array_length_cexpression (init.initializer, dim);
+ var rhs_array_len = get_array_length_cexpression (init.initializer, dim);
ccomma.append_expression (new CCodeAssignment (lhs, rhs_array_len));
}
} else if (f.variable_type is DelegateType && !f.no_delegate_target) {
temp_vars.add (temp_decl);
ccall.add_argument (new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, new CCodeIdentifier (temp_decl.name)));
- cfunc.add_parameter (new CCodeFormalParameter (head.get_array_length_cname ("result", dim), "int*"));
+ cfunc.add_parameter (new CCodeFormalParameter (get_array_length_cname ("result", dim), "int*"));
expr.append_array_size (new CCodeIdentifier (temp_decl.name));
}
}
temp_vars = new ArrayList<LocalVariable> ();
temp_ref_vars = new ArrayList<LocalVariable> ();
- l.accept_children (codegen);
+ l.accept_children (this);
temp_vars = old_temp_vars;
temp_ref_vars = old_temp_ref_vars;
var ccomma = new CCodeCommaExpression ();
ccomma.append_expression (cexpr);
for (int dim = 1; dim <= array_type.rank; dim++) {
- var len_decl = new LocalVariable (int_type.copy (), head.get_array_length_cname (decl.name, dim));
+ var len_decl = new LocalVariable (int_type.copy (), get_array_length_cname (decl.name, dim));
temp_vars.add (len_decl);
- ccomma.append_expression (new CCodeAssignment (get_variable_cexpression (len_decl.name), head.get_array_length_cexpression (expr, dim)));
+ ccomma.append_expression (new CCodeAssignment (get_variable_cexpression (len_decl.name), get_array_length_cexpression (expr, dim)));
}
ccomma.append_expression (get_variable_cexpression (decl.name));
cexpr = ccomma;
var array_type = (ArrayType) expression_type;
for (int dim = 1; dim <= array_type.rank; dim++) {
- ccall.add_argument (head.get_array_length_cexpression (expr, dim));
- cfunc.add_parameter (new CCodeFormalParameter (head.get_array_length_cname ("value", dim), "gint"));
+ ccall.add_argument (get_array_length_cexpression (expr, dim));
+ cfunc.add_parameter (new CCodeFormalParameter (get_array_length_cname ("value", dim), "gint"));
}
}
}
if (prop is DynamicProperty) {
- set_func = head.get_dynamic_property_setter_cname ((DynamicProperty) prop);
+ set_func = get_dynamic_property_setter_cname ((DynamicProperty) prop);
} else {
generate_property_accessor_declaration (base_property.set_accessor, source_declarations);
set_func = base_property.set_accessor.get_cname ();
if (array_type != null && !prop.no_array_length && rhs != null) {
for (int dim = 1; dim <= array_type.rank; dim++) {
- ccall.add_argument (head.get_array_length_cexpression (rhs, dim));
+ ccall.add_argument (get_array_length_cexpression (rhs, dim));
}
} else if (prop.property_type is DelegateType && rhs != null) {
var delegate_type = (DelegateType) prop.property_type;
public CCodeNode? get_ccodenode (CodeNode node) {
if (node.ccodenode == null) {
- node.emit (codegen);
+ node.emit (this);
}
return node.ccodenode;
}
function.block = cblock;
source_type_member_definition.append (function);
}
+
+ public virtual string? get_custom_creturn_type (Method m) {
+ return null;
+ }
+
+ public virtual void generate_dynamic_method_wrapper (DynamicMethod method) {
+ }
+
+ public virtual bool method_has_wrapper (Method method) {
+ return false;
+ }
+
+ public virtual CCodeExpression get_construct_property_assignment (CCodeConstant canonical_cconstant, DataType property_type, CCodeExpression value) {
+ return new CCodeConstant ("");
+ }
+
+ public virtual CCodeFunctionCall get_param_spec (Property prop) {
+ return new CCodeFunctionCall (new CCodeIdentifier (""));
+ }
+
+ public virtual CCodeFunctionCall get_signal_creation (Signal sig, TypeSymbol type) {
+ return new CCodeFunctionCall (new CCodeIdentifier (""));
+ }
+
+ public virtual CCodeFragment register_dbus_info (ObjectTypeSymbol bindable) {
+ return new CCodeFragment ();
+ }
+
+ public virtual string get_dynamic_property_getter_cname (DynamicProperty node) {
+ Report.error (node.source_reference, "dynamic properties are not supported for %s".printf (node.dynamic_type.to_string ()));
+ return "";
+ }
+
+ public virtual string get_dynamic_property_setter_cname (DynamicProperty node) {
+ Report.error (node.source_reference, "dynamic properties are not supported for %s".printf (node.dynamic_type.to_string ()));
+ return "";
+ }
+
+ public virtual string get_dynamic_signal_cname (DynamicSignal node) {
+ return "";
+ }
+
+ public virtual string get_dynamic_signal_connect_wrapper_name (DynamicSignal node) {
+ return "";
+ }
+
+ public virtual string get_dynamic_signal_connect_after_wrapper_name (DynamicSignal node) {
+ return "";
+ }
+
+ public virtual string get_dynamic_signal_disconnect_wrapper_name (DynamicSignal node) {
+ return "";
+ }
+
+ public virtual void generate_marshaller (List<FormalParameter> params, DataType return_type, bool dbus = false) {
+ }
+
+ public virtual string get_marshaller_function (List<FormalParameter> params, DataType return_type, string? prefix = null, bool dbus = false) {
+ return "";
+ }
+
+ public virtual string get_array_length_cname (string array_cname, int dim) {
+ return "";
+ }
+
+ public virtual CCodeExpression get_array_length_cexpression (Expression array_expr, int dim = -1) {
+ return new CCodeConstant ("");
+ }
+
+ public virtual string get_array_size_cname (string array_cname) {
+ return "";
+ }
+
+ public virtual CCodeExpression get_array_size_cexpression (Expression array_expr) {
+ return new CCodeConstant ("");
+ }
+
+ public virtual void add_simple_check (CodeNode node, CCodeFragment cfrag, bool always_fails = false) {
+ }
}
// vim:sw=8 noet
using GLib;
public class Vala.CCodeControlFlowModule : CCodeMethodModule {
- public CCodeControlFlowModule (CCodeGenerator codegen, CCodeModule? next) {
- base (codegen, next);
- }
-
public override void visit_if_statement (IfStatement stmt) {
- stmt.true_statement.emit (codegen);
+ stmt.true_statement.emit (this);
if (stmt.false_statement != null) {
- stmt.false_statement.emit (codegen);
+ stmt.false_statement.emit (this);
}
if (stmt.false_statement != null) {
public override void visit_switch_statement (SwitchStatement stmt) {
foreach (SwitchSection section in stmt.get_sections ()) {
- section.emit (codegen);
+ section.emit (this);
}
if (stmt.expression.value_type.compatible (string_type)) {
public override void visit_switch_label (SwitchLabel label) {
if (label.expression != null) {
- label.expression.emit (codegen);
+ label.expression.emit (this);
- codegen.visit_end_full_expression (label.expression);
+ visit_end_full_expression (label.expression);
}
}
public override void visit_loop (Loop stmt) {
- stmt.body.emit (codegen);
+ stmt.body.emit (this);
if (context.profile == Profile.GOBJECT) {
stmt.ccodenode = new CCodeWhileStatement (new CCodeConstant ("TRUE"), (CCodeStatement) stmt.body.ccodenode);
}
public override void visit_foreach_statement (ForeachStatement stmt) {
- stmt.body.emit (codegen);
+ stmt.body.emit (this);
visit_block (stmt);
if (stmt.tree_can_fail && stmt.collection.tree_can_fail) {
// exception handling
cfrag = new CCodeFragment ();
- head.add_simple_check (stmt.collection, cfrag);
+ add_simple_check (stmt.collection, cfrag);
cblock.add_statement (cfrag);
}
if (stmt.collection.value_type is ArrayType) {
array_type = (ArrayType) stmt.collection.value_type;
- var array_len = head.get_array_length_cexpression (stmt.collection);
+ var array_len = get_array_length_cexpression (stmt.collection);
// store array length for use by _vala_array_free
if (current_method != null && current_method.coroutine) {
- closure_struct.add_field ("int", head.get_array_length_cname (collection_backup.name, 1));
- cblock.add_statement (new CCodeExpressionStatement (new CCodeAssignment (get_variable_cexpression (head.get_array_length_cname (collection_backup.name, 1)), array_len)));
+ closure_struct.add_field ("int", get_array_length_cname (collection_backup.name, 1));
+ cblock.add_statement (new CCodeExpressionStatement (new CCodeAssignment (get_variable_cexpression (get_array_length_cname (collection_backup.name, 1)), array_len)));
} else {
var clendecl = new CCodeDeclaration ("int");
- clendecl.add_declarator (new CCodeVariableDeclarator (head.get_array_length_cname (collection_backup.name, 1), array_len));
+ clendecl.add_declarator (new CCodeVariableDeclarator (get_array_length_cname (collection_backup.name, 1), array_len));
cblock.add_statement (clendecl);
}
var inner_array_type = (ArrayType) stmt.type_reference;
for (int dim = 1; dim <= inner_array_type.rank; dim++) {
if (current_method != null && current_method.coroutine) {
- closure_struct.add_field ("int", head.get_array_length_cname (stmt.variable_name, dim));
- cbody.add_statement (new CCodeExpressionStatement (new CCodeAssignment (get_variable_cexpression (head.get_array_length_cname (stmt.variable_name, dim)), new CCodeConstant ("-1"))));
+ closure_struct.add_field ("int", get_array_length_cname (stmt.variable_name, dim));
+ cbody.add_statement (new CCodeExpressionStatement (new CCodeAssignment (get_variable_cexpression (get_array_length_cname (stmt.variable_name, dim)), new CCodeConstant ("-1"))));
} else {
var cdecl = new CCodeDeclaration ("int");
- cdecl.add_declarator (new CCodeVariableDeclarator (head.get_array_length_cname (stmt.variable_name, dim), new CCodeConstant ("-1")));
+ cdecl.add_declarator (new CCodeVariableDeclarator (get_array_length_cname (stmt.variable_name, dim), new CCodeConstant ("-1")));
cbody.add_statement (cdecl);
}
}
* The link between an assignment and generated code.
*/
public class Vala.CCodeDelegateModule : CCodeArrayModule {
- public CCodeDelegateModule (CCodeGenerator codegen, CCodeModule? next) {
- base (codegen, next);
- }
-
public override void generate_delegate_declaration (Delegate d, CCodeDeclarationSpace decl_space) {
if (decl_space.add_symbol_declaration (d, d.get_cname ())) {
return;
}
for (int dim = 1; dim <= array_type.rank; dim++) {
- var cparam = new CCodeFormalParameter (head.get_array_length_cname (get_variable_cname (param.name), dim), length_ctype);
+ var cparam = new CCodeFormalParameter (get_array_length_cname (get_variable_cname (param.name), dim), length_ctype);
cfundecl.add_parameter (cparam);
}
}
var array_type = (ArrayType) d.return_type;
for (int dim = 1; dim <= array_type.rank; dim++) {
- var cparam = new CCodeFormalParameter (head.get_array_length_cname ("result", dim), "int*");
+ var cparam = new CCodeFormalParameter (get_array_length_cname ("result", dim), "int*");
cfundecl.add_parameter (cparam);
}
} else if (d.return_type is DelegateType) {
}
public override void visit_delegate (Delegate d) {
- d.accept_children (codegen);
+ d.accept_children (this);
generate_delegate_declaration (d, source_declarations);
var sig = d.parent_symbol as Signal;
var dynamic_sig = sig as DynamicSignal;
if (dynamic_sig != null) {
- delegate_name = head.get_dynamic_signal_cname (dynamic_sig);
+ delegate_name = get_dynamic_signal_cname (dynamic_sig);
} else if (sig != null) {
delegate_name = sig.parent_symbol.get_lower_case_cprefix () + sig.get_cname ();
} else {
var array_type = (ArrayType) d.return_type;
for (int dim = 1; dim <= array_type.rank; dim++) {
- var cparam = new CCodeFormalParameter (head.get_array_length_cname ("result", dim), "int*");
+ var cparam = new CCodeFormalParameter (get_array_length_cname ("result", dim), "int*");
cparam_map.set (get_param_pos (d.carray_length_parameter_position + 0.01 * dim), cparam);
}
} else if (d.return_type is DelegateType) {
} else if (d_params.get (i).no_array_length) {
clength = new CCodeConstant ("-1");
} else {
- clength = new CCodeIdentifier (head.get_array_length_cname (d_params.get (i).name, dim));
+ clength = new CCodeIdentifier (get_array_length_cname (d_params.get (i).name, dim));
}
carg_map.set (get_param_pos (param.carray_length_parameter_position + 0.01 * dim), clength);
}
if (d.no_array_length) {
clength = new CCodeConstant ("NULL");
} else {
- clength = new CCodeIdentifier (head.get_array_length_cname ("result", dim));
+ clength = new CCodeIdentifier (get_array_length_cname ("result", dim));
}
carg_map.set (get_param_pos (m.carray_length_parameter_position + 0.01 * dim), clength);
}
+++ /dev/null
-/* valaccodegenerator.vala
- *
- * Copyright (C) 2006-2010 Jürg Billeter
- * Copyright (C) 2006-2008 Raffaele Sandrini
- *
- * 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>
- * Raffaele Sandrini <raffaele@sandrini.ch>
- */
-
-using GLib;
-
-/**
- * Code visitor generating C Code.
- */
-public class Vala.CCodeGenerator : CodeGenerator {
- public CCodeModule head;
-
- public CCodeGenerator () {
- }
-
- public override void emit (CodeContext context) {
- if (context.profile == Profile.GOBJECT) {
- /* included by inheritance
- head = new CCodeBaseModule (this, head);
- head = new CCodeStructModule (this, head);
- head = new CCodeMethodModule (this, head);
- head = new CCodeControlFlowModule (this, head);
- head = new CCodeMemberAccessModule (this, head);
- head = new CCodeAssignmentModule (this, head);
- head = new CCodeMethodCallModule (this, head);
- head = new CCodeArrayModule (this, head);
- head = new CCodeDelegateModule (this, head);
- head = new GErrorModule (this, head);
- head = new GTypeModule (this, head);
- head = new GObjectModule (this, head);
- head = new GSignalModule (this, head);
- head = new GAsyncModule (this, head);
- */
- if (context.has_package ("dbus-glib-1")) {
- /*
- head = new DBusModule (this, head);
- head = new DBusClientModule (this, head);
- */
- head = new DBusServerModule (this, head);
- } else {
- /*
- head = new GVariantModule (this, head);
- head = new GDBusClientModule (this, head);
- */
- head = new GDBusServerModule (this, head);
- }
- } else if (context.profile == Profile.DOVA) {
- /* included by inheritance
- head = new DovaBaseModule (this, head);
- head = new DovaStructModule (this, head);
- head = new DovaMethodModule (this, head);
- head = new DovaControlFlowModule (this, head);
- head = new DovaMemberAccessModule (this, head);
- head = new DovaAssignmentModule (this, head);
- head = new DovaMethodCallModule (this, head);
- head = new DovaArrayModule (this, head);
- head = new DovaObjectModule (this, head);
- head = new DovaValueModule (this, head);
- head = new DovaDelegateModule (this, head);
- */
- head = new DovaErrorModule (this, head);
- } else {
- /* included by inheritance
- head = new CCodeBaseModule (this, head);
- head = new CCodeStructModule (this, head);
- head = new CCodeMethodModule (this, head);
- head = new CCodeControlFlowModule (this, head);
- head = new CCodeMemberAccessModule (this, head);
- head = new CCodeAssignmentModule (this, head);
- head = new CCodeMethodCallModule (this, head);
- head = new CCodeArrayModule (this, head);
- */
- head = new CCodeDelegateModule (this, head);
- }
-
- head = add_modules (head);
- head.emit (context);
-
- head = null;
- }
-
- public virtual CCodeModule add_modules (CCodeModule head) {
- return head;
- }
-
- public override void visit_source_file (SourceFile source_file) {
- head.visit_source_file (source_file);
- }
-
- public override void visit_class (Class cl) {
- head.visit_class (cl);
- }
-
- public override void visit_interface (Interface iface) {
- head.visit_interface (iface);
- }
-
- public override void visit_struct (Struct st) {
- head.visit_struct (st);
- }
-
- public override void visit_enum (Enum en) {
- head.visit_enum (en);
- }
-
- public override void visit_error_domain (ErrorDomain edomain) {
- head.visit_error_domain (edomain);
- }
-
- public override void visit_delegate (Delegate d) {
- head.visit_delegate (d);
- }
-
- public override void visit_constant (Constant c) {
- head.visit_constant (c);
- }
-
- public override void visit_field (Field f) {
- head.visit_field (f);
- }
-
- public override void visit_method (Method m) {
- head.visit_method (m);
- }
-
- public override void visit_creation_method (CreationMethod m) {
- head.visit_creation_method (m);
- }
-
- public override void visit_formal_parameter (FormalParameter p) {
- head.visit_formal_parameter (p);
- }
-
- public override void visit_property (Property prop) {
- head.visit_property (prop);
- }
-
- public override void visit_property_accessor (PropertyAccessor acc) {
- head.visit_property_accessor (acc);
- }
-
- public override void visit_signal (Signal sig) {
- head.visit_signal (sig);
- }
-
- public override void visit_constructor (Constructor c) {
- head.visit_constructor (c);
- }
-
- public override void visit_destructor (Destructor d) {
- head.visit_destructor (d);
- }
-
- public override void visit_block (Block b) {
- head.visit_block (b);
- }
-
- public override void visit_empty_statement (EmptyStatement stmt) {
- head.visit_empty_statement (stmt);
- }
-
- public override void visit_declaration_statement (DeclarationStatement stmt) {
- head.visit_declaration_statement (stmt);
- }
-
- public override void visit_local_variable (LocalVariable local) {
- head.visit_local_variable (local);
- }
-
- public override void visit_initializer_list (InitializerList list) {
- head.visit_initializer_list (list);
- }
-
- public override void visit_end_full_expression (Expression expr) {
- head.visit_end_full_expression (expr);
- }
-
- public override void visit_expression_statement (ExpressionStatement stmt) {
- head.visit_expression_statement (stmt);
- }
-
- public override void visit_if_statement (IfStatement stmt) {
- head.visit_if_statement (stmt);
- }
-
- public override void visit_switch_statement (SwitchStatement stmt) {
- head.visit_switch_statement (stmt);
- }
-
- public override void visit_switch_section (SwitchSection section) {
- head.visit_switch_section (section);
- }
-
- public override void visit_switch_label (SwitchLabel label) {
- head.visit_switch_label (label);
- }
-
- public override void visit_loop (Loop stmt) {
- head.visit_loop (stmt);
- }
-
- public override void visit_foreach_statement (ForeachStatement stmt) {
- head.visit_foreach_statement (stmt);
- }
-
- public override void visit_break_statement (BreakStatement stmt) {
- head.visit_break_statement (stmt);
- }
-
- public override void visit_continue_statement (ContinueStatement stmt) {
- head.visit_continue_statement (stmt);
- }
-
- public override void visit_return_statement (ReturnStatement stmt) {
- head.visit_return_statement (stmt);
- }
-
- public override void visit_yield_statement (YieldStatement stmt) {
- head.visit_yield_statement (stmt);
- }
-
- public override void visit_throw_statement (ThrowStatement stmt) {
- head.visit_throw_statement (stmt);
- }
-
- public override void visit_try_statement (TryStatement stmt) {
- head.visit_try_statement (stmt);
- }
-
- public override void visit_catch_clause (CatchClause clause) {
- head.visit_catch_clause (clause);
- }
-
- public override void visit_lock_statement (LockStatement stmt) {
- head.visit_lock_statement (stmt);
- }
-
- public override void visit_unlock_statement (UnlockStatement stmt) {
- head.visit_unlock_statement (stmt);
- }
-
- public override void visit_delete_statement (DeleteStatement stmt) {
- head.visit_delete_statement (stmt);
- }
-
- public override void visit_expression (Expression expr) {
- head.visit_expression (expr);
- }
-
- public override void visit_array_creation_expression (ArrayCreationExpression expr) {
- head.visit_array_creation_expression (expr);
- }
-
- public override void visit_boolean_literal (BooleanLiteral expr) {
- head.visit_boolean_literal (expr);
- }
-
- public override void visit_character_literal (CharacterLiteral expr) {
- head.visit_character_literal (expr);
- }
-
- public override void visit_integer_literal (IntegerLiteral expr) {
- head.visit_integer_literal (expr);
- }
-
- public override void visit_real_literal (RealLiteral expr) {
- head.visit_real_literal (expr);
- }
-
- public override void visit_string_literal (StringLiteral expr) {
- head.visit_string_literal (expr);
- }
-
- public override void visit_list_literal (ListLiteral expr) {
- head.visit_list_literal (expr);
- }
-
- public override void visit_set_literal (SetLiteral expr) {
- head.visit_set_literal (expr);
- }
-
- public override void visit_map_literal (MapLiteral expr) {
- head.visit_map_literal (expr);
- }
-
- public override void visit_tuple (Tuple expr) {
- head.visit_tuple (expr);
- }
-
- public override void visit_regex_literal (RegexLiteral expr) {
- head.visit_regex_literal (expr);
- }
-
-
- public override void visit_null_literal (NullLiteral expr) {
- head.visit_null_literal (expr);
- }
-
- public override void visit_member_access (MemberAccess expr) {
- head.visit_member_access (expr);
- }
-
- public override void visit_method_call (MethodCall expr) {
- head.visit_method_call (expr);
- }
-
- public override void visit_element_access (ElementAccess expr) {
- head.visit_element_access (expr);
- }
-
- public override void visit_slice_expression (SliceExpression expr) {
- head.visit_slice_expression (expr);
- }
-
- public override void visit_base_access (BaseAccess expr) {
- head.visit_base_access (expr);
- }
-
- public override void visit_postfix_expression (PostfixExpression expr) {
- head.visit_postfix_expression (expr);
- }
-
- public override void visit_object_creation_expression (ObjectCreationExpression expr) {
- head.visit_object_creation_expression (expr);
- }
-
- public override void visit_sizeof_expression (SizeofExpression expr) {
- head.visit_sizeof_expression (expr);
- }
-
- public override void visit_typeof_expression (TypeofExpression expr) {
- head.visit_typeof_expression (expr);
- }
-
- public override void visit_unary_expression (UnaryExpression expr) {
- head.visit_unary_expression (expr);
- }
-
- public override void visit_cast_expression (CastExpression expr) {
- head.visit_cast_expression (expr);
- }
-
- public override void visit_named_argument (NamedArgument expr) {
- head.visit_named_argument (expr);
- }
-
- public override void visit_pointer_indirection (PointerIndirection expr) {
- head.visit_pointer_indirection (expr);
- }
-
- public override void visit_addressof_expression (AddressofExpression expr) {
- head.visit_addressof_expression (expr);
- }
-
- public override void visit_reference_transfer_expression (ReferenceTransferExpression expr) {
- head.visit_reference_transfer_expression (expr);
- }
-
- public override void visit_binary_expression (BinaryExpression expr) {
- head.visit_binary_expression (expr);
- }
-
- public override void visit_type_check (TypeCheck expr) {
- head.visit_type_check (expr);
- }
-
- public override void visit_lambda_expression (LambdaExpression l) {
- head.visit_lambda_expression (l);
- }
-
- public override void visit_assignment (Assignment a) {
- head.visit_assignment (a);
- }
-}
* Raffaele Sandrini <raffaele@sandrini.ch>
*/
-using GLib;
-
public class Vala.CCodeMemberAccessModule : CCodeControlFlowModule {
- public CCodeMemberAccessModule (CCodeGenerator codegen, CCodeModule? next) {
- base (codegen, next);
- }
-
public override void visit_member_access (MemberAccess expr) {
CCodeExpression pub_inst = null;
}
if (m.base_method != null) {
- if (!head.method_has_wrapper (m.base_method)) {
+ if (!method_has_wrapper (m.base_method)) {
var inst = pub_inst;
if (expr.inner != null && !expr.inner.is_pure ()) {
// instance expression has side-effects
if (expr.value_type is ArrayType && !(expr.parent_node is ElementAccess)) {
Report.error (expr.source_reference, "unsupported use of length field of multi-dimensional array");
}
- expr.ccodenode = head.get_array_length_cexpression (expr.inner, 1);
+ expr.ccodenode = get_array_length_cexpression (expr.inner, 1);
} else if (expr.symbol_reference is Field) {
var f = (Field) expr.symbol_reference;
if (f.binding == MemberBinding.INSTANCE) {
}
string getter_cname;
if (prop is DynamicProperty) {
- getter_cname = head.get_dynamic_property_getter_cname ((DynamicProperty) prop);
+ getter_cname = get_dynamic_property_getter_cname ((DynamicProperty) prop);
} else {
getter_cname = base_property.get_accessor.get_cname ();
}
using GLib;
public class Vala.CCodeMethodCallModule : CCodeAssignmentModule {
- public CCodeMethodCallModule (CCodeGenerator codegen, CCodeModule? next) {
- base (codegen, next);
- }
-
public override void visit_method_call (MethodCall expr) {
// the bare function call
var ccall = new CCodeFunctionCall ((CCodeExpression) expr.call.ccodenode);
param_nr++;
}
foreach (FormalParameter param in m.get_parameters ()) {
- param.accept (codegen);
+ param.accept (this);
}
- head.generate_dynamic_method_wrapper ((DynamicMethod) m);
+ generate_dynamic_method_wrapper ((DynamicMethod) m);
} else if (m is CreationMethod && context.profile == Profile.GOBJECT && m.parent_symbol is Class) {
ccall_expr = new CCodeAssignment (new CCodeIdentifier ("self"), new CCodeCastExpression (ccall, current_class.get_cname () + "*"));
}
comma.append_expression (ccall_expr);
- comma.append_expression (new CCodeAssignment (get_variable_cexpression (head.get_array_length_cname (((UnaryExpression) arg).inner.to_string (), dim)), new CCodeCastExpression (get_variable_cexpression (temp_array_length.name), int_type.get_cname ())));
+ comma.append_expression (new CCodeAssignment (get_variable_cexpression (get_array_length_cname (((UnaryExpression) arg).inner.to_string (), dim)), new CCodeCastExpression (get_variable_cexpression (temp_array_length.name), int_type.get_cname ())));
if (temp_result != null) {
comma.append_expression (get_variable_cexpression (temp_result.name));
}
ccall_expr = comma;
} else {
- array_length_expr = new CCodeCastExpression (head.get_array_length_cexpression (arg, dim), param.array_length_type);
+ array_length_expr = new CCodeCastExpression (get_array_length_cexpression (arg, dim), param.array_length_type);
}
} else {
- array_length_expr = head.get_array_length_cexpression (arg, dim);
+ array_length_expr = get_array_length_cexpression (arg, dim);
}
carg_map.set (get_param_pos (param.carray_length_parameter_position + 0.01 * dim), array_length_expr);
}
/* memset needs string.h */
source_declarations.add_include ("string.h");
- var clen = head.get_array_length_cexpression (ma.inner, 1);
+ var clen = get_array_length_cexpression (ma.inner, 1);
var celems = (CCodeExpression) ma.inner.ccodenode;
var array_type = (ArrayType) ma.inner.value_type;
var csizeof = new CCodeIdentifier ("sizeof (%s)".printf (array_type.element_type.get_cname ()));
ccomma.append_expression (new CCodeAssignment (temp_ref, new_size));
ccomma.append_expression ((CCodeExpression) expr.ccodenode);
ccomma.append_expression (new CCodeConditionalExpression (ccheck, czero, new CCodeConstant ("NULL")));
- ccomma.append_expression (new CCodeAssignment (head.get_array_length_cexpression (ma.inner, 1), temp_ref));
+ ccomma.append_expression (new CCodeAssignment (get_array_length_cexpression (ma.inner, 1), temp_ref));
expr.ccodenode = ccomma;
}
* The link between a method and generated code.
*/
public class Vala.CCodeMethodModule : CCodeStructModule {
- public CCodeMethodModule (CCodeGenerator codegen, CCodeModule? next) {
- base (codegen, next);
- }
-
public override bool method_has_wrapper (Method method) {
return (method.get_attribute ("NoWrapper") == null);
}
var array_type = (ArrayType) m.return_type;
for (int dim = 1; dim <= array_type.rank; dim++) {
- var cparam = new CCodeFormalParameter (head.get_array_length_cname ("result", dim), "int*");
+ var cparam = new CCodeFormalParameter (get_array_length_cname ("result", dim), "int*");
cparam_map.set (get_param_pos (m.carray_length_parameter_position + 0.01 * dim), cparam);
if (carg_map != null) {
carg_map.set (get_param_pos (m.carray_length_parameter_position + 0.01 * dim), get_variable_cexpression (cparam.name));
foreach (FormalParameter param in m.get_parameters ()) {
- param.accept (codegen);
+ param.accept (this);
}
if (m.result_var != null) {
- m.result_var.accept (codegen);
+ m.result_var.accept (this);
}
foreach (Expression precondition in m.get_preconditions ()) {
- precondition.emit (codegen);
+ precondition.emit (this);
}
foreach (Expression postcondition in m.get_postconditions ()) {
- postcondition.emit (codegen);
+ postcondition.emit (this);
}
if (m.body != null) {
- m.body.emit (codegen);
+ m.body.emit (this);
}
public override void visit_creation_method (CreationMethod m) {
bool visible = !m.is_private_symbol ();
- head.visit_method (m);
+ visit_method (m);
DataType creturn_type;
if (current_type_symbol is Class) {
+++ /dev/null
-/* valaccodemodule.vala
- *
- * Copyright (C) 2008-2009 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>
- */
-
-
-/**
- * Code visitor generating C Code.
- */
-public abstract class Vala.CCodeModule {
- public weak CCodeGenerator codegen { get; private set; }
-
- public CCodeModule head {
- get { return _head; }
- private set {
- _head = value;
- // propagate head property to all modules
- if (next != null) {
- next.head = value;
- }
- }
- }
-
- weak CCodeModule _head;
- CCodeModule? next;
-
- public CCodeModule (CCodeGenerator codegen, CCodeModule? next) {
- this.codegen = codegen;
- this.next = next;
- this.head = this;
- }
-
- public virtual void emit (CodeContext context) {
- next.emit (context);
- }
-
- public virtual void visit_source_file (SourceFile source_file) {
- next.visit_source_file (source_file);
- }
-
- public virtual void visit_class (Class cl) {
- next.visit_class (cl);
- }
-
- public virtual void visit_interface (Interface iface) {
- next.visit_interface (iface);
- }
-
- public virtual void visit_struct (Struct st) {
- next.visit_struct (st);
- }
-
- public virtual void visit_enum (Enum en) {
- next.visit_enum (en);
- }
-
- public virtual void visit_error_domain (ErrorDomain edomain) {
- next.visit_error_domain (edomain);
- }
-
- public virtual void visit_delegate (Delegate d) {
- next.visit_delegate (d);
- }
-
- public virtual void visit_member (Symbol m) {
- next.visit_member (m);
- }
-
- public virtual void visit_constant (Constant c) {
- next.visit_constant (c);
- }
-
- public virtual void visit_field (Field f) {
- next.visit_field (f);
- }
-
- public virtual void visit_method (Method m) {
- next.visit_method (m);
- }
-
- public virtual void visit_creation_method (CreationMethod m) {
- next.visit_creation_method (m);
- }
-
- public virtual void visit_formal_parameter (FormalParameter p) {
- next.visit_formal_parameter (p);
- }
-
- public virtual void visit_property (Property prop) {
- next.visit_property (prop);
- }
-
- public virtual void visit_property_accessor (PropertyAccessor acc) {
- next.visit_property_accessor (acc);
- }
-
- public virtual void visit_signal (Signal sig) {
- next.visit_signal (sig);
- }
-
- public virtual void visit_constructor (Constructor c) {
- next.visit_constructor (c);
- }
-
- public virtual void visit_destructor (Destructor d) {
- next.visit_destructor (d);
- }
-
- public virtual void visit_block (Block b) {
- next.visit_block (b);
- }
-
- public virtual void visit_empty_statement (EmptyStatement stmt) {
- next.visit_empty_statement (stmt);
- }
-
- public virtual void visit_declaration_statement (DeclarationStatement stmt) {
- next.visit_declaration_statement (stmt);
- }
-
- public virtual void visit_local_variable (LocalVariable local) {
- next.visit_local_variable (local);
- }
-
- public virtual void visit_initializer_list (InitializerList list) {
- next.visit_initializer_list (list);
- }
-
- public virtual void visit_end_full_expression (Expression expr) {
- next.visit_end_full_expression (expr);
- }
-
- public virtual void visit_expression_statement (ExpressionStatement stmt) {
- next.visit_expression_statement (stmt);
- }
-
- public virtual void visit_if_statement (IfStatement stmt) {
- next.visit_if_statement (stmt);
- }
-
- public virtual void visit_switch_statement (SwitchStatement stmt) {
- next.visit_switch_statement (stmt);
- }
-
- public virtual void visit_switch_section (SwitchSection section) {
- next.visit_switch_section (section);
- }
-
- public virtual void visit_switch_label (SwitchLabel label) {
- next.visit_switch_label (label);
- }
-
- public virtual void visit_loop (Loop stmt) {
- next.visit_loop (stmt);
- }
-
- public virtual void visit_foreach_statement (ForeachStatement stmt) {
- next.visit_foreach_statement (stmt);
- }
-
- public virtual void visit_break_statement (BreakStatement stmt) {
- next.visit_break_statement (stmt);
- }
-
- public virtual void visit_continue_statement (ContinueStatement stmt) {
- next.visit_continue_statement (stmt);
- }
-
- public virtual void visit_return_statement (ReturnStatement stmt) {
- next.visit_return_statement (stmt);
- }
-
- public virtual void visit_yield_statement (YieldStatement stmt) {
- next.visit_yield_statement (stmt);
- }
-
- public virtual void visit_throw_statement (ThrowStatement stmt) {
- next.visit_throw_statement (stmt);
- }
-
- public virtual void visit_try_statement (TryStatement stmt) {
- next.visit_try_statement (stmt);
- }
-
- public virtual void visit_catch_clause (CatchClause clause) {
- next.visit_catch_clause (clause);
- }
-
- public virtual void visit_lock_statement (LockStatement stmt) {
- next.visit_lock_statement (stmt);
- }
-
- public virtual void visit_unlock_statement (UnlockStatement stmt) {
- next.visit_unlock_statement (stmt);
- }
-
- public virtual void visit_delete_statement (DeleteStatement stmt) {
- next.visit_delete_statement (stmt);
- }
-
- public virtual void visit_expression (Expression expr) {
- next.visit_expression (expr);
- }
-
- public virtual void visit_array_creation_expression (ArrayCreationExpression expr) {
- next.visit_array_creation_expression (expr);
- }
-
- public virtual void visit_boolean_literal (BooleanLiteral expr) {
- next.visit_boolean_literal (expr);
- }
-
- public virtual void visit_character_literal (CharacterLiteral expr) {
- next.visit_character_literal (expr);
- }
-
- public virtual void visit_integer_literal (IntegerLiteral expr) {
- next.visit_integer_literal (expr);
- }
-
- public virtual void visit_real_literal (RealLiteral expr) {
- next.visit_real_literal (expr);
- }
-
- public virtual void visit_string_literal (StringLiteral expr) {
- next.visit_string_literal (expr);
- }
-
- public virtual void visit_list_literal (ListLiteral expr) {
- next.visit_list_literal (expr);
- }
-
- public virtual void visit_set_literal (SetLiteral expr) {
- next.visit_set_literal (expr);
- }
-
- public virtual void visit_map_literal (MapLiteral expr) {
- next.visit_map_literal (expr);
- }
-
- public virtual void visit_tuple (Tuple expr) {
- next.visit_tuple (expr);
- }
-
- public virtual void visit_regex_literal (RegexLiteral re) {
- next.visit_regex_literal (re);
- }
-
- public virtual void visit_null_literal (NullLiteral expr) {
- next.visit_null_literal (expr);
- }
-
- public virtual void visit_member_access (MemberAccess expr) {
- next.visit_member_access (expr);
- }
-
- public virtual void visit_method_call (MethodCall expr) {
- next.visit_method_call (expr);
- }
-
- public virtual void visit_element_access (ElementAccess expr) {
- next.visit_element_access (expr);
- }
-
- public virtual void visit_slice_expression (SliceExpression expr) {
- next.visit_slice_expression (expr);
- }
-
- public virtual void visit_base_access (BaseAccess expr) {
- next.visit_base_access (expr);
- }
-
- public virtual void visit_postfix_expression (PostfixExpression expr) {
- next.visit_postfix_expression (expr);
- }
-
- public virtual void visit_object_creation_expression (ObjectCreationExpression expr) {
- next.visit_object_creation_expression (expr);
- }
-
- public virtual void visit_sizeof_expression (SizeofExpression expr) {
- next.visit_sizeof_expression (expr);
- }
-
- public virtual void visit_typeof_expression (TypeofExpression expr) {
- next.visit_typeof_expression (expr);
- }
-
- public virtual void visit_unary_expression (UnaryExpression expr) {
- next.visit_unary_expression (expr);
- }
-
- public virtual void visit_cast_expression (CastExpression expr) {
- next.visit_cast_expression (expr);
- }
-
- public virtual void visit_named_argument (NamedArgument expr) {
- next.visit_named_argument (expr);
- }
-
- public virtual void visit_pointer_indirection (PointerIndirection expr) {
- next.visit_pointer_indirection (expr);
- }
-
- public virtual void visit_addressof_expression (AddressofExpression expr) {
- next.visit_addressof_expression (expr);
- }
-
- public virtual void visit_reference_transfer_expression (ReferenceTransferExpression expr) {
- next.visit_reference_transfer_expression (expr);
- }
-
- public virtual void visit_binary_expression (BinaryExpression expr) {
- next.visit_binary_expression (expr);
- }
-
- public virtual void visit_type_check (TypeCheck expr) {
- next.visit_type_check (expr);
- }
-
- public virtual void visit_lambda_expression (LambdaExpression l) {
- next.visit_lambda_expression (l);
- }
-
- public virtual void visit_assignment (Assignment a) {
- next.visit_assignment (a);
- }
-
- public virtual string? get_custom_creturn_type (Method m) {
- return next.get_custom_creturn_type (m);
- }
-
- public virtual void generate_dynamic_method_wrapper (DynamicMethod method) {
- next.generate_dynamic_method_wrapper (method);
- }
-
- public virtual bool method_has_wrapper (Method method) {
- return next.method_has_wrapper (method);
- }
-
- public virtual CCodeIdentifier get_value_setter_function (DataType type_reference) {
- return next.get_value_setter_function (type_reference);
- }
-
- public virtual CCodeIdentifier get_value_taker_function (DataType type_reference) {
- return next.get_value_taker_function (type_reference);
- }
-
- public virtual CCodeExpression get_construct_property_assignment (CCodeConstant canonical_cconstant, DataType property_type, CCodeExpression value) {
- return next.get_construct_property_assignment (canonical_cconstant, property_type, value);
- }
-
- public virtual CCodeFunctionCall get_param_spec (Property prop) {
- return next.get_param_spec (prop);
- }
-
- public virtual CCodeFunctionCall get_signal_creation (Signal sig, TypeSymbol type) {
- return next.get_signal_creation (sig, type);
- }
-
- public virtual CCodeFragment register_dbus_info (ObjectTypeSymbol bindable) {
- return next.register_dbus_info (bindable);
- }
-
- public virtual string get_dynamic_property_getter_cname (DynamicProperty node) {
- if (next == null) {
- Report.error (node.source_reference, "dynamic properties are not supported for %s".printf (node.dynamic_type.to_string ()));
- return "";
- }
- return next.get_dynamic_property_getter_cname (node);
- }
-
- public virtual string get_dynamic_property_setter_cname (DynamicProperty node) {
- if (next == null) {
- Report.error (node.source_reference, "dynamic properties are not supported for %s".printf (node.dynamic_type.to_string ()));
- return "";
- }
- return next.get_dynamic_property_setter_cname (node);
- }
-
- public virtual string get_dynamic_signal_cname (DynamicSignal node) {
- return next.get_dynamic_signal_cname (node);
- }
-
- public virtual string get_dynamic_signal_connect_wrapper_name (DynamicSignal node) {
- return next.get_dynamic_signal_connect_wrapper_name (node);
- }
-
- public virtual string get_dynamic_signal_connect_after_wrapper_name (DynamicSignal node) {
- return next.get_dynamic_signal_connect_after_wrapper_name (node);
- }
-
- public virtual string get_dynamic_signal_disconnect_wrapper_name (DynamicSignal node) {
- return next.get_dynamic_signal_disconnect_wrapper_name (node);
- }
-
- public virtual void generate_marshaller (List<FormalParameter> params, DataType return_type, bool dbus = false) {
- next.generate_marshaller (params, return_type, dbus);
- }
-
- public virtual string get_marshaller_function (List<FormalParameter> params, DataType return_type, string? prefix = null, bool dbus = false) {
- return next.get_marshaller_function (params, return_type, prefix, dbus);
- }
-
- public virtual string get_array_length_cname (string array_cname, int dim) {
- return next.get_array_length_cname (array_cname, dim);
- }
-
- public virtual CCodeExpression get_array_length_cexpression (Expression array_expr, int dim = -1) {
- return next.get_array_length_cexpression (array_expr, dim);
- }
-
- public virtual string get_array_size_cname (string array_cname) {
- return next.get_array_size_cname (array_cname);
- }
-
- public virtual CCodeExpression get_array_size_cexpression (Expression array_expr) {
- return next.get_array_size_cexpression (array_expr);
- }
-
- public virtual void add_simple_check (CodeNode node, CCodeFragment cfrag, bool always_fails = false) {
- next.add_simple_check (node, cfrag, always_fails);
- }
-}
using GLib;
public class Vala.CCodeStructModule : CCodeBaseModule {
- public CCodeStructModule (CCodeGenerator codegen, CCodeModule? next) {
- base (codegen, next);
- }
-
public override void generate_struct_declaration (Struct st, CCodeDeclarationSpace decl_space) {
if (decl_space.add_symbol_declaration (st, st.get_cname ())) {
return;
var len_type = int_type.copy ();
for (int dim = 1; dim <= array_type.rank; dim++) {
- instance_struct.add_field (len_type.get_cname (), head.get_array_length_cname (f.name, dim));
+ instance_struct.add_field (len_type.get_cname (), get_array_length_cname (f.name, dim));
}
if (array_type.rank == 1 && f.is_internal_symbol ()) {
- instance_struct.add_field (len_type.get_cname (), head.get_array_size_cname (f.name));
+ instance_struct.add_field (len_type.get_cname (), get_array_size_cname (f.name));
}
}
} else if (f.variable_type is DelegateType) {
generate_struct_declaration (st, internal_header_declarations);
}
- st.accept_children (codegen);
+ st.accept_children (this);
if (context.profile == Profile.GOBJECT && !st.is_boolean_type () && !st.is_integer_type () && !st.is_floating_type ()) {
if (st.is_disposable ()) {
public class Vala.DBusClientModule : DBusModule {
int dynamic_property_id;
- public DBusClientModule (CCodeGenerator codegen, CCodeModule? next) {
- base (codegen, next);
- }
-
string get_dynamic_dbus_name (string vala_name) {
// TODO switch default to no transformation as soon as we have static D-Bus client support
// keep transformation by default for static D-Bus client and server support
cdecl = new CCodeDeclaration ("GPtrArray*");
array_construct = new CCodeFunctionCall (new CCodeIdentifier ("g_ptr_array_sized_new"));
- array_construct.add_argument (new CCodeIdentifier (head.get_array_length_cname (param.name, 1)));
+ array_construct.add_argument (new CCodeIdentifier (get_array_length_cname (param.name, 1)));
} else {
cdecl = new CCodeDeclaration ("GArray*");
var memcpy_call = new CCodeFunctionCall (new CCodeIdentifier ("memcpy"));
memcpy_call.add_argument (new CCodeMemberAccess.pointer (new CCodeIdentifier ("dbus_%s".printf (param.name)), "pdata"));
memcpy_call.add_argument (new CCodeIdentifier (param.name));
- memcpy_call.add_argument (new CCodeBinaryExpression (CCodeBinaryOperator.MUL, new CCodeIdentifier (head.get_array_length_cname (param.name, 1)), sizeof_call));
+ memcpy_call.add_argument (new CCodeBinaryExpression (CCodeBinaryOperator.MUL, new CCodeIdentifier (get_array_length_cname (param.name, 1)), sizeof_call));
block.add_statement (new CCodeExpressionStatement (memcpy_call));
- var len_assignment = new CCodeAssignment (new CCodeMemberAccess.pointer (new CCodeIdentifier ("dbus_%s".printf (param.name)), "len"), new CCodeIdentifier (head.get_array_length_cname (param.name, 1)));
+ var len_assignment = new CCodeAssignment (new CCodeMemberAccess.pointer (new CCodeIdentifier ("dbus_%s".printf (param.name)), "len"), new CCodeIdentifier (get_array_length_cname (param.name, 1)));
block.add_statement (new CCodeExpressionStatement (len_assignment));
} else {
var cappend_call = new CCodeFunctionCall (new CCodeIdentifier ("g_array_append_vals"));
cappend_call.add_argument (new CCodeIdentifier ("dbus_%s".printf (param.name)));
cappend_call.add_argument (new CCodeIdentifier (param.name));
- cappend_call.add_argument (new CCodeIdentifier (head.get_array_length_cname (param.name, 1)));
+ cappend_call.add_argument (new CCodeIdentifier (get_array_length_cname (param.name, 1)));
block.add_statement (new CCodeExpressionStatement (cappend_call));
}
void generate_dbus_connect_wrapper (DynamicSignal sig, CCodeBlock block) {
var m = (Method) sig.handler.symbol_reference;
- sig.accept (codegen);
+ sig.accept (this);
// FIXME should only be done once per marshaller
var register_call = new CCodeFunctionCall (new CCodeIdentifier ("dbus_g_object_register_marshaller"));
- head.generate_marshaller (sig.get_parameters (), sig.return_type, true);
- register_call.add_argument (new CCodeIdentifier (head.get_marshaller_function (sig.get_parameters (), sig.return_type, null, true)));
+ generate_marshaller (sig.get_parameters (), sig.return_type, true);
+ register_call.add_argument (new CCodeIdentifier (get_marshaller_function (sig.get_parameters (), sig.return_type, null, true)));
register_call.add_argument (new CCodeIdentifier ("G_TYPE_NONE"));
var add_call = new CCodeFunctionCall (new CCodeIdentifier ("dbus_g_proxy_add_signal"));
Expression object_path = args.get (1);
var ccall = new CCodeFunctionCall (new CCodeIdentifier (type.type_symbol.get_lower_case_cprefix () + "dbus_proxy_new"));
- connection.emit (codegen);
+ connection.emit (this);
ccall.add_argument ((CCodeExpression) connection.ccodenode);
- bus_name.emit (codegen);
+ bus_name.emit (this);
ccall.add_argument ((CCodeExpression) bus_name.ccodenode);
- object_path.emit (codegen);
+ object_path.emit (this);
ccall.add_argument ((CCodeExpression) object_path.ccodenode);
expr.ccodenode = ccall;
}
if (proxy_get_all) {
var ma = expr.call as MemberAccess;
var instance = ma.inner;
- instance.emit (codegen);
+ instance.emit (this);
var args = expr.get_argument_list ();
Expression interface_name = args.get (0);
- interface_name.emit (codegen);
+ interface_name.emit (this);
var ccall = new CCodeFunctionCall (new CCodeIdentifier (generate_get_all_function (mtype.method_symbol)));
ccall.add_argument ((CCodeExpression) instance.ccodenode);
quark_call.add_argument (new CCodeConstant ("\"ValaDBusInterfaceProxyType\""));
var qdata_call = new CCodeFunctionCall (new CCodeIdentifier ("g_type_get_qdata"));
- type.emit (codegen);
+ type.emit (this);
qdata_call.add_argument ((CCodeExpression) type.ccodenode);
qdata_call.add_argument (quark_call);
var ccall = new CCodeFunctionCall (new CCodeIdentifier ("g_object_new"));
ccall.add_argument (get_type_call);
ccall.add_argument (new CCodeConstant ("\"connection\""));
- connection.emit (codegen);
+ connection.emit (this);
ccall.add_argument ((CCodeExpression) connection.ccodenode);
ccall.add_argument (new CCodeConstant ("\"name\""));
- bus_name.emit (codegen);
+ bus_name.emit (this);
ccall.add_argument ((CCodeExpression) bus_name.ccodenode);
ccall.add_argument (new CCodeConstant ("\"path\""));
- object_path.emit (codegen);
+ object_path.emit (this);
ccall.add_argument ((CCodeExpression) object_path.ccodenode);
ccall.add_argument (new CCodeConstant ("\"interface\""));
- interface_name.emit (codegen);
+ interface_name.emit (this);
ccall.add_argument ((CCodeExpression) interface_name.ccodenode);
ccall.add_argument (new CCodeConstant ("NULL"));
expr.ccodenode = ccall;
{ "g", "SIGNATURE", "const char*", "G_TYPE_STRING", null, "g_value_take_string" }
};
- public DBusModule (CCodeGenerator codegen, CCodeModule? next) {
- base (codegen, next);
- }
-
static bool is_string_marshalled_enum (TypeSymbol? symbol) {
if (symbol != null && symbol is Enum) {
var dbus = symbol.get_attribute ("DBus");
* The link between a dynamic method and generated code.
*/
public class Vala.DBusServerModule : DBusClientModule {
- public DBusServerModule (CCodeGenerator codegen, CCodeModule? next) {
- base (codegen, next);
- }
-
public static bool is_dbus_visible (CodeNode node) {
var dbus_attribute = node.get_attribute ("DBus");
if (dbus_attribute != null
if (param.variable_type is ArrayType) {
var array_type = (ArrayType) param.variable_type;
for (int dim = 1; dim <= array_type.rank; dim++) {
- function.add_parameter (new CCodeFormalParameter (head.get_array_length_cname (param.name, dim), "int"));
+ function.add_parameter (new CCodeFormalParameter (get_array_length_cname (param.name, dim), "int"));
}
}
}
if (array_type != null) {
for (int dim = 1; dim <= array_type.rank; dim++) {
cdecl = new CCodeDeclaration ("int");
- cdecl.add_declarator (new CCodeVariableDeclarator (head.get_array_length_cname ("value", dim)));
+ cdecl.add_declarator (new CCodeVariableDeclarator (get_array_length_cname ("value", dim)));
prefragment.append (cdecl);
- ccall.add_argument (new CCodeIdentifier (head.get_array_length_cname ("value", dim)));
+ ccall.add_argument (new CCodeIdentifier (get_array_length_cname ("value", dim)));
}
}
}
* Jürg Billeter <j@bitron.ch>
*/
-internal class Vala.DovaArrayModule : DovaMethodCallModule {
- public DovaArrayModule (CCodeGenerator codegen, CCodeModule? next) {
- base (codegen, next);
- }
-
+public class Vala.DovaArrayModule : DovaMethodCallModule {
void append_initializer_list (CCodeCommaExpression ce, CCodeExpression name_cnode, InitializerList initializer_list, ref int i) {
foreach (Expression e in initializer_list.get_initializers ()) {
ce.append_expression (new CCodeAssignment (new CCodeElementAccess (name_cnode, new CCodeConstant (i.to_string ())), (CCodeExpression) e.ccodenode));
/**
* The link between an assignment and generated code.
*/
-internal class Vala.DovaAssignmentModule : DovaMemberAccessModule {
- public DovaAssignmentModule (CCodeGenerator codegen, CCodeModule? next) {
- base (codegen, next);
- }
-
+public class Vala.DovaAssignmentModule : DovaMemberAccessModule {
CCodeExpression emit_property_assignment (Assignment assignment) {
var ma = assignment.left as MemberAccess;
/**
* Code visitor generating C Code.
*/
-internal class Vala.DovaBaseModule : CCodeModule {
+public class Vala.DovaBaseModule : CodeGenerator {
public CodeContext context { get; set; }
public Symbol root_symbol;
public Map<string,string> variable_name_map = new HashMap<string,string> (str_hash, str_equal);
- public DovaBaseModule (CCodeGenerator codegen, CCodeModule? next) {
- base (codegen, next);
-
+ public DovaBaseModule () {
reserved_identifiers = new HashSet<string> (str_hash, str_equal);
// C99 keywords
var source_files = context.get_source_files ();
foreach (SourceFile file in source_files) {
if (!file.external_package) {
- file.accept (codegen);
+ file.accept (this);
}
}
writer.close ();
}
- source_file.accept_children (codegen);
+ source_file.accept_children (this);
if (context.report.get_errors () > 0) {
return;
if (ev.value == null) {
cenum.add_value (new CCodeEnumValue (ev.get_cname ()));
} else {
- ev.value.emit (codegen);
+ ev.value.emit (this);
cenum.add_value (new CCodeEnumValue (ev.get_cname (), (CCodeExpression) ev.value.ccodenode));
}
}
}
public override void visit_enum (Enum en) {
- en.accept_children (codegen);
+ en.accept_children (this);
generate_enum_declaration (en, source_declarations);
}
if (!c.external) {
- c.value.emit (codegen);
+ c.value.emit (this);
if (c.value is InitializerList) {
var cdecl = new CCodeDeclaration (c.type_reference.get_const_cname ());
public override void visit_field (Field f) {
if (f.initializer != null) {
- f.initializer.emit (codegen);
+ f.initializer.emit (this);
}
var cl = f.parent_symbol as Class;
temp_ref_vars = new ArrayList<LocalVariable> ();
variable_name_map = new HashMap<string,string> (str_hash, str_equal);
- prop.accept_children (codegen);
+ prop.accept_children (this);
next_temp_var_id = old_next_temp_var_id;
temp_vars = old_temp_vars;
}
public override void visit_destructor (Destructor d) {
- d.body.emit (codegen);
+ d.body.emit (this);
CCodeFragment cfrag = new CCodeFragment ();
}
public override void visit_block (Block b) {
- var old_symbol = current_symbol;
- current_symbol = b;
+ emit_context.push_symbol (b);
foreach (Statement stmt in b.get_statements ()) {
- stmt.emit (codegen);
+ stmt.emit (this);
}
var local_vars = b.get_local_variables ();
b.ccodenode = cblock;
- current_symbol = old_symbol;
+ emit_context.pop_symbol ();
}
public override void visit_empty_statement (EmptyStatement stmt) {
}
public override void visit_declaration_statement (DeclarationStatement stmt) {
- stmt.declaration.accept (codegen);
+ stmt.declaration.accept (this);
stmt.ccodenode = stmt.declaration.ccodenode;
public override void visit_local_variable (LocalVariable local) {
if (local.initializer != null) {
- local.initializer.emit (codegen);
+ local.initializer.emit (this);
visit_end_full_expression (local.initializer);
}
}
if (local.initializer != null && local.initializer.tree_can_fail) {
- head.add_simple_check (local.initializer, cfrag);
+ add_simple_check (local.initializer, cfrag);
}
local.ccodenode = cfrag;
cfrag.append (stmt.ccodenode);
- head.add_simple_check (stmt.expression, cfrag);
+ add_simple_check (stmt.expression, cfrag);
stmt.ccodenode = cfrag;
}
/* evaluate default expression here as the code
* generator might not have visited the formal
* parameter yet */
- param.initializer.emit (codegen);
+ param.initializer.emit (this);
creation_call.add_argument ((CCodeExpression) param.initializer.ccodenode);
i++;
// cast the return value of the creation method back to the intended type if
// it requested a special C return type
- if (head.get_custom_creturn_type (m) != null) {
+ if (get_custom_creturn_type (m) != null) {
creation_expr = new CCodeCastExpression (creation_expr, expr.type_reference.get_cname ());
}
} else {
temp_vars = new ArrayList<LocalVariable> ();
temp_ref_vars = new ArrayList<LocalVariable> ();
- l.accept_children (codegen);
+ l.accept_children (this);
temp_vars = old_temp_vars;
temp_ref_vars = old_temp_ref_vars;
base_property = prop.base_interface_property;
}
- if (prop is DynamicProperty) {
- set_func = head.get_dynamic_property_setter_cname ((DynamicProperty) prop);
- } else {
- generate_property_accessor_declaration (base_property.set_accessor, source_declarations);
- set_func = base_property.set_accessor.get_cname ();
- }
+ generate_property_accessor_declaration (base_property.set_accessor, source_declarations);
+ set_func = base_property.set_accessor.get_cname ();
var ccall = new CCodeFunctionCall (new CCodeIdentifier (set_func));
public CCodeNode? get_ccodenode (CodeNode node) {
if (node.ccodenode == null) {
- node.emit (codegen);
+ node.emit (this);
}
return node.ccodenode;
}
- public override void visit_class (Class cl) {
- }
-
public DataType? get_this_type () {
if (current_method != null && current_method.binding == MemberBinding.INSTANCE) {
return current_method.this_parameter.variable_type;
public CCodeExpression generate_instance_cast (CCodeExpression expr, TypeSymbol type) {
return new CCodeCastExpression (expr, type.get_cname () + "*");
}
+
+ public virtual string? get_custom_creturn_type (Method m) {
+ return null;
+ }
+
+ public virtual bool method_has_wrapper (Method method) {
+ return false;
+ }
+
+ public virtual void add_simple_check (CodeNode node, CCodeFragment cfrag, bool always_fails = false) {
+ }
}
* Jürg Billeter <j@bitron.ch>
*/
-internal class Vala.DovaControlFlowModule : DovaMethodModule {
- public DovaControlFlowModule (CCodeGenerator codegen, CCodeModule? next) {
- base (codegen, next);
- }
-
+public class Vala.DovaControlFlowModule : DovaMethodModule {
public override void visit_if_statement (IfStatement stmt) {
- stmt.true_statement.emit (codegen);
+ stmt.true_statement.emit (this);
if (stmt.false_statement != null) {
- stmt.false_statement.emit (codegen);
+ stmt.false_statement.emit (this);
}
if (stmt.false_statement != null) {
public override void visit_switch_statement (SwitchStatement stmt) {
foreach (SwitchSection section in stmt.get_sections ()) {
- section.emit (codegen);
+ section.emit (this);
}
var cswitch = new CCodeSwitchStatement ((CCodeExpression) stmt.expression.ccodenode);
public override void visit_switch_label (SwitchLabel label) {
if (label.expression != null) {
- label.expression.emit (codegen);
+ label.expression.emit (this);
- codegen.visit_end_full_expression (label.expression);
+ visit_end_full_expression (label.expression);
}
}
public override void visit_loop (Loop stmt) {
- stmt.body.emit (codegen);
+ stmt.body.emit (this);
stmt.ccodenode = new CCodeWhileStatement (new CCodeConstant ("true"), (CCodeStatement) stmt.body.ccodenode);
}
/**
* The link between a delegate and generated code.
*/
-internal class Vala.DovaDelegateModule : DovaValueModule {
- public DovaDelegateModule (CCodeGenerator codegen, CCodeModule? next) {
- base (codegen, next);
- }
-
+public class Vala.DovaDelegateModule : DovaValueModule {
public override void generate_delegate_declaration (Delegate d, CCodeDeclarationSpace decl_space) {
if (decl_space.add_symbol_declaration (d, d.get_cname ())) {
return;
}
public override void visit_delegate (Delegate d) {
- d.accept_children (codegen);
+ d.accept_children (this);
generate_delegate_declaration (d, source_declarations);
* Thijs Vermeir <thijsvermeir@gmail.com>
*/
-using GLib;
-
-internal class Vala.DovaErrorModule : DovaDelegateModule {
+public class Vala.DovaErrorModule : DovaDelegateModule {
private int current_try_id = 0;
private int next_try_id = 0;
private bool is_in_catch = false;
- public DovaErrorModule (CCodeGenerator codegen, CCodeModule? next) {
- base (codegen, next);
- }
-
public override void visit_throw_statement (ThrowStatement stmt) {
var cfrag = new CCodeFragment ();
var cassign = new CCodeAssignment (new CCodeIdentifier ("dova_error"), (CCodeExpression) stmt.error_expression.ccodenode);
cfrag.append (new CCodeExpressionStatement (cassign));
- head.add_simple_check (stmt, cfrag, true);
+ add_simple_check (stmt, cfrag, true);
stmt.ccodenode = cfrag;
}
if (stmt.finally_body != null) {
- stmt.finally_body.emit (codegen);
+ stmt.finally_body.emit (this);
}
is_in_catch = false;
- stmt.body.emit (codegen);
+ stmt.body.emit (this);
is_in_catch = true;
foreach (CatchClause clause in stmt.get_catch_clauses ()) {
- clause.emit (codegen);
+ clause.emit (this);
}
current_try = old_try;
public override void visit_catch_clause (CatchClause clause) {
generate_type_declaration (clause.error_type, source_declarations);
- clause.body.emit (codegen);
+ clause.body.emit (this);
var cfrag = new CCodeFragment ();
cfrag.append (new CCodeLabel (clause.clabel_name));
using GLib;
-internal class Vala.DovaMemberAccessModule : DovaControlFlowModule {
- public DovaMemberAccessModule (CCodeGenerator codegen, CCodeModule? next) {
- base (codegen, next);
- }
-
+public class Vala.DovaMemberAccessModule : DovaControlFlowModule {
public override void visit_member_access (MemberAccess expr) {
CCodeExpression pub_inst = null;
DataType base_type = null;
}
if (m.base_method != null) {
- if (!head.method_has_wrapper (m.base_method)) {
+ if (!method_has_wrapper (m.base_method)) {
var inst = pub_inst;
if (expr.inner != null && !expr.inner.is_pure ()) {
// instance expression has side-effects
} else if (prop.base_interface_property != null) {
base_property = prop.base_interface_property;
}
- string getter_cname;
- if (prop is DynamicProperty) {
- getter_cname = head.get_dynamic_property_getter_cname ((DynamicProperty) prop);
- } else {
- getter_cname = base_property.get_accessor.get_cname ();
- }
+ string getter_cname = base_property.get_accessor.get_cname ();
var ccall = new CCodeFunctionCall (new CCodeIdentifier (getter_cname));
if (prop.binding == MemberBinding.INSTANCE) {
* Jürg Billeter <j@bitron.ch>
*/
-internal class Vala.DovaMethodCallModule : DovaAssignmentModule {
- public DovaMethodCallModule (CCodeGenerator codegen, CCodeModule? next) {
- base (codegen, next);
- }
-
+public class Vala.DovaMethodCallModule : DovaAssignmentModule {
public override void visit_method_call (MethodCall expr) {
// the bare function call
var ccall = new CCodeFunctionCall ((CCodeExpression) expr.call.ccodenode);
/**
* The link between a method and generated code.
*/
-internal class Vala.DovaMethodModule : DovaStructModule {
- public DovaMethodModule (CCodeGenerator codegen, CCodeModule? next) {
- base (codegen, next);
- }
-
+public class Vala.DovaMethodModule : DovaStructModule {
public override bool method_has_wrapper (Method method) {
return (method.get_attribute ("NoWrapper") == null);
}
* Jürg Billeter <j@bitron.ch>
*/
-internal class Vala.DovaObjectModule : DovaArrayModule {
- public DovaObjectModule (CCodeGenerator codegen, CCodeModule? next) {
- base (codegen, next);
- }
-
+public class Vala.DovaObjectModule : DovaArrayModule {
public override void generate_class_declaration (Class cl, CCodeDeclarationSpace decl_space) {
if (decl_space.add_symbol_declaration (cl, cl.get_cname ())) {
return;
generate_class_declaration (cl, header_declarations);
}
- cl.accept_children (codegen);
+ cl.accept_children (this);
var type_init_block = generate_type_get_function (cl, cl.base_class);
source_type_member_definition.append (type_init_fun);
- iface.accept_children (codegen);
+ iface.accept_children (this);
current_symbol = old_symbol;
}
var prop = (Property) acc.prop;
if (acc.result_var != null) {
- acc.result_var.accept (codegen);
+ acc.result_var.accept (this);
}
if (acc.body != null) {
- acc.body.emit (codegen);
+ acc.body.emit (this);
}
// do not declare overriding properties and interface implementations
foreach (FormalParameter param in m.get_parameters ()) {
- param.accept (codegen);
+ param.accept (this);
}
if (m.result_var != null) {
- m.result_var.accept (codegen);
+ m.result_var.accept (this);
}
foreach (Expression precondition in m.get_preconditions ()) {
- precondition.emit (codegen);
+ precondition.emit (this);
}
foreach (Expression postcondition in m.get_postconditions ()) {
- postcondition.emit (codegen);
+ postcondition.emit (this);
}
if (m.body != null) {
- m.body.emit (codegen);
+ m.body.emit (this);
}
public override void visit_creation_method (CreationMethod m) {
bool visible = !m.is_internal_symbol ();
- head.visit_method (m);
+ visit_method (m);
DataType creturn_type;
if (current_type_symbol is Class) {
if (array_type != null) {
// access to element in an array
- expr.accept_children (codegen);
+ expr.accept_children (this);
List<Expression> indices = expr.get_indices ();
var cindex = (CCodeExpression) indices[0].ccodenode;
using GLib;
-internal class Vala.DovaStructModule : DovaBaseModule {
- public DovaStructModule (CCodeGenerator codegen, CCodeModule? next) {
- base (codegen, next);
- }
-
+public class Vala.DovaStructModule : DovaBaseModule {
public override void generate_struct_declaration (Struct st, CCodeDeclarationSpace decl_space) {
if (decl_space.add_symbol_declaration (st, st.get_cname ())) {
return;
generate_struct_declaration (st, header_declarations);
}
- st.accept_children (codegen);
+ st.accept_children (this);
current_symbol = old_symbol;
instance_finalize_fragment = old_instance_finalize_fragment;
* Jürg Billeter <j@bitron.ch>
*/
-internal class Vala.DovaValueModule : DovaObjectModule {
- public DovaValueModule (CCodeGenerator codegen, CCodeModule? next) {
- base (codegen, next);
- }
-
+public class Vala.DovaValueModule : DovaObjectModule {
public override void visit_creation_method (CreationMethod m) {
if (current_type_symbol is Class &&
(current_class.base_class == null ||
// handle method calls on generic types
- expr.accept_children (codegen);
+ expr.accept_children (this);
if (ma.member_name == "hash") {
var val = ma.inner;
using GLib;
public class Vala.GAsyncModule : GSignalModule {
- public GAsyncModule (CCodeGenerator codegen, CCodeModule? next) {
- base (codegen, next);
- }
-
CCodeStruct generate_data_struct (Method m) {
string dataname = Symbol.lower_case_to_camel_case (m.get_cname ()) + "Data";
var data = new CCodeStruct ("_" + dataname);
cfrag.append (stmt.ccodenode);
- head.add_simple_check (stmt.yield_expression, cfrag);
+ add_simple_check (stmt.yield_expression, cfrag);
stmt.ccodenode = cfrag;
}
*/
public class Vala.GDBusClientModule : GDBusModule {
- public GDBusClientModule (CCodeGenerator codegen, CCodeModule? next) {
- base (codegen, next);
- }
-
public CCodeConstant get_dbus_timeout (Symbol symbol) {
int timeout = -1;
var ccall = new CCodeFunctionCall (new CCodeIdentifier ("g_initable_new"));
ccall.add_argument (new CCodeIdentifier ("%s_PROXY".printf (iface.get_type_id ())));
- cancellable.emit (codegen);
+ cancellable.emit (this);
ccall.add_argument ((CCodeExpression) cancellable.ccodenode);
ccall.add_argument (new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, get_variable_cexpression ("_inner_error_")));
ccall.add_argument (new CCodeConstant ("\"g-flags\""));
ccall.add_argument (new CCodeConstant ("G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES"));
ccall.add_argument (new CCodeConstant ("\"g-name\""));
- name.emit (codegen);
+ name.emit (this);
ccall.add_argument ((CCodeExpression) name.ccodenode);
ccall.add_argument (new CCodeConstant ("\"g-bus-type\""));
- bus_type.emit (codegen);
+ bus_type.emit (this);
ccall.add_argument ((CCodeExpression) bus_type.ccodenode);
ccall.add_argument (new CCodeConstant ("\"g-object-path\""));
- object_path.emit (codegen);
+ object_path.emit (this);
ccall.add_argument ((CCodeExpression) object_path.ccodenode);
ccall.add_argument (new CCodeConstant ("\"g-interface-name\""));
ccall.add_argument (new CCodeConstant ("\"%s\"".printf (get_dbus_name (iface))));
*/
public class Vala.GDBusModule : GVariantModule {
- public GDBusModule (CCodeGenerator codegen, CCodeModule? next) {
- base (codegen, next);
- }
-
public static string? get_dbus_name (TypeSymbol symbol) {
var dbus = symbol.get_attribute ("DBus");
if (dbus == null) {
*/
public class Vala.GDBusServerModule : GDBusClientModule {
- public GDBusServerModule (CCodeGenerator codegen, CCodeModule? next) {
- base (codegen, next);
- }
-
public static bool is_dbus_visible (CodeNode node) {
var dbus_attribute = node.get_attribute ("DBus");
if (dbus_attribute != null
if (param.variable_type is ArrayType) {
var array_type = (ArrayType) param.variable_type;
for (int dim = 1; dim <= array_type.rank; dim++) {
- function.add_parameter (new CCodeFormalParameter (head.get_array_length_cname (param.name, dim), "int"));
+ function.add_parameter (new CCodeFormalParameter (get_array_length_cname (param.name, dim), "int"));
}
}
}
if (array_type != null) {
for (int dim = 1; dim <= array_type.rank; dim++) {
cdecl = new CCodeDeclaration ("int");
- cdecl.add_declarator (new CCodeVariableDeclarator (head.get_array_length_cname ("value", dim)));
+ cdecl.add_declarator (new CCodeVariableDeclarator (get_array_length_cname ("value", dim)));
prefragment.append (cdecl);
- ccall.add_argument (new CCodeIdentifier (head.get_array_length_cname ("value", dim)));
+ ccall.add_argument (new CCodeIdentifier (get_array_length_cname ("value", dim)));
}
}
}
private int next_try_id = 0;
private bool is_in_catch = false;
- public GErrorModule (CCodeGenerator codegen, CCodeModule? next) {
- base (codegen, next);
- }
-
public override void generate_error_domain_declaration (ErrorDomain edomain, CCodeDeclarationSpace decl_space) {
if (decl_space.add_symbol_declaration (edomain, edomain.get_cname ())) {
return;
if (ecode.value == null) {
cenum.add_value (new CCodeEnumValue (ecode.get_cname ()));
} else {
- ecode.value.emit (codegen);
+ ecode.value.emit (this);
cenum.add_value (new CCodeEnumValue (ecode.get_cname (), (CCodeExpression) ecode.value.ccodenode));
}
}
var cassign = new CCodeAssignment (get_variable_cexpression ("_inner_error_"), (CCodeExpression) stmt.error_expression.ccodenode);
cfrag.append (new CCodeExpressionStatement (cassign));
- head.add_simple_check (stmt, cfrag, true);
+ add_simple_check (stmt, cfrag, true);
stmt.ccodenode = cfrag;
}
if (stmt.finally_body != null) {
- stmt.finally_body.emit (codegen);
+ stmt.finally_body.emit (this);
}
is_in_catch = false;
- stmt.body.emit (codegen);
+ stmt.body.emit (this);
is_in_catch = true;
foreach (CatchClause clause in stmt.get_catch_clauses ()) {
- clause.emit (codegen);
+ clause.emit (this);
}
current_try = old_try;
generate_error_domain_declaration (error_type.error_domain, source_declarations);
}
- clause.body.emit (codegen);
+ clause.body.emit (this);
var cfrag = new CCodeFragment ();
cfrag.append (new CCodeLabel (clause.clabel_name));
int dynamic_property_id;
int signal_wrapper_id;
- public GObjectModule (CCodeGenerator codegen, CCodeModule? next) {
- base (codegen, next);
- }
-
public override void visit_class (Class cl) {
base.visit_class (cl);
var cinst = new CCodeFunctionCall (new CCodeIdentifier ("g_object_class_install_property"));
cinst.add_argument (ccall);
cinst.add_argument (new CCodeConstant (prop.get_upper_case_cname ()));
- cinst.add_argument (head.get_param_spec (prop));
+ cinst.add_argument (get_param_spec (prop));
init_block.add_statement (new CCodeExpressionStatement (cinst));
}
cswitch.add_statement (new CCodeExpressionStatement (ccall));
var csetcall = new CCodeFunctionCall ();
- csetcall.call = head.get_value_setter_function (prop.property_type);
+ csetcall.call = get_value_setter_function (prop.property_type);
csetcall.add_argument (new CCodeIdentifier ("value"));
csetcall.add_argument (boxed_addr);
cswitch.add_statement (new CCodeExpressionStatement (csetcall));
}
var csetcall = new CCodeFunctionCall ();
if (prop.get_accessor.value_type.value_owned) {
- csetcall.call = head.get_value_taker_function (prop.property_type);
+ csetcall.call = get_value_taker_function (prop.property_type);
} else {
- csetcall.call = head.get_value_setter_function (prop.property_type);
+ csetcall.call = get_value_setter_function (prop.property_type);
}
csetcall.add_argument (new CCodeIdentifier ("value"));
csetcall.add_argument (ccall);
} else {
in_constructor = true;
}
- c.body.emit (codegen);
+ c.body.emit (this);
in_static_or_class_context = false;
in_constructor = false;
void generate_gobject_connect_wrapper (DynamicSignal sig, CCodeBlock block, bool after) {
var m = (Method) sig.handler.symbol_reference;
- sig.accept (codegen);
+ sig.accept (this);
string connect_func = "g_signal_connect_object";
if (m.binding != MemberBinding.INSTANCE) {
public class Vala.GSignalModule : GObjectModule {
- public GSignalModule (CCodeGenerator codegen, CCodeModule? next) {
- base (codegen, next);
- }
-
private string get_marshaller_type_name (DataType t, bool dbus = false) {
if (t is PointerType || t.type_parameter != null) {
return ("POINTER");
}
}
- sig.accept_children (codegen);
+ sig.accept_children (this);
// declare parameter type
foreach (FormalParameter p in sig.get_parameters ()) {
csignew.add_argument (new CCodeConstant ("NULL"));
csignew.add_argument (new CCodeConstant ("NULL"));
- string marshaller = head.get_marshaller_function (sig.get_parameters (), sig.return_type);
+ string marshaller = get_marshaller_function (sig.get_parameters (), sig.return_type);
var marshal_arg = new CCodeIdentifier (marshaller);
csignew.add_argument (marshal_arg);
// connect
if (sig is DynamicSignal) {
if (!after)
- connect_func = head.get_dynamic_signal_connect_wrapper_name ((DynamicSignal) sig);
+ connect_func = get_dynamic_signal_connect_wrapper_name ((DynamicSignal) sig);
else
- connect_func = head.get_dynamic_signal_connect_after_wrapper_name ((DynamicSignal) sig);
+ connect_func = get_dynamic_signal_connect_after_wrapper_name ((DynamicSignal) sig);
} else {
if (m.closure) {
connect_func = "g_signal_connect_data";
} else {
// disconnect
if (sig is DynamicSignal) {
- connect_func = head.get_dynamic_signal_disconnect_wrapper_name ((DynamicSignal) sig);
+ connect_func = get_dynamic_signal_disconnect_wrapper_name ((DynamicSignal) sig);
} else {
connect_func = "g_signal_handlers_disconnect_matched";
}
public class Vala.GTypeModule : GErrorModule {
- public GTypeModule (CCodeGenerator codegen, CCodeModule? next) {
- base (codegen, next);
- }
-
public override void generate_parameter (FormalParameter param, CCodeDeclarationSpace decl_space, Map<int,CCodeFormalParameter> cparam_map, Map<int,CCodeExpression>? carg_map) {
if (!(param.variable_type is ObjectType)) {
base.generate_parameter (param, decl_space, cparam_map, carg_map);
var array_type = prop.property_type as ArrayType;
if (array_type != null) {
for (int dim = 1; dim <= array_type.rank; dim++) {
- vdeclarator.add_parameter (new CCodeFormalParameter (head.get_array_length_cname ("result", dim), "int*"));
+ vdeclarator.add_parameter (new CCodeFormalParameter (get_array_length_cname ("result", dim), "int*"));
}
}
var array_type = prop.property_type as ArrayType;
if (array_type != null) {
for (int dim = 1; dim <= array_type.rank; dim++) {
- vdeclarator.add_parameter (new CCodeFormalParameter (head.get_array_length_cname ("value", dim), "int"));
+ vdeclarator.add_parameter (new CCodeFormalParameter (get_array_length_cname ("value", dim), "int"));
}
}
var len_type = int_type.copy ();
for (int dim = 1; dim <= array_type.rank; dim++) {
- instance_struct.add_field (len_type.get_cname (), head.get_array_length_cname (f.name, dim));
+ instance_struct.add_field (len_type.get_cname (), get_array_length_cname (f.name, dim));
}
if (array_type.rank == 1 && f.is_internal_symbol ()) {
- instance_struct.add_field (len_type.get_cname (), head.get_array_size_cname (f.name));
+ instance_struct.add_field (len_type.get_cname (), get_array_size_cname (f.name));
}
}
} else if (f.variable_type is DelegateType) {
if (!array_type.fixed_length) {
for (int dim = 1; dim <= array_type.rank; dim++) {
- instance_priv_struct.add_field (len_type.get_cname (), head.get_array_length_cname (f.name, dim));
+ instance_priv_struct.add_field (len_type.get_cname (), get_array_length_cname (f.name, dim));
}
if (array_type.rank == 1 && f.is_internal_symbol ()) {
- instance_priv_struct.add_field (len_type.get_cname (), head.get_array_size_cname (f.name));
+ instance_priv_struct.add_field (len_type.get_cname (), get_array_size_cname (f.name));
}
}
} else if (f.variable_type is DelegateType) {
generate_class_struct_declaration (cl, internal_header_declarations);
}
- cl.accept_children (codegen);
+ cl.accept_children (this);
if (is_gtypeinstance) {
if (is_fundamental) {
if (sig.comment != null) {
init_block.add_statement (new CCodeComment (sig.comment.content));
}
- init_block.add_statement (new CCodeExpressionStatement (head.get_signal_creation (sig, cl)));
+ init_block.add_statement (new CCodeExpressionStatement (get_signal_creation (sig, cl)));
}
}
- init_block.add_statement (head.register_dbus_info (cl));
+ init_block.add_statement (register_dbus_info (cl));
init_block.add_statement (class_init_fragment);
source_type_member_definition.append (class_init);
var array_type = prop.property_type as ArrayType;
if (array_type != null) {
for (int dim = 1; dim <= array_type.rank; dim++) {
- vdeclarator.add_parameter (new CCodeFormalParameter (head.get_array_length_cname ("result", dim), "int*"));
+ vdeclarator.add_parameter (new CCodeFormalParameter (get_array_length_cname ("result", dim), "int*"));
}
}
var array_type = prop.property_type as ArrayType;
if (array_type != null) {
for (int dim = 1; dim <= array_type.rank; dim++) {
- vdeclarator.add_parameter (new CCodeFormalParameter (head.get_array_length_cname ("value", dim), "int"));
+ vdeclarator.add_parameter (new CCodeFormalParameter (get_array_length_cname ("value", dim), "int"));
}
}
generate_interface_declaration (iface, internal_header_declarations);
}
- iface.accept_children (codegen);
+ iface.accept_children (this);
add_interface_base_init_function (iface);
var cinst = new CCodeFunctionCall (new CCodeIdentifier ("g_object_interface_install_property"));
cinst.add_argument (new CCodeIdentifier ("iface"));
- cinst.add_argument (head.get_param_spec (prop));
+ cinst.add_argument (get_param_spec (prop));
init_block.add_statement (new CCodeExpressionStatement (cinst));
}
if (sig.comment != null) {
init_block.add_statement (new CCodeComment (sig.comment.content));
}
- init_block.add_statement (new CCodeExpressionStatement (head.get_signal_creation (sig, iface)));
+ init_block.add_statement (new CCodeExpressionStatement (get_signal_creation (sig, iface)));
}
// connect default implementations
}
}
- init_block.add_statement (head.register_dbus_info (iface));
+ init_block.add_statement (register_dbus_info (iface));
source_type_member_definition.append (base_init);
}
{ "g", "signature", true }
};
- public GVariantModule (CCodeGenerator codegen, CCodeModule? next) {
- base (codegen, next);
- }
-
static bool is_string_marshalled_enum (TypeSymbol? symbol) {
if (symbol != null && symbol is Enum) {
var dbus = symbol.get_attribute ("DBus");
}
}
- context.codegen = new CCodeGenerator ();
+ if (context.profile == Profile.GOBJECT) {
+ if (context.has_package ("dbus-glib-1")) {
+ context.codegen = new DBusServerModule ();
+ } else {
+ context.codegen = new GDBusServerModule ();
+ }
+ } else if (context.profile == Profile.DOVA) {
+ context.codegen = new DovaErrorModule ();
+ } else {
+ context.codegen = new CCodeDelegateModule ();
+ }
if (packages != null) {
foreach (string package in packages) {