}
// put in the break between cases
- if(any) {
+ if(any)
patch(gbranch(AJMP, T), breakpc);
- any = 0;
- }
+ any = 1;
// over case expressions
c2 = listfirst(&save2, &c1->left);
break;
}
if(isfloat[et]) {
+ Mpint *xv;
+
// int to float
- if(mpcmpfltflt(n->val.u.fval, minfltval[et]) < 0)
+ xv = n->val.u.xval;
+ if(mpcmpfixflt(xv, minfltval[et]) < 0)
goto bad2;
- if(mpcmpfltflt(n->val.u.fval, maxfltval[et]) > 0)
+ if(mpcmpfixflt(xv, maxfltval[et]) > 0)
goto bad2;
- mpmovefixflt(n->val.u.fval, n->val.u.xval);
+ n->val.u.fval = mal(sizeof(*n->val.u.fval));
+ mpmovefixflt(n->val.u.fval, xv);
n->val.ctype = CTFLT;
break;
}
case Wlitfloat:
if(isint[et]) {
+ Mpflt *fv;
+
// float to int
- if(mpcmpfixfix(n->val.u.xval, minintval[et]) < 0)
+ fv = n->val.u.fval;
+ if(mpcmpfltfix(fv, minintval[et]) < 0)
goto bad2;
- if(mpcmpfixfix(n->val.u.xval, maxintval[et]) > 0)
+ if(mpcmpfltfix(fv, maxintval[et]) > 0)
goto bad2;
- mpmovefltfix(n->val.u.xval, n->val.u.fval);
+ n->val.u.xval = mal(sizeof(*n->val.u.xval));
+ mpmovefltfix(n->val.u.xval, fv);
n->val.ctype = CTINT;
break;
}
/*
* mparith1.c
*/
+int mpcmpfixflt(Mpint *a, Mpflt *b);
+int mpcmpfltfix(Mpflt *a, Mpint *b);
int mpcmpfixfix(Mpint *a, Mpint *b);
int mpcmpfixc(Mpint *b, vlong c);
int mpcmpfltflt(Mpflt *a, Mpflt *b);
{
$$ = $2;
}
-| pexpr '.' sym1
+| pexpr '.' sym2
{
$$ = nod(ODOT, $1, newname($3));
}
}
new_name:
- sym2
+ sym1
{
$$ = newname($1);
}
new_type:
- sym2
+ sym1
{
$$ = newtype($1);
}
sym1:
sym
| key1
-| key2
sym2:
sym
+| key1
| key2
/*
* keywords that we can
+>>>> ORIGINAL go/src/cmd/gc/go.y#8
+==== THEIRS go/src/cmd/gc/go.y#9
* use as field names
+==== YOURS go/src/cmd/gc/go.y
+ * use a variable/type names
+<<<<
*/
key1:
+ LNIL
+| LTRUE
+| LFALSE
+| LIOTA
+| LLEN
+| LPANIC
+| LPRINT
+| LNEW
+| LBASETYPE
+
+/*
+ * keywords that we can
+ */
+key2:
LPACKAGE
| LIMPORT
| LEXPORT
| LRANGE
| LIGNORE
-/*
- * keywords that we can
+>>>> ORIGINAL go/src/cmd/gc/go.y#8
+ * use a variable/type names
+ */
+key2:
+ LNIL
+| LTRUE
+| LFALSE
+| LIOTA
+| LLEN
+| LPANIC
+| LPRINT
+| LNEW
+| LBASETYPE
+
+==== THEIRS go/src/cmd/gc/go.y#9
* use as variable/type names
*/
key2:
| LNEW
| LBASETYPE
+==== YOURS src/cmd/gc/go.y
+<<<<
name:
lname
{
{
exportsym($1);
}
-| sym '.' sym1
+| sym '.' sym2
{
exportsym(pkglookup($3->name, $1->name));
}
}
isym:
- sym '.' sym1
+ sym '.' sym2
{
$$ = nod(OIMPORT, N, N);
$$->osym = $1;
$$->sym = $3;
renamepkg($$);
}
-| '(' sym ')' sym '.' sym1
+| '(' sym ')' sym '.' sym2
{
$$ = nod(OIMPORT, N, N);
$$->osym = $2;
lexinit(void)
{
int i, etype, lex;
- Sym *s;
Type *t;
+ Sym *s;
besetptr();
/// uses arihmetic
+int
+mpcmpfixflt(Mpint *a, Mpflt *b)
+{
+ char buf[500];
+ Mpflt c;
+
+ sprint(buf, "%B", a);
+ mpatoflt(&c, buf);
+ return mpcmpfltflt(&c, b);
+}
+
+int
+mpcmpfltfix(Mpflt *a, Mpint *b)
+{
+ char buf[500];
+ Mpflt c;
+
+ sprint(buf, "%B", b);
+ mpatoflt(&c, buf);
+ return mpcmpfltflt(a, &c);
+}
+
int
mpcmpfixfix(Mpint *a, Mpint *b)
{
snprint(buf1, sizeof(buf1), "S\"%Z\"", n->val.u.sval);
break;
case CTBOOL:
- snprint(buf1, sizeof(buf1), "B%lld", n->val.u.bval);
+ snprint(buf1, sizeof(buf1), "B%d", n->val.u.bval);
break;
case CTNIL:
snprint(buf1, sizeof(buf1), "N");
prcompat(Node *n)
{
Node *l, *r;
+ Node *on;
Type *t;
Iter save;
int w;
char *name;
- Node *on;
r = N;
l = listfirst(&save, &n);
c = Get();
}
switch c {
- case EOF:
- token = EOF;
- case '(':
- case ')':
- token = c;
- break;
- default:
- for i = 0; i < 100 - 1; { // sizeof tokenbuf - 1
- tokenbuf[i] = convert(byte, c);
- i = i + 1;
- c = Get();
- if c == EOF {
- break;
- }
- if WhiteSpace(c) || c == ')' {
- peekc = c;
- break;
- }
- }
- if i >= 100 - 1 { // sizeof tokenbuf - 1
- panic("atom too long\n");
+ case EOF:
+ token = EOF;
+ case '(', ')':
+ token = c;
+ break;
+ default:
+ for i = 0; i < 100 - 1; { // sizeof tokenbuf - 1
+ tokenbuf[i] = convert(byte, c);
+ i = i + 1;
+ c = Get();
+ if c == EOF {
+ break;
}
- tokenlen = i;
- tokenbuf[i] = nilchar;
- if '0' <= tokenbuf[0] && tokenbuf[0] <= '9' {
- token = '0';
- } else {
- token = 'A';
+ if WhiteSpace(c) || c == ')' {
+ peekc = c;
+ break;
}
+ }
+ if i >= 100 - 1 { // sizeof tokenbuf - 1
+ panic("atom too long\n");
+ }
+ tokenlen = i;
+ tokenbuf[i] = nilchar;
+ if '0' <= tokenbuf[0] && tokenbuf[0] <= '9' {
+ token = '0';
+ } else {
+ token = 'A';
+ }
}
}
} else {
// Atom
switch token {
- case EOF:
- return nil;
- case '0':
- slist = atom(atoi());
- case '"':
- case 'A':
- slist = atom(0);
- default:
- slist = nil;
- print("unknown token"); // token, tokenbuf);
+ case EOF:
+ return nil;
+ case '0':
+ slist = atom(atoi());
+ case '"', 'A':
+ slist = atom(0);
+ default:
+ slist = nil;
+ print("unknown token: ", token, "\n");
}
NextToken();
return slist;