diff --git a/src/generate.cpp b/src/generate.cpp index 0d4cf08..acf9e39 100644 --- a/src/generate.cpp +++ b/src/generate.cpp @@ -314,7 +314,7 @@ std::string cmd::generate(int ind) std::string ret; // var assigns for(auto it: var_assigns) - ret += it.first->generate(ind) + '=' + it.second->generate(ind) + ' '; + ret += it.first->generate(ind) + it.second->generate(ind) + ' '; if(args!=nullptr && args->size()>0) { diff --git a/src/parse.cpp b/src/parse.cpp index e398113..675ebee 100644 --- a/src/parse.cpp +++ b/src/parse.cpp @@ -154,7 +154,7 @@ std::pair parse_var(const char* in, uint32_t size, uint32_t ret->index=pp.first; i = pp.second; if(in[i] != ']') - throw PARSE_ERROR( "Expecting ']'", i ); + throw PARSE_ERROR( "Expecting ']'", i ); i++; } } @@ -656,7 +656,7 @@ std::pair parse_arglist(const char* in, uint32_t size, uint3 if(word_eq("]]", in, size, i, ARG_END)) { ret->add(new arg("]]")); - i = skip_chars(in, size, i+2, SEPARATORS); + i = skip_chars(in, size, i+2, SPACES); if( !is_in(in[i], ARGLIST_END) ) throw PARSE_ERROR("Unexpected argument after ']]'", i); break; @@ -1109,6 +1109,7 @@ std::pair parse_cmd(const char* in, uint32_t size, uint32_t star try { #endif +; while(true) // parse var assigns { auto vp=parse_var(in, size, i, false, true); @@ -1121,18 +1122,19 @@ std::pair parse_cmd(const char* in, uint32_t size, uint32_t star { auto pp=parse_arg(in, size, i+1, ")"); ta=pp.first; - ta->insert(0, new string_subarg("(") ); + ta->insert(0, new string_subarg("=(") ); ta->add(new string_subarg(")") ); i=pp.second+1; } else if( is_in(in[i], ARG_END) ) // no value : give empty value { - ta = new arg; + ta = new arg("="); } else { auto pp=parse_arg(in, size, i); ta=pp.first; + ta->insert(0, new string_subarg("=")); i=pp.second; } ret->var_assigns.push_back(std::make_pair(vp.first, ta));