runtime.porting 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358
  1. Notes on porting the perl runtime PP engine.
  2. Importance: 1 = who cares?, 10 = vital
  3. Difficulty: 1 = trivial, 10 = very difficult. Level assumes a
  4. reasonable implementation of the SV and OP API already ported.
  5. OP Import Diff Comments
  6. null 10 1
  7. stub 10 1
  8. scalar 10 1
  9. pushmark 10 1 PUSHMARK
  10. wantarray 7 3 cxstack, dopoptosub
  11. const 10 1
  12. gvsv 10 1 save_scalar
  13. gv 10 1
  14. gelem 3 3
  15. padsv 10 2 SAVECLEARSV, provide_ref
  16. padav 10 2
  17. padhv 10 2
  18. padany 1 1
  19. pushre 7 3 pushes an op. Blech.
  20. rv2gv 6 5
  21. rv2sv 10 4
  22. av2arylen 7 3 sv_magic
  23. rv2cv 8 5 sv_2cv
  24. anoncode 7 6 cv_clone
  25. prototype 4 4 sv_2cv
  26. refgen 8 3
  27. srefgen 8 2
  28. ref 8 3
  29. bless 7 3
  30. backtick 5 4
  31. glob 5 2 do_readline
  32. readline 8 2 do_readline
  33. rcatline 8 2
  34. regcmaybe 8 1
  35. regcreset 8 1
  36. regcomp 8 9 pregcomp
  37. match 8 10
  38. qr 8 1
  39. subst 8 10
  40. substcont 8 7
  41. trans 7 4 do_trans
  42. sassign 10 3 mg_find, SvSETMAGIC
  43. aassign 10 5
  44. chop 8 3 do_chop
  45. schop 8 3 do_chop
  46. chomp 8 3 do_chomp
  47. schomp 8 3 do_chomp
  48. defined 10 2
  49. undef 10 3
  50. study 4 5
  51. pos 8 3 PVLV, mg_find
  52. preinc 10 2 sv_inc, SvSETMAGIC
  53. i_preinc
  54. predec 10 2 sv_dec, SvSETMAGIC
  55. i_predec
  56. postinc 10 2 sv_dec, SvSETMAGIC
  57. i_postinc
  58. postdec 10 2 sv_dec, SvSETMAGIC
  59. i_postdec
  60. pow 10 1
  61. multiply 10 1
  62. i_multiply 10 1
  63. divide 10 2
  64. i_divide 10 1
  65. modulo 10 2
  66. i_modulo 10 1
  67. repeat 6 4
  68. add 10 1
  69. i_add 10 1
  70. subtract 10 1
  71. i_subtract 10 1
  72. concat 10 2 mg_get
  73. stringify 10 2 sv_setpvn
  74. left_shift 10 1
  75. right_shift 10 1
  76. lt 10 1
  77. i_lt 10 1
  78. gt 10 1
  79. i_gt 10 1
  80. le 10 1
  81. i_le 10 1
  82. ge 10 1
  83. i_ge 10 1
  84. eq 10 1
  85. i_eq 10 1
  86. ne 10 1
  87. i_ne 10 1
  88. ncmp 10 1
  89. i_ncmp 10 1
  90. slt 10 2
  91. sgt 10 2
  92. sle 10 2
  93. sge 10 2
  94. seq 10 2 sv_eq
  95. sne 10 2
  96. scmp 10 2
  97. bit_and 10 2
  98. bit_xor 10 2
  99. bit_or 10 2
  100. negate 10 3
  101. i_negate 10 1
  102. not 10 1
  103. complement 10 3
  104. atan2 6 1
  105. sin 6 1
  106. cos 6 1
  107. rand 5 2
  108. srand 5 2
  109. exp 6 1
  110. log 6 2
  111. sqrt 6 2
  112. int 10 2
  113. hex 9 2
  114. oct 9 2
  115. abs 10 1
  116. length 10 1
  117. substr 10 4 PVLV
  118. vec 5 4
  119. index 9 3
  120. rindex 9 3
  121. sprintf 9 4 do_sprintf
  122. formline 6 7
  123. ord 6 2
  124. chr 6 2
  125. crypt 3 2
  126. ucfirst 6 2
  127. lcfirst 6 2
  128. uc 6 2
  129. lc 6 2
  130. quotemeta 6 3
  131. rv2av 10 3 save_svref, mg_get, save_ary
  132. aelemfast 10 2 av_fetch
  133. aelem 10 3
  134. aslice 9 4
  135. each 10 3 hv_iternext
  136. values 10 3 do_kv
  137. keys 10 3 do_kv
  138. delete 10 3
  139. exists 10 3
  140. rv2hv 10 3 save_svref, mg_get, save_ary, do_kv
  141. helem 10 3 save_svref, provide_ref
  142. hslice 9 4
  143. unpack 9 6 lengthy
  144. pack 9 6 lengthy
  145. split 9 9
  146. join 10 4 do_join
  147. list 10 2
  148. lslice 9 4
  149. anonlist 10 2
  150. anonhash 10 3
  151. splice 9 6
  152. push 10 2
  153. pop 10 2
  154. shift 10 2
  155. unshift 10 2
  156. sort 6 7
  157. reverse 9 4
  158. grepstart 6 5 modifies flow of control
  159. grepwhile 6 5 modifies flow of control
  160. mapstart 1 1
  161. mapwhile 6 5 modifies flow of control
  162. range 7 3 modifies flow of control
  163. flip 7 4 modifies flow of control
  164. flop 7 4 modifies flow of control
  165. and 10 3 modifies flow of control
  166. or 10 3 modifies flow of control
  167. xor
  168. cond_expr 10 3 modifies flow of control
  169. andassign 7 3 modifies flow of control
  170. orassign 7 3 modifies flow of control
  171. method 8 5
  172. entersub 10 7
  173. leavesub 10 5
  174. leavesublv
  175. caller 2 8
  176. warn 9 3
  177. die 9 3
  178. reset 2 2
  179. lineseq 1 1
  180. nextstate 10 1 Update stack_sp from cxstack. FREETMPS.
  181. dbstate 3 7
  182. unstack
  183. enter 10 3 cxstack, ENTER, SAVETMPS, PUSHBLOCK
  184. leave 10 3 cxstack, SAVETMPS, LEAVE, POPBLOCK
  185. scope 1 1
  186. enteriter 9 4 cxstack
  187. iter 9 3 cxstack
  188. enterloop 10 4
  189. leaveloop 10 4
  190. return 10 5
  191. last 9 6
  192. next 9 6
  193. redo 9 6
  194. dump 1 9 pp_goto
  195. goto 6 9
  196. exit 9 2 my_exit
  197. open 9 5 do_open
  198. close 9 3 do_close
  199. pipe_op 7 4
  200. fileno 9 2
  201. umask 4 2
  202. binmode 4 2
  203. tie 5 5 pp_entersub
  204. untie 5 2 sv_unmagic
  205. tied 5 2
  206. dbmopen 4 5
  207. dbmclose 4 2
  208. sselect 4 4
  209. select 7 3
  210. getc 7 2
  211. read 8 2 pp_sysread
  212. enterwrite 4 4 doform
  213. leavewrite 4 5
  214. prtf 4 4 do_sprintf
  215. print 8 6
  216. sysopen 8 2
  217. sysseek 8 2
  218. sysread 8 4
  219. syswrite 8 4 pp_send
  220. send 8 4
  221. recv 8 4 pp_sysread
  222. eof 9 2
  223. tell 9 3
  224. seek 9 2
  225. truncate 8 3
  226. fcntl 8 4 pp_ioctl
  227. ioctl 8 4
  228. flock 8 2
  229. socket 5 3
  230. sockpair 5 3
  231. bind 5 3
  232. connect 5 3
  233. listen 5 3
  234. accept 5 3
  235. shutdown 5 2
  236. gsockopt 5 3 pp_ssockopt
  237. ssockopt 5 3
  238. getsockname 5 3 pp_getpeername
  239. getpeername 5 3
  240. lstat 5 4 pp_stat
  241. stat 5 4 lengthy
  242. ftrread 5 2 cando
  243. ftrwrite 5 2 cando
  244. ftrexec 5 2 cando
  245. fteread 5 2 cando
  246. ftewrite 5 2 cando
  247. fteexec 5 2 cando
  248. ftis 5 2 cando
  249. fteowned 5 2 cando
  250. ftrowned 5 2 cando
  251. ftzero 5 2 cando
  252. ftsize 5 2 cando
  253. ftmtime 5 2 cando
  254. ftatime 5 2 cando
  255. ftctime 5 2 cando
  256. ftsock 5 2 cando
  257. ftchr 5 2 cando
  258. ftblk 5 2 cando
  259. ftfile 5 2 cando
  260. ftdir 5 2 cando
  261. ftpipe 5 2 cando
  262. ftlink 5 2 cando
  263. ftsuid 5 2 cando
  264. ftsgid 5 2 cando
  265. ftsvtx 5 2 cando
  266. fttty 5 2 cando
  267. fttext 5 4
  268. ftbinary 5 4 fttext
  269. chdir
  270. chown
  271. chroot
  272. unlink
  273. chmod
  274. utime
  275. rename
  276. link
  277. symlink
  278. readlink
  279. mkdir
  280. rmdir
  281. open_dir
  282. readdir
  283. telldir
  284. seekdir
  285. rewinddir
  286. closedir
  287. fork
  288. wait
  289. waitpid
  290. system
  291. exec
  292. kill
  293. getppid
  294. getpgrp
  295. setpgrp
  296. getpriority
  297. setpriority
  298. time
  299. tms
  300. localtime
  301. gmtime
  302. alarm
  303. sleep
  304. shmget
  305. shmctl
  306. shmread
  307. shmwrite
  308. msgget
  309. msgctl
  310. msgsnd
  311. msgrcv
  312. semget
  313. semctl
  314. semop
  315. require 6 9 doeval
  316. dofile 6 9 doeval
  317. entereval 6 9 doeval
  318. leaveeval 6 5
  319. entertry 7 4 modifies flow of control
  320. leavetry 7 3
  321. ghbyname
  322. ghbyaddr
  323. ghostent
  324. gnbyname
  325. gnbyaddr
  326. gnetent
  327. gpbyname
  328. gpbynumber
  329. gprotoent
  330. gsbyname
  331. gsbyport
  332. gservent
  333. shostent
  334. snetent
  335. sprotoent
  336. sservent
  337. ehostent
  338. enetent
  339. eprotoent
  340. eservent
  341. gpwnam
  342. gpwuid
  343. gpwent
  344. spwent
  345. epwent
  346. ggrnam
  347. ggrgid
  348. ggrent
  349. sgrent
  350. egrent
  351. getlogin
  352. syscall
  353. lock 6 1
  354. threadsv 6 2 unused if not USE_5005THREADS, absent post 5.8
  355. setstate 1 1 currently unused anywhere
  356. method_named 10 2