[vala] codegen: Fix unsafe C generated for array slices
- From: Jürg Billeter <juergbi src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [vala] codegen: Fix unsafe C generated for array slices
- Date: Mon, 8 Nov 2010 16:41:35 +0000 (UTC)
commit 5aa12b72db79884d1391b012929f3edf61f1943a
Author: Jürg Billeter <j bitron ch>
Date: Mon Nov 8 17:34:41 2010 +0100
codegen: Fix unsafe C generated for array slices
Argument evaluation order is not guaranteed in C.
codegen/valaccodearraymodule.vala | 31 ++-----------------------------
1 files changed, 2 insertions(+), 29 deletions(-)
---
diff --git a/codegen/valaccodearraymodule.vala b/codegen/valaccodearraymodule.vala
index c85d2dd..4da5b37 100644
--- a/codegen/valaccodearraymodule.vala
+++ b/codegen/valaccodearraymodule.vala
@@ -198,38 +198,11 @@ public class Vala.CCodeArrayModule : CCodeMethodCallModule {
var cstart = get_cvalue (expr.start);
var cstop = get_cvalue (expr.stop);
- var ccomma = new CCodeCommaExpression ();
-
- var len_var = get_temp_variable (int_type);
- len_var.source_reference = expr.source_reference;
- emit_temp_var (len_var);
-
- var slice_var = get_temp_variable (expr.value_type, true, expr);
- emit_temp_var (slice_var);
-
- if (!is_pure_ccode_expression (cstart)) {
- // avoid double evaluation of start
- var start_var = get_temp_variable (int_type);
- emit_temp_var (start_var);
-
- var start_assignment = new CCodeAssignment (get_variable_cexpression (start_var.name), cstart);
- ccomma.append_expression (start_assignment);
-
- cstart = get_variable_cexpression (start_var.name);
- }
-
var cstartpointer = new CCodeBinaryExpression (CCodeBinaryOperator.PLUS, ccontainer, cstart);
- var slice_assignment = new CCodeAssignment (get_variable_cexpression (slice_var.name), cstartpointer);
- ccomma.append_expression (slice_assignment);
-
var splicelen = new CCodeBinaryExpression (CCodeBinaryOperator.MINUS, cstop, cstart);
- var len_assignment = new CCodeAssignment (get_variable_cexpression (len_var.name), splicelen);
- ccomma.append_expression (len_assignment);
-
- ccomma.append_expression (get_variable_cexpression (slice_var.name));
- set_cvalue (expr, ccomma);
- append_array_size (expr, get_variable_cexpression (len_var.name));
+ set_cvalue (expr, cstartpointer);
+ append_array_size (expr, splicelen);
}
void append_struct_array_free_loop (Struct st) {
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]