Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
V
varnish-cache
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Commits
Open sidebar
varnishcache
varnish-cache
Commits
d6ed35e9
Commit
d6ed35e9
authored
Feb 20, 2018
by
Poul-Henning Kamp
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Support versioned symbols.
parent
0c5569f7
Changes
10
Show whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
51 additions
and
40 deletions
+51
-40
generate.py
lib/libvcc/generate.py
+17
-18
vcc_action.c
lib/libvcc/vcc_action.c
+1
-1
vcc_compile.c
lib/libvcc/vcc_compile.c
+3
-2
vcc_compile.h
lib/libvcc/vcc_compile.h
+2
-1
vcc_expr.c
lib/libvcc/vcc_expr.c
+4
-4
vcc_parse.c
lib/libvcc/vcc_parse.c
+1
-1
vcc_storage.c
lib/libvcc/vcc_storage.c
+2
-2
vcc_symb.c
lib/libvcc/vcc_symb.c
+15
-6
vcc_vmod.c
lib/libvcc/vcc_vmod.c
+4
-4
vcc_xref.c
lib/libvcc/vcc_xref.c
+2
-1
No files found.
lib/libvcc/generate.py
View file @
d6ed35e9
...
@@ -166,13 +166,15 @@ returns = (
...
@@ -166,13 +166,15 @@ returns = (
# 'backend' means all methods tagged "B"
# 'backend' means all methods tagged "B"
# 'both' means all methods tagged "B" or "C"
# 'both' means all methods tagged "B" or "C"
sp_variables
=
collections
.
OrderedDict
()
varprotos
=
{}
def
varproto
(
s
):
if
not
s
in
varprotos
:
fh
.
write
(
s
+
";
\n
"
)
varprotos
[
s
]
=
True
class
vardef
(
object
):
class
vardef
(
object
):
def
__init__
(
self
,
nam
,
typ
,
rd
,
wr
,
wu
,
vlo
,
vhi
):
def
__init__
(
self
,
nam
,
typ
,
rd
,
wr
,
wu
,
vlo
,
vhi
):
if
nam
in
sp_variables
:
return
sp_variables
[
nam
]
=
self
self
.
nam
=
nam
self
.
nam
=
nam
self
.
typ
=
typ
self
.
typ
=
typ
self
.
rd
=
rd
self
.
rd
=
rd
...
@@ -181,6 +183,8 @@ class vardef(object):
...
@@ -181,6 +183,8 @@ class vardef(object):
self
.
vlo
=
vlo
self
.
vlo
=
vlo
self
.
vhi
=
vhi
self
.
vhi
=
vhi
self
.
emit
()
def
emit
(
self
):
def
emit
(
self
):
fh
.
write
(
"
\n
"
)
fh
.
write
(
"
\n
"
)
fo
.
write
(
"
\n
"
)
fo
.
write
(
"
\n
"
)
...
@@ -190,11 +194,11 @@ class vardef(object):
...
@@ -190,11 +194,11 @@ class vardef(object):
# fo.write("\t{ \"%s\", %s,\n" % (nm, self.typ))
# fo.write("\t{ \"%s\", %s,\n" % (nm, self.typ))
fo
.
write
(
"
\t
sym = VCC_MkSym(tl,
\"
%
s
\"
, "
%
self
.
nam
)
fo
.
write
(
"
\t
sym = VCC_MkSym(tl,
\"
%
s
\"
, "
%
self
.
nam
)
if
(
self
.
typ
==
"HEADER"
):
if
(
self
.
typ
==
"HEADER"
):
fo
.
write
(
" SYM_NONE
);
\n
"
)
fo
.
write
(
" SYM_NONE
,
%
d,
%
d);
\n
"
%
(
self
.
vlo
,
self
.
vhi
)
)
fo
.
write
(
"
\t
AN(sym);
\n
"
);
fo
.
write
(
"
\t
AN(sym);
\n
"
);
fo
.
write
(
"
\t
sym->wildcard = vcc_Var_Wildcard;
\n
"
)
fo
.
write
(
"
\t
sym->wildcard = vcc_Var_Wildcard;
\n
"
)
else
:
else
:
fo
.
write
(
" SYM_VAR
);
\n
"
)
fo
.
write
(
" SYM_VAR
,
%
d,
%
d);
\n
"
%
(
self
.
vlo
,
self
.
vhi
)
)
fo
.
write
(
"
\t
AN(sym);
\n
"
)
fo
.
write
(
"
\t
AN(sym);
\n
"
)
fo
.
write
(
"
\t
sym->type =
%
s;
\n
"
%
self
.
typ
)
fo
.
write
(
"
\t
sym->type =
%
s;
\n
"
%
self
.
typ
)
fo
.
write
(
"
\t
sym->eval = vcc_Eval_Var;
\n
"
)
fo
.
write
(
"
\t
sym->eval = vcc_Eval_Var;
\n
"
)
...
@@ -205,7 +209,7 @@ class vardef(object):
...
@@ -205,7 +209,7 @@ class vardef(object):
fo
.
write
(
'";
\n
'
)
fo
.
write
(
'";
\n
'
)
elif
len
(
self
.
rd
):
elif
len
(
self
.
rd
):
fo
.
write
(
'
\t
sym->rname = "VRT_r_
%
s(ctx)";
\n
'
%
cnam
)
fo
.
write
(
'
\t
sym->rname = "VRT_r_
%
s(ctx)";
\n
'
%
cnam
)
fh
.
write
(
"VCL_"
+
self
.
typ
+
" VRT_r_
%
s(VRT_CTX);
\n
"
%
cnam
)
varproto
(
"VCL_"
+
self
.
typ
+
" VRT_r_
%
s(VRT_CTX)
"
%
cnam
)
fo
.
write
(
"
\t
sym->r_methods =
\n
"
)
fo
.
write
(
"
\t
sym->r_methods =
\n
"
)
restrict
(
fo
,
self
.
rd
)
restrict
(
fo
,
self
.
rd
)
fo
.
write
(
";
\n
"
)
fo
.
write
(
";
\n
"
)
...
@@ -216,17 +220,18 @@ class vardef(object):
...
@@ -216,17 +220,18 @@ class vardef(object):
fo
.
write
(
'";
\n
'
)
fo
.
write
(
'";
\n
'
)
elif
len
(
self
.
wr
):
elif
len
(
self
.
wr
):
fo
.
write
(
'
\t
sym->lname = "VRT_l_
%
s(ctx, ";
\n
'
%
cnam
)
fo
.
write
(
'
\t
sym->lname = "VRT_l_
%
s(ctx, ";
\n
'
%
cnam
)
fh
.
write
(
"void VRT_l_
%
s(VRT_CTX, "
%
cnam
)
s
=
"void VRT_l_
%
s(VRT_CTX, "
%
cnam
if
self
.
typ
!=
"STRING"
and
self
.
typ
!=
"BODY"
:
if
self
.
typ
!=
"STRING"
and
self
.
typ
!=
"BODY"
:
fh
.
write
(
"VCL_"
+
self
.
typ
+
");
\n
"
)
s
+=
"VCL_"
+
self
.
typ
+
")"
else
:
else
:
fh
.
write
(
ctyp
+
", ...);
\n
"
)
s
+=
ctyp
+
", ...)"
varproto
(
s
);
fo
.
write
(
"
\t
sym->w_methods =
\n
"
)
fo
.
write
(
"
\t
sym->w_methods =
\n
"
)
restrict
(
fo
,
self
.
wr
)
restrict
(
fo
,
self
.
wr
)
fo
.
write
(
";
\n
"
)
fo
.
write
(
";
\n
"
)
if
len
(
self
.
uns
):
if
len
(
self
.
uns
):
fh
.
write
(
"void VRT_u_
%
s(VRT_CTX);
\n
"
%
cnam
)
varproto
(
"void VRT_u_
%
s(VRT_CTX)
"
%
cnam
)
fo
.
write
(
'
\t
sym->uname = "VRT_u_
%
s(ctx)";
\n
'
%
cnam
)
fo
.
write
(
'
\t
sym->uname = "VRT_u_
%
s(ctx)";
\n
'
%
cnam
)
fo
.
write
(
'
\t
sym->u_methods =
\n
'
)
fo
.
write
(
'
\t
sym->u_methods =
\n
'
)
restrict
(
fo
,
self
.
uns
)
restrict
(
fo
,
self
.
uns
)
...
@@ -297,8 +302,6 @@ def parse_var_doc(fn):
...
@@ -297,8 +302,6 @@ def parse_var_doc(fn):
m
+=
1
m
+=
1
parse_var
(
l
[
n
-
2
:
m
-
1
])
parse_var
(
l
[
n
-
2
:
m
-
1
])
parse_var_doc
(
join
(
buildroot
,
"doc/sphinx/reference/vcl_var.rst"
))
stv_variables
=
(
stv_variables
=
(
(
'free_space'
,
'BYTES'
,
"0."
,
'storage.<name>.free_space'
,
"""
(
'free_space'
,
'BYTES'
,
"0."
,
'storage.<name>.free_space'
,
"""
Free space available in the named stevedore. Only available for
Free space available in the named stevedore. Only available for
...
@@ -722,11 +725,7 @@ vcc_Var_Init(struct vcc *tl)
...
@@ -722,11 +725,7 @@ vcc_Var_Init(struct vcc *tl)
"""
)
"""
)
parse_var_doc
(
join
(
buildroot
,
"doc/sphinx/reference/vcl_var.rst"
))
for
i
in
sp_variables
.
values
():
i
.
emit
()
# fo.write("\t{ NULL }\n};\n\n")
fo
.
write
(
"}
\n
"
)
fo
.
write
(
"}
\n
"
)
for
i
in
stv_variables
:
for
i
in
stv_variables
:
...
...
lib/libvcc/vcc_action.c
View file @
d6ed35e9
...
@@ -364,7 +364,7 @@ vcc_act_synthetic(struct vcc *tl, struct token *t, struct symbol *sym)
...
@@ -364,7 +364,7 @@ vcc_act_synthetic(struct vcc *tl, struct token *t, struct symbol *sym)
#define ACT(name, func, mask) \
#define ACT(name, func, mask) \
do { \
do { \
const char pp[] = #name; \
const char pp[] = #name; \
sym = VCC_MkSym(tl, pp, SYM_ACTION
);
\
sym = VCC_MkSym(tl, pp, SYM_ACTION
, VCL_LOW, VCL_HIGH);
\
AN(sym); \
AN(sym); \
sym->action = func; \
sym->action = func; \
sym->action_mask = (mask); \
sym->action_mask = (mask); \
...
...
lib/libvcc/vcc_compile.c
View file @
d6ed35e9
...
@@ -739,7 +739,8 @@ VCC_New(void)
...
@@ -739,7 +739,8 @@ VCC_New(void)
assert
(
tl
->
fh
!=
NULL
);
assert
(
tl
->
fh
!=
NULL
);
for
(
i
=
1
;
i
<
VCL_MET_MAX
;
i
++
)
{
for
(
i
=
1
;
i
<
VCL_MET_MAX
;
i
++
)
{
sym
=
VCC_MkSym
(
tl
,
method_tab
[
i
].
name
,
SYM_SUB
);
sym
=
VCC_MkSym
(
tl
,
method_tab
[
i
].
name
,
SYM_SUB
,
VCL_LOW
,
VCL_HIGH
);
p
=
vcc_NewProc
(
tl
,
sym
);
p
=
vcc_NewProc
(
tl
,
sym
);
p
->
method
=
&
method_tab
[
i
];
p
->
method
=
&
method_tab
[
i
];
VSB_printf
(
p
->
cname
,
"VGC_function_%s"
,
p
->
method
->
name
);
VSB_printf
(
p
->
cname
,
"VGC_function_%s"
,
p
->
method
->
name
);
...
@@ -822,7 +823,7 @@ vcc_predef_vcl(struct vcc *vcc, const char *name)
...
@@ -822,7 +823,7 @@ vcc_predef_vcl(struct vcc *vcc, const char *name)
{
{
struct
symbol
*
sym
;
struct
symbol
*
sym
;
sym
=
VCC_MkSym
(
vcc
,
name
,
SYM_VCL
);
sym
=
VCC_MkSym
(
vcc
,
name
,
SYM_VCL
,
VCL_LOW
,
VCL_HIGH
);
AN
(
sym
);
AN
(
sym
);
sym
->
type
=
VCL
;
sym
->
type
=
VCL
;
sym
->
r_methods
=
VCL_MET_RECV
;
sym
->
r_methods
=
VCL_MET_RECV
;
...
...
lib/libvcc/vcc_compile.h
View file @
d6ed35e9
...
@@ -338,7 +338,8 @@ void vcc_stevedore(struct vcc *vcc, const char *stv_name);
...
@@ -338,7 +338,8 @@ void vcc_stevedore(struct vcc *vcc, const char *stv_name);
/* vcc_symb.c */
/* vcc_symb.c */
void
VCC_PrintCName
(
struct
vsb
*
vsb
,
const
char
*
b
,
const
char
*
e
);
void
VCC_PrintCName
(
struct
vsb
*
vsb
,
const
char
*
b
,
const
char
*
e
);
struct
symbol
*
VCC_MkSym
(
struct
vcc
*
tl
,
const
char
*
b
,
vcc_kind_t
);
struct
symbol
*
VCC_MkSym
(
struct
vcc
*
tl
,
const
char
*
b
,
vcc_kind_t
,
unsigned
,
unsigned
);
extern
const
char
XREF_NONE
[];
extern
const
char
XREF_NONE
[];
extern
const
char
XREF_DEF
[];
extern
const
char
XREF_DEF
[];
extern
const
char
XREF_REF
[];
extern
const
char
XREF_REF
[];
...
...
lib/libvcc/vcc_expr.c
View file @
d6ed35e9
...
@@ -1280,25 +1280,25 @@ vcc_Expr_Init(struct vcc *tl)
...
@@ -1280,25 +1280,25 @@ vcc_Expr_Init(struct vcc *tl)
{
{
struct
symbol
*
sym
;
struct
symbol
*
sym
;
sym
=
VCC_MkSym
(
tl
,
"regsub"
,
SYM_FUNC
);
sym
=
VCC_MkSym
(
tl
,
"regsub"
,
SYM_FUNC
,
VCL_LOW
,
VCL_HIGH
);
AN
(
sym
);
AN
(
sym
);
sym
->
type
=
STRING
;
sym
->
type
=
STRING
;
sym
->
eval
=
vcc_Eval_Regsub
;
sym
->
eval
=
vcc_Eval_Regsub
;
sym
->
eval_priv
=
NULL
;
sym
->
eval_priv
=
NULL
;
sym
=
VCC_MkSym
(
tl
,
"regsuball"
,
SYM_FUNC
);
sym
=
VCC_MkSym
(
tl
,
"regsuball"
,
SYM_FUNC
,
VCL_LOW
,
VCL_HIGH
);
AN
(
sym
);
AN
(
sym
);
sym
->
type
=
STRING
;
sym
->
type
=
STRING
;
sym
->
eval
=
vcc_Eval_Regsub
;
sym
->
eval
=
vcc_Eval_Regsub
;
sym
->
eval_priv
=
sym
;
sym
->
eval_priv
=
sym
;
sym
=
VCC_MkSym
(
tl
,
"true"
,
SYM_FUNC
);
sym
=
VCC_MkSym
(
tl
,
"true"
,
SYM_FUNC
,
VCL_LOW
,
VCL_HIGH
);
AN
(
sym
);
AN
(
sym
);
sym
->
type
=
BOOL
;
sym
->
type
=
BOOL
;
sym
->
eval
=
vcc_Eval_BoolConst
;
sym
->
eval
=
vcc_Eval_BoolConst
;
sym
->
eval_priv
=
sym
;
sym
->
eval_priv
=
sym
;
sym
=
VCC_MkSym
(
tl
,
"false"
,
SYM_FUNC
);
sym
=
VCC_MkSym
(
tl
,
"false"
,
SYM_FUNC
,
VCL_LOW
,
VCL_HIGH
);
AN
(
sym
);
AN
(
sym
);
sym
->
type
=
BOOL
;
sym
->
type
=
BOOL
;
sym
->
eval
=
vcc_Eval_BoolConst
;
sym
->
eval
=
vcc_Eval_BoolConst
;
...
...
lib/libvcc/vcc_parse.c
View file @
d6ed35e9
...
@@ -430,5 +430,5 @@ vcc_Parse_Init(struct vcc *tl)
...
@@ -430,5 +430,5 @@ vcc_Parse_Init(struct vcc *tl)
struct
toplev
*
tp
;
struct
toplev
*
tp
;
for
(
tp
=
toplev
;
tp
->
name
!=
NULL
;
tp
++
)
for
(
tp
=
toplev
;
tp
->
name
!=
NULL
;
tp
++
)
AN
(
VCC_MkSym
(
tl
,
tp
->
name
,
SYM_NONE
));
AN
(
VCC_MkSym
(
tl
,
tp
->
name
,
SYM_NONE
,
VCL_LOW
,
VCL_HIGH
));
}
}
lib/libvcc/vcc_storage.c
View file @
d6ed35e9
...
@@ -84,7 +84,7 @@ vcc_stevedore(struct vcc *vcc, const char *stv_name)
...
@@ -84,7 +84,7 @@ vcc_stevedore(struct vcc *vcc, const char *stv_name)
CHECK_OBJ_NOTNULL
(
vcc
,
VCC_MAGIC
);
CHECK_OBJ_NOTNULL
(
vcc
,
VCC_MAGIC
);
bprintf
(
buf
,
"storage.%s"
,
stv_name
);
bprintf
(
buf
,
"storage.%s"
,
stv_name
);
sym
=
VCC_MkSym
(
vcc
,
buf
,
SYM_VAR
);
sym
=
VCC_MkSym
(
vcc
,
buf
,
SYM_VAR
,
VCL_LOW
,
VCL_40
);
AN
(
sym
);
AN
(
sym
);
sym
->
type
=
STEVEDORE
;
sym
->
type
=
STEVEDORE
;
sym
->
eval
=
vcc_Eval_Var
;
sym
->
eval
=
vcc_Eval_Var
;
...
@@ -94,7 +94,7 @@ vcc_stevedore(struct vcc *vcc, const char *stv_name)
...
@@ -94,7 +94,7 @@ vcc_stevedore(struct vcc *vcc, const char *stv_name)
for
(
sv
=
stvars
;
sv
->
name
!=
NULL
;
sv
++
)
{
for
(
sv
=
stvars
;
sv
->
name
!=
NULL
;
sv
++
)
{
bprintf
(
buf
,
"storage.%s.%s"
,
stv_name
,
sv
->
name
);
bprintf
(
buf
,
"storage.%s.%s"
,
stv_name
,
sv
->
name
);
sym
=
VCC_MkSym
(
vcc
,
buf
,
SYM_VAR
);
sym
=
VCC_MkSym
(
vcc
,
buf
,
SYM_VAR
,
VCL_LOW
,
VCL_40
);
AN
(
sym
);
AN
(
sym
);
sym
->
type
=
sv
->
type
;
sym
->
type
=
sv
->
type
;
sym
->
eval
=
vcc_Eval_Var
;
sym
->
eval
=
vcc_Eval_Var
;
...
...
lib/libvcc/vcc_symb.c
View file @
d6ed35e9
...
@@ -100,13 +100,15 @@ vcc_new_symbol(struct vcc *tl, const char *b, const char *e)
...
@@ -100,13 +100,15 @@ vcc_new_symbol(struct vcc *tl, const char *b, const char *e)
static
struct
symbol
*
static
struct
symbol
*
VCC_Symbol
(
struct
vcc
*
tl
,
struct
symbol
*
parent
,
VCC_Symbol
(
struct
vcc
*
tl
,
struct
symbol
*
parent
,
const
char
*
b
,
const
char
*
e
,
vcc_kind_t
kind
,
int
create
)
const
char
*
b
,
const
char
*
e
,
vcc_kind_t
kind
,
int
create
,
unsigned
vlo
,
unsigned
vhi
)
{
{
const
char
*
q
;
const
char
*
q
;
struct
symbol
*
sym
,
*
sym2
=
NULL
;
struct
symbol
*
sym
,
*
sym2
=
NULL
;
size_t
l
;
size_t
l
;
int
i
;
int
i
;
assert
(
vlo
<=
vhi
);
if
(
tl
->
symbols
==
NULL
)
if
(
tl
->
symbols
==
NULL
)
tl
->
symbols
=
vcc_new_symbol
(
tl
,
"<root>"
,
NULL
);
tl
->
symbols
=
vcc_new_symbol
(
tl
,
"<root>"
,
NULL
);
if
(
parent
==
NULL
)
if
(
parent
==
NULL
)
...
@@ -128,6 +130,8 @@ VCC_Symbol(struct vcc *tl, struct symbol *parent,
...
@@ -128,6 +130,8 @@ VCC_Symbol(struct vcc *tl, struct symbol *parent,
assert
(
l
>
0
);
assert
(
l
>
0
);
VTAILQ_FOREACH
(
sym
,
&
parent
->
children
,
list
)
{
VTAILQ_FOREACH
(
sym
,
&
parent
->
children
,
list
)
{
if
(
sym
->
lorev
>
vhi
||
sym
->
hirev
<
vlo
)
continue
;
i
=
strncasecmp
(
sym
->
name
,
b
,
l
);
i
=
strncasecmp
(
sym
->
name
,
b
,
l
);
if
(
i
<
0
)
if
(
i
<
0
)
continue
;
continue
;
...
@@ -159,17 +163,21 @@ VCC_Symbol(struct vcc *tl, struct symbol *parent,
...
@@ -159,17 +163,21 @@ VCC_Symbol(struct vcc *tl, struct symbol *parent,
if
(
i
>
0
||
(
i
==
0
&&
l
<
sym
->
nlen
))
if
(
i
>
0
||
(
i
==
0
&&
l
<
sym
->
nlen
))
break
;
break
;
}
}
sym2
->
lorev
=
vlo
;
sym2
->
hirev
=
vhi
;
if
(
sym
==
NULL
)
if
(
sym
==
NULL
)
VTAILQ_INSERT_TAIL
(
&
parent
->
children
,
sym2
,
list
);
VTAILQ_INSERT_TAIL
(
&
parent
->
children
,
sym2
,
list
);
else
else
VTAILQ_INSERT_BEFORE
(
sym
,
sym2
,
list
);
VTAILQ_INSERT_BEFORE
(
sym
,
sym2
,
list
);
return
(
VCC_Symbol
(
tl
,
parent
,
b
,
e
,
kind
,
-
1
));
return
(
VCC_Symbol
(
tl
,
parent
,
b
,
e
,
kind
,
-
1
,
vlo
,
vhi
));
}
}
if
(
sym
==
NULL
&&
create
<
1
)
if
(
sym
==
NULL
&&
create
<
1
)
return
(
sym
);
return
(
sym
);
if
(
sym
==
NULL
)
{
if
(
sym
==
NULL
)
{
sym
=
vcc_new_symbol
(
tl
,
b
,
q
);
sym
=
vcc_new_symbol
(
tl
,
b
,
q
);
sym
->
parent
=
parent
;
sym
->
parent
=
parent
;
sym
->
lorev
=
vlo
;
sym
->
hirev
=
vhi
;
if
(
sym2
!=
NULL
)
if
(
sym2
!=
NULL
)
VTAILQ_INSERT_BEFORE
(
sym2
,
sym
,
list
);
VTAILQ_INSERT_BEFORE
(
sym2
,
sym
,
list
);
else
else
...
@@ -180,7 +188,7 @@ VCC_Symbol(struct vcc *tl, struct symbol *parent,
...
@@ -180,7 +188,7 @@ VCC_Symbol(struct vcc *tl, struct symbol *parent,
if
(
q
==
e
)
if
(
q
==
e
)
return
(
sym
);
return
(
sym
);
assert
(
*
q
==
'.'
);
assert
(
*
q
==
'.'
);
return
(
VCC_Symbol
(
tl
,
sym
,
++
q
,
e
,
kind
,
create
));
return
(
VCC_Symbol
(
tl
,
sym
,
++
q
,
e
,
kind
,
create
,
vlo
,
vhi
));
}
}
const
char
XREF_NONE
[]
=
"xref_none"
;
const
char
XREF_NONE
[]
=
"xref_none"
;
...
@@ -206,7 +214,7 @@ VCC_SymbolGet(struct vcc *tl, vcc_kind_t kind, const char *e, const char *x)
...
@@ -206,7 +214,7 @@ VCC_SymbolGet(struct vcc *tl, vcc_kind_t kind, const char *e, const char *x)
}
}
sym
=
VCC_Symbol
(
tl
,
NULL
,
tl
->
t
->
b
,
tl
->
t
->
e
,
kind
,
sym
=
VCC_Symbol
(
tl
,
NULL
,
tl
->
t
->
b
,
tl
->
t
->
e
,
kind
,
e
==
SYMTAB_CREATE
?
1
:
0
);
e
==
SYMTAB_CREATE
?
1
:
0
,
tl
->
syntax
,
tl
->
syntax
);
if
(
sym
==
NULL
&&
e
==
SYMTAB_NOERR
)
if
(
sym
==
NULL
&&
e
==
SYMTAB_NOERR
)
return
(
sym
);
return
(
sym
);
if
(
sym
==
NULL
)
{
if
(
sym
==
NULL
)
{
...
@@ -267,11 +275,12 @@ VCC_SymbolGet(struct vcc *tl, vcc_kind_t kind, const char *e, const char *x)
...
@@ -267,11 +275,12 @@ VCC_SymbolGet(struct vcc *tl, vcc_kind_t kind, const char *e, const char *x)
}
}
struct
symbol
*
struct
symbol
*
VCC_MkSym
(
struct
vcc
*
tl
,
const
char
*
b
,
vcc_kind_t
kind
)
VCC_MkSym
(
struct
vcc
*
tl
,
const
char
*
b
,
vcc_kind_t
kind
,
unsigned
vlo
,
unsigned
vhi
)
{
{
struct
symbol
*
sym
;
struct
symbol
*
sym
;
sym
=
VCC_Symbol
(
tl
,
NULL
,
b
,
NULL
,
kind
,
1
);
sym
=
VCC_Symbol
(
tl
,
NULL
,
b
,
NULL
,
kind
,
1
,
vlo
,
vhi
);
sym
->
noref
=
1
;
sym
->
noref
=
1
;
return
(
sym
);
return
(
sym
);
}
}
...
...
lib/libvcc/vcc_vmod.c
View file @
d6ed35e9
...
@@ -94,7 +94,7 @@ vcc_ParseImport(struct vcc *tl)
...
@@ -94,7 +94,7 @@ vcc_ParseImport(struct vcc *tl)
}
}
bprintf
(
fn
,
"%.*s"
,
PF
(
mod
));
bprintf
(
fn
,
"%.*s"
,
PF
(
mod
));
msym
=
VCC_MkSym
(
tl
,
fn
,
SYM_VMOD
);
msym
=
VCC_MkSym
(
tl
,
fn
,
SYM_VMOD
,
VCL_LOW
,
VCL_HIGH
);
ERRCHK
(
tl
);
ERRCHK
(
tl
);
AN
(
msym
);
AN
(
msym
);
msym
->
def_b
=
t1
;
msym
->
def_b
=
t1
;
...
@@ -223,7 +223,7 @@ vcc_ParseImport(struct vcc *tl)
...
@@ -223,7 +223,7 @@ vcc_ParseImport(struct vcc *tl)
p
=
*
spec
;
p
=
*
spec
;
if
(
!
strcmp
(
p
,
"$OBJ"
))
{
if
(
!
strcmp
(
p
,
"$OBJ"
))
{
p
+=
strlen
(
p
)
+
1
;
p
+=
strlen
(
p
)
+
1
;
sym
=
VCC_MkSym
(
tl
,
p
,
SYM_OBJECT
);
sym
=
VCC_MkSym
(
tl
,
p
,
SYM_OBJECT
,
VCL_LOW
,
VCL_HIGH
);
XXXAN
(
sym
);
XXXAN
(
sym
);
sym
->
extra
=
p
;
sym
->
extra
=
p
;
sym
->
vmod
=
msym
->
name
;
sym
->
vmod
=
msym
->
name
;
...
@@ -242,7 +242,7 @@ vcc_ParseImport(struct vcc *tl)
...
@@ -242,7 +242,7 @@ vcc_ParseImport(struct vcc *tl)
p
,
PF
(
mod
));
p
,
PF
(
mod
));
}
else
if
(
!
strcmp
(
p
,
"$FUNC"
))
{
}
else
if
(
!
strcmp
(
p
,
"$FUNC"
))
{
p
+=
strlen
(
p
)
+
1
;
p
+=
strlen
(
p
)
+
1
;
sym
=
VCC_MkSym
(
tl
,
p
,
SYM_FUNC
);
sym
=
VCC_MkSym
(
tl
,
p
,
SYM_FUNC
,
VCL_LOW
,
VCL_HIGH
);
ERRCHK
(
tl
);
ERRCHK
(
tl
);
AN
(
sym
);
AN
(
sym
);
sym
->
action
=
vcc_Act_Call
;
sym
->
action
=
vcc_Act_Call
;
...
@@ -331,7 +331,7 @@ vcc_Act_New(struct vcc *tl, struct token *t, struct symbol *sym)
...
@@ -331,7 +331,7 @@ vcc_Act_New(struct vcc *tl, struct token *t, struct symbol *sym)
while
(
*
p
!=
'\0'
)
{
while
(
*
p
!=
'\0'
)
{
p
+=
strlen
(
s_obj
);
p
+=
strlen
(
s_obj
);
bprintf
(
buf2
,
"%s%s"
,
sy1
->
name
,
p
);
bprintf
(
buf2
,
"%s%s"
,
sy1
->
name
,
p
);
sy3
=
VCC_MkSym
(
tl
,
buf2
,
SYM_FUNC
);
sy3
=
VCC_MkSym
(
tl
,
buf2
,
SYM_FUNC
,
VCL_LOW
,
VCL_HIGH
);
AN
(
sy3
);
AN
(
sy3
);
sy3
->
action
=
vcc_Act_Call
;
sy3
->
action
=
vcc_Act_Call
;
sy3
->
eval
=
vcc_Eval_SymFunc
;
sy3
->
eval
=
vcc_Eval_SymFunc
;
...
...
lib/libvcc/vcc_xref.c
View file @
d6ed35e9
...
@@ -338,8 +338,9 @@ vcc_xreftable(struct vcc *tl, const struct symbol *sym)
...
@@ -338,8 +338,9 @@ vcc_xreftable(struct vcc *tl, const struct symbol *sym)
CHECK_OBJ_NOTNULL
(
sym
,
SYMBOL_MAGIC
);
CHECK_OBJ_NOTNULL
(
sym
,
SYMBOL_MAGIC
);
CHECK_OBJ_NOTNULL
(
sym
->
kind
,
KIND_MAGIC
);
CHECK_OBJ_NOTNULL
(
sym
->
kind
,
KIND_MAGIC
);
CHECK_OBJ_NOTNULL
(
sym
->
type
,
TYPE_MAGIC
);
CHECK_OBJ_NOTNULL
(
sym
->
type
,
TYPE_MAGIC
);
Fc
(
tl
,
0
,
" * %-
7
s "
,
sym
->
kind
->
name
);
Fc
(
tl
,
0
,
" * %-
8
s "
,
sym
->
kind
->
name
);
Fc
(
tl
,
0
,
" %-9s "
,
sym
->
type
->
name
);
Fc
(
tl
,
0
,
" %-9s "
,
sym
->
type
->
name
);
Fc
(
tl
,
0
,
" %2u %2u "
,
sym
->
lorev
,
sym
->
hirev
);
vcc_pnam
(
tl
,
sym
);
vcc_pnam
(
tl
,
sym
);
if
(
sym
->
wildcard
!=
NULL
)
if
(
sym
->
wildcard
!=
NULL
)
Fc
(
tl
,
0
,
"*"
);
Fc
(
tl
,
0
,
"*"
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment