mirror of
git://projects.qi-hardware.com/eda-tools.git
synced 2024-11-26 16:32:53 +02:00
b2/: move basic handling of variables from subex to param
This commit is contained in:
parent
c1b6b2a5e4
commit
4a3e517935
41
b2/param.c
41
b2/param.c
@ -10,8 +10,10 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
#include <glib.h>
|
#include <glib.h>
|
||||||
|
|
||||||
|
#include "util.h"
|
||||||
#include "lang.h"
|
#include "lang.h"
|
||||||
#include "param.h"
|
#include "param.h"
|
||||||
|
|
||||||
@ -113,3 +115,42 @@ MKOPS(name);
|
|||||||
MKOPS(set);
|
MKOPS(set);
|
||||||
MKOPS(abs);
|
MKOPS(abs);
|
||||||
MKOPS(rel);
|
MKOPS(rel);
|
||||||
|
|
||||||
|
|
||||||
|
/* ----- Parameters as general-purpose (string) variables ------------------ */
|
||||||
|
|
||||||
|
|
||||||
|
struct param *make_var(const char *name, enum relop op, const char *val)
|
||||||
|
{
|
||||||
|
struct param *var;
|
||||||
|
|
||||||
|
var = alloc_type(struct param);
|
||||||
|
var->u.name = unique(name);
|
||||||
|
var->op = op;
|
||||||
|
var->value.u.s = unique(val);
|
||||||
|
var->next = NULL;
|
||||||
|
return var;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
const char *var_lookup(const struct param *vars, const char *name)
|
||||||
|
{
|
||||||
|
while (vars) {
|
||||||
|
if (vars->u.name == name)
|
||||||
|
return vars->value.u.s;
|
||||||
|
vars = vars->next;
|
||||||
|
}
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void free_vars(struct param *vars)
|
||||||
|
{
|
||||||
|
struct param *next;
|
||||||
|
|
||||||
|
while (vars) {
|
||||||
|
next = vars->next;
|
||||||
|
free(vars);
|
||||||
|
vars = next;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -116,4 +116,8 @@ extern const struct param_ops param_ops_set;
|
|||||||
extern const struct param_ops param_ops_abs;
|
extern const struct param_ops param_ops_abs;
|
||||||
extern const struct param_ops param_ops_rel;
|
extern const struct param_ops param_ops_rel;
|
||||||
|
|
||||||
|
struct param *make_var(const char *name, enum relop op, const char *val);
|
||||||
|
const char *var_lookup(const struct param *vars, const char *name);
|
||||||
|
void free_vars(struct param *vars);
|
||||||
|
|
||||||
#endif /* !PARAM_H */
|
#endif /* !PARAM_H */
|
||||||
|
36
b2/subex.c
36
b2/subex.c
@ -135,19 +135,6 @@ static char *compose(const struct chunk *c,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
struct param *make_var(const char *name, enum relop op, const char *val)
|
|
||||||
{
|
|
||||||
struct param *var;
|
|
||||||
|
|
||||||
var = alloc_type(struct param);
|
|
||||||
var->u.name = unique(name);
|
|
||||||
var->op = op;
|
|
||||||
var->value.u.s = unique(val);
|
|
||||||
var->next = NULL;
|
|
||||||
return var;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static void do_assign(const char *name, struct param **out, enum relop op,
|
static void do_assign(const char *name, struct param **out, enum relop op,
|
||||||
const char *val)
|
const char *val)
|
||||||
{
|
{
|
||||||
@ -250,26 +237,3 @@ struct param *substitute(const struct subst *sub, const struct param *in)
|
|||||||
recurse_sub(sub, in, NULL, NULL, NULL, &out);
|
recurse_sub(sub, in, NULL, NULL, NULL, &out);
|
||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
const char *var_lookup(const struct param *vars, const char *name)
|
|
||||||
{
|
|
||||||
while (vars) {
|
|
||||||
if (vars->u.name == name)
|
|
||||||
return vars->value.u.s;
|
|
||||||
vars = vars->next;
|
|
||||||
}
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void free_vars(struct param *vars)
|
|
||||||
{
|
|
||||||
struct param *next;
|
|
||||||
|
|
||||||
while (vars) {
|
|
||||||
next = vars->next;
|
|
||||||
free(vars);
|
|
||||||
vars = next;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
@ -18,8 +18,5 @@
|
|||||||
|
|
||||||
|
|
||||||
struct param *substitute(const struct subst *sub, const struct param *in);
|
struct param *substitute(const struct subst *sub, const struct param *in);
|
||||||
struct param *make_var(const char *name, enum relop op, const char *val);
|
|
||||||
const char *var_lookup(const struct param *vars, const char *name);
|
|
||||||
void free_vars(struct param *vars);
|
|
||||||
|
|
||||||
#endif /* !SUBEX_H */
|
#endif /* !SUBEX_H */
|
||||||
|
Loading…
Reference in New Issue
Block a user