diff options
author | Jürg Billeter <j@bitron.ch> | 2010-08-07 10:47:29 +0200 |
---|---|---|
committer | Jürg Billeter <j@bitron.ch> | 2010-08-07 10:47:29 +0200 |
commit | f4a42b47451402ef6972715d5ae19607fd0f44eb (patch) | |
tree | ae0218313f7efad6b42ea4deed8ebc80579d29cb /codegen/valadovabasemodule.vala | |
parent | 52f5e0f0898fe5fc88f24c42ac0781eda5f01e19 (diff) | |
download | vala-f4a42b47451402ef6972715d5ae19607fd0f44eb.tar.gz |
dova: Support string literals without allocation
Diffstat (limited to 'codegen/valadovabasemodule.vala')
-rw-r--r-- | codegen/valadovabasemodule.vala | 8 |
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) { |