diff options
author | Arnold D. Robbins <arnold@skeeve.com> | 2015-04-28 16:46:05 +0300 |
---|---|---|
committer | Arnold D. Robbins <arnold@skeeve.com> | 2015-04-28 16:46:05 +0300 |
commit | 6853b3e94c03194200c5a7c4450820a8eaa0920f (patch) | |
tree | 0e68baf9f5d687a0a3b6543f01522a56bf010279 /eval.c | |
parent | 020be4cb81b519a597acbf85e683cfb95993c2b9 (diff) | |
parent | b4ef28f58688cf3c3a5878c595b6582144ee2cf1 (diff) | |
download | egawk-6853b3e94c03194200c5a7c4450820a8eaa0920f.tar.gz egawk-6853b3e94c03194200c5a7c4450820a8eaa0920f.tar.bz2 egawk-6853b3e94c03194200c5a7c4450820a8eaa0920f.zip |
Merge branch 'master' into feature/regex-type
Diffstat (limited to 'eval.c')
-rw-r--r-- | eval.c | 12 |
1 files changed, 9 insertions, 3 deletions
@@ -828,9 +828,9 @@ set_OFS() new_ofs_len = OFS_node->var_value->stlen; if (OFS == NULL) - emalloc(OFS, char *, new_ofs_len + 2, "set_OFS"); + emalloc(OFS, char *, new_ofs_len + 1, "set_OFS"); else if (OFSlen < new_ofs_len) - erealloc(OFS, char *, new_ofs_len + 2, "set_OFS"); + erealloc(OFS, char *, new_ofs_len + 1, "set_OFS"); memcpy(OFS, OFS_node->var_value->stptr, OFS_node->var_value->stlen); OFSlen = new_ofs_len; @@ -1329,7 +1329,13 @@ setup_frame(INSTRUCTION *pc) if (m->type == Node_param_list) m = GET_PARAM(m->param_cnt); - + + /* $0 needs to be passed by value to a function */ + if (m == fields_arr[0]) { + DEREF(m); + m = dupnode(m); + } + switch (m->type) { case Node_var_new: case Node_var_array: |