1
0
mirror of https://github.com/vlang/v.git synced 2023-08-10 21:13:21 +03:00

'$foo()' string interpolation

This commit is contained in:
Alexander Medvednikov
2019-12-08 22:22:47 +03:00
parent ef821379da
commit 8f9b6ac248
11 changed files with 57 additions and 42 deletions

View File

@ -57,8 +57,8 @@ fn (p mut Parser) gen_json_for_type(typ Type) {
p.table.register_fn(enc_fn)
// Code gen decoder
dec += '
//$t $dec_fn.name(cJSON* root) {
Option $dec_fn.name(cJSON* root, $t* res) {
//$t $dec_fn.name (cJSON* root) {
Option ${dec_fn.name}(cJSON* root, $t* res) {
// $t res;
if (!root) {
const char *error_ptr = cJSON_GetErrorPtr();
@ -71,7 +71,7 @@ Option $dec_fn.name(cJSON* root, $t* res) {
'
// Code gen encoder
enc += '
cJSON* $enc_fn.name($t val) {
cJSON* $enc_fn.name ($t val) {
cJSON *o = cJSON_CreateObject();
string res = tos2("");
'
@ -96,24 +96,24 @@ string res = tos2("");
if field.attr == 'raw' {
dec += ' res->$field.name = tos2(cJSON_PrintUnformatted(' +
'js_get(root, "$name")));\n'
} else {
// Now generate decoders for all field types in this struct
// need to do it here so that these functions are generated first
p.gen_json_for_type(field_type)
dec_name := js_dec_name(_typ)
if is_js_prim(_typ) {
dec += ' res->$field.name = $dec_name(js_get(' +
dec += ' res->$field.name = $dec_name (js_get(' +
'root, "$name"))'
}
else {
dec += ' $dec_name(js_get(root, "$name"), & (res->$field.name))'
dec += ' $dec_name (js_get(root, "$name"), & (res->$field.name))'
}
dec += ';\n'
}
enc += ' cJSON_AddItemToObject(o, "$name",$enc_name(val.$field.name)); \n'
enc += ' cJSON_AddItemToObject(o, "$name",$enc_name (val.$field.name)); \n'
}
// cJSON_delete
//p.cgen.fns << '$dec return opt_ok(res); \n}'
@ -136,10 +136,10 @@ fn (p mut Parser) decode_array(array_type string) string {
p.gen_json_for_type(t)
mut s := ''
if is_js_prim(typ) {
s = '$typ val= $fn_name(jsval); '
s = '$typ val= $fn_name (jsval); '
}
else {
s = ' $typ val; $fn_name(jsval, &val); '
s = ' $typ val; $fn_name (jsval, &val); '
}
return '
*res = new_array(0, 0, sizeof($typ));
@ -168,7 +168,7 @@ fn (p &Parser) encode_array(array_type string) string {
return '
o = cJSON_CreateArray();
for (int i = 0; i < val.len; i++){
cJSON_AddItemToArray(o, $fn_name( (($typ*)val.data)[i] ));
cJSON_AddItemToArray(o, $fn_name ( (($typ*)val.data)[i] ));
}
'
}