version 1.14, 2005/07/15 20:43:23 |
version 1.15, 2007/07/20 12:32:45 |
|
|
} VarPattern; |
} VarPattern; |
|
|
struct LoopStuff { |
struct LoopStuff { |
char *var; |
struct LoopVar *var; |
char *expand; |
char *expand; |
SymTable *ctxt; |
|
bool err; |
bool err; |
}; |
}; |
|
|
|
|
{ |
{ |
struct LoopStuff *l = (struct LoopStuff *)p; |
struct LoopStuff *l = (struct LoopStuff *)p; |
|
|
return Var_Subst(s, l->ctxt, l->err); |
return Var_Subst(s, NULL, l->err); |
} |
} |
|
|
static int |
static int |
|
|
{ |
{ |
struct LoopStuff *l = (struct LoopStuff *)arg; |
struct LoopStuff *l = (struct LoopStuff *)arg; |
|
|
free(l->var); |
Var_DeleteLoopVar(l->var); |
free(l->expand); |
free(l->expand); |
} |
} |
|
|
|
|
{ |
{ |
static struct LoopStuff loop; |
static struct LoopStuff loop; |
const char *s; |
const char *s; |
|
const char *var; |
|
|
s = *p +1; |
s = *p +1; |
|
|
loop.var = NULL; |
loop.var = NULL; |
loop.expand = NULL; |
loop.expand = NULL; |
loop.ctxt =ctxt; |
|
loop.err = err; |
loop.err = err; |
loop.var = LoopGrab(&s); |
var = LoopGrab(&s); |
if (loop.var != NULL) { |
if (var != NULL) { |
loop.expand = LoopGrab(&s); |
loop.expand = LoopGrab(&s); |
if (*s == endc || *s == ':') { |
if (*s == endc || *s == ':') { |
*p = s; |
*p = s; |
|
loop.var = Var_NewLoopVar(var, NULL); |
return &loop; |
return &loop; |
} |
} |
} |
} |
|
|
|
|
char * |
char * |
VarModifiers_Apply(char *str, const struct Name *name, SymTable *ctxt, |
VarModifiers_Apply(char *str, const struct Name *name, SymTable *ctxt, |
bool err, bool *freePtr, const char *start, int endc, size_t *lengthPtr) |
bool err, bool *freePtr, const char *start, int paren, size_t *lengthPtr) |
{ |
{ |
const char *tstr; |
const char *tstr; |
bool atstart; /* Some ODE modifiers only make sense at start */ |
bool atstart; /* Some ODE modifiers only make sense at start */ |
|
char endc = paren == '(' ? ')' : '}'; |
|
|
tstr = start; |
tstr = start; |
/* |
/* |