NAME=avga # add global variable
FILE==
CMDS=<<EOF
avga foo 0x100 int
avg
avga bar 0x1000 char
avg
EOF
EXPECT=<<EOF
global int foo @ 0x100
global int foo @ 0x100
global char bar @ 0x1000
EOF
RUN

NAME=avgj # output in json mode
FILE==
CMDS=<<EOF
avga foo 0x100 int
avga bar 0x1000 char
avgj
EOF
EXPECT=<<EOF
[{"name":"foo","type":"int","addr":"0x100"},{"name":"bar","type":"char","addr":"0x1000"}]
EOF
RUN

NAME=avgd # delete global variable
FILE==
CMDS=<<EOF
avga foo 0x100 int
avga bar 0x1000 char
avg
avgd 0x100
avg
avga foofoo 0x100 int
avg
avgd 0x102
avg
EOF
EXPECT=<<EOF
global int foo @ 0x100
global char bar @ 0x1000
global char bar @ 0x1000
global char bar @ 0x1000
global int foofoo @ 0x100
global char bar @ 0x1000
EOF
RUN

NAME=avgn # rename global variable
FILE==
CMDS=<<EOF
avga foo 0x100 int
avg
avgn foo bar
avg
EOF
EXPECT=<<EOF
global int foo @ 0x100
global int bar @ 0x100
EOF
RUN

NAME=avgt # retype global variable
FILE==
CMDS=<<EOF
avga foo 0x100 int
avg
avgt foo char
avg
avgt foo "struct a { int a; char b; };"
avg
avgt foo "struct { int a; char b; void (*c)(int a, char b); };"
avg
avgt foo "union { int a; char b; };"
avg
avgt foo "enum { A=0,B,C,D };"
avg
avgt foo "enum foo { A=0,B,C,D };"
avg
avgt foo "void (*a)(int a, char b);"
avg
avgt foo "char *"
avg
avgt foo "char [50]"
avg
EOF
EXPECT=<<EOF
global int foo @ 0x100
global char foo @ 0x100
global struct a foo @ 0x100
global struct anonymous struct 0 foo @ 0x100
global union anonymous union 0 foo @ 0x100
global enum anonymous enum 0 foo @ 0x100
global enum foo foo @ 0x100
global void foo @ 0x100
global char * foo @ 0x100
global char [50] foo @ 0x100
EOF
RUN

NAME=avg <non-existing-var>
FILE==
CMDS=<<EOF
avg foo
EOF
EXPECT=<<EOF
EOF
EXPECT_ERR=<<EOF
ERROR: Global variable 'foo' does not exist!
EOF
RUN
