Rather than "argv:[argc::]string", the argv parameter is now
"argv:[]string"
This will be the syntax for general array references.
Signed-off-by: NeilBrown <neil@brown.name>
- func main(argv:[argc::]string)
+ func main(argv:[]string)
a := 23; b:=12 ; b1 := -b
print a, b, a+b, a-b, a*b, a/b, a%b
print a<b, a<=b, a>b, a>=b, a<a, a==b, a==a
a := 23; b:=12 ; b1 := -b
print a, b, a+b, a-b, a*b, a/b, a%b
print a<b, a<=b, a>b, a>=b, a<a, a==b, a==a
- func main(av:[ac::number]string)
A := $av[1]; B := $av[2]
astr := av[3]
l := av[]
A := $av[1]; B := $av[2]
astr := av[3]
l := av[]
freelist(lp)
@free = list.next
freelist(lp)
@free = list.next
- func main(argv:[ac::]string)
+ func main(argv:[]string)
list : linkage
insert(list, "@start");
list : linkage
insert(list, "@start");
/* Both are arrays, so we can look at details */
if (!type_compat(require->array.member, have->array.member, 0))
return 0;
/* Both are arrays, so we can look at details */
if (!type_compat(require->array.member, have->array.member, 0))
return 0;
- if (have->array.unspec && require->array.unspec) {
- if (have->array.vsize && require->array.vsize &&
- have->array.vsize != require->array.vsize) // UNTESTED
- /* sizes might not be the same */
- return 0; // UNTESTED
- return 1;
- }
+ if (have->array.unspec && require->array.unspec &&
+ have->array.size != require->array.size)
+ return 0; // UNTESTED
if (have->array.unspec || require->array.unspec)
if (have->array.unspec || require->array.unspec)
if (require->array.vsize == NULL && have->array.vsize == NULL)
return require->array.size == have->array.size;
if (require->array.vsize == NULL && have->array.vsize == NULL)
return require->array.size == have->array.size;
$0->array.vsize = v;
} }$
$0->array.vsize = v;
} }$
-###### Grammar
- $*type
- OptType -> Type ${ $0 = $<1; }$
- | ${ $0 = NULL; }$
-
###### formal type grammar
###### formal type grammar
- | [ IDENTIFIER :: OptType ] Type ${ {
- struct variable *v = var_decl(c, $ID.txt);
-
- v->type = $<OT;
- v->constant = 1;
- if (!v->type)
- v->type = Tnum;
- $0 = add_anon_type(c, &array_prototype, "array[var]");
- $0->array.member = $<6;
+ | [ ] Type ${ {
+ $0 = add_anon_type(c, &array_prototype, "array[]");
+ $0->array.member = $<Type;
$0->array.size = 0;
$0->array.unspec = 1;
$0->array.size = 0;
$0->array.unspec = 1;
+ $0->array.vsize = NULL;
struct value *vl = var_value(c, v->var);
struct value arg;
struct type *t;
struct value *vl = var_value(c, v->var);
struct value arg;
struct type *t;
int i;
switch (anum++) {
case 0: /* argv */
t = v->var->type;
int i;
switch (anum++) {
case 0: /* argv */
t = v->var->type;
- mpq_init(argcq);
- mpq_set_ui(argcq, argc, 1);
- memcpy(var_value(c, t->array.vsize), &argcq, sizeof(argcq));
t->prepare_type(c, t, 0);
array_init(v->var->type, vl);
for (i = 0; i < argc; i++) {
t->prepare_type(c, t, 0);
array_init(v->var->type, vl);
for (i = 0; i < argc; i++) {
name:string
alive:Boolean
name:string
alive:Boolean
- func main(argv:[argc::]string)
+ func main(argv:[]string)
print "Hello World, what lovely oceans you have!"
print "Are there", five, "?"
print pi, pie, "but", cake
print "Hello World, what lovely oceans you have!"
print "Are there", five, "?"
print pi, pie, "but", cake