This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
avoid useless use of target for pp_each(); also fixes bugs due to
[perl5.git] / opcode.pl
CommitLineData
79072805
LW
1#!/usr/bin/perl
2
36477c24 3unlink "opcode.h";
79072805
LW
4open(OC, ">opcode.h") || die "Can't create opcode.h: $!\n";
5select OC;
6
7# Read data.
8
9while (<DATA>) {
10 chop;
11 next unless $_;
12 next if /^#/;
c07a80fd
PP
13 ($key, $desc, $check, $flags, $args) = split(/\t+/, $_, 5);
14
15 warn qq[Description "$desc" duplicates $seen{$desc}\n] if $seen{$desc};
16 die qq[Opcode "$key" duplicates $seen{$key}\n] if $seen{$key};
17 $seen{$desc} = qq[description of opcode "$key"];
18 $seen{$key} = qq[opcode "$key"];
19
79072805 20 push(@ops, $key);
c07a80fd 21 $desc{$key} = $desc;
79072805
LW
22 $check{$key} = $check;
23 $ckname{$check}++;
24 $flags{$key} = $flags;
25 $args{$key} = $args;
26}
27
28# Emit defines.
29
30$i = 0;
748a9306 31print <<"END";
a27f85b3
GS
32/* !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
33 This file is built by opcode.pl from its data. Any changes made here
34 will be lost!
35*/
36
864dbfa3
GS
37#define Perl_pp_i_preinc Perl_pp_preinc
38#define Perl_pp_i_predec Perl_pp_predec
39#define Perl_pp_i_postinc Perl_pp_postinc
40#define Perl_pp_i_postdec Perl_pp_postdec
748a9306
LW
41
42typedef enum {
43END
79072805
LW
44for (@ops) {
45 print "\t", &tab(3,"OP_\U$_,"), "/* ", $i++, " */\n";
46}
85e6fe83 47print "\t", &tab(3,"OP_max"), "\n";
79072805
LW
48print "} opcode;\n";
49print "\n#define MAXO ", scalar @ops, "\n\n";
50
c07a80fd 51# Emit op names and descriptions.
79072805
LW
52
53print <<END;
73c4f7a1
GS
54
55START_EXTERN_C
56
79072805 57#ifndef DOINIT
22c35a8c 58EXT char *PL_op_name[];
79072805 59#else
22c35a8c 60EXT char *PL_op_name[] = {
79072805
LW
61END
62
63for (@ops) {
c07a80fd
PP
64 print qq(\t"$_",\n);
65}
66
67print <<END;
68};
69#endif
70
71END
72
73print <<END;
74#ifndef DOINIT
22c35a8c 75EXT char *PL_op_desc[];
c07a80fd 76#else
22c35a8c 77EXT char *PL_op_desc[] = {
c07a80fd
PP
78END
79
80for (@ops) {
81 print qq(\t"$desc{$_}",\n);
79072805
LW
82}
83
84print <<END;
85};
86#endif
87
73c4f7a1
GS
88END_EXTERN_C
89
22c35a8c 90END
79072805 91
22c35a8c 92# Emit function declarations.
79072805 93
22c35a8c 94#for (sort keys %ckname) {
cea2e8a9 95# print "OP *\t", &tab(3,$_),"(pTHX_ OP* o);\n";
22c35a8c
GS
96#}
97#
98#print "\n";
99#
100#for (@ops) {
cea2e8a9 101# print "OP *\t", &tab(3, "pp_$_"), "(pTHX);\n";
22c35a8c 102#}
79072805
LW
103
104# Emit ppcode switch array.
105
106print <<END;
107
73c4f7a1
GS
108START_EXTERN_C
109
79072805 110#ifndef DOINIT
cea2e8a9 111EXT OP * (CPERLscope(*PL_ppaddr)[])(pTHX);
79072805 112#else
cea2e8a9 113EXT OP * (CPERLscope(*PL_ppaddr)[])(pTHX) = {
79072805
LW
114END
115
116for (@ops) {
864dbfa3 117 print "\tPerl_pp_$_,\n";
79072805
LW
118}
119
120print <<END;
121};
122#endif
123
124END
125
126# Emit check routines.
127
128print <<END;
129#ifndef DOINIT
cea2e8a9 130EXT OP * (CPERLscope(*PL_check)[]) (pTHX_ OP *op);
79072805 131#else
cea2e8a9 132EXT OP * (CPERLscope(*PL_check)[]) (pTHX_ OP *op) = {
79072805
LW
133END
134
135for (@ops) {
864dbfa3 136 print "\t", &tab(3, "Perl_$check{$_},"), "/* $_ */\n";
79072805
LW
137}
138
139print <<END;
140};
141#endif
142
143END
144
145# Emit allowed argument types.
146
147print <<END;
148#ifndef DOINIT
22c35a8c 149EXT U32 PL_opargs[];
79072805 150#else
22c35a8c 151EXT U32 PL_opargs[] = {
79072805
LW
152END
153
154%argnum = (
155 S, 1, # scalar
156 L, 2, # list
157 A, 3, # array value
158 H, 4, # hash value
159 C, 5, # code value
160 F, 6, # file value
161 R, 7, # scalar reference
162);
163
db173bac
MB
164%opclass = (
165 '0', 0, # baseop
166 '1', 1, # unop
167 '2', 2, # binop
168 '|', 3, # logop
1a67a97c
SM
169 '@', 4, # listop
170 '/', 5, # pmop
171 '$', 6, # svop
172 '*', 7, # gvop
173 '"', 8, # pvop_or_svop
174 '{', 9, # loop
175 ';', 10, # cop
176 '%', 11, # baseop_or_unop
177 '-', 12, # filestatop
178 '}', 13, # loopexop
db173bac
MB
179);
180
79072805
LW
181for (@ops) {
182 $argsum = 0;
183 $flags = $flags{$_};
184 $argsum |= 1 if $flags =~ /m/; # needs stack mark
185 $argsum |= 2 if $flags =~ /f/; # fold constants
186 $argsum |= 4 if $flags =~ /s/; # always produces scalar
187 $argsum |= 8 if $flags =~ /t/; # needs target scalar
b162f9ea 188 $argsum |= (8|256) if $flags =~ /T/; # ... which may be lexical
79072805
LW
189 $argsum |= 16 if $flags =~ /i/; # always produces integer
190 $argsum |= 32 if $flags =~ /I/; # has corresponding int op
191 $argsum |= 64 if $flags =~ /d/; # danger, unknown side effects
a0d0e21e 192 $argsum |= 128 if $flags =~ /u/; # defaults to $_
db173bac 193
8be7d673 194 $flags =~ /([\W\d_])/ or die qq[Opcode "$_" has no class indicator];
b162f9ea
IZ
195 $argsum |= $opclass{$1} << 9;
196 $mul = 0x2000; # 2 ^ OASHIFT
79072805
LW
197 for $arg (split(' ',$args{$_})) {
198 $argnum = ($arg =~ s/\?//) ? 8 : 0;
199 $argnum += $argnum{$arg};
b162f9ea
IZ
200 warn "# Conflicting bit 32 for '$_'.\n"
201 if $argnum & 8 and $mul == 0x10000000;
79072805
LW
202 $argsum += $argnum * $mul;
203 $mul <<= 4;
204 }
205 $argsum = sprintf("0x%08x", $argsum);
db173bac 206 print "\t", &tab(3, "$argsum,"), "/* $_ */\n";
79072805
LW
207}
208
209print <<END;
210};
211#endif
73c4f7a1
GS
212
213END_EXTERN_C
79072805
LW
214END
215
735e0d5c
IZ
216close OC or die "Error closing opcode.h: $!";
217
2cd61cdb 218unlink "pp_proto.h";
22c35a8c 219unlink "pp.sym";
735e0d5c 220open PP, '>pp_proto.h' or die "Error creating pp_proto.h: $!";
22c35a8c
GS
221open PPSYM, '>pp.sym' or die "Error creating pp.sym: $!";
222
a27f85b3
GS
223print PP <<"END";
224/* !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
225 This file is built by opcode.pl from its data. Any changes made here
226 will be lost!
227*/
228
229END
230
231print PPSYM <<"END";
232#
233# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
234# This file is built by opcode.pl from its data. Any changes made here
235# will be lost!
236#
237
238END
239
240
22c35a8c 241for (sort keys %ckname) {
864dbfa3
GS
242 print PP "PERL_CKDEF(Perl_$_)\n";
243 print PPSYM "Perl_$_\n";
20ce7b12 244#OP *\t", &tab(3,$_),"(OP* o);\n";
22c35a8c
GS
245}
246
247print PP "\n\n";
248
735e0d5c 249for (@ops) {
15e52e56 250 next if /^i_(pre|post)(inc|dec)$/;
864dbfa3
GS
251 print PP "PERL_PPDEF(Perl_pp_$_)\n";
252 print PPSYM "Perl_pp_$_\n";
735e0d5c
IZ
253}
254
255close PP or die "Error closing pp_proto.h: $!";
22c35a8c 256close PPSYM or die "Error closing pp.sym: $!";
735e0d5c 257
79072805
LW
258###########################################################################
259sub tab {
260 local($l, $t) = @_;
261 $t .= "\t" x ($l - (length($t) + 1) / 8);
262 $t;
263}
264###########################################################################
b162f9ea
IZ
265
266# Some comments about 'T' opcode classifier:
267
268# Safe to set if the ppcode uses:
269# tryAMAGICbin, tryAMAGICun, SETn, SETi, SETu, PUSHn, PUSHTARG, SETTARG,
270# SETs(TARG), XPUSHn, XPUSHu,
271
272# Unsafe to set if the ppcode uses dTARG or [X]RETPUSH[YES|NO|UNDEF]
273
274# lt and friends do SETs (including ncmp, but not scmp)
275
276# pp.c pos substr each not OK (RETPUSHUNDEF)
277# substr vec also not OK due to LV to target (are they???)
278# ref not OK (RETPUSHNO)
279# trans not OK (dTARG; TARG = sv_newmortal();)
280# ucfirst etc not OK: TMP arg processed inplace
281# each repeat not OK too due to array context
282# pack split - unknown whether they are safe
283
284# pp_hot.c
285# readline - unknown whether it is safe
286# match subst not OK (dTARG)
287# grepwhile not OK (not always setting)
288
289# pp_ctl.c
290# mapwhile flip caller not OK (not always setting)
291
292# pp_sys.c
293# backtick glob warn die not OK (not always setting)
294# warn not OK (RETPUSHYES)
295# open fileno getc sysread syswrite ioctl accept shutdown
296# ftsize(etc) readlink telldir fork alarm getlogin not OK (RETPUSHUNDEF)
297# umask select not OK (XPUSHs(&PL_sv_undef);)
298# fileno getc sysread syswrite tell not OK (meth("FILENO" "GETC"))
299# sselect shm* sem* msg* syscall - unknown whether they are safe
300# gmtime not OK (list context)
301
79072805
LW
302__END__
303
304# Nothing.
305
306null null operation ck_null 0
93a17b20 307stub stub ck_null 0
db173bac 308scalar scalar ck_fun s% S
79072805
LW
309
310# Pushy stuff.
311
db173bac
MB
312pushmark pushmark ck_null s0
313wantarray wantarray ck_null is0
79072805 314
db173bac 315const constant item ck_svconst s$
79072805 316
db173bac
MB
317gvsv scalar variable ck_null ds*
318gv glob value ck_null ds*
319gelem glob elem ck_null d2 S S
320padsv private variable ck_null ds0
321padav private array ck_null d0
322padhv private hash ck_null d0
323padany private something ck_null d0
79072805 324
1167e5da 325pushre push regexp ck_null d/
79072805
LW
326
327# References and stuff.
328
db173bac
MB
329rv2gv ref-to-glob cast ck_rvconst ds1
330rv2sv scalar deref ck_rvconst ds1
331av2arylen array length ck_null is1
332rv2cv subroutine deref ck_rvconst d1
333anoncode anonymous subroutine ck_anoncode $
334prototype subroutine prototype ck_null s% S
5d11ae5e 335refgen reference constructor ck_spair m1 L
dfa0f641 336srefgen single ref constructor ck_null fs1 S
db173bac
MB
337ref reference-type operator ck_fun stu% S?
338bless bless ck_fun s@ S S?
79072805
LW
339
340# Pushy I/O.
341
db173bac 342backtick backticks ck_null t%
0a753a76 343# glob defaults its first arg to $_
db173bac
MB
344glob glob ck_glob t@ S? S?
345readline <HANDLE> ck_null t%
346rcatline append I/O operator ck_null t%
79072805
LW
347
348# Bindable operators.
349
db173bac 350regcmaybe regexp comp once ck_fun s1 S
2cd61cdb 351regcreset regexp reset interpolation flag ck_fun s1 S
db173bac
MB
352regcomp regexp compilation ck_null s| S
353match pattern match ck_match d/
90be192f 354qr pattern quote ck_match s/
db173bac
MB
355subst substitution ck_null dis/ S
356substcont substitution cont ck_null dis|
357trans character translation ck_null is" S
79072805
LW
358
359# Lvalue operators.
db173bac
MB
360# sassign is special-cased for op class
361
b162f9ea 362sassign scalar assignment ck_sassign s0
db173bac
MB
363aassign list assignment ck_null t2 L L
364
b162f9ea
IZ
365chop chop ck_spair mTs% L
366schop scalar chop ck_null sTu% S?
367chomp safe chop ck_spair mTs% L
368schomp scalar safe chop ck_null sTu% S?
69794302 369defined defined operator ck_defined isu% S?
db173bac
MB
370undef undef operator ck_lfun s% S?
371study study ck_fun su% S?
372pos match position ck_lfun stu% S?
373
374preinc preincrement ck_lfun dIs1 S
375i_preinc integer preincrement ck_lfun dis1 S
376predec predecrement ck_lfun dIs1 S
377i_predec integer predecrement ck_lfun dis1 S
b162f9ea
IZ
378postinc postincrement ck_lfun dIsT1 S
379i_postinc integer postincrement ck_lfun disT1 S
380postdec postdecrement ck_lfun dIsT1 S
381i_postdec integer postdecrement ck_lfun disT1 S
79072805
LW
382
383# Ordinary operators.
384
b162f9ea 385pow exponentiation ck_null fsT2 S S
db173bac 386
b162f9ea
IZ
387multiply multiplication ck_null IfsT2 S S
388i_multiply integer multiplication ck_null ifsT2 S S
389divide division ck_null IfsT2 S S
390i_divide integer division ck_null ifsT2 S S
391modulo modulus ck_null IifsT2 S S
392i_modulo integer modulus ck_null ifsT2 S S
db173bac
MB
393repeat repeat ck_repeat mt2 L S
394
b162f9ea
IZ
395add addition ck_null IfsT2 S S
396i_add integer addition ck_null ifsT2 S S
397subtract subtraction ck_null IfsT2 S S
398i_subtract integer subtraction ck_null ifsT2 S S
399concat concatenation ck_concat fsT2 S S
400stringify string ck_fun fsT@ S
db173bac 401
b162f9ea
IZ
402left_shift left bitshift ck_bitop fsT2 S S
403right_shift right bitshift ck_bitop fsT2 S S
db173bac
MB
404
405lt numeric lt ck_null Iifs2 S S
406i_lt integer lt ck_null ifs2 S S
407gt numeric gt ck_null Iifs2 S S
408i_gt integer gt ck_null ifs2 S S
409le numeric le ck_null Iifs2 S S
410i_le integer le ck_null ifs2 S S
411ge numeric ge ck_null Iifs2 S S
412i_ge integer ge ck_null ifs2 S S
413eq numeric eq ck_null Iifs2 S S
414i_eq integer eq ck_null ifs2 S S
415ne numeric ne ck_null Iifs2 S S
416i_ne integer ne ck_null ifs2 S S
417ncmp spaceship operator ck_null Iifst2 S S
418i_ncmp integer spaceship ck_null ifst2 S S
419
420slt string lt ck_scmp ifs2 S S
421sgt string gt ck_scmp ifs2 S S
422sle string le ck_scmp ifs2 S S
423sge string ge ck_scmp ifs2 S S
424seq string eq ck_null ifs2 S S
425sne string ne ck_null ifs2 S S
426scmp string comparison ck_scmp ifst2 S S
427
b162f9ea
IZ
428bit_and bitwise and ck_bitop fsT2 S S
429bit_xor bitwise xor ck_bitop fsT2 S S
430bit_or bitwise or ck_bitop fsT2 S S
db173bac 431
b162f9ea
IZ
432negate negate ck_null IfsT1 S
433i_negate integer negate ck_null ifsT1 S
db173bac 434not not ck_null ifs1 S
b162f9ea 435complement 1's complement ck_bitop fsT1 S
79072805
LW
436
437# High falutin' math.
438
b162f9ea
IZ
439atan2 atan2 ck_fun fsT@ S S
440sin sin ck_fun fsTu% S?
441cos cos ck_fun fsTu% S?
442rand rand ck_fun sT% S?
db173bac 443srand srand ck_fun s% S?
b162f9ea
IZ
444exp exp ck_fun fsTu% S?
445log log ck_fun fsTu% S?
446sqrt sqrt ck_fun fsTu% S?
79072805 447
cf26c822
CS
448# Lowbrow math.
449
b162f9ea
IZ
450int int ck_fun fsTu% S?
451hex hex ck_fun fsTu% S?
452oct oct ck_fun fsTu% S?
453abs abs ck_fun fsTu% S?
79072805
LW
454
455# String stuff.
456
b162f9ea 457length length ck_lengthconst isTu% S?
7b8d334a 458substr substr ck_fun st@ S S S? S?
db173bac 459vec vec ck_fun ist@ S S S
79072805 460
b162f9ea
IZ
461index index ck_index isT@ S S S?
462rindex rindex ck_index isT@ S S S?
79072805 463
b162f9ea 464sprintf sprintf ck_fun_locale mfsT@ S L
db173bac 465formline formline ck_fun ms@ S L
b162f9ea
IZ
466ord ord ck_fun ifsTu% S?
467chr chr ck_fun fsTu% S?
468crypt crypt ck_fun fsT@ S S
db173bac
MB
469ucfirst upper case first ck_fun_locale fstu% S?
470lcfirst lower case first ck_fun_locale fstu% S?
471uc upper case ck_fun_locale fstu% S?
472lc lower case ck_fun_locale fstu% S?
b162f9ea 473quotemeta quote metachars ck_fun fsTu% S?
79072805
LW
474
475# Arrays.
476
db173bac
MB
477rv2av array deref ck_rvconst dt1
478aelemfast known array element ck_null s* A S
479aelem array element ck_null s2 A S
480aslice array slice ck_null m@ A L
79072805 481
aa689395 482# Hashes.
79072805 483
59af0135 484each each ck_fun % H
db173bac
MB
485values values ck_fun t% H
486keys keys ck_fun t% H
487delete delete ck_delete % S
488exists exists operator ck_exists is% S
489rv2hv hash deref ck_rvconst dt1
490helem hash elem ck_null s2@ H S
491hslice hash slice ck_null m@ H L
79072805
LW
492
493# Explosives and implosives.
494
db173bac
MB
495unpack unpack ck_fun @ S S
496pack pack ck_fun mst@ S L
497split split ck_split t@ S S S
b162f9ea 498join join ck_fun msT@ S L
79072805
LW
499
500# List operators.
501
db173bac
MB
502list list ck_null m@ L
503lslice list slice ck_null 2 H L L
504anonlist anonymous list ck_fun ms@ L
505anonhash anonymous hash ck_fun ms@ L
79072805 506
db173bac 507splice splice ck_fun m@ A S? S? L
b162f9ea 508push push ck_fun imsT@ A L
a9f58cad 509pop pop ck_shift s% A
db173bac 510shift shift ck_shift s% A
b162f9ea 511unshift unshift ck_fun imsT@ A L
db173bac
MB
512sort sort ck_sort m@ C? L
513reverse reverse ck_fun mt@ L
79072805 514
db173bac
MB
515grepstart grep ck_grep dm@ C L
516grepwhile grep iterator ck_null dt|
79072805 517
db173bac
MB
518mapstart map ck_grep dm@ C L
519mapwhile map iterator ck_null dt|
a0d0e21e 520
79072805
LW
521# Range stuff.
522
1a67a97c 523range flipflop ck_null | S S
db173bac
MB
524flip range (or flip) ck_null 1 S S
525flop range (or flop) ck_null 1
79072805
LW
526
527# Control.
528
db173bac
MB
529and logical and ck_null |
530or logical or ck_null |
531xor logical xor ck_null fs| S S
1a67a97c 532cond_expr conditional expression ck_null d|
db173bac
MB
533andassign logical and assignment ck_null s|
534orassign logical or assignment ck_null s|
535
536method method lookup ck_null d1
537entersub subroutine entry ck_subr dmt1 L
538leavesub subroutine exit ck_null 1
539caller caller ck_fun t% S?
540warn warn ck_fun imst@ L
541die die ck_fun dimst@ L
542reset reset ck_fun is% S?
543
544lineseq line sequence ck_null @
545nextstate next statement ck_null s;
546dbstate debug next statement ck_null s;
e9c54c90 547unstack iteration finalizer ck_null s0
79072805 548enter block entry ck_null 0
db173bac
MB
549leave block exit ck_null @
550scope block ck_null @
551enteriter foreach loop entry ck_null d{
79072805 552iter foreach loop iterator ck_null 0
db173bac
MB
553enterloop loop entry ck_null d{
554leaveloop loop exit ck_null 2
555return return ck_null dm@ L
556last last ck_null ds}
557next next ck_null ds}
558redo redo ck_null ds}
559dump dump ck_null ds}
560goto goto ck_null ds}
561exit exit ck_fun ds% S?
79072805 562
a0d0e21e
LW
563#nswitch numeric switch ck_null d
564#cswitch character switch ck_null d
79072805
LW
565
566# I/O.
567
db173bac
MB
568open open ck_fun ist@ F S?
569close close ck_fun is% F?
570pipe_op pipe ck_fun is@ F F
79072805 571
db173bac
MB
572fileno fileno ck_fun ist% F
573umask umask ck_fun ist% S?
574binmode binmode ck_fun s% F
79072805 575
db173bac
MB
576tie tie ck_fun idms@ R S L
577untie untie ck_fun is% R
578tied tied ck_fun s% R
579dbmopen dbmopen ck_fun is@ H S S
580dbmclose dbmclose ck_fun is% H
79072805 581
db173bac
MB
582sselect select system call ck_select t@ S S S S
583select select ck_select st@ F?
79072805 584
db173bac 585getc getc ck_eof st% F?
d1a002d4 586read read ck_fun imst@ F R S S?
db173bac
MB
587enterwrite write ck_fun dis% F?
588leavewrite write exit ck_null 1
79072805 589
db173bac
MB
590prtf printf ck_listiob ims@ F? L
591print print ck_listiob ims@ F? L
79072805 592
db173bac
MB
593sysopen sysopen ck_fun s@ F S S S?
594sysseek sysseek ck_fun s@ F S S
d1a002d4 595sysread sysread ck_fun imst@ F R S S?
145d37e2 596syswrite syswrite ck_fun imst@ F S S? S?
79072805 597
db173bac 598send send ck_fun imst@ F S S S?
d1a002d4 599recv recv ck_fun imst@ F R S S
79072805 600
db173bac
MB
601eof eof ck_eof is% F?
602tell tell ck_fun st% F?
603seek seek ck_fun s@ F S S
9b01e405 604# truncate really behaves as if it had both "S S" and "F S"
db173bac 605truncate truncate ck_trunc is@ S S
79072805 606
db173bac
MB
607fcntl fcntl ck_fun st@ F S S
608ioctl ioctl ck_fun st@ F S S
b162f9ea 609flock flock ck_fun isT@ F S
79072805
LW
610
611# Sockets.
612
db173bac
MB
613socket socket ck_fun is@ F S S S
614sockpair socketpair ck_fun is@ F F S S S
79072805 615
db173bac
MB
616bind bind ck_fun is@ F S
617connect connect ck_fun is@ F S
618listen listen ck_fun is@ F S
619accept accept ck_fun ist@ F F
620shutdown shutdown ck_fun ist@ F S
79072805 621
db173bac
MB
622gsockopt getsockopt ck_fun is@ F S S
623ssockopt setsockopt ck_fun is@ F S S S
79072805 624
db173bac
MB
625getsockname getsockname ck_fun is% F
626getpeername getpeername ck_fun is% F
79072805
LW
627
628# Stat calls.
629
db173bac
MB
630lstat lstat ck_ftst u- F
631stat stat ck_ftst u- F
632ftrread -R ck_ftst isu- F
633ftrwrite -W ck_ftst isu- F
634ftrexec -X ck_ftst isu- F
635fteread -r ck_ftst isu- F
636ftewrite -w ck_ftst isu- F
637fteexec -x ck_ftst isu- F
638ftis -e ck_ftst isu- F
639fteowned -O ck_ftst isu- F
640ftrowned -o ck_ftst isu- F
641ftzero -z ck_ftst isu- F
642ftsize -s ck_ftst istu- F
643ftmtime -M ck_ftst stu- F
644ftatime -A ck_ftst stu- F
645ftctime -C ck_ftst stu- F
646ftsock -S ck_ftst isu- F
647ftchr -c ck_ftst isu- F
648ftblk -b ck_ftst isu- F
649ftfile -f ck_ftst isu- F
650ftdir -d ck_ftst isu- F
651ftpipe -p ck_ftst isu- F
652ftlink -l ck_ftst isu- F
653ftsuid -u ck_ftst isu- F
654ftsgid -g ck_ftst isu- F
655ftsvtx -k ck_ftst isu- F
656fttty -t ck_ftst is- F
657fttext -T ck_ftst isu- F
658ftbinary -B ck_ftst isu- F
79072805
LW
659
660# File calls.
661
b162f9ea
IZ
662chdir chdir ck_fun isT% S?
663chown chown ck_fun imsT@ L
664chroot chroot ck_fun isTu% S?
665unlink unlink ck_fun imsTu@ L
666chmod chmod ck_fun imsT@ L
667utime utime ck_fun imsT@ L
668rename rename ck_fun isT@ S S
669link link ck_fun isT@ S S
670symlink symlink ck_fun isT@ S S
db173bac 671readlink readlink ck_fun stu% S?
b162f9ea
IZ
672mkdir mkdir ck_fun isT@ S S
673rmdir rmdir ck_fun isTu% S?
79072805
LW
674
675# Directory calls.
676
db173bac
MB
677open_dir opendir ck_fun is@ F S
678readdir readdir ck_fun % F
679telldir telldir ck_fun st% F
680seekdir seekdir ck_fun s@ F S
681rewinddir rewinddir ck_fun s% F
682closedir closedir ck_fun is% F
79072805
LW
683
684# Process control.
685
db173bac 686fork fork ck_null ist0
b162f9ea
IZ
687wait wait ck_null isT0
688waitpid waitpid ck_fun isT@ S S
689system system ck_exec imsT@ S? L
690exec exec ck_exec dimsT@ S? L
691kill kill ck_fun dimsT@ L
692getppid getppid ck_null isT0
693getpgrp getpgrp ck_fun isT% S?
694setpgrp setpgrp ck_fun isT@ S? S?
695getpriority getpriority ck_fun isT@ S S
696setpriority setpriority ck_fun isT@ S S S
79072805
LW
697
698# Time calls.
699
b162f9ea 700time time ck_null isT0
79072805 701tms times ck_null 0
db173bac
MB
702localtime localtime ck_fun t% S?
703gmtime gmtime ck_fun t% S?
704alarm alarm ck_fun istu% S?
b162f9ea 705sleep sleep ck_fun isT% S?
79072805
LW
706
707# Shared memory.
708
db173bac
MB
709shmget shmget ck_fun imst@ S S S
710shmctl shmctl ck_fun imst@ S S S
711shmread shmread ck_fun imst@ S S S S
712shmwrite shmwrite ck_fun imst@ S S S S
79072805
LW
713
714# Message passing.
715
db173bac
MB
716msgget msgget ck_fun imst@ S S
717msgctl msgctl ck_fun imst@ S S S
718msgsnd msgsnd ck_fun imst@ S S S
719msgrcv msgrcv ck_fun imst@ S S S S S
79072805
LW
720
721# Semaphores.
722
db173bac
MB
723semget semget ck_fun imst@ S S S
724semctl semctl ck_fun imst@ S S S S
725semop semop ck_fun imst@ S S
79072805
LW
726
727# Eval.
728
db173bac
MB
729require require ck_require du% S?
730dofile do 'file' ck_fun d1 S
731entereval eval string ck_eval d% S
732leaveeval eval exit ck_null 1 S
733#evalonce eval constant string ck_null d1 S
734entertry eval block ck_null |
735leavetry eval block exit ck_null @
79072805
LW
736
737# Get system info.
738
db173bac
MB
739ghbyname gethostbyname ck_fun % S
740ghbyaddr gethostbyaddr ck_fun @ S S
79072805 741ghostent gethostent ck_null 0
db173bac
MB
742gnbyname getnetbyname ck_fun % S
743gnbyaddr getnetbyaddr ck_fun @ S S
79072805 744gnetent getnetent ck_null 0
db173bac
MB
745gpbyname getprotobyname ck_fun % S
746gpbynumber getprotobynumber ck_fun @ S
79072805 747gprotoent getprotoent ck_null 0
db173bac
MB
748gsbyname getservbyname ck_fun @ S S
749gsbyport getservbyport ck_fun @ S S
79072805 750gservent getservent ck_null 0
db173bac
MB
751shostent sethostent ck_fun is% S
752snetent setnetent ck_fun is% S
753sprotoent setprotoent ck_fun is% S
754sservent setservent ck_fun is% S
755ehostent endhostent ck_null is0
756enetent endnetent ck_null is0
757eprotoent endprotoent ck_null is0
758eservent endservent ck_null is0
759gpwnam getpwnam ck_fun % S
760gpwuid getpwuid ck_fun % S
79072805 761gpwent getpwent ck_null 0
db173bac
MB
762spwent setpwent ck_null is0
763epwent endpwent ck_null is0
764ggrnam getgrnam ck_fun % S
765ggrgid getgrgid ck_fun % S
79072805 766ggrent getgrent ck_null 0
db173bac
MB
767sgrent setgrent ck_null is0
768egrent endgrent ck_null is0
769getlogin getlogin ck_null st0
79072805
LW
770
771# Miscellaneous.
772
db173bac 773syscall syscall ck_fun imst@ S L
c0329465
MB
774
775# For multi-threading
db173bac 776lock lock ck_rfun s% S
2faa37cc 777threadsv per-thread variable ck_null ds0