574 |
/* Make a list. */ |
/* Make a list. */ |
575 |
extern void pack(environment *env) |
extern void pack(environment *env) |
576 |
{ |
{ |
|
void* delimiter; |
|
577 |
stackitem *iterator, *temp; |
stackitem *iterator, *temp; |
578 |
value *pack; |
value *pack; |
579 |
|
|
|
delimiter= env->head->item->content.ptr; /* Get delimiter */ |
|
|
toss(env); |
|
|
|
|
580 |
iterator= env->head; |
iterator= env->head; |
581 |
|
|
582 |
if(iterator==NULL || iterator->item->content.ptr==delimiter) { |
if(iterator==NULL |
583 |
|
|| (iterator->item->type==symb |
584 |
|
&& ((symbol*)(iterator->item->content.ptr))->id[0]=='[')) { |
585 |
temp= NULL; |
temp= NULL; |
586 |
toss(env); |
toss(env); |
587 |
} else { |
} else { |
588 |
/* Search for first delimiter */ |
/* Search for first delimiter */ |
589 |
while(iterator->next!=NULL |
while(iterator->next!=NULL |
590 |
&& iterator->next->item->content.ptr!=delimiter) |
&& (iterator->next->item->type!=symb |
591 |
|
|| ((symbol*)(iterator->next->item->content.ptr))->id[0]!='[')) |
592 |
iterator= iterator->next; |
iterator= iterator->next; |
593 |
|
|
594 |
/* Extract list */ |
/* Extract list */ |
1173 |
push_int(env, i); |
push_int(env, i); |
1174 |
} |
} |
1175 |
|
|
|
push_sym(env, "["); |
|
1176 |
pack(env); if(env->err) return; |
pack(env); if(env->err) return; |
1177 |
} |
} |
1178 |
|
|
1220 |
} else if(sscanf(env->in_string, symbform, match, rest) > 0) { |
} else if(sscanf(env->in_string, symbform, match, rest) > 0) { |
1221 |
push_sym(env, match); |
push_sym(env, match); |
1222 |
} else if(sscanf(env->in_string, ebrackform, rest) > 0) { |
} else if(sscanf(env->in_string, ebrackform, rest) > 0) { |
|
push_sym(env, "["); |
|
1223 |
pack(env); if(env->err) return; |
pack(env); if(env->err) return; |
1224 |
if(depth!=0) depth--; |
if(depth!=0) depth--; |
1225 |
} else if(sscanf(env->in_string, semicform, rest) > 0) { |
} else if(sscanf(env->in_string, semicform, rest) > 0) { |