Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code | Sign in
(885)

Delta Between Two Patch Sets: src/cmd/gc/go.h

Issue 4634073: code review 4634073: gc: Escape analysis. (Closed)
Left Patch Set: diff -r 6e3e06fb2dc3 https://go.googlecode.com/hg/ Created 13 years, 9 months ago
Right Patch Set: diff -r adfa9f5cca40 https://go.googlecode.com/hg/ Created 13 years, 7 months ago
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments. Please Sign in to add in-line comments.
Jump to:
Left: Side by side diff | Download
Right: Side by side diff | Download
« no previous file with change/comment | « src/cmd/gc/gen.c ('k') | src/cmd/gc/lex.c » ('j') | no next file with change/comment »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
LEFTRIGHT
1 // Copyright 2009 The Go Authors. All rights reserved. 1 // Copyright 2009 The Go Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style 2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file. 3 // license that can be found in the LICENSE file.
4 4
5 #include <u.h> 5 #include <u.h>
6 #include <libc.h> 6 #include <libc.h>
7 #include <bio.h> 7 #include <bio.h>
8 8
9 #undef OAPPEND 9 #undef OAPPEND
10 10
(...skipping 22 matching lines...) Expand all
33 PRIME1 = 3, 33 PRIME1 = 3,
34 34
35 AUNK = 100, 35 AUNK = 100,
36 36
37 // these values are known by runtime 37 // these values are known by runtime
38 AMEM = 0, 38 AMEM = 0,
39 ANOEQ, 39 ANOEQ,
40 ASTRING, 40 ASTRING,
41 AINTER, 41 AINTER,
42 ANILINTER, 42 ANILINTER,
43 » AMEMWORD, 43 » ASLICE,
44 » AMEM8,
45 » AMEM16,
46 » AMEM32,
47 » AMEM64,
48 » AMEM128,
49 » ANOEQ8,
50 » ANOEQ16,
51 » ANOEQ32,
52 » ANOEQ64,
53 » ANOEQ128,
44 54
45 BADWIDTH = -1000000000, 55 BADWIDTH = -1000000000,
46 » MAXWIDTH» = 1<<30 56 };
47 }; 57
58 extern vlong» MAXWIDTH;
48 59
49 /* 60 /*
50 * note this is the representation 61 * note this is the representation
51 * of the compilers string literals, 62 * of the compilers string literals,
52 * it is not the runtime representation 63 * it is not the runtime representation
53 */ 64 */
54 typedef struct Strlit Strlit; 65 typedef struct Strlit Strlit;
55 struct Strlit 66 struct Strlit
56 { 67 {
57 int32 len; 68 int32 len;
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
137 typedef struct Sym Sym; 148 typedef struct Sym Sym;
138 typedef struct Node Node; 149 typedef struct Node Node;
139 typedef struct NodeList NodeList; 150 typedef struct NodeList NodeList;
140 typedef struct Type Type; 151 typedef struct Type Type;
141 typedef struct Label Label; 152 typedef struct Label Label;
142 153
143 struct Type 154 struct Type
144 { 155 {
145 uchar etype; 156 uchar etype;
146 uchar chan; 157 uchar chan;
147 uchar recur; // to detect loops
148 uchar trecur; // to detect loops 158 uchar trecur; // to detect loops
149 uchar printed; 159 uchar printed;
150 uchar embedded; // TFIELD embedded type 160 uchar embedded; // TFIELD embedded type
151 uchar siggen; 161 uchar siggen;
152 uchar funarg; 162 uchar funarg;
153 uchar copyany; 163 uchar copyany;
154 uchar local; // created in this file 164 uchar local; // created in this file
155 uchar deferwidth; 165 uchar deferwidth;
156 uchar broke; 166 uchar broke;
157 uchar isddd; // TFIELD is ... argument 167 uchar isddd; // TFIELD is ... argument
(...skipping 27 matching lines...) Expand all
185 Strlit* note; // literal string annotation 195 Strlit* note; // literal string annotation
186 196
187 // TARRAY 197 // TARRAY
188 int32 bound; // negative is dynamic array 198 int32 bound; // negative is dynamic array
189 199
190 int32 maplineno; // first use of TFORW as map key 200 int32 maplineno; // first use of TFORW as map key
191 int32 embedlineno; // first use of TFORW as embedded type 201 int32 embedlineno; // first use of TFORW as embedded type
192 }; 202 };
193 #define T ((Type*)0) 203 #define T ((Type*)0)
194 204
205 enum
206 {
207 EscUnknown,
208 EscHeap,
209 EscScope,
210 EscNone,
211 EscNever,
212 };
213
195 struct Node 214 struct Node
196 { 215 {
197 uchar op; 216 uchar op;
198 uchar ullman; // sethi/ullman number 217 uchar ullman; // sethi/ullman number
199 uchar addable; // type of addressability - 0 is not addressable 218 uchar addable; // type of addressability - 0 is not addressable
200 uchar trecur; // to detect loops 219 uchar trecur; // to detect loops
201 uchar etype; // op for OASOP, etype for OTYPE, exclam for exp ort 220 uchar etype; // op for OASOP, etype for OTYPE, exclam for exp ort
202 uchar class; // PPARAM, PAUTO, PEXTERN, etc 221 uchar class; // PPARAM, PAUTO, PEXTERN, etc
203 uchar method; // OCALLMETH name 222 uchar method; // OCALLMETH name
204 uchar embedded; // ODCLFIELD embedded type 223 uchar embedded; // ODCLFIELD embedded type
205 uchar colas; // OAS resulting from := 224 uchar colas; // OAS resulting from :=
206 uchar diag; // already printed error about this 225 uchar diag; // already printed error about this
207 » uchar» noescape;» // ONAME never move to heap 226 » uchar» esc;» » // EscXXX
208 uchar funcdepth; 227 uchar funcdepth;
209 uchar builtin; // built-in name, like len or close 228 uchar builtin; // built-in name, like len or close
210 uchar walkdef; 229 uchar walkdef;
211 uchar typecheck; 230 uchar typecheck;
212 uchar local; 231 uchar local;
213 uchar initorder; 232 uchar initorder;
214 uchar dodata; // compile literal assignment as data statement 233 uchar dodata; // compile literal assignment as data statement
215 uchar used; 234 uchar used;
216 uchar isddd; 235 uchar isddd;
217 uchar pun; // don't registerize variable ONAME 236 uchar pun; // don't registerize variable ONAME
(...skipping 30 matching lines...) Expand all
248 NodeList* dcl; // autodcl for this func/closure 267 NodeList* dcl; // autodcl for this func/closure
249 268
250 // OLITERAL/OREGISTER 269 // OLITERAL/OREGISTER
251 Val val; 270 Val val;
252 271
253 // ONAME 272 // ONAME
254 Node* ntype; 273 Node* ntype;
255 Node* defn; 274 Node* defn;
256 Node* pack; // real package for import . names 275 Node* pack; // real package for import . names
257 Node* curfn; // function for local variables 276 Node* curfn; // function for local variables
277 Type* paramfld; // TFIELD for this PPARAM
258 278
259 // ONAME func param with PHEAP 279 // ONAME func param with PHEAP
260 Node* heapaddr; // temp holding heap address of param 280 Node* heapaddr; // temp holding heap address of param
261 Node* stackparam; // OPARAM node referring to stack copy of param 281 Node* stackparam; // OPARAM node referring to stack copy of param
262 Node* alloc; // allocation call 282 Node* alloc; // allocation call
263 283
264 // ONAME closure param with PPARAMREF 284 // ONAME closure param with PPARAMREF
265 Node* outer; // outer PPARAMREF in nested closure 285 Node* outer; // outer PPARAMREF in nested closure
266 Node* closure; // ONAME/PHEAP <-> ONAME/PPARAMREF 286 Node* closure; // ONAME/PHEAP <-> ONAME/PPARAMREF
267 287
268 // OPACK 288 // OPACK
269 Pkg* pkg; 289 Pkg* pkg;
270 290
271 // Escape analysis. 291 // Escape analysis.
272 » NodeList* asrc;»» // asymmetric flow(this, src) 292 » NodeList* escflowsrc;» // flow(this, src)
293 » int» escloopdepth;» // -1: global, 0: not set, function top level:1, increased inside function for every loop or label to mark scopes
294 » int» escfloodgen;» // increased for every flood to detect loops
273 295
274 Sym* sym; // various 296 Sym* sym; // various
275 int32 vargen; // unique name for OTYPE/ONAME 297 int32 vargen; // unique name for OTYPE/ONAME
276 int32 lineno; 298 int32 lineno;
277 int32 endlineno; 299 int32 endlineno;
278 vlong xoffset; 300 vlong xoffset;
279 int32 stkdelta; // offset added by stack frame compaction phase. 301 int32 stkdelta; // offset added by stack frame compaction phase.
280 int32 ostk; 302 int32 ostk;
281 int32 iota; 303 int32 iota;
282 }; 304 };
(...skipping 15 matching lines...) Expand all
298 SymUniq = 1<<3, 320 SymUniq = 1<<3,
299 SymSiggen = 1<<4, 321 SymSiggen = 1<<4,
300 }; 322 };
301 323
302 struct Sym 324 struct Sym
303 { 325 {
304 ushort lexical; 326 ushort lexical;
305 uchar flags; 327 uchar flags;
306 uchar sym; // huffman encoding in object file 328 uchar sym; // huffman encoding in object file
307 Sym* link; 329 Sym* link;
330 int32 npkg; // number of imported packages with this name
308 331
309 // saved and restored by dcopy 332 // saved and restored by dcopy
310 Pkg* pkg; 333 Pkg* pkg;
311 char* name; // variable name 334 char* name; // variable name
312 Node* def; // definition: ONAME OTYPE OPACK or OLITERAL 335 Node* def; // definition: ONAME OTYPE OPACK or OLITERAL
313 Label* label; // corresponding label (ephemeral) 336 Label* label; // corresponding label (ephemeral)
314 int32 block; // blocknumber to catch redeclaration 337 int32 block; // blocknumber to catch redeclaration
315 int32 lastlineno; // last declaration for diagnostic 338 int32 lastlineno; // last declaration for diagnostic
316 }; 339 };
317 #define S ((Sym*)0) 340 #define S ((Sym*)0)
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
386 OINDEX, OINDEXMAP, 409 OINDEX, OINDEXMAP,
387 OKEY, OPARAM, 410 OKEY, OPARAM,
388 OLEN, 411 OLEN,
389 OMAKE, OMAKECHAN, OMAKEMAP, OMAKESLICE, 412 OMAKE, OMAKECHAN, OMAKEMAP, OMAKESLICE,
390 OHMUL, ORRC, OLRC, // high-mul and rotate-carry 413 OHMUL, ORRC, OLRC, // high-mul and rotate-carry
391 OMUL, ODIV, OMOD, OLSH, ORSH, OAND, OANDNOT, 414 OMUL, ODIV, OMOD, OLSH, ORSH, OAND, OANDNOT,
392 ONEW, 415 ONEW,
393 ONOT, OCOM, OPLUS, OMINUS, 416 ONOT, OCOM, OPLUS, OMINUS,
394 OOROR, 417 OOROR,
395 OPANIC, OPRINT, OPRINTN, 418 OPANIC, OPRINT, OPRINTN,
419 OPAREN,
396 OSEND, 420 OSEND,
397 OSLICE, OSLICEARR, OSLICESTR, 421 OSLICE, OSLICEARR, OSLICESTR,
398 ORECOVER, 422 ORECOVER,
399 ORECV, 423 ORECV,
400 ORUNESTR, 424 ORUNESTR,
401 OSELRECV, 425 OSELRECV,
402 OSELRECV2, 426 OSELRECV2,
403 OIOTA, 427 OIOTA,
404 OREAL, OIMAG, OCOMPLEX, 428 OREAL, OIMAG, OCOMPLEX,
405 429
(...skipping 20 matching lines...) Expand all
426 OTCHAN, 450 OTCHAN,
427 OTMAP, 451 OTMAP,
428 OTSTRUCT, 452 OTSTRUCT,
429 OTINTER, 453 OTINTER,
430 OTFUNC, 454 OTFUNC,
431 OTARRAY, 455 OTARRAY,
432 OTPAREN, 456 OTPAREN,
433 457
434 // misc 458 // misc
435 ODDD, 459 ODDD,
460 ODDDARG,
436 461
437 // for back ends 462 // for back ends
438 OCMP, ODEC, OEXTEND, OINC, OREGISTER, OINDREG, 463 OCMP, ODEC, OEXTEND, OINC, OREGISTER, OINDREG,
439 464
440 OEND, 465 OEND,
441 }; 466 };
442 enum 467 enum
443 { 468 {
444 Txxx, // 0 469 Txxx, // 0
445 470
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
525 Etop = 1<<1, // evaluated at statement level 550 Etop = 1<<1, // evaluated at statement level
526 Erv = 1<<2, // evaluated in value context 551 Erv = 1<<2, // evaluated in value context
527 Etype = 1<<3, 552 Etype = 1<<3,
528 Ecall = 1<<4, // call-only expressions are ok 553 Ecall = 1<<4, // call-only expressions are ok
529 Efnstruct = 1<<5, // multivalue function returns are ok 554 Efnstruct = 1<<5, // multivalue function returns are ok
530 Eiota = 1<<6, // iota is ok 555 Eiota = 1<<6, // iota is ok
531 Easgn = 1<<7, // assigning to expression 556 Easgn = 1<<7, // assigning to expression
532 Eindir = 1<<8, // indirecting through expression 557 Eindir = 1<<8, // indirecting through expression
533 Eaddr = 1<<9, // taking address of expression 558 Eaddr = 1<<9, // taking address of expression
534 Eproc = 1<<10, // inside a go statement 559 Eproc = 1<<10, // inside a go statement
560 Ecomplit = 1<<11, // type in composite literal
535 }; 561 };
536 562
537 #define BITS 5 563 #define BITS 5
538 #define NVAR (BITS*sizeof(uint32)*8) 564 #define NVAR (BITS*sizeof(uint32)*8)
539 565
540 typedef struct Bits Bits; 566 typedef struct Bits Bits;
541 struct Bits 567 struct Bits
542 { 568 {
543 uint32 b[BITS]; 569 uint32 b[BITS];
544 }; 570 };
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after
691 717
692 EXTERN char* infile; 718 EXTERN char* infile;
693 EXTERN char* outfile; 719 EXTERN char* outfile;
694 EXTERN Biobuf* bout; 720 EXTERN Biobuf* bout;
695 EXTERN int nerrors; 721 EXTERN int nerrors;
696 EXTERN int nsavederrors; 722 EXTERN int nsavederrors;
697 EXTERN int nsyntaxerrors; 723 EXTERN int nsyntaxerrors;
698 EXTERN int safemode; 724 EXTERN int safemode;
699 EXTERN char namebuf[NSYMB]; 725 EXTERN char namebuf[NSYMB];
700 EXTERN char lexbuf[NSYMB]; 726 EXTERN char lexbuf[NSYMB];
727 EXTERN char litbuf[NSYMB];
701 EXTERN char debug[256]; 728 EXTERN char debug[256];
702 EXTERN Sym* hash[NHASH]; 729 EXTERN Sym* hash[NHASH];
703 EXTERN Sym* importmyname; // my name for package 730 EXTERN Sym* importmyname; // my name for package
704 EXTERN Pkg* localpkg; // package being compiled 731 EXTERN Pkg* localpkg; // package being compiled
705 EXTERN Pkg* importpkg; // package being imported 732 EXTERN Pkg* importpkg; // package being imported
706 EXTERN Pkg* structpkg; // package that declared struct, during import 733 EXTERN Pkg* structpkg; // package that declared struct, during import
707 EXTERN Pkg* builtinpkg; // fake package for builtins 734 EXTERN Pkg* builtinpkg; // fake package for builtins
708 EXTERN Pkg* gostringpkg; // fake pkg for Go strings 735 EXTERN Pkg* gostringpkg; // fake pkg for Go strings
709 EXTERN Pkg* runtimepkg; // package runtime 736 EXTERN Pkg* runtimepkg; // package runtime
710 EXTERN Pkg* stringpkg; // fake package for C strings 737 EXTERN Pkg* stringpkg; // fake package for C strings
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
772 EXTERN Node* typesw; 799 EXTERN Node* typesw;
773 EXTERN Node* nblank; 800 EXTERN Node* nblank;
774 801
775 extern int thechar; 802 extern int thechar;
776 extern char* thestring; 803 extern char* thestring;
777 EXTERN char* hunk; 804 EXTERN char* hunk;
778 EXTERN int32 nhunk; 805 EXTERN int32 nhunk;
779 EXTERN int32 thunk; 806 EXTERN int32 thunk;
780 807
781 EXTERN int exporting; 808 EXTERN int exporting;
809 EXTERN int erroring;
782 EXTERN int noargnames; 810 EXTERN int noargnames;
783 811
784 EXTERN int funcdepth; 812 EXTERN int funcdepth;
785 EXTERN int typecheckok; 813 EXTERN int typecheckok;
786 EXTERN int packagequotes; 814 EXTERN int packagequotes;
787 EXTERN int longsymnames; 815 EXTERN int longsymnames;
788 EXTERN int compiling_runtime; 816 EXTERN int compiling_runtime;
789 817
790 /* 818 /*
791 * y.tab.c 819 * y.tab.c
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
892 void testdclstack(void); 920 void testdclstack(void);
893 Node* typedcl0(Sym *s); 921 Node* typedcl0(Sym *s);
894 Node* typedcl1(Node *n, Node *t, int local); 922 Node* typedcl1(Node *n, Node *t, int local);
895 void typedcl2(Type *pt, Type *t); 923 void typedcl2(Type *pt, Type *t);
896 Node* typenod(Type *t); 924 Node* typenod(Type *t);
897 NodeList* variter(NodeList *vl, Node *t, NodeList *el); 925 NodeList* variter(NodeList *vl, Node *t, NodeList *el);
898 926
899 /* 927 /*
900 * esc.c 928 * esc.c
901 */ 929 */
902 void» escanalfunc(Node *func); 930 void» escapes(void);
903 void» escanalfinish();
904 931
905 /* 932 /*
906 * export.c 933 * export.c
907 */ 934 */
908 void autoexport(Node *n, int ctxt); 935 void autoexport(Node *n, int ctxt);
909 void dumpexport(void); 936 void dumpexport(void);
910 int exportname(char *s); 937 int exportname(char *s);
911 void exportsym(Node *n); 938 void exportsym(Node *n);
912 void importconst(Sym *s, Type *t, Node *n); 939 void importconst(Sym *s, Type *t, Node *n);
913 void importmethod(Sym *s, Type *t); 940 void importmethod(Sym *s, Type *t);
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
1036 void typecheckrange(Node *n); 1063 void typecheckrange(Node *n);
1037 void walkrange(Node *n); 1064 void walkrange(Node *n);
1038 1065
1039 /* 1066 /*
1040 * reflect.c 1067 * reflect.c
1041 */ 1068 */
1042 void dumptypestructs(void); 1069 void dumptypestructs(void);
1043 Type* methodfunc(Type *f, Type*); 1070 Type* methodfunc(Type *f, Type*);
1044 Node* typename(Type *t); 1071 Node* typename(Type *t);
1045 Sym* typesym(Type *t); 1072 Sym* typesym(Type *t);
1073 int haspointers(Type *t);
1046 1074
1047 /* 1075 /*
1048 * select.c 1076 * select.c
1049 */ 1077 */
1050 void typecheckselect(Node *sel); 1078 void typecheckselect(Node *sel);
1051 void walkselect(Node *sel); 1079 void walkselect(Node *sel);
1052 1080
1053 /* 1081 /*
1054 * sinit.c 1082 * sinit.c
1055 */ 1083 */
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
1106 int implements(Type *t, Type *iface, Type **missing, Type **have, int *ptr); 1134 int implements(Type *t, Type *iface, Type **missing, Type **have, int *ptr);
1107 void importdot(Pkg *opkg, Node *pack); 1135 void importdot(Pkg *opkg, Node *pack);
1108 int is64(Type *t); 1136 int is64(Type *t);
1109 int isblank(Node *n); 1137 int isblank(Node *n);
1110 int isfixedarray(Type *t); 1138 int isfixedarray(Type *t);
1111 int isideal(Type *t); 1139 int isideal(Type *t);
1112 int isinter(Type *t); 1140 int isinter(Type *t);
1113 int isnil(Node *n); 1141 int isnil(Node *n);
1114 int isnilinter(Type *t); 1142 int isnilinter(Type *t);
1115 int isptrto(Type *t, int et); 1143 int isptrto(Type *t, int et);
1116 int isselect(Node *n);
1117 int isslice(Type *t); 1144 int isslice(Type *t);
1118 int istype(Type *t, int et); 1145 int istype(Type *t, int et);
1119 void linehist(char *file, int32 off, int relative); 1146 void linehist(char *file, int32 off, int relative);
1120 NodeList* list(NodeList *l, Node *n); 1147 NodeList* list(NodeList *l, Node *n);
1121 NodeList* list1(Node *n); 1148 NodeList* list1(Node *n);
1122 void listsort(NodeList**, int(*f)(Node*, Node*)); 1149 void listsort(NodeList**, int(*f)(Node*, Node*));
1123 Node* liststmt(NodeList *l); 1150 Node* liststmt(NodeList *l);
1124 NodeList* listtreecopy(NodeList *l); 1151 NodeList* listtreecopy(NodeList *l);
1125 Sym* lookup(char *name); 1152 Sym* lookup(char *name);
1126 void* mal(int32 n); 1153 void* mal(int32 n);
(...skipping 10 matching lines...) Expand all
1137 Node* nodnil(void); 1164 Node* nodnil(void);
1138 int parserline(void); 1165 int parserline(void);
1139 Sym* pkglookup(char *name, Pkg *pkg); 1166 Sym* pkglookup(char *name, Pkg *pkg);
1140 int powtwo(Node *n); 1167 int powtwo(Node *n);
1141 Type* ptrto(Type *t); 1168 Type* ptrto(Type *t);
1142 void* remal(void *p, int32 on, int32 n); 1169 void* remal(void *p, int32 on, int32 n);
1143 Sym* restrictlookup(char *name, Pkg *pkg); 1170 Sym* restrictlookup(char *name, Pkg *pkg);
1144 Node* safeexpr(Node *n, NodeList **init); 1171 Node* safeexpr(Node *n, NodeList **init);
1145 void saveerrors(void); 1172 void saveerrors(void);
1146 Node* cheapexpr(Node *n, NodeList **init); 1173 Node* cheapexpr(Node *n, NodeList **init);
1174 Node* localexpr(Node *n, Type *t, NodeList **init);
1147 int32 setlineno(Node *n); 1175 int32 setlineno(Node *n);
1148 void setmaxarg(Type *t); 1176 void setmaxarg(Type *t);
1149 Type* shallow(Type *t); 1177 Type* shallow(Type *t);
1150 int simsimtype(Type *t); 1178 int simsimtype(Type *t);
1151 void smagic(Magic *m); 1179 void smagic(Magic *m);
1152 Type* sortinter(Type *t); 1180 Type* sortinter(Type *t);
1153 uint32 stringhash(char *p); 1181 uint32 stringhash(char *p);
1154 Strlit* strlit(char *s); 1182 Strlit* strlit(char *s);
1155 int structcount(Type *t); 1183 int structcount(Type *t);
1156 Type* structfirst(Iter *s, Type **nn); 1184 Type* structfirst(Iter *s, Type **nn);
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
1263 Node* nodarg(Type*, int); 1291 Node* nodarg(Type*, int);
1264 void nopout(Prog*); 1292 void nopout(Prog*);
1265 void patch(Prog*, Prog*); 1293 void patch(Prog*, Prog*);
1266 Prog* unpatch(Prog*); 1294 Prog* unpatch(Prog*);
1267 void zfile(Biobuf *b, char *p, int n); 1295 void zfile(Biobuf *b, char *p, int n);
1268 void zhist(Biobuf *b, int line, vlong offset); 1296 void zhist(Biobuf *b, int line, vlong offset);
1269 void zname(Biobuf *b, Sym *s, int t); 1297 void zname(Biobuf *b, Sym *s, int t);
1270 void data(void); 1298 void data(void);
1271 void text(void); 1299 void text(void);
1272 1300
LEFTRIGHT

Powered by Google App Engine
RSS Feeds Recent Issues | This issue
This is Rietveld f62528b