summaryrefslogtreecommitdiff
path: root/codegen/valadovabasemodule.vala
diff options
context:
space:
mode:
authorJürg Billeter <j@bitron.ch>2010-08-07 10:47:29 +0200
committerJürg Billeter <j@bitron.ch>2010-08-07 10:47:29 +0200
commitf4a42b47451402ef6972715d5ae19607fd0f44eb (patch)
treeae0218313f7efad6b42ea4deed8ebc80579d29cb /codegen/valadovabasemodule.vala
parent52f5e0f0898fe5fc88f24c42ac0781eda5f01e19 (diff)
downloadvala-f4a42b47451402ef6972715d5ae19607fd0f44eb.tar.gz
dova: Support string literals without allocation
Diffstat (limited to 'codegen/valadovabasemodule.vala')
-rw-r--r--codegen/valadovabasemodule.vala8
1 files changed, 5 insertions, 3 deletions
diff --git a/codegen/valadovabasemodule.vala b/codegen/valadovabasemodule.vala
index 14d0ee18d..79a8198e8 100644
--- a/codegen/valadovabasemodule.vala
+++ b/codegen/valadovabasemodule.vala
@@ -154,6 +154,7 @@ internal class Vala.DovaBaseModule : CCodeModule {
public Class object_class;
public Class type_class;
public Class value_class;
+ public Class string_class;
public Class array_class;
public Class delegate_class;
public Class error_class;
@@ -232,6 +233,7 @@ internal class Vala.DovaBaseModule : CCodeModule {
object_class = (Class) dova_ns.scope.lookup ("Object");
type_class = (Class) dova_ns.scope.lookup ("Type");
value_class = (Class) dova_ns.scope.lookup ("Value");
+ string_class = (Class) root_symbol.scope.lookup ("string");
array_class = (Class) dova_ns.scope.lookup ("Array");
delegate_class = (Class) dova_ns.scope.lookup ("Delegate");
error_class = (Class) dova_ns.scope.lookup ("Error");
@@ -1532,11 +1534,11 @@ internal class Vala.DovaBaseModule : CCodeModule {
}
public override void visit_string_literal (StringLiteral expr) {
- var ccall = new CCodeFunctionCall (new CCodeIdentifier ("string_create_from_cstring"));
// FIXME handle escaped characters in scanner/parser and escape them here again for C
- ccall.add_argument (new CCodeConstant (expr.value));
+ var cliteral = new CCodeConstant ("\"\\0\" " + expr.value);
- expr.ccodenode = ccall;
+ var cbinary = new CCodeBinaryExpression (CCodeBinaryOperator.PLUS, cliteral, new CCodeConstant ("1"));
+ expr.ccodenode = new CCodeCastExpression (cbinary, "string_t");
}
public override void visit_null_literal (NullLiteral expr) {