Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
G
golang
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Open sidebar
go
golang
Commits
efec14bc
Commit
efec14bc
authored
Jun 14, 2008
by
Ken Thompson
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
plan9 line numbers and line table
SVN=122793
parent
1ad1044b
Show whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
238 additions
and
57 deletions
+238
-57
clean.bash
src/clean.bash
+1
-1
align.c
src/cmd/6g/align.c
+7
-0
gg.h
src/cmd/6g/gg.h
+3
-0
list.c
src/cmd/6g/list.c
+4
-4
obj.c
src/cmd/6g/obj.c
+68
-0
clean.bash
src/cmd/clean.bash
+1
-1
Makefile
src/cmd/gc/Makefile
+1
-0
dcl.c
src/cmd/gc/dcl.c
+3
-2
export.c
src/cmd/gc/export.c
+1
-1
go.h
src/cmd/gc/go.h
+20
-1
lex.c
src/cmd/gc/lex.c
+32
-20
subr.c
src/cmd/gc/subr.c
+97
-27
No files found.
src/clean.bash
View file @
efec14bc
...
@@ -3,7 +3,7 @@
...
@@ -3,7 +3,7 @@
# Use of this source code is governed by a BSD-style
# Use of this source code is governed by a BSD-style
# license that can be found in the LICENSE file.
# license that can be found in the LICENSE file.
for
i
in
lib9 libbio
for
i
in
lib9 libbio
libmach_amd64
do
do
cd
$i
cd
$i
make clean
make clean
...
...
src/cmd/6g/align.c
View file @
efec14bc
...
@@ -200,6 +200,13 @@ belexinit(int lextype)
...
@@ -200,6 +200,13 @@ belexinit(int lextype)
int
i
;
int
i
;
Sym
*
s0
,
*
s1
;
Sym
*
s0
,
*
s1
;
zprog
.
link
=
P
;
zprog
.
as
=
AGOK
;
zprog
.
from
.
type
=
D_NONE
;
zprog
.
from
.
index
=
D_NONE
;
zprog
.
from
.
scale
=
0
;
zprog
.
to
=
zprog
.
from
;
for
(
i
=
0
;
i
<
nelem
(
typedefs
);
i
+=
2
)
{
for
(
i
=
0
;
i
<
nelem
(
typedefs
);
i
+=
2
)
{
s1
=
lookup
(
typedefs
[
i
+
1
]);
s1
=
lookup
(
typedefs
[
i
+
1
]);
if
(
s1
->
lexical
!=
lextype
)
if
(
s1
->
lexical
!=
lextype
)
...
...
src/cmd/6g/gg.h
View file @
efec14bc
...
@@ -97,6 +97,8 @@ EXTERN long stringo; // size of string objects
...
@@ -97,6 +97,8 @@ EXTERN long stringo; // size of string objects
EXTERN
long
pcloc
;
// instruction counter
EXTERN
long
pcloc
;
// instruction counter
EXTERN
String
emptystring
;
EXTERN
String
emptystring
;
extern
char
*
anames
[];
extern
char
*
anames
[];
EXTERN
Hist
*
hist
;
EXTERN
Prog
zprog
;
/*
/*
* gen.c
* gen.c
...
@@ -195,6 +197,7 @@ void zaddr(Biobuf*, Addr*, int);
...
@@ -195,6 +197,7 @@ void zaddr(Biobuf*, Addr*, int);
void
ieeedtod
(
Ieee
*
,
double
);
void
ieeedtod
(
Ieee
*
,
double
);
void
dumpstrings
(
void
);
void
dumpstrings
(
void
);
void
dumpsignatures
(
void
);
void
dumpsignatures
(
void
);
void
outhist
(
Biobuf
*
);
/*
/*
* align
* align
...
...
src/cmd/6g/list.c
View file @
efec14bc
...
@@ -52,12 +52,12 @@ Pconv(Fmt *fp)
...
@@ -52,12 +52,12 @@ Pconv(Fmt *fp)
sconsize
=
8
;
sconsize
=
8
;
if
(
p
->
as
==
ADATA
)
{
if
(
p
->
as
==
ADATA
)
{
sconsize
=
p
->
from
.
scale
;
sconsize
=
p
->
from
.
scale
;
snprint
(
str
,
sizeof
(
str
),
"%.4ld %-7A %D/%d,%D"
,
snprint
(
str
,
sizeof
(
str
),
"%.4ld
(%4ld)
%-7A %D/%d,%D"
,
p
->
loc
,
p
->
as
,
&
p
->
from
,
sconsize
,
&
p
->
to
);
p
->
loc
,
p
->
lineno
,
p
->
as
,
&
p
->
from
,
sconsize
,
&
p
->
to
);
return
fmtstrcpy
(
fp
,
str
);
return
fmtstrcpy
(
fp
,
str
);
}
}
snprint
(
str
,
sizeof
(
str
),
"%.4ld %-7A %D,%D"
,
snprint
(
str
,
sizeof
(
str
),
"%.4ld
(%4ld)
%-7A %D,%D"
,
p
->
loc
,
p
->
as
,
&
p
->
from
,
&
p
->
to
);
p
->
loc
,
p
->
lineno
,
p
->
as
,
&
p
->
from
,
&
p
->
to
);
return
fmtstrcpy
(
fp
,
str
);
return
fmtstrcpy
(
fp
,
str
);
}
}
...
...
src/cmd/6g/obj.c
View file @
efec14bc
...
@@ -55,6 +55,8 @@ dumpobj(void)
...
@@ -55,6 +55,8 @@ dumpobj(void)
dumpexport
();
dumpexport
();
Bprint
(
bout
,
"
\n
!
\n
"
);
Bprint
(
bout
,
"
\n
!
\n
"
);
outhist
(
bout
);
// add globals
// add globals
nodconst
(
&
n1
,
types
[
TINT32
],
0
);
nodconst
(
&
n1
,
types
[
TINT32
],
0
);
for
(
d
=
externdcl
;
d
!=
D
;
d
=
d
->
forw
)
{
for
(
d
=
externdcl
;
d
!=
D
;
d
=
d
->
forw
)
{
...
@@ -158,6 +160,9 @@ dumpobj(void)
...
@@ -158,6 +160,9 @@ dumpobj(void)
zaddr
(
bout
,
&
p
->
to
,
st
);
zaddr
(
bout
,
&
p
->
to
,
st
);
}
}
}
}
Bterm
(
bout
);
return
;
Bterm
(
bout
);
}
}
void
void
...
@@ -258,6 +263,69 @@ zaddr(Biobuf *b, Addr *a, int s)
...
@@ -258,6 +263,69 @@ zaddr(Biobuf *b, Addr *a, int s)
Bputc
(
b
,
a
->
type
);
Bputc
(
b
,
a
->
type
);
}
}
void
outhist
(
Biobuf
*
b
)
{
Hist
*
h
;
char
*
p
,
*
q
,
*
op
;
Prog
pg
;
int
n
;
pg
=
zprog
;
pg
.
as
=
AHISTORY
;
for
(
h
=
hist
;
h
!=
H
;
h
=
h
->
link
)
{
p
=
h
->
name
;
op
=
0
;
if
(
p
&&
p
[
0
]
!=
'/'
&&
h
->
offset
==
0
&&
pathname
&&
pathname
[
0
]
==
'/'
)
{
op
=
p
;
p
=
pathname
;
}
while
(
p
)
{
q
=
utfrune
(
p
,
'/'
);
if
(
q
)
{
n
=
q
-
p
;
if
(
n
==
0
)
n
=
1
;
// leading "/"
q
++
;
}
else
{
n
=
strlen
(
p
);
q
=
0
;
}
if
(
n
)
{
Bputc
(
b
,
ANAME
);
Bputc
(
b
,
ANAME
>>
8
);
Bputc
(
b
,
D_FILE
);
Bputc
(
b
,
1
);
Bputc
(
b
,
'<'
);
Bwrite
(
b
,
p
,
n
);
Bputc
(
b
,
0
);
}
p
=
q
;
if
(
p
==
0
&&
op
)
{
p
=
op
;
op
=
0
;
}
}
pg
.
lineno
=
h
->
line
;
pg
.
to
.
type
=
zprog
.
to
.
type
;
pg
.
to
.
offset
=
h
->
offset
;
if
(
h
->
offset
)
pg
.
to
.
type
=
D_CONST
;
Bputc
(
b
,
pg
.
as
);
Bputc
(
b
,
pg
.
as
>>
8
);
Bputc
(
b
,
pg
.
lineno
);
Bputc
(
b
,
pg
.
lineno
>>
8
);
Bputc
(
b
,
pg
.
lineno
>>
16
);
Bputc
(
b
,
pg
.
lineno
>>
24
);
zaddr
(
b
,
&
pg
.
from
,
0
);
zaddr
(
b
,
&
pg
.
to
,
0
);
}
}
void
void
ieeedtod
(
Ieee
*
ieee
,
double
native
)
ieeedtod
(
Ieee
*
ieee
,
double
native
)
{
{
...
...
src/cmd/clean.bash
View file @
efec14bc
...
@@ -3,7 +3,7 @@
...
@@ -3,7 +3,7 @@
# Use of this source code is governed by a BSD-style
# Use of this source code is governed by a BSD-style
# license that can be found in the LICENSE file.
# license that can be found in the LICENSE file.
for
i
in
6l 6a 6c 6g gc cc
for
i
in
6l 6a 6c 6g gc cc
db
do
do
cd
$i
cd
$i
make clean
make clean
...
...
src/cmd/gc/Makefile
View file @
efec14bc
...
@@ -27,6 +27,7 @@ OFILES=\
...
@@ -27,6 +27,7 @@ OFILES=\
const.
$O
\
const.
$O
\
mpatof.
$O
\
mpatof.
$O
\
sysimport.
$O
\
sysimport.
$O
\
compat.
$O
\
$(LIB)
:
$(OFILES)
$(LIB)
:
$(OFILES)
ar rsc
$(LIB)
$(OFILES)
ar rsc
$(LIB)
$(OFILES)
...
...
src/cmd/gc/dcl.c
View file @
efec14bc
...
@@ -511,13 +511,14 @@ popdcl(char *why)
...
@@ -511,13 +511,14 @@ popdcl(char *why)
// if(dflag())
// if(dflag())
// print("revert\n");
// print("revert\n");
for
(
d
=
dclstack
;
d
!=
S
;
d
=
d
->
link
)
{
for
(
d
=
dclstack
;
d
!=
S
;
d
=
d
->
link
)
{
if
(
d
->
name
==
nil
)
if
(
d
->
name
==
nil
)
break
;
break
;
s
=
pkglookup
(
d
->
name
,
d
->
package
);
s
=
pkglookup
(
d
->
name
,
d
->
package
);
dcopy
(
s
,
d
);
dcopy
(
s
,
d
);
if
(
dflag
())
if
(
dflag
())
print
(
"
\t
%
ld pop %S
\n
"
,
curio
.
lineno
,
s
);
print
(
"
\t
%
L pop %S
\n
"
,
lineno
,
s
);
}
}
if
(
d
==
S
)
if
(
d
==
S
)
fatal
(
"popdcl: no mark"
);
fatal
(
"popdcl: no mark"
);
...
@@ -537,7 +538,7 @@ poptodcl(void)
...
@@ -537,7 +538,7 @@ poptodcl(void)
s
=
pkglookup
(
d
->
name
,
d
->
package
);
s
=
pkglookup
(
d
->
name
,
d
->
package
);
dcopy
(
s
,
d
);
dcopy
(
s
,
d
);
if
(
dflag
())
if
(
dflag
())
print
(
"
\t
%
ld pop %S
\n
"
,
curio
.
lineno
,
s
);
print
(
"
\t
%
L pop %S
\n
"
,
lineno
,
s
);
}
}
if
(
d
==
S
)
if
(
d
==
S
)
fatal
(
"poptodcl: no mark"
);
fatal
(
"poptodcl: no mark"
);
...
...
src/cmd/gc/export.c
View file @
efec14bc
...
@@ -35,7 +35,7 @@ loop:
...
@@ -35,7 +35,7 @@ loop:
d
=
mal
(
sizeof
(
*
d
));
d
=
mal
(
sizeof
(
*
d
));
d
->
dsym
=
s
;
d
->
dsym
=
s
;
d
->
dnode
=
N
;
d
->
dnode
=
N
;
d
->
lineno
=
curio
.
lineno
;
d
->
lineno
=
lineno
;
r
=
exportlist
;
r
=
exportlist
;
d
->
back
=
r
->
back
;
d
->
back
=
r
->
back
;
...
...
src/cmd/gc/go.h
View file @
efec14bc
...
@@ -14,6 +14,7 @@ tothinkabout:
...
@@ -14,6 +14,7 @@ tothinkabout:
#include <u.h>
#include <u.h>
#include <libc.h>
#include <libc.h>
#include <bio.h>
#include <bio.h>
#include "compat.h"
#ifndef EXTERN
#ifndef EXTERN
#define EXTERN extern
#define EXTERN extern
...
@@ -28,6 +29,7 @@ enum
...
@@ -28,6 +29,7 @@ enum
YYMAXDEPTH
=
500
,
YYMAXDEPTH
=
500
,
MAXALIGN
=
7
,
MAXALIGN
=
7
,
UINF
=
100
,
UINF
=
100
,
HISTSZ
=
10
,
PRIME1
=
3
,
PRIME1
=
3
,
PRIME2
=
10007
,
PRIME2
=
10007
,
...
@@ -189,6 +191,16 @@ struct Iter
...
@@ -189,6 +191,16 @@ struct Iter
Node
*
n
;
Node
*
n
;
};
};
typedef
struct
Hist
Hist
;
struct
Hist
{
Hist
*
link
;
char
*
name
;
long
line
;
long
offset
;
};
#define H ((Hist*)0)
enum
enum
{
{
OXXX
,
OXXX
,
...
@@ -313,13 +325,18 @@ struct Io
...
@@ -313,13 +325,18 @@ struct Io
{
{
char
*
infile
;
char
*
infile
;
Biobuf
*
bin
;
Biobuf
*
bin
;
long
lineno
;
long
i
lineno
;
int
peekc
;
int
peekc
;
char
*
cp
;
// used for content when bin==nil
char
*
cp
;
// used for content when bin==nil
};
};
EXTERN
Io
curio
;
EXTERN
Io
curio
;
EXTERN
Io
pushedio
;
EXTERN
Io
pushedio
;
EXTERN
long
lineno
;
EXTERN
char
*
pathname
;
EXTERN
Hist
*
hist
;
EXTERN
Hist
*
ehist
;
EXTERN
char
*
infile
;
EXTERN
char
*
infile
;
EXTERN
char
*
outfile
;
EXTERN
char
*
outfile
;
...
@@ -416,6 +433,7 @@ Sym* pkglookup(char*, char*);
...
@@ -416,6 +433,7 @@ Sym* pkglookup(char*, char*);
void
yyerror
(
char
*
,
...);
void
yyerror
(
char
*
,
...);
void
warn
(
char
*
,
...);
void
warn
(
char
*
,
...);
void
fatal
(
char
*
,
...);
void
fatal
(
char
*
,
...);
void
linehist
(
char
*
,
long
);
Node
*
nod
(
int
,
Node
*
,
Node
*
);
Node
*
nod
(
int
,
Node
*
,
Node
*
);
Type
*
typ
(
int
);
Type
*
typ
(
int
);
Dcl
*
dcl
(
void
);
Dcl
*
dcl
(
void
);
...
@@ -457,6 +475,7 @@ Type* funcnext(Iter*);
...
@@ -457,6 +475,7 @@ Type* funcnext(Iter*);
int
Econv
(
Fmt
*
);
int
Econv
(
Fmt
*
);
int
Jconv
(
Fmt
*
);
int
Jconv
(
Fmt
*
);
int
Lconv
(
Fmt
*
);
int
Oconv
(
Fmt
*
);
int
Oconv
(
Fmt
*
);
int
Sconv
(
Fmt
*
);
int
Sconv
(
Fmt
*
);
int
Tconv
(
Fmt
*
);
int
Tconv
(
Fmt
*
);
...
...
src/cmd/gc/lex.c
View file @
efec14bc
...
@@ -39,6 +39,10 @@ mainlex(int argc, char *argv[])
...
@@ -39,6 +39,10 @@ mainlex(int argc, char *argv[])
if
(
argc
!=
1
)
if
(
argc
!=
1
)
goto
usage
;
goto
usage
;
pathname
=
mal
(
100
);
if
(
mygetwd
(
pathname
,
99
)
==
0
)
strcpy
(
pathname
,
"/???"
);
fmtinstall
(
'O'
,
Oconv
);
// node opcodes
fmtinstall
(
'O'
,
Oconv
);
// node opcodes
fmtinstall
(
'E'
,
Econv
);
// etype opcodes
fmtinstall
(
'E'
,
Econv
);
// etype opcodes
fmtinstall
(
'J'
,
Jconv
);
// all the node flags
fmtinstall
(
'J'
,
Jconv
);
// all the node flags
...
@@ -46,15 +50,19 @@ mainlex(int argc, char *argv[])
...
@@ -46,15 +50,19 @@ mainlex(int argc, char *argv[])
fmtinstall
(
'T'
,
Tconv
);
// type pointer
fmtinstall
(
'T'
,
Tconv
);
// type pointer
fmtinstall
(
'N'
,
Nconv
);
// node pointer
fmtinstall
(
'N'
,
Nconv
);
// node pointer
fmtinstall
(
'Z'
,
Zconv
);
// escaped string
fmtinstall
(
'Z'
,
Zconv
);
// escaped string
fmtinstall
(
'L'
,
Lconv
);
// line number
lexinit
();
lexinit
();
lineno
=
1
;
infile
=
argv
[
0
];
infile
=
argv
[
0
];
curio
.
infile
=
infile
;
linehist
(
infile
,
0
)
;
curio
.
bin
=
Bopen
(
curio
.
infile
,
OREAD
);
curio
.
infile
=
infile
;
curio
.
bin
=
Bopen
(
infile
,
OREAD
);
if
(
curio
.
bin
==
nil
)
if
(
curio
.
bin
==
nil
)
fatal
(
"cant open: %s"
,
curio
.
infile
);
fatal
(
"cant open: %s"
,
infile
);
curio
.
peekc
=
0
;
externdcl
=
mal
(
sizeof
(
*
externdcl
));
externdcl
=
mal
(
sizeof
(
*
externdcl
));
externdcl
->
back
=
externdcl
;
externdcl
->
back
=
externdcl
;
...
@@ -69,14 +77,11 @@ mainlex(int argc, char *argv[])
...
@@ -69,14 +77,11 @@ mainlex(int argc, char *argv[])
fskel
->
right
->
left
=
nod
(
ODCLFIELD
,
N
,
N
);
fskel
->
right
->
left
=
nod
(
ODCLFIELD
,
N
,
N
);
fskel
->
right
->
right
=
nod
(
ODCLFIELD
,
N
,
N
);
fskel
->
right
->
right
=
nod
(
ODCLFIELD
,
N
,
N
);
curio
.
peekc
=
0
;
curio
.
lineno
=
1
;
nerrors
=
0
;
nerrors
=
0
;
yyparse
();
yyparse
();
linehist
(
nil
,
0
);
Bterm
(
curio
.
bin
);
Bterm
(
curio
.
bin
);
if
(
bout
!=
nil
)
Bterm
(
bout
);
if
(
nerrors
)
if
(
nerrors
)
errorexit
();
errorexit
();
...
@@ -104,6 +109,7 @@ void
...
@@ -104,6 +109,7 @@ void
importfile
(
Val
*
f
)
importfile
(
Val
*
f
)
{
{
Biobuf
*
imp
;
Biobuf
*
imp
;
char
*
file
;
long
c
;
long
c
;
if
(
f
->
ctype
!=
CTSTR
)
{
if
(
f
->
ctype
!=
CTSTR
)
{
...
@@ -112,12 +118,12 @@ importfile(Val *f)
...
@@ -112,12 +118,12 @@ importfile(Val *f)
}
}
// BOTCH need to get .8 from backend
// BOTCH need to get .8 from backend
snprint
(
namebuf
,
sizeof
(
namebuf
),
"%Z.6"
,
f
->
sval
);
snprint
(
namebuf
,
sizeof
(
namebuf
),
"%Z.6"
,
f
->
sval
);
file
=
strdup
(
namebuf
);
linehist
(
file
,
0
);
imp
=
Bopen
(
namebuf
,
OREAD
);
imp
=
Bopen
(
file
,
OREAD
);
if
(
imp
==
nil
)
{
if
(
imp
==
nil
)
yyerror
(
"cant open import: %s"
,
namebuf
);
fatal
(
"cant open import: %s"
,
namebuf
);
return
;
}
/*
/*
* position the input right
* position the input right
...
@@ -125,9 +131,8 @@ importfile(Val *f)
...
@@ -125,9 +131,8 @@ importfile(Val *f)
*/
*/
pushedio
=
curio
;
pushedio
=
curio
;
curio
.
bin
=
imp
;
curio
.
bin
=
imp
;
curio
.
lineno
=
1
;
curio
.
peekc
=
0
;
curio
.
peekc
=
0
;
curio
.
infile
=
strdup
(
namebuf
)
;
curio
.
infile
=
file
;
for
(;;)
{
for
(;;)
{
c
=
getc
();
c
=
getc
();
if
(
c
==
EOF
)
if
(
c
==
EOF
)
...
@@ -148,6 +153,8 @@ importfile(Val *f)
...
@@ -148,6 +153,8 @@ importfile(Val *f)
void
void
unimportfile
(
void
)
unimportfile
(
void
)
{
{
linehist
(
nil
,
0
);
if
(
curio
.
bin
!=
nil
)
{
if
(
curio
.
bin
!=
nil
)
{
Bterm
(
curio
.
bin
);
Bterm
(
curio
.
bin
);
curio
.
bin
=
nil
;
curio
.
bin
=
nil
;
...
@@ -160,12 +167,17 @@ unimportfile(void)
...
@@ -160,12 +167,17 @@ unimportfile(void)
void
void
cannedimports
(
void
)
cannedimports
(
void
)
{
{
char
*
file
;
file
=
"sys.6"
;
linehist
(
file
,
0
);
pushedio
=
curio
;
pushedio
=
curio
;
curio
.
bin
=
nil
;
curio
.
bin
=
nil
;
curio
.
lineno
=
1
;
curio
.
peekc
=
0
;
curio
.
peekc
=
0
;
curio
.
infile
=
"internal sys.go"
;
curio
.
infile
=
file
;
curio
.
cp
=
sysimport
;
curio
.
cp
=
sysimport
;
pkgmyname
=
S
;
pkgmyname
=
S
;
inimportsys
=
1
;
inimportsys
=
1
;
}
}
...
@@ -619,7 +631,7 @@ getc(void)
...
@@ -619,7 +631,7 @@ getc(void)
if
(
c
!=
0
)
{
if
(
c
!=
0
)
{
curio
.
peekc
=
0
;
curio
.
peekc
=
0
;
if
(
c
==
'\n'
)
if
(
c
==
'\n'
)
curio
.
lineno
++
;
lineno
++
;
return
c
;
return
c
;
}
}
...
@@ -636,7 +648,7 @@ getc(void)
...
@@ -636,7 +648,7 @@ getc(void)
return
EOF
;
return
EOF
;
case
'\n'
:
case
'\n'
:
curio
.
lineno
++
;
lineno
++
;
break
;
break
;
}
}
return
c
;
return
c
;
...
@@ -647,7 +659,7 @@ ungetc(int c)
...
@@ -647,7 +659,7 @@ ungetc(int c)
{
{
curio
.
peekc
=
c
;
curio
.
peekc
=
c
;
if
(
c
==
'\n'
)
if
(
c
==
'\n'
)
curio
.
lineno
--
;
lineno
--
;
}
}
long
long
...
@@ -688,7 +700,7 @@ getnsc(void)
...
@@ -688,7 +700,7 @@ getnsc(void)
if
(
!
isspace
(
c
))
if
(
!
isspace
(
c
))
return
c
;
return
c
;
if
(
c
==
'\n'
)
{
if
(
c
==
'\n'
)
{
curio
.
lineno
++
;
lineno
++
;
return
c
;
return
c
;
}
}
c
=
getc
();
c
=
getc
();
...
...
src/cmd/gc/subr.c
View file @
efec14bc
...
@@ -13,25 +13,12 @@ errorexit(void)
...
@@ -13,25 +13,12 @@ errorexit(void)
myexit
(
1
);
myexit
(
1
);
}
}
void
myexit
(
int
x
)
{
if
(
x
)
exits
(
"error"
);
exits
(
nil
);
}
void
void
yyerror
(
char
*
fmt
,
...)
yyerror
(
char
*
fmt
,
...)
{
{
va_list
arg
;
va_list
arg
;
long
lno
;
lno
=
dynlineno
;
print
(
"%L: "
);
if
(
lno
==
0
)
lno
=
curio
.
lineno
;
print
(
"%s:%ld: "
,
curio
.
infile
,
lno
);
va_start
(
arg
,
fmt
);
va_start
(
arg
,
fmt
);
vfprint
(
1
,
fmt
,
arg
);
vfprint
(
1
,
fmt
,
arg
);
va_end
(
arg
);
va_end
(
arg
);
...
@@ -48,13 +35,8 @@ void
...
@@ -48,13 +35,8 @@ void
warn
(
char
*
fmt
,
...)
warn
(
char
*
fmt
,
...)
{
{
va_list
arg
;
va_list
arg
;
long
lno
;
lno
=
dynlineno
;
print
(
"%L warning: "
);
if
(
lno
==
0
)
lno
=
curio
.
lineno
;
print
(
"%s:%ld: "
,
curio
.
infile
,
lno
);
va_start
(
arg
,
fmt
);
va_start
(
arg
,
fmt
);
vfprint
(
1
,
fmt
,
arg
);
vfprint
(
1
,
fmt
,
arg
);
va_end
(
arg
);
va_end
(
arg
);
...
@@ -67,13 +49,8 @@ void
...
@@ -67,13 +49,8 @@ void
fatal
(
char
*
fmt
,
...)
fatal
(
char
*
fmt
,
...)
{
{
va_list
arg
;
va_list
arg
;
long
lno
;
lno
=
dynlineno
;
if
(
lno
==
0
)
lno
=
curio
.
lineno
;
print
(
"%
s:%ld: fatal error: "
,
curio
.
infile
,
lno
);
print
(
"%
L fatal error: "
);
va_start
(
arg
,
fmt
);
va_start
(
arg
,
fmt
);
vfprint
(
1
,
fmt
,
arg
);
vfprint
(
1
,
fmt
,
arg
);
va_end
(
arg
);
va_end
(
arg
);
...
@@ -83,6 +60,31 @@ fatal(char *fmt, ...)
...
@@ -83,6 +60,31 @@ fatal(char *fmt, ...)
myexit
(
1
);
myexit
(
1
);
}
}
void
linehist
(
char
*
file
,
long
off
)
{
Hist
*
h
;
if
(
debug
[
'i'
])
if
(
file
!=
nil
)
print
(
"%L: import %s
\n
"
,
file
);
else
print
(
"%L: <eof>
\n
"
);
h
=
alloc
(
sizeof
(
Hist
));
h
->
name
=
file
;
h
->
line
=
lineno
;
h
->
offset
=
off
;
h
->
link
=
H
;
if
(
ehist
==
H
)
{
hist
=
h
;
ehist
=
h
;
return
;
}
ehist
->
link
=
h
;
ehist
=
h
;
}
ulong
ulong
stringhash
(
char
*
p
)
stringhash
(
char
*
p
)
{
{
...
@@ -248,7 +250,7 @@ nod(int op, Node *nleft, Node *nright)
...
@@ -248,7 +250,7 @@ nod(int op, Node *nleft, Node *nright)
n
->
right
=
nright
;
n
->
right
=
nright
;
n
->
lineno
=
dynlineno
;
n
->
lineno
=
dynlineno
;
if
(
dynlineno
==
0
)
if
(
dynlineno
==
0
)
n
->
lineno
=
curio
.
lineno
;
n
->
lineno
=
lineno
;
return
n
;
return
n
;
}
}
...
@@ -646,6 +648,74 @@ Oconv(Fmt *fp)
...
@@ -646,6 +648,74 @@ Oconv(Fmt *fp)
return
fmtstrcpy
(
fp
,
opnames
[
o
]);
return
fmtstrcpy
(
fp
,
opnames
[
o
]);
}
}
int
Lconv
(
Fmt
*
fp
)
{
char
str
[
STRINGSZ
],
s
[
STRINGSZ
];
struct
{
Hist
*
incl
;
/* start of this include file */
long
idel
;
/* delta line number to apply to include */
Hist
*
line
;
/* start of this #line directive */
long
ldel
;
/* delta line number to apply to #line */
}
a
[
HISTSZ
];
long
lno
,
d
;
int
i
,
n
;
Hist
*
h
;
lno
=
dynlineno
;
if
(
lno
==
0
)
lno
=
lineno
;
n
=
0
;
for
(
h
=
hist
;
h
!=
H
;
h
=
h
->
link
)
{
if
(
lno
<
h
->
line
)
break
;
if
(
h
->
name
)
{
if
(
n
<
HISTSZ
)
{
/* beginning of file */
a
[
n
].
incl
=
h
;
a
[
n
].
idel
=
h
->
line
;
a
[
n
].
line
=
0
;
}
n
++
;
continue
;
}
n
--
;
if
(
n
>
0
&&
n
<
HISTSZ
)
{
d
=
h
->
line
-
a
[
n
].
incl
->
line
;
a
[
n
-
1
].
ldel
+=
d
;
a
[
n
-
1
].
idel
+=
d
;
}
}
if
(
n
>
HISTSZ
)
n
=
HISTSZ
;
str
[
0
]
=
0
;
for
(
i
=
n
-
1
;
i
>=
0
;
i
--
)
{
if
(
i
!=
n
-
1
)
{
if
(
fp
->
flags
&
~
(
FmtWidth
|
FmtPrec
))
break
;
strcat
(
str
,
" "
);
}
if
(
a
[
i
].
line
)
snprint
(
s
,
STRINGSZ
,
"%s:%ld[%s:%ld]"
,
a
[
i
].
line
->
name
,
lno
-
a
[
i
].
ldel
+
1
,
a
[
i
].
incl
->
name
,
lno
-
a
[
i
].
idel
+
1
);
else
snprint
(
s
,
STRINGSZ
,
"%s:%ld"
,
a
[
i
].
incl
->
name
,
lno
-
a
[
i
].
idel
+
1
);
if
(
strlen
(
s
)
+
strlen
(
str
)
>=
STRINGSZ
-
10
)
break
;
strcat
(
str
,
s
);
lno
=
a
[
i
].
incl
->
line
-
1
;
/* now print out start of this file */
}
if
(
n
==
0
)
strcat
(
str
,
"<eof>"
);
return
fmtstrcpy
(
fp
,
str
);
}
/*
/*
s%,%,\n%g
s%,%,\n%g
s%\n+%\n%g
s%\n+%\n%g
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment