ecma.json 32 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259
  1. {
  2. "!name": "ecmascript",
  3. "!define": {
  4. "Error.prototype": "Error.prototype",
  5. "propertyDescriptor": {
  6. "enumerable": "bool",
  7. "configurable": "bool",
  8. "value": "?",
  9. "writable": "bool",
  10. "get": "fn() -> ?",
  11. "set": "fn(value: ?)"
  12. },
  13. "Promise.prototype": {
  14. "catch": {
  15. "!type": "fn(onRejected: fn(reason: ?)) -> !this"
  16. },
  17. "then": {
  18. "!type": "fn(onFulfilled: fn(value: ?), onRejected: fn(reason: ?)) -> !custom:Promise_then",
  19. "!effects": ["call !0 !this.:t"]
  20. },
  21. "finally": {
  22. "!type": "fn(onFinally: fn()) -> !custom:Promise_then"
  23. }
  24. },
  25. "Promise_reject": {
  26. "!type": "fn(reason: ?) -> !this"
  27. },
  28. "iter_prototype": {
  29. ":Symbol.iterator": "fn() -> !this"
  30. },
  31. "iter": {
  32. "!proto": "iter_prototype",
  33. "next": {
  34. "!type": "fn() -> +iter_result[value=!this.:t]"
  35. }
  36. },
  37. "iter_result": {
  38. "done": "bool",
  39. "value": "?"
  40. },
  41. "generator_prototype": {
  42. "!proto": "iter_prototype",
  43. "next": "fn(value?: ?) -> iter_result",
  44. "return": "fn(value?: ?) -> iter_result",
  45. "throw": "fn(exception: +Error)"
  46. },
  47. "async_iter_prototype": {
  48. ":Symbol.asyncIterator": "fn() -> !this"
  49. },
  50. "async_iter": {
  51. "!proto": "async_iter_prototype",
  52. "next": {
  53. "!type": "fn() -> +Promise[:t=+iter_result[value=!this.:t]]"
  54. }
  55. },
  56. "async_generator_prototype": {
  57. "!proto": "async_iter_prototype",
  58. "next": "fn(value?: ?) -> +Promise[:t=iter_result]",
  59. "return": "fn(value?: ?) -> +Promise[:t=iter_result]",
  60. "throw": "fn(exception: +Error)"
  61. },
  62. "Proxy_handler": {
  63. "getPrototypeOf": "fn(target: ?)",
  64. "setPrototypeOf": "fn(target: ?, prototype: ?)",
  65. "isExtensible": "fn(target: ?)",
  66. "preventExtensions": "fn(target: ?)",
  67. "getOwnPropertyDescriptor": "fn(target: ?, property: string) -> propertyDescriptor",
  68. "defineProperty": "fn(target: ?, property: string, descriptor: propertyDescriptor)",
  69. "has": "fn(target: ?, property: string)",
  70. "get": "fn(target: ?, property: string)",
  71. "set": "fn(target: ?, property: string, value: ?)",
  72. "deleteProperty": "fn(target: ?, property: string)",
  73. "enumerate": "fn(target: ?)",
  74. "ownKeys": "fn(target: ?)",
  75. "apply": "fn(target: ?, self: ?, arguments: [?])",
  76. "construct": "fn(target: ?, arguments: [?])"
  77. },
  78. "Proxy_revocable": {
  79. "proxy": "+Proxy",
  80. "revoke": "fn()"
  81. },
  82. "TypedArray": {
  83. "!type": "fn(size: number)",
  84. "from": {
  85. "!type": "fn(arrayLike: ?, mapFn?: fn(elt: ?, i: number) -> number, thisArg?: ?) -> +TypedArray",
  86. "!effects": ["call !1 this=!2 !0.<i> number"]
  87. },
  88. "of": {
  89. "!type": "fn(elements: number) -> +TypedArray"
  90. },
  91. "BYTES_PER_ELEMENT": {
  92. "!type": "number"
  93. },
  94. "name": {
  95. "!type": "string"
  96. },
  97. "prototype": {
  98. "<i>": "number",
  99. "buffer": {
  100. "!type": "+ArrayBuffer"
  101. },
  102. "byteLength": {
  103. "!type": "number"
  104. },
  105. "byteOffset": {
  106. "!type": "number"
  107. },
  108. "copyWithin": {
  109. "!type": "fn(target: number, start: number, end?: number) -> ?"
  110. },
  111. "entries": {
  112. "!type": "fn() -> +iter[:t=number]"
  113. },
  114. "every": {
  115. "!type": "fn(callback: fn(element: number, index: number, array: TypedArray) -> bool, thisArg?: ?) -> bool",
  116. "!effects": ["call !0 this=!1 number number !this"]
  117. },
  118. "fill": {
  119. "!type": "fn(value: number, start?: number, end?: number)"
  120. },
  121. "filter": {
  122. "!type": "fn(test: fn(element: number, i: number) -> bool, context?: ?) -> !this",
  123. "!effects": ["call !0 this=!1 number number"]
  124. },
  125. "find": {
  126. "!type": "fn(callback: fn(element: number, index: number, array: +TypedArray) -> bool, thisArg?: ?) -> number",
  127. "!effects": ["call !0 this=!1 number number !this"]
  128. },
  129. "findIndex": {
  130. "!type": "fn(callback: fn(element: number, index: number, array: +TypedArray) -> bool, thisArg?: ?) -> number",
  131. "!effects": ["call !0 this=!1 number number !this"]
  132. },
  133. "forEach": {
  134. "!type": "fn(callback: fn(value: number, key: number, array: +TypedArray), thisArg?: ?)",
  135. "!effects": ["call !0 this=!1 number number !this"]
  136. },
  137. "indexOf": {
  138. "!type": "fn(searchElement: number, fromIndex?: number) -> number"
  139. },
  140. "join": {
  141. "!type": "fn(separator?: string) -> string"
  142. },
  143. "keys": {
  144. "!type": "fn() -> +iter[:t=number]"
  145. },
  146. "lastIndexOf": {
  147. "!type": "fn(searchElement: number, fromIndex?: number) -> number"
  148. },
  149. "length": {
  150. "!type": "number"
  151. },
  152. "map": {
  153. "!type": "fn(f: fn(element: number, i: number) -> number, context?: ?) -> +TypedArray",
  154. "!effects": ["call !0 this=!1 number number"]
  155. },
  156. "reduce": {
  157. "!type": "fn(combine: fn(sum: ?, elt: number, i: number) -> ?, init?: ?) -> !0.!ret",
  158. "!effects": ["call !0 !1 number number"]
  159. },
  160. "reduceRight": {
  161. "!type": "fn(combine: fn(sum: ?, elt: number, i: number) -> ?, init?: ?) -> !0.!ret",
  162. "!effects": ["call !0 !1 number number"]
  163. },
  164. "reverse": {
  165. "!type": "fn()"
  166. },
  167. "set": {
  168. "!type": "fn(array: [number], offset?: number)"
  169. },
  170. "slice": {
  171. "!type": "fn(from: number, to?: number) -> +TypedArray"
  172. },
  173. "some": {
  174. "!type": "fn(test: fn(elt: number, i: number) -> bool, context?: ?) -> bool",
  175. "!effects": ["call !0 this=!1 number number"]
  176. },
  177. "sort": {
  178. "!type": "fn(compare?: fn(a: number, b: number) -> number)",
  179. "!effects": ["call !0 number number"]
  180. },
  181. "subarray": {
  182. "!type": "fn(begin?: number, end?: number) -> +TypedArray"
  183. },
  184. "values": {
  185. "!type": "fn() -> +iter[:t=number]"
  186. },
  187. ":Symbol.iterator": {
  188. "!type": "fn() -> +iter[:t=number]"
  189. }
  190. }
  191. }
  192. },
  193. "Infinity": {
  194. "!type": "number"
  195. },
  196. "undefined": {
  197. "!type": "?"
  198. },
  199. "NaN": {
  200. "!type": "number"
  201. },
  202. "Object": {
  203. "!type": "fn()",
  204. "getPrototypeOf": {
  205. "!type": "fn(obj: ?) -> ?"
  206. },
  207. "create": {
  208. "!type": "fn(proto: ?) -> !custom:Object_create"
  209. },
  210. "defineProperty": {
  211. "!type": "fn(obj: ?, prop: string, desc: propertyDescriptor) -> !custom:Object_defineProperty"
  212. },
  213. "defineProperties": {
  214. "!type": "fn(obj: ?, props: ?) -> !custom:Object_defineProperties"
  215. },
  216. "getOwnPropertyDescriptor": {
  217. "!type": "fn(obj: ?, prop: string) -> propertyDescriptor"
  218. },
  219. "keys": {
  220. "!type": "fn(obj: ?) -> [string]"
  221. },
  222. "getOwnPropertyNames": {
  223. "!type": "fn(obj: ?) -> [string]"
  224. },
  225. "seal": {
  226. "!type": "fn(obj: ?)"
  227. },
  228. "isSealed": {
  229. "!type": "fn(obj: ?) -> bool"
  230. },
  231. "freeze": {
  232. "!type": "fn(obj: ?) -> !0"
  233. },
  234. "isFrozen": {
  235. "!type": "fn(obj: ?) -> bool"
  236. },
  237. "preventExtensions": {
  238. "!type": "fn(obj: ?)"
  239. },
  240. "isExtensible": {
  241. "!type": "fn(obj: ?) -> bool"
  242. },
  243. "assign": {
  244. "!type": "fn(target: ?, source: ?, source?: ?) -> !0",
  245. "!effects": ["copy !1 !0", "copy !2 !0", "copy !3 !0"]
  246. },
  247. "getOwnPropertySymbols": {
  248. "!type": "fn(obj: ?) -> !custom:getOwnPropertySymbols"
  249. },
  250. "is": {
  251. "!type": "fn(value1: ?, value2: ?) -> bool"
  252. },
  253. "setPrototypeOf": {
  254. "!type": "fn(obj: ?, prototype: ?)"
  255. },
  256. "prototype": {
  257. "!stdProto": "Object",
  258. "toString": {
  259. "!type": "fn() -> string"
  260. },
  261. "toLocaleString": {
  262. "!type": "fn() -> string"
  263. },
  264. "valueOf": {
  265. "!type": "fn() -> number"
  266. },
  267. "hasOwnProperty": {
  268. "!type": "fn(prop: string) -> bool"
  269. },
  270. "propertyIsEnumerable": {
  271. "!type": "fn(prop: string) -> bool"
  272. },
  273. "isPrototypeOf": {
  274. "!type": "fn(obj: ?) -> bool"
  275. }
  276. }
  277. },
  278. "Function": {
  279. "!type": "fn(body: string) -> fn()",
  280. "prototype": {
  281. "!stdProto": "Function",
  282. "apply": {
  283. "!type": "fn(this: ?, args: [?])",
  284. "!effects": ["call and return !this this=!0 !1.<i> !1.<i> !1.<i>"]
  285. },
  286. "call": {
  287. "!type": "fn(this: ?, args?: ?) -> !this.!ret",
  288. "!effects": ["call and return !this this=!0 !1 !2 !3 !4"]
  289. },
  290. "bind": {
  291. "!type": "fn(this: ?, args?: ?) -> !custom:Function_bind"
  292. },
  293. "prototype": "?"
  294. }
  295. },
  296. "Array": {
  297. "!type": "fn(size: number) -> !custom:Array_ctor",
  298. "isArray": {
  299. "!type": "fn(value: ?) -> bool"
  300. },
  301. "from": {
  302. "!type": "fn(arrayLike: ?, mapFn?: fn(elt: ?, i: number) -> ?, thisArg?: ?) -> [!0.<i>]",
  303. "!effects": ["call !1 this=!2 !0.<i> number"]
  304. },
  305. "of": {
  306. "!type": "fn(elementN: ?) -> [!0]"
  307. },
  308. "prototype": {
  309. "!stdProto": "Array",
  310. "length": {
  311. "!type": "number"
  312. },
  313. "concat": {
  314. "!type": "fn(other: [?]) -> !this"
  315. },
  316. "join": {
  317. "!type": "fn(separator?: string) -> string"
  318. },
  319. "splice": {
  320. "!type": "fn(pos: number, amount: number, newelt?: ?) -> [?]"
  321. },
  322. "pop": {
  323. "!type": "fn() -> !this.<i>"
  324. },
  325. "push": {
  326. "!type": "fn(newelt: ?) -> number",
  327. "!effects": ["propagate !0 !this.<i>"]
  328. },
  329. "shift": {
  330. "!type": "fn() -> !this.<i>"
  331. },
  332. "unshift": {
  333. "!type": "fn(newelt: ?) -> number",
  334. "!effects": ["propagate !0 !this.<i>"]
  335. },
  336. "slice": {
  337. "!type": "fn(from?: number, to?: number) -> !this"
  338. },
  339. "reverse": {
  340. "!type": "fn()"
  341. },
  342. "sort": {
  343. "!type": "fn(compare?: fn(a: ?, b: ?) -> number)",
  344. "!effects": ["call !0 !this.<i> !this.<i>"]
  345. },
  346. "indexOf": {
  347. "!type": "fn(elt: ?, from?: number) -> number"
  348. },
  349. "lastIndexOf": {
  350. "!type": "fn(elt: ?, from?: number) -> number"
  351. },
  352. "every": {
  353. "!type": "fn(test: fn(elt: ?, i: number, array: +Array) -> bool, context?: ?) -> bool",
  354. "!effects": ["call !0 this=!1 !this.<i> number !this"]
  355. },
  356. "some": {
  357. "!type": "fn(test: fn(elt: ?, i: number, array: +Array) -> bool, context?: ?) -> bool",
  358. "!effects": ["call !0 this=!1 !this.<i> number !this"]
  359. },
  360. "filter": {
  361. "!type": "fn(test: fn(elt: ?, i: number, array: +Array) -> bool, context?: ?) -> !this",
  362. "!effects": ["call !0 this=!1 !this.<i> number !this"]
  363. },
  364. "forEach": {
  365. "!type": "fn(f: fn(elt: ?, i: number, array: +Array), context?: ?)",
  366. "!effects": ["call !0 this=!1 !this.<i> number !this"]
  367. },
  368. "map": {
  369. "!type": "fn(f: fn(elt: ?, i: number, array: +Array) -> ?, context?: ?) -> [!0.!ret]",
  370. "!effects": ["call !0 this=!1 !this.<i> number !this"]
  371. },
  372. "reduce": {
  373. "!type": "fn(combine: fn(sum: ?, elt: ?, i: number, array: +Array) -> ?, init?: ?) -> !0.!ret",
  374. "!effects": ["call !0 !1 !this.<i> number !this"]
  375. },
  376. "reduceRight": {
  377. "!type": "fn(combine: fn(sum: ?, elt: ?, i: number, array: +Array) -> ?, init?: ?) -> !0.!ret",
  378. "!effects": ["call !0 !1 !this.<i> number !this"]
  379. },
  380. "copyWithin": {
  381. "!type": "fn(target: number, start: number, end?: number) -> !this"
  382. },
  383. "entries": {
  384. "!type": "fn() -> +iter[:t=[number, !this.<i>]]"
  385. },
  386. "fill": {
  387. "!type": "fn(value: ?, start?: number, end?: number) -> !this"
  388. },
  389. "find": {
  390. "!type": "fn(callback: fn(element: ?, index: number, array: [?]) -> bool, thisArg?: ?) -> !this.<i>",
  391. "!effects": ["call !0 this=!2 !this.<i> number"]
  392. },
  393. "findIndex": {
  394. "!type": "fn(callback: fn(element: ?, index: number, array: [?]), thisArg?: ?) -> number",
  395. "!effects": ["call !0 this=!2 !this.<i> number"]
  396. },
  397. "keys": {
  398. "!type": "fn() -> +iter[:t=number]"
  399. },
  400. "values": {
  401. "!type": "fn() -> +iter[:t=!this.<i>]"
  402. },
  403. ":Symbol.iterator": {
  404. "!type": "fn() -> +iter[:t=!this.<i>]"
  405. },
  406. "includes": {
  407. "!type": "fn(value: ?, fromIndex?: number) -> bool"
  408. }
  409. }
  410. },
  411. "String": {
  412. "!type": "fn(value: ?) -> string",
  413. "fromCharCode": {
  414. "!type": "fn(code: number) -> string"
  415. },
  416. "fromCodePoint": {
  417. "!type": "fn(point: number, point?: number) -> string"
  418. },
  419. "raw": {
  420. "!type": "fn(template: [string], substitutions: ?, templateString: ?) -> string"
  421. },
  422. "prototype": {
  423. "!stdProto": "String",
  424. "length": {
  425. "!type": "number"
  426. },
  427. "<i>": "string",
  428. "charAt": {
  429. "!type": "fn(i: number) -> string"
  430. },
  431. "charCodeAt": {
  432. "!type": "fn(i: number) -> number"
  433. },
  434. "indexOf": {
  435. "!type": "fn(char: string, from?: number) -> number"
  436. },
  437. "lastIndexOf": {
  438. "!type": "fn(char: string, from?: number) -> number"
  439. },
  440. "substring": {
  441. "!type": "fn(from: number, to?: number) -> string"
  442. },
  443. "substr": {
  444. "!type": "fn(from: number, length?: number) -> string"
  445. },
  446. "slice": {
  447. "!type": "fn(from: number, to?: number) -> string"
  448. },
  449. "padStart": {
  450. "!type": "fn(targetLength: number, padString?: string) -> string"
  451. },
  452. "padEnd": {
  453. "!type": "fn(targetLength: number, padString?: string) -> string"
  454. },
  455. "trim": {
  456. "!type": "fn() -> string"
  457. },
  458. "trimStart": {
  459. "!type": "fn() -> string"
  460. },
  461. "trimLeft": "String.prototype.trimStart",
  462. "trimEnd": {
  463. "!type": "fn() -> string"
  464. },
  465. "trimRight": "String.prototype.trimEnd",
  466. "toUpperCase": {
  467. "!type": "fn() -> string"
  468. },
  469. "toLowerCase": {
  470. "!type": "fn() -> string"
  471. },
  472. "toLocaleUpperCase": {
  473. "!type": "fn() -> string"
  474. },
  475. "toLocaleLowerCase": {
  476. "!type": "fn() -> string"
  477. },
  478. "split": {
  479. "!type": "fn(pattern?: string|+RegExp, limit?: number) -> [string]"
  480. },
  481. "concat": {
  482. "!type": "fn(other: string) -> string"
  483. },
  484. "localeCompare": {
  485. "!type": "fn(other: string) -> number"
  486. },
  487. "match": {
  488. "!type": "fn(pattern: +RegExp) -> [string]"
  489. },
  490. "replace": {
  491. "!type": "fn(pattern: string|+RegExp, replacement: string) -> string"
  492. },
  493. "search": {
  494. "!type": "fn(pattern: +RegExp) -> number"
  495. },
  496. "codePointAt": {
  497. "!type": "fn(pos: number) -> number"
  498. },
  499. "endsWith": {
  500. "!type": "fn(searchString: string, position?: number) -> bool"
  501. },
  502. "includes": {
  503. "!type": "fn(searchString: string, position?: number) -> bool"
  504. },
  505. "normalize": {
  506. "!type": "fn(form: string) -> string"
  507. },
  508. "repeat": {
  509. "!type": "fn(count: number) -> string"
  510. },
  511. "startsWith": {
  512. "!type": "fn(searchString: string, position?: number) -> bool"
  513. },
  514. ":Symbol.iterator": {
  515. "!type": "fn() -> +iter[:t=string]"
  516. }
  517. }
  518. },
  519. "Number": {
  520. "!type": "fn(value: ?) -> number",
  521. "MAX_VALUE": {
  522. "!type": "number"
  523. },
  524. "MIN_VALUE": {
  525. "!type": "number"
  526. },
  527. "POSITIVE_INFINITY": {
  528. "!type": "number"
  529. },
  530. "NEGATIVE_INFINITY": {
  531. "!type": "number"
  532. },
  533. "prototype": {
  534. "!stdProto": "Number",
  535. "toString": {
  536. "!type": "fn(radix?: number) -> string"
  537. },
  538. "toFixed": {
  539. "!type": "fn(digits: number) -> string"
  540. },
  541. "toExponential": {
  542. "!type": "fn(digits: number) -> string"
  543. },
  544. "toPrecision": {
  545. "!type": "fn(digits: number) -> string"
  546. }
  547. },
  548. "EPSILON": {
  549. "!type": "number"
  550. },
  551. "MAX_SAFE_INTEGER": {
  552. "!type": "number"
  553. },
  554. "MIN_SAFE_INTEGER": {
  555. "!type": "number"
  556. },
  557. "isFinite": {
  558. "!type": "fn(testValue: ?) -> bool"
  559. },
  560. "isInteger": {
  561. "!type": "fn(testValue: ?) -> bool"
  562. },
  563. "isNaN": {
  564. "!type": "fn(testValue: ?) -> bool"
  565. },
  566. "isSafeInteger": {
  567. "!type": "fn(testValue: ?) -> bool"
  568. },
  569. "parseFloat": {
  570. "!type": "fn(string: string) -> number"
  571. },
  572. "parseInt": {
  573. "!type": "fn(string: string, radix?: number) -> number"
  574. }
  575. },
  576. "Boolean": {
  577. "!type": "fn(value: ?) -> bool",
  578. "prototype": {
  579. "!stdProto": "Boolean"
  580. }
  581. },
  582. "RegExp": {
  583. "!type": "fn(source: string, flags?: string)",
  584. "prototype": {
  585. "!stdProto": "RegExp",
  586. "exec": {
  587. "!type": "fn(input: string) -> [string]"
  588. },
  589. "test": {
  590. "!type": "fn(input: string) -> bool"
  591. },
  592. "global": {
  593. "!type": "bool"
  594. },
  595. "ignoreCase": {
  596. "!type": "bool"
  597. },
  598. "multiline": {
  599. "!type": "bool"
  600. },
  601. "source": {
  602. "!type": "string"
  603. },
  604. "lastIndex": {
  605. "!type": "number"
  606. },
  607. "flags": {
  608. "!type": "string"
  609. },
  610. "sticky": {
  611. "!type": "bool"
  612. },
  613. "unicode": {
  614. "!type": "bool"
  615. }
  616. }
  617. },
  618. "Date": {
  619. "!type": "fn(ms: number)",
  620. "parse": {
  621. "!type": "fn(source: string) -> +Date"
  622. },
  623. "UTC": {
  624. "!type": "fn(year: number, month: number, date: number, hour?: number, min?: number, sec?: number, ms?: number) -> number"
  625. },
  626. "now": {
  627. "!type": "fn() -> number"
  628. },
  629. "prototype": {
  630. "toUTCString": {
  631. "!type": "fn() -> string"
  632. },
  633. "toISOString": {
  634. "!type": "fn() -> string"
  635. },
  636. "toDateString": {
  637. "!type": "fn() -> string"
  638. },
  639. "toGMTString": {
  640. "!type": "fn() -> string"
  641. },
  642. "toTimeString": {
  643. "!type": "fn() -> string"
  644. },
  645. "toLocaleDateString": {
  646. "!type": "fn() -> string"
  647. },
  648. "toLocaleFormat": {
  649. "!type": "fn(formatString: string) -> string"
  650. },
  651. "toLocaleString": {
  652. "!type": "fn(locales?: string, options?: ?) -> string"
  653. },
  654. "toLocaleTimeString": {
  655. "!type": "fn() -> string"
  656. },
  657. "toSource": {
  658. "!type": "fn() -> string"
  659. },
  660. "toString": {
  661. "!type": "fn() -> string"
  662. },
  663. "valueOf": {
  664. "!type": "fn() -> number"
  665. },
  666. "getTime": {
  667. "!type": "fn() -> number"
  668. },
  669. "getFullYear": {
  670. "!type": "fn() -> number"
  671. },
  672. "getYear": {
  673. "!type": "fn() -> number"
  674. },
  675. "getMonth": {
  676. "!type": "fn() -> number"
  677. },
  678. "getUTCMonth": {
  679. "!type": "fn() -> number"
  680. },
  681. "getDate": {
  682. "!type": "fn() -> number"
  683. },
  684. "getUTCDate": {
  685. "!type": "fn() -> number"
  686. },
  687. "getDay": {
  688. "!type": "fn() -> number"
  689. },
  690. "getUTCDay": {
  691. "!type": "fn() -> number"
  692. },
  693. "getUTCFullYear": {
  694. "!type": "fn() -> number"
  695. },
  696. "getHours": {
  697. "!type": "fn() -> number"
  698. },
  699. "getUTCHours": {
  700. "!type": "fn() -> number"
  701. },
  702. "getMinutes": {
  703. "!type": "fn() -> number"
  704. },
  705. "getUTCMinutes": {
  706. "!type": "fn() -> number"
  707. },
  708. "getSeconds": {
  709. "!type": "fn() -> number"
  710. },
  711. "getUTCSeconds": {
  712. "!type": "fn() -> number"
  713. },
  714. "getMilliseconds": {
  715. "!type": "fn() -> number"
  716. },
  717. "getUTCMilliseconds": {
  718. "!type": "fn() -> number"
  719. },
  720. "getTimezoneOffset": {
  721. "!type": "fn() -> number"
  722. },
  723. "setTime": {
  724. "!type": "fn(date: +Date) -> number"
  725. },
  726. "setFullYear": {
  727. "!type": "fn(year: number) -> number"
  728. },
  729. "setUTCFullYear": {
  730. "!type": "fn(year: number) -> number"
  731. },
  732. "setYear": {
  733. "!type": "fn(yearValue: number) -> number"
  734. },
  735. "setMonth": {
  736. "!type": "fn(month: number) -> number"
  737. },
  738. "setUTCMonth": {
  739. "!type": "fn(month: number) -> number"
  740. },
  741. "setDate": {
  742. "!type": "fn(day: number) -> number"
  743. },
  744. "setUTCDate": {
  745. "!type": "fn(day: number) -> number"
  746. },
  747. "setHours": {
  748. "!type": "fn(hour: number) -> number"
  749. },
  750. "setUTCHours": {
  751. "!type": "fn(hour: number) -> number"
  752. },
  753. "setMinutes": {
  754. "!type": "fn(min: number) -> number"
  755. },
  756. "setUTCMinutes": {
  757. "!type": "fn(min: number) -> number"
  758. },
  759. "setSeconds": {
  760. "!type": "fn(sec: number) -> number"
  761. },
  762. "setUTCSeconds": {
  763. "!type": "fn(sec: number) -> number"
  764. },
  765. "setMilliseconds": {
  766. "!type": "fn(ms: number) -> number"
  767. },
  768. "setUTCMilliseconds": {
  769. "!type": "fn(ms: number) -> number"
  770. },
  771. "toJSON": {
  772. "!type": "fn() -> string"
  773. }
  774. },
  775. "nested_overflow": "nested environment variables are limited to 10 levels"
  776. },
  777. "error": {
  778. "!type": "fn(message: string)",
  779. "prototype": {
  780. "name": {
  781. "!type": "string"
  782. },
  783. "message": {
  784. "!type": "string"
  785. }
  786. }
  787. },
  788. "SyntaxError": {
  789. "!type": "fn(message: string)",
  790. "prototype": "Error.prototype"
  791. },
  792. "ReferenceError": {
  793. "!type": "fn(message: string)",
  794. "prototype": "Error.prototype"
  795. },
  796. "URIError": {
  797. "!type": "fn(message: string)",
  798. "prototype": "Error.prototype"
  799. },
  800. "EvalError": {
  801. "!type": "fn(message: string)",
  802. "prototype": "Error.prototype"
  803. },
  804. "RangeError": {
  805. "!type": "fn(message: string)",
  806. "prototype": "Error.prototype"
  807. },
  808. "TypeError": {
  809. "!type": "fn(message: string)",
  810. "prototype": "Error.prototype"
  811. },
  812. "parseInt": {
  813. "!type": "fn(string: string, radix?: number) -> number"
  814. },
  815. "parseFloat": {
  816. "!type": "fn(string: string) -> number"
  817. },
  818. "isNaN": {
  819. "!type": "fn(value: number) -> bool"
  820. },
  821. "isFinite": {
  822. "!type": "fn(value: number) -> bool"
  823. },
  824. "eval": {
  825. "!type": "fn(code: string) -> ?"
  826. },
  827. "encodeURI": {
  828. "!type": "fn(uri: string) -> string"
  829. },
  830. "encodeURIComponent": {
  831. "!type": "fn(uri: string) -> string"
  832. },
  833. "decodeURI": {
  834. "!type": "fn(uri: string) -> string"
  835. },
  836. "decodeURIComponent": {
  837. "!type": "fn(uri: string) -> string"
  838. },
  839. "Math": {
  840. "E": {
  841. "!type": "number"
  842. },
  843. "LN2": {
  844. "!type": "number"
  845. },
  846. "LN10": {
  847. "!type": "number"
  848. },
  849. "LOG2E": {
  850. "!type": "number"
  851. },
  852. "LOG10E": {
  853. "!type": "number"
  854. },
  855. "SQRT1_2": {
  856. "!type": "number"
  857. },
  858. "SQRT2": {
  859. "!type": "number"
  860. },
  861. "PI": {
  862. "!type": "number"
  863. },
  864. "abs": {
  865. "!type": "fn(number) -> number"
  866. },
  867. "cos": {
  868. "!type": "fn(number) -> number"
  869. },
  870. "sin": {
  871. "!type": "fn(number) -> number"
  872. },
  873. "tan": {
  874. "!type": "fn(number) -> number"
  875. },
  876. "acos": {
  877. "!type": "fn(number) -> number"
  878. },
  879. "asin": {
  880. "!type": "fn(number) -> number"
  881. },
  882. "atan": {
  883. "!type": "fn(number) -> number"
  884. },
  885. "atan2": {
  886. "!type": "fn(y: number, x: number) -> number"
  887. },
  888. "ceil": {
  889. "!type": "fn(number) -> number"
  890. },
  891. "floor": {
  892. "!type": "fn(number) -> number"
  893. },
  894. "round": {
  895. "!type": "fn(number) -> number"
  896. },
  897. "exp": {
  898. "!type": "fn(number) -> number"
  899. },
  900. "log": {
  901. "!type": "fn(number) -> number"
  902. },
  903. "sqrt": {
  904. "!type": "fn(number) -> number"
  905. },
  906. "pow": {
  907. "!type": "fn(number, number) -> number"
  908. },
  909. "max": {
  910. "!type": "fn(number, number) -> number"
  911. },
  912. "min": {
  913. "!type": "fn(number, number) -> number"
  914. },
  915. "random": {
  916. "!type": "fn() -> number"
  917. },
  918. "acosh": {
  919. "!type": "fn(x: number) -> number"
  920. },
  921. "asinh": {
  922. "!type": "fn(x: number) -> number"
  923. },
  924. "atanh": {
  925. "!type": "fn(x: number) -> number"
  926. },
  927. "cbrt": {
  928. "!type": "fn(x: number) -> number"
  929. },
  930. "clz32": {
  931. "!type": "fn(x: number) -> number"
  932. },
  933. "cosh": {
  934. "!type": "fn(x: number) -> number"
  935. },
  936. "expm1": {
  937. "!type": "fn(x: number) -> number"
  938. },
  939. "fround": {
  940. "!type": "fn(x: number) -> number"
  941. },
  942. "hypot": {
  943. "!type": "fn(value: number) -> number"
  944. },
  945. "imul": {
  946. "!type": "fn(a: number, b: number) -> number"
  947. },
  948. "log10": {
  949. "!type": "fn(x: number) -> number"
  950. },
  951. "log1p": {
  952. "!type": "fn(x: number) -> number"
  953. },
  954. "log2": {
  955. "!type": "fn(x: number) -> number"
  956. },
  957. "sign": {
  958. "!type": "fn(x: number) -> number"
  959. },
  960. "sinh": {
  961. "!type": "fn(x: number) -> number"
  962. },
  963. "tanh": {
  964. "!type": "fn(x: number) -> number"
  965. },
  966. "trunc": {
  967. "!type": "fn(x: number) -> number"
  968. }
  969. },
  970. "JSON": {
  971. "parse": {
  972. "!type": "fn(json: string, reviver?: fn(key: string, value: ?) -> ?) -> ?"
  973. },
  974. "stringify": {
  975. "!type": "fn(value: ?, replacer?: fn(key: string, value: ?) -> ?, space?: string|number) -> string"
  976. }
  977. },
  978. "ArrayBuffer": {
  979. "!type": "fn(length: number)",
  980. "isView": {
  981. "!type": "fn(arg: +ArrayBuffer) -> bool"
  982. },
  983. "prototype": {
  984. "byteLength": {
  985. "!type": "number"
  986. },
  987. "slice": {
  988. "!type": "fn(begin: number, end?: number) -> +ArrayBuffer"
  989. }
  990. }
  991. },
  992. "DataView": {
  993. "!type": "fn(buffer: +ArrayBuffer, byteOffset?: number, byteLength?: number)",
  994. "prototype": {
  995. "buffer": {
  996. "!type": "+ArrayBuffer"
  997. },
  998. "byteLength": {
  999. "!type": "number"
  1000. },
  1001. "byteOffset": {
  1002. "!type": "number"
  1003. },
  1004. "getFloat32": {
  1005. "!type": "fn(byteOffset: number, littleEndian?: bool) -> number"
  1006. },
  1007. "getFloat64": {
  1008. "!type": "fn(byteOffset: number, littleEndian?: bool) -> number"
  1009. },
  1010. "getInt16": {
  1011. "!type": "fn(byteOffset: number, littleEndian?: bool) -> number"
  1012. },
  1013. "getInt32": {
  1014. "!type": "fn(byteOffset: number, littleEndian?: bool) -> number"
  1015. },
  1016. "getInt8": {
  1017. "!type": "fn(byteOffset: number, littleEndian?: bool) -> number"
  1018. },
  1019. "getUint16": {
  1020. "!type": "fn(byteOffset: number, littleEndian?: bool) -> number"
  1021. },
  1022. "getUint32": {
  1023. "!type": "fn(byteOffset: number, littleEndian?: bool) -> number"
  1024. },
  1025. "getUint8": {
  1026. "!type": "fn(byteOffset: number) -> number"
  1027. },
  1028. "setFloat32": {
  1029. "!type": "fn(byteOffset: number, value: number, littleEndian?: bool)"
  1030. },
  1031. "setFloat64": {
  1032. "!type": "fn(byteOffset: number, value: number, littleEndian?: bool)"
  1033. },
  1034. "setInt16": {
  1035. "!type": "fn(byteOffset: number, value: number, littleEndian?: bool)"
  1036. },
  1037. "setInt32": {
  1038. "!type": "fn(byteOffset: number, value: number, littleEndian?: bool)"
  1039. },
  1040. "setInt8": {
  1041. "!type": "fn(byteOffset: number, value: number)"
  1042. },
  1043. "setUint16": {
  1044. "!type": "fn(byteOffset: number, value: number, littleEndian?: bool)"
  1045. },
  1046. "setUint32": {
  1047. "!type": "fn(byteOffset: number, value: number, littleEndian?: bool)"
  1048. },
  1049. "setUint8": {
  1050. "!type": "fn(byteOffset: number, value: number)"
  1051. }
  1052. }
  1053. },
  1054. "Float32Array": "TypedArray",
  1055. "Float64Array": "TypedArray",
  1056. "Int16Array": "TypedArray",
  1057. "Int32Array": "TypedArray",
  1058. "Int8Array": "TypedArray",
  1059. "Map": {
  1060. "!type": "fn(iterable?: [?])",
  1061. "prototype": {
  1062. "clear": {
  1063. "!type": "fn()"
  1064. },
  1065. "delete": {
  1066. "!type": "fn(key: ?)"
  1067. },
  1068. "entries": {
  1069. "!type": "fn() -> +iter[:t=[!this.:key, !this.:value]]"
  1070. },
  1071. "forEach": {
  1072. "!type": "fn(callback: fn(value: ?, key: ?, map: +Map), thisArg?: ?)",
  1073. "!effects": ["call !0 this=!1 !this.:value !this.:key !this"]
  1074. },
  1075. "get": {
  1076. "!type": "fn(key: ?) -> !this.:value"
  1077. },
  1078. "has": {
  1079. "!type": "fn(key: ?) -> bool"
  1080. },
  1081. "keys": {
  1082. "!type": "fn() -> +iter[:t=!this.:key]"
  1083. },
  1084. "set": {
  1085. "!type": "fn(key: ?, value: ?) -> !this",
  1086. "!effects": ["propagate !0 !this.:key", "propagate !1 !this.:value"]
  1087. },
  1088. "size": {
  1089. "!type": "number"
  1090. },
  1091. "values": {
  1092. "!type": "fn() -> +iter[:t=!this.:value]"
  1093. },
  1094. ":Symbol.iterator": {
  1095. "!type": "fn() -> +iter[:t=[!this.:key, !this.:value]]"
  1096. }
  1097. }
  1098. },
  1099. "Promise": {
  1100. "!type": "fn(executor: fn(resolve: fn(value: ?), reject: fn(reason: ?))) -> !custom:Promise_ctor",
  1101. "all": {
  1102. "!type": "fn(iterable: [+Promise]) -> +Promise[:t=[!0.<i>.:t]]"
  1103. },
  1104. "race": {
  1105. "!type": "fn(iterable: [+Promise]) -> !0.<i>"
  1106. },
  1107. "reject": "Promise_reject",
  1108. "resolve": {
  1109. "!type": "fn(value: ?) -> !custom:Promise_resolve"
  1110. },
  1111. "prototype": "Promise.prototype"
  1112. },
  1113. "Proxy": {
  1114. "!type": "fn(target: ?, handler: Proxy_handler)",
  1115. "revocable": {
  1116. "!type": "fn(target: ?, handler: Proxy_handler) -> Proxy_revocable"
  1117. }
  1118. },
  1119. "Reflect": {
  1120. "apply": {
  1121. "!type": "fn(target: fn(), thisArg?: ?, argumentList?: [?]) -> !0.!ret"
  1122. },
  1123. "construct": {
  1124. "!type": "fn(target: fn(), argumentList?: [?]) -> ?"
  1125. },
  1126. "defineProperty": {
  1127. "!type": "fn(target: ?, property: string, descriptor: propertyDescriptor) -> bool"
  1128. },
  1129. "deleteProperty": {
  1130. "!type": "fn(target: ?, property: string) -> bool"
  1131. },
  1132. "enumerate": {
  1133. "!type": "fn(target: ?) -> +iter[:t=string]"
  1134. },
  1135. "get": {
  1136. "!type": "fn(target: ?, property: string) -> ?"
  1137. },
  1138. "getOwnPropertyDescriptor": {
  1139. "!type": "fn(target: ?, property: string) -> ?"
  1140. },
  1141. "getPrototypeOf": {
  1142. "!type": "fn(target: ?) -> ?"
  1143. },
  1144. "has": {
  1145. "!type": "fn(target: ?, property: string) -> bool"
  1146. },
  1147. "isExtensible": {
  1148. "!type": "fn(target: ?) -> bool"
  1149. },
  1150. "ownKeys": {
  1151. "!type": "fn(target: ?) -> [string]"
  1152. },
  1153. "preventExtensions": {
  1154. "!type": "fn(target: ?) -> bool"
  1155. },
  1156. "set": {
  1157. "!type": "fn(target: ?, property: string, value: ?) -> bool"
  1158. },
  1159. "setPrototypeOf": {
  1160. "!type": "fn(target: ?, prototype: ?) -> bool"
  1161. }
  1162. },
  1163. "Set": {
  1164. "!type": "fn(iterable?: [?])",
  1165. "prototype": {
  1166. "add": {
  1167. "!type": "fn(value: ?) -> !this",
  1168. "!effects": ["propagate !0 !this.:t"]
  1169. },
  1170. "clear": {
  1171. "!type": "fn()"
  1172. },
  1173. "delete": {
  1174. "!type": "fn(value: ?) -> bool"
  1175. },
  1176. "entries": {
  1177. "!type": "fn() -> +iter[:t=[!this.:t]]"
  1178. },
  1179. "forEach": {
  1180. "!type": "fn(callback: fn(value: ?, value2: ?, set: +Set), thisArg?: ?)",
  1181. "!effects": ["call !0 this=!1 !this.:t number !this"]
  1182. },
  1183. "has": {
  1184. "!type": "fn(value: ?) -> bool"
  1185. },
  1186. "keys": {
  1187. "!type": "fn() -> +iter[:t=!this.:t]"
  1188. },
  1189. "size": {
  1190. "!type": "number"
  1191. },
  1192. "values": {
  1193. "!type": "fn() -> +iter[:t=!this.:t]"
  1194. },
  1195. ":Symbol.iterator": {
  1196. "!type": "fn() -> +iter[:t=!this.:t]"
  1197. }
  1198. }
  1199. },
  1200. "Symbol": {
  1201. "!type": "fn(description?: string) -> !custom:getSymbol",
  1202. "for": {
  1203. "!type": "fn(key: string) -> !custom:getSymbol"
  1204. },
  1205. "keyFor": {
  1206. "!type": "fn(sym: +Symbol) -> string"
  1207. },
  1208. "hasInstance": ":Symbol.hasInstance",
  1209. "isConcatSpreadable": ":Symbol.isConcatSpreadable",
  1210. "iterator": ":Symbol.iterator",
  1211. "asyncIterator": ":Symbol.asyncIterator",
  1212. "match": ":Symbol.match",
  1213. "replace": ":Symbol.replace",
  1214. "search": ":Symbol.search",
  1215. "species": ":Symbol.species",
  1216. "split": ":Symbol.split",
  1217. "toStringTag": ":Symbol.toStringTag",
  1218. "unscopables": ":Symbol.unscopables",
  1219. "prototype": {
  1220. "!stdProto": "Symbol"
  1221. }
  1222. },
  1223. "Uint16Array": "TypedArray",
  1224. "Uint32Array": "TypedArray",
  1225. "Uint8Array": "TypedArray",
  1226. "Uint8ClampedArray": "TypedArray",
  1227. "WeakMap": {
  1228. "!type": "fn(iterable?: [?])",
  1229. "prototype": {
  1230. "delete": {
  1231. "!type": "fn(key: ?) -> bool"
  1232. },
  1233. "get": {
  1234. "!type": "fn(key: ?) -> !this.:value"
  1235. },
  1236. "has": {
  1237. "!type": "fn(key: ?) -> bool"
  1238. },
  1239. "set": {
  1240. "!type": "fn(key: ?, value: ?)",
  1241. "!effects": ["propagate !0 !this.:key", "propagate !1 !this.:value"]
  1242. }
  1243. }
  1244. },
  1245. "WeakSet": {
  1246. "!type": "fn(iterable?: [?])",
  1247. "prototype": {
  1248. "add": {
  1249. "!type": "fn(value: ?)"
  1250. },
  1251. "delete": {
  1252. "!type": "fn(value: ?) -> bool"
  1253. },
  1254. "has": {
  1255. "!type": "fn(value: ?) -> bool"
  1256. }
  1257. }
  1258. }
  1259. }