[vala] codegen: Don't use temp vars when accessing types that forbid lvalue access
- From: Luca Bruno <lucabru src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [vala] codegen: Don't use temp vars when accessing types that forbid lvalue access
- Date: Fri, 15 Jul 2011 16:53:24 +0000 (UTC)
commit 7e429e144d505e6629c94847eb212753fa079443
Author: Luca Bruno <lucabru src gnome org>
Date: Fri Jul 15 18:05:56 2011 +0200
codegen: Don't use temp vars when accessing types that forbid lvalue access
Add support for specifying whether a type allows lvalue access or not by
using the lvalue_access argument of the CCode attribute.
codegen/valaccodebasemodule.vala | 14 ++++++++++++++
codegen/valaccodememberaccessmodule.vala | 2 +-
2 files changed, 15 insertions(+), 1 deletions(-)
---
diff --git a/codegen/valaccodebasemodule.vala b/codegen/valaccodebasemodule.vala
index 8e6d7fb..5460b5e 100644
--- a/codegen/valaccodebasemodule.vala
+++ b/codegen/valaccodebasemodule.vala
@@ -5460,6 +5460,20 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
return get_cvalue (node);
}
+ public bool is_lvalue_access_allowed (DataType type) {
+ var array_type = type as ArrayType;
+ if (array_type != null && array_type.inline_allocated) {
+ return false;
+ }
+ if (type.data_type != null) {
+ var a = type.data_type.get_attribute ("CCode");
+ if (a != null && a.has_argument ("lvalue_access")) {
+ return a.get_bool ("lvalue_access");
+ }
+ }
+ return true;
+ }
+
public override void visit_class (Class cl) {
}
diff --git a/codegen/valaccodememberaccessmodule.vala b/codegen/valaccodememberaccessmodule.vala
index 95a4389..ace7d34 100644
--- a/codegen/valaccodememberaccessmodule.vala
+++ b/codegen/valaccodememberaccessmodule.vala
@@ -689,7 +689,7 @@ public abstract class Vala.CCodeMemberAccessModule : CCodeControlFlowModule {
}
result.value_type.value_owned = false;
- if (!(variable is Parameter && variable.name == "this") && !(array_type != null && array_type.inline_allocated)) {
+ if (!(variable is Parameter && variable.name == "this") && is_lvalue_access_allowed (result.value_type)) {
result = (GLibValue) store_temp_value (result, variable);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]