diff options
author | 星外之神 <wszqkzqk@qq.com> | 2022-10-28 23:47:56 +0800 |
---|---|---|
committer | Rico Tzschichholz <ricotz@ubuntu.com> | 2022-10-30 16:11:11 +0100 |
commit | 3c3ee793b499be959b3ed7f1f74014713382a438 (patch) | |
tree | feb077276aa853d7d7d05659e4689c24a6f231cd /tests | |
parent | 2b69b8accac817f23bd51ca41d14deec131d83c5 (diff) | |
download | vala-3c3ee793b499be959b3ed7f1f74014713382a438.tar.gz |
vala: Add support for verbatim template string
Fixes https://gitlab.gnome.org/GNOME/vala/issues/1373
Diffstat (limited to 'tests')
-rw-r--r-- | tests/Makefile.am | 4 | ||||
-rw-r--r-- | tests/genie/literal-template-string.c-expected | 54 | ||||
-rw-r--r-- | tests/genie/literal-template-string.gs | 13 | ||||
-rw-r--r-- | tests/genie/verbatim-template.c-expected | 103 | ||||
-rw-r--r-- | tests/genie/verbatim-template.gs | 16 | ||||
-rw-r--r-- | tests/parser/template.c-expected | 29 | ||||
-rw-r--r-- | tests/parser/template.vala | 1 | ||||
-rw-r--r-- | tests/parser/verbatim-template.c-expected | 83 | ||||
-rw-r--r-- | tests/parser/verbatim-template.vala | 15 | ||||
-rw-r--r-- | tests/scanner/string-template.c-expected | 57 | ||||
-rw-r--r-- | tests/scanner/string-template.vala | 8 | ||||
-rw-r--r-- | tests/scanner/string-verbatim-template.c-expected | 57 | ||||
-rw-r--r-- | tests/scanner/string-verbatim-template.vala | 8 |
13 files changed, 418 insertions, 30 deletions
diff --git a/tests/Makefile.am b/tests/Makefile.am index 10ff6183f..b93d4963c 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -908,6 +908,8 @@ TESTS = \ scanner/string-escape-x-digit-length.test \ scanner/string-escape-x-empty.test \ scanner/string-escape-x.vala \ + scanner/string-template.vala \ + scanner/string-verbatim-template.vala \ parser/argument-list-incomplete.test \ parser/array-creation-invalid.test \ parser/array-length.vala \ @@ -1006,6 +1008,7 @@ TESTS = \ parser/using-invalid-namespace.test \ parser/var-type-dynamic.vala \ parser/var-type-nullable.vala \ + parser/verbatim-template.vala \ parser/with-embedded.vala \ parser/with-empty.vala \ parser/with-invalid-declaration.test \ @@ -1403,6 +1406,7 @@ TESTS = \ genie/struct-after-class.gs \ genie/try-except-finally.gs \ genie/typeof.gs \ + genie/verbatim-template.gs \ genie/while.gs \ glib/conditional-glib-api.vala \ bindings/gio/memoryoutputstream.vala \ diff --git a/tests/genie/literal-template-string.c-expected b/tests/genie/literal-template-string.c-expected index 9dad5e432..0333b8546 100644 --- a/tests/genie/literal-template-string.c-expected +++ b/tests/genie/literal-template-string.c-expected @@ -5,15 +5,36 @@ #include <string.h> #include <glib.h> +#if !defined(VALA_EXTERN) +#if defined(_MSC_VER) +#define VALA_EXTERN __declspec(dllexport) extern +#elif __GNUC__ >= 4 +#define VALA_EXTERN __attribute__((visibility("default"))) extern +#else +#define VALA_EXTERN extern +#endif +#endif + #define _g_free0(var) (var = (g_free (var), NULL)) #define _vala_assert(expr, msg) if G_LIKELY (expr) ; else g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, msg); #define _vala_return_if_fail(expr, msg) if G_LIKELY (expr) ; else { g_return_if_fail_warning (G_LOG_DOMAIN, G_STRFUNC, msg); return; } #define _vala_return_val_if_fail(expr, msg, val) if G_LIKELY (expr) ; else { g_return_if_fail_warning (G_LOG_DOMAIN, G_STRFUNC, msg); return val; } #define _vala_warn_if_fail(expr, msg) if G_LIKELY (expr) ; else g_warn_message (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, msg); +VALA_EXTERN gchar* m (void); static void _vala_main (gchar** args, gint args_length1); +gchar* +m (void) +{ + gchar* _tmp0_; + gchar* result; + _tmp0_ = g_strdup ("foo"); + result = _tmp0_; + return result; +} + static const gchar* string_to_string (const gchar* self) { @@ -27,28 +48,35 @@ static void _vala_main (gchar** args, gint args_length1) { - gchar* a = NULL; + gchar* _result_ = NULL; gchar* _tmp0_; - gint b = 0; - gchar* c = NULL; const gchar* _tmp1_; + gint i = 0; gchar* _tmp2_; gchar* _tmp3_; gchar* _tmp4_; gchar* _tmp5_; - _tmp0_ = g_strdup ("test"); - a = _tmp0_; - b = 100; - _tmp1_ = string_to_string (a); - _tmp2_ = g_strdup_printf ("%i", b); + const gchar* _tmp6_; + gchar* _tmp7_; + const gchar* _tmp8_; + _tmp0_ = g_strdup (""); + _result_ = _tmp0_; + _tmp1_ = _result_; + _vala_assert (g_strcmp0 (_tmp1_, "") == 0, "result == \"\""); + i = 42; + _tmp2_ = g_strdup_printf ("%i", i); _tmp3_ = _tmp2_; - _tmp4_ = g_strconcat (_tmp1_, _tmp3_, NULL); + _tmp4_ = m (); _tmp5_ = _tmp4_; + _tmp6_ = string_to_string (_tmp5_); + _tmp7_ = g_strconcat ("i=", _tmp3_, " m=", _tmp6_, " ", "$", NULL); + _g_free0 (_result_); + _result_ = _tmp7_; + _g_free0 (_tmp5_); _g_free0 (_tmp3_); - c = _tmp5_; - _vala_assert (g_strcmp0 (c, "test100") == 0, "c == \"test100\""); - _g_free0 (c); - _g_free0 (a); + _tmp8_ = _result_; + _vala_assert (g_strcmp0 (_tmp8_, "i=42 m=foo $") == 0, "result == \"i=42 m=foo $\""); + _g_free0 (_result_); } int diff --git a/tests/genie/literal-template-string.gs b/tests/genie/literal-template-string.gs index 87e75ae92..8c7dc617d 100644 --- a/tests/genie/literal-template-string.gs +++ b/tests/genie/literal-template-string.gs @@ -1,5 +1,10 @@ +def m():string + return "foo" + init - var a = "test" - var b = 100 - var c = @"$( a )$b" - assert( c == "test100" ) + result:string = @"" + assert( result == "" ) + + i:int = 42 + result = @"i=$i m=$( m() ) $$" + assert( result == "i=42 m=foo $" ) diff --git a/tests/genie/verbatim-template.c-expected b/tests/genie/verbatim-template.c-expected new file mode 100644 index 000000000..97531c04f --- /dev/null +++ b/tests/genie/verbatim-template.c-expected @@ -0,0 +1,103 @@ +/* genie_verbatim_template.c generated by valac, the Vala compiler + * generated from genie_verbatim_template.gs, do not modify */ + +#include <stdlib.h> +#include <string.h> +#include <glib.h> + +#if !defined(VALA_EXTERN) +#if defined(_MSC_VER) +#define VALA_EXTERN __declspec(dllexport) extern +#elif __GNUC__ >= 4 +#define VALA_EXTERN __attribute__((visibility("default"))) extern +#else +#define VALA_EXTERN extern +#endif +#endif + +#define _g_free0(var) (var = (g_free (var), NULL)) +#define _vala_assert(expr, msg) if G_LIKELY (expr) ; else g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, msg); +#define _vala_return_if_fail(expr, msg) if G_LIKELY (expr) ; else { g_return_if_fail_warning (G_LOG_DOMAIN, G_STRFUNC, msg); return; } +#define _vala_return_val_if_fail(expr, msg, val) if G_LIKELY (expr) ; else { g_return_if_fail_warning (G_LOG_DOMAIN, G_STRFUNC, msg); return val; } +#define _vala_warn_if_fail(expr, msg) if G_LIKELY (expr) ; else g_warn_message (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, msg); + +VALA_EXTERN gchar* m (void); +static void _vala_main (gchar** args, + gint args_length1); + +gchar* +m (void) +{ + gchar* _tmp0_; + gchar* result; + _tmp0_ = g_strdup ("foo"); + result = _tmp0_; + return result; +} + +static const gchar* +string_to_string (const gchar* self) +{ + const gchar* result; + g_return_val_if_fail (self != NULL, NULL); + result = self; + return result; +} + +static void +_vala_main (gchar** args, + gint args_length1) +{ + gchar* _result_ = NULL; + gchar* _tmp0_; + const gchar* _tmp1_; + gint i = 0; + gchar* _tmp2_; + gchar* _tmp3_; + gchar* _tmp4_; + gchar* _tmp5_; + const gchar* _tmp6_; + gchar* _tmp7_; + const gchar* _tmp8_; + gint a = 0; + gchar* _tmp9_; + gchar* _tmp10_; + gchar* _tmp11_; + const gchar* _tmp12_; + _tmp0_ = g_strdup (""); + _result_ = _tmp0_; + _tmp1_ = _result_; + _vala_assert (g_strcmp0 (_tmp1_, "") == 0, "result == \"\""); + i = 42; + _tmp2_ = g_strdup_printf ("%i", i); + _tmp3_ = _tmp2_; + _tmp4_ = m (); + _tmp5_ = _tmp4_; + _tmp6_ = string_to_string (_tmp5_); + _tmp7_ = g_strconcat ("i=", _tmp3_, " \nm=", _tmp6_, " \n", "$", NULL); + _g_free0 (_result_); + _result_ = _tmp7_; + _g_free0 (_tmp5_); + _g_free0 (_tmp3_); + _tmp8_ = _result_; + _vala_assert (g_strcmp0 (_tmp8_, "i=42 \nm=foo \n$") == 0, "result == \"i=42 \\nm=foo \\n$\""); + a = 4711; + _tmp9_ = g_strdup_printf ("%i", a); + _tmp10_ = _tmp9_; + _tmp11_ = g_strconcat ("\"", _tmp10_, "\"", "\"", NULL); + _g_free0 (_result_); + _result_ = _tmp11_; + _g_free0 (_tmp10_); + _tmp12_ = _result_; + _vala_assert (g_strcmp0 (_tmp12_, "\"4711\"\"") == 0, "result == \"\\\"4711\\\"\\\"\""); + _g_free0 (_result_); +} + +int +main (int argc, + char ** argv) +{ + _vala_main (argv, argc); + return 0; +} + diff --git a/tests/genie/verbatim-template.gs b/tests/genie/verbatim-template.gs new file mode 100644 index 000000000..92f9a5c80 --- /dev/null +++ b/tests/genie/verbatim-template.gs @@ -0,0 +1,16 @@ +def m():string + return "foo" + +init + result:string = @"""""" + assert( result == "" ) + + i:int = 42 + result = @"""i=$i +m=$( m() ) +$$""" + assert( result == "i=42 \nm=foo \n$" ) + + a:int = 4711 + result = @""""$a""""" + assert( result == "\"4711\"\"" ) diff --git a/tests/parser/template.c-expected b/tests/parser/template.c-expected index 933aa14f5..093acfe15 100644 --- a/tests/parser/template.c-expected +++ b/tests/parser/template.c-expected @@ -46,27 +46,30 @@ _vala_main (void) { gchar* _result_ = NULL; gchar* _tmp0_; + const gchar* _tmp1_; gint i = 0; - gchar* _tmp1_; gchar* _tmp2_; - const gchar* _tmp3_; + gchar* _tmp3_; const gchar* _tmp4_; - gchar* _tmp5_; - const gchar* _tmp6_; + const gchar* _tmp5_; + gchar* _tmp6_; + const gchar* _tmp7_; _tmp0_ = g_strdup (""); _g_free0 (_result_); _result_ = _tmp0_; + _tmp1_ = _result_; + _vala_assert (g_strcmp0 (_tmp1_, "") == 0, "result == \"\""); i = 42; - _tmp1_ = g_strdup_printf ("%i", i); - _tmp2_ = _tmp1_; - _tmp3_ = m (); - _tmp4_ = string_to_string (_tmp3_); - _tmp5_ = g_strconcat ("i=", _tmp2_, " m=", _tmp4_, " ", "$", NULL); + _tmp2_ = g_strdup_printf ("%i", i); + _tmp3_ = _tmp2_; + _tmp4_ = m (); + _tmp5_ = string_to_string (_tmp4_); + _tmp6_ = g_strconcat ("i=", _tmp3_, " m=", _tmp5_, " ", "$", NULL); _g_free0 (_result_); - _result_ = _tmp5_; - _g_free0 (_tmp2_); - _tmp6_ = _result_; - _vala_assert (g_strcmp0 (_tmp6_, "i=42 m=foo $") == 0, "result == \"i=42 m=foo $\""); + _result_ = _tmp6_; + _g_free0 (_tmp3_); + _tmp7_ = _result_; + _vala_assert (g_strcmp0 (_tmp7_, "i=42 m=foo $") == 0, "result == \"i=42 m=foo $\""); _g_free0 (_result_); } diff --git a/tests/parser/template.vala b/tests/parser/template.vala index b4a073676..f1fd76cfe 100644 --- a/tests/parser/template.vala +++ b/tests/parser/template.vala @@ -5,6 +5,7 @@ unowned string m () { void main () { string result; result = @""; + assert (result == ""); int i = 42; result = @"i=$i m=$(m ()) $$"; diff --git a/tests/parser/verbatim-template.c-expected b/tests/parser/verbatim-template.c-expected new file mode 100644 index 000000000..108cae7c5 --- /dev/null +++ b/tests/parser/verbatim-template.c-expected @@ -0,0 +1,83 @@ +/* parser_verbatim_template.c generated by valac, the Vala compiler + * generated from parser_verbatim_template.vala, do not modify */ + +#include <stdlib.h> +#include <string.h> +#include <glib.h> + +#if !defined(VALA_EXTERN) +#if defined(_MSC_VER) +#define VALA_EXTERN __declspec(dllexport) extern +#elif __GNUC__ >= 4 +#define VALA_EXTERN __attribute__((visibility("default"))) extern +#else +#define VALA_EXTERN extern +#endif +#endif + +#define _g_free0(var) (var = (g_free (var), NULL)) +#define _vala_assert(expr, msg) if G_LIKELY (expr) ; else g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, msg); +#define _vala_return_if_fail(expr, msg) if G_LIKELY (expr) ; else { g_return_if_fail_warning (G_LOG_DOMAIN, G_STRFUNC, msg); return; } +#define _vala_return_val_if_fail(expr, msg, val) if G_LIKELY (expr) ; else { g_return_if_fail_warning (G_LOG_DOMAIN, G_STRFUNC, msg); return val; } +#define _vala_warn_if_fail(expr, msg) if G_LIKELY (expr) ; else g_warn_message (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, msg); + +VALA_EXTERN const gchar* m (void); +static void _vala_main (void); + +const gchar* +m (void) +{ + const gchar* result; + result = "foo"; + return result; +} + +static const gchar* +string_to_string (const gchar* self) +{ + const gchar* result; + g_return_val_if_fail (self != NULL, NULL); + result = self; + return result; +} + +static void +_vala_main (void) +{ + gchar* _result_ = NULL; + gchar* _tmp0_; + const gchar* _tmp1_; + gint i = 0; + gchar* _tmp2_; + gchar* _tmp3_; + const gchar* _tmp4_; + const gchar* _tmp5_; + gchar* _tmp6_; + const gchar* _tmp7_; + _tmp0_ = g_strdup (""); + _g_free0 (_result_); + _result_ = _tmp0_; + _tmp1_ = _result_; + _vala_assert (g_strcmp0 (_tmp1_, "") == 0, "result == \"\""); + i = 42; + _tmp2_ = g_strdup_printf ("%i", i); + _tmp3_ = _tmp2_; + _tmp4_ = m (); + _tmp5_ = string_to_string (_tmp4_); + _tmp6_ = g_strconcat ("i=", _tmp3_, " \nm=", _tmp5_, " \n", "$", NULL); + _g_free0 (_result_); + _result_ = _tmp6_; + _g_free0 (_tmp3_); + _tmp7_ = _result_; + _vala_assert (g_strcmp0 (_tmp7_, "i=42 \nm=foo \n$") == 0, "result == \"i=42 \\nm=foo \\n$\""); + _g_free0 (_result_); +} + +int +main (int argc, + char ** argv) +{ + _vala_main (); + return 0; +} + diff --git a/tests/parser/verbatim-template.vala b/tests/parser/verbatim-template.vala new file mode 100644 index 000000000..4a3db1fa5 --- /dev/null +++ b/tests/parser/verbatim-template.vala @@ -0,0 +1,15 @@ +unowned string m () { + return "foo"; +} + +void main () { + string result; + result = @""""""; + assert (result == ""); + + int i = 42; + result = @"""i=$i +m=$(m ()) +$$"""; + assert (result == "i=42 \nm=foo \n$"); +} diff --git a/tests/scanner/string-template.c-expected b/tests/scanner/string-template.c-expected new file mode 100644 index 000000000..eb6821b76 --- /dev/null +++ b/tests/scanner/string-template.c-expected @@ -0,0 +1,57 @@ +/* scanner_string_template.c generated by valac, the Vala compiler + * generated from scanner_string_template.vala, do not modify */ + +#include <stdlib.h> +#include <string.h> +#include <glib.h> + +#define _g_free0(var) (var = (g_free (var), NULL)) + +static void _vala_main (void); + +static const gchar* +string_to_string (const gchar* self) +{ + const gchar* result; + g_return_val_if_fail (self != NULL, NULL); + result = self; + return result; +} + +static void +_vala_main (void) +{ + gchar* foo = NULL; + gchar* _tmp0_; + gchar* bar = NULL; + gchar* _tmp1_; + gchar* manam = NULL; + const gchar* _tmp2_; + const gchar* _tmp3_; + gchar* _tmp4_; + gchar* minim = NULL; + gchar* _tmp5_; + _tmp0_ = g_strdup ("Hello"); + foo = _tmp0_; + _tmp1_ = g_strdup ("world"); + bar = _tmp1_; + _tmp2_ = string_to_string (foo); + _tmp3_ = string_to_string (bar); + _tmp4_ = g_strconcat (_tmp2_, " ", _tmp3_, "!", NULL); + manam = _tmp4_; + _tmp5_ = g_strdup (""); + minim = _tmp5_; + _g_free0 (minim); + _g_free0 (manam); + _g_free0 (bar); + _g_free0 (foo); +} + +int +main (int argc, + char ** argv) +{ + _vala_main (); + return 0; +} + diff --git a/tests/scanner/string-template.vala b/tests/scanner/string-template.vala new file mode 100644 index 000000000..3d4a00d4f --- /dev/null +++ b/tests/scanner/string-template.vala @@ -0,0 +1,8 @@ +void main () { + var foo = "Hello"; + var bar = "world"; + + var manam = @"$foo $bar!"; + var minim = @""; +} + diff --git a/tests/scanner/string-verbatim-template.c-expected b/tests/scanner/string-verbatim-template.c-expected new file mode 100644 index 000000000..6f7b0d214 --- /dev/null +++ b/tests/scanner/string-verbatim-template.c-expected @@ -0,0 +1,57 @@ +/* scanner_string_verbatim_template.c generated by valac, the Vala compiler + * generated from scanner_string_verbatim_template.vala, do not modify */ + +#include <stdlib.h> +#include <string.h> +#include <glib.h> + +#define _g_free0(var) (var = (g_free (var), NULL)) + +static void _vala_main (void); + +static const gchar* +string_to_string (const gchar* self) +{ + const gchar* result; + g_return_val_if_fail (self != NULL, NULL); + result = self; + return result; +} + +static void +_vala_main (void) +{ + gchar* foo = NULL; + gchar* _tmp0_; + gchar* bar = NULL; + gchar* _tmp1_; + gchar* manam = NULL; + const gchar* _tmp2_; + const gchar* _tmp3_; + gchar* _tmp4_; + gchar* minim = NULL; + gchar* _tmp5_; + _tmp0_ = g_strdup ("Hello"); + foo = _tmp0_; + _tmp1_ = g_strdup ("world"); + bar = _tmp1_; + _tmp2_ = string_to_string (foo); + _tmp3_ = string_to_string (bar); + _tmp4_ = g_strconcat (_tmp2_, " \n", _tmp3_, "!", NULL); + manam = _tmp4_; + _tmp5_ = g_strdup (""); + minim = _tmp5_; + _g_free0 (minim); + _g_free0 (manam); + _g_free0 (bar); + _g_free0 (foo); +} + +int +main (int argc, + char ** argv) +{ + _vala_main (); + return 0; +} + diff --git a/tests/scanner/string-verbatim-template.vala b/tests/scanner/string-verbatim-template.vala new file mode 100644 index 000000000..32ff85755 --- /dev/null +++ b/tests/scanner/string-verbatim-template.vala @@ -0,0 +1,8 @@ +void main () { + var foo = "Hello"; + var bar = "world"; + + var manam = @"""$foo +$bar!"""; + var minim = @""""""; +} |