Add string+number.
[rsc] --rw-rw-r-- M 191333 glenda sys 4389 Sep 22 08:47 sys/src/cmd/acid/acid.h
/n/sourcesdump/2005/0922/plan9/sys/src/cmd/acid/acid.h:232,237 -
/n/sourcesdump/2005/0923/plan9/sys/src/cmd/acid/acid.h:232,238
int scmp(String*, String*);
void sproc(int);
String* stradd(String*, String*);
+ String* straddrune(String*, Rune);
String* strnode(char*);
String* strnodlen(char*, int);
char* system(void);
[rsc] --rw-rw-r-- M 191333 glenda sys 15220 Sep 22 08:48 sys/src/cmd/acid/expr.c
/n/sourcesdump/2005/0922/plan9/sys/src/cmd/acid/expr.c:362,367 -
/n/sourcesdump/2005/0923/plan9/sys/src/cmd/acid/expr.c:362,373
res->string = stradd(l.string, r.string);
break;
}
+ if(r.type == TINT) {
+ res->type = TSTRING;
+ res->fmt = 's';
+ res->string = straddrune(l.string, r.ival);
+ break;
+ }
error("bad rhs for +");
case TLIST:
res->type = TLIST;
[rsc] --rw-rw-r-- M 191333 glenda sys 4616 Sep 22 08:47 sys/src/cmd/acid/util.c
/n/sourcesdump/2005/0922/plan9/sys/src/cmd/acid/util.c:267,272 -
/n/sourcesdump/2005/0923/plan9/sys/src/cmd/acid/util.c:267,290
return s;
}
+ String*
+ straddrune(String *l, Rune r)
+ {
+ int len;
+ String *s;
+
+ len = l->len+runelen(r);
+ s = gmalloc(sizeof(String)+len+1);
+ s->gclink = gcl;
+ gcl = s;
+ s->len = len;
+ s->string = (char*)s+sizeof(String);
+ memmove(s->string, l->string, l->len);
+ runetochar(s->string+l->len, &r);
+ s->string[s->len] = 0;
+ return s;
+ }
+
int
scmp(String *sr, String *sl)
{
[rsc] --rw-rw-r-- M 191333 glenda sys 65062 Sep 22 13:46 sys/doc/acid.ms
/n/sourcesdump/2005/0922/plan9/sys/doc/acid.ms:807,814 -
/n/sourcesdump/2005/0923/plan9/sys/doc/acid.ms:807,816
.I string
or
.I list
- type then addition is defined as concatenation. Subtraction is undefined for
- these two types.
+ type then addition is defined as concatenation.
+ Adding a string and an integer is treated as concatenation
+ with the Unicode character corresponding to the integer.
+ Subtraction is undefined for strings and lists.
.DS
shift-expression:
additive-expression
[sys] --rwxrwxr-x M 191333 rsc sys 390487 Sep 22 23:10 386/bin/acid
/sys/src/cmd/acid/expr.c:oadd
/sys/src/cmd/acid/lex.c:yylex
/sys/src/cmd/acid/util.c:straddrune
|