xbintsc 0.5.23 → 0.5.32

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (481) hide show
  1. package/AGENTS.md +11 -2
  2. package/README.md +47 -16
  3. package/README.zh-CN.md +21 -2
  4. package/dist/scripts/support-matrix.d.ts +18 -0
  5. package/dist/scripts/support-matrix.js +141 -0
  6. package/dist/scripts/support-matrix.js.map +1 -0
  7. package/dist/src/ast/common.d.ts +2 -2
  8. package/dist/src/ast/declarations.d.ts +7 -1
  9. package/dist/src/ast/expressions.d.ts +5 -0
  10. package/dist/src/ast/kinds.d.ts +2 -0
  11. package/dist/src/ast/kinds.js +2 -0
  12. package/dist/src/ast/kinds.js.map +1 -1
  13. package/dist/src/binder/binder.d.ts +2 -1
  14. package/dist/src/binder/binder.js +2 -0
  15. package/dist/src/binder/binder.js.map +1 -1
  16. package/dist/src/binder/declarations.d.ts +9 -0
  17. package/dist/src/binder/declarations.js +64 -0
  18. package/dist/src/binder/declarations.js.map +1 -1
  19. package/dist/src/binder/references.js +99 -4
  20. package/dist/src/binder/references.js.map +1 -1
  21. package/dist/src/binder/types.d.ts +32 -0
  22. package/dist/src/binder/types.js.map +1 -1
  23. package/dist/src/canonical.d.ts +29 -0
  24. package/dist/src/canonical.js +35 -0
  25. package/dist/src/canonical.js.map +1 -0
  26. package/dist/src/checker/assignability.d.ts +13 -0
  27. package/dist/src/checker/assignability.js +146 -0
  28. package/dist/src/checker/assignability.js.map +1 -0
  29. package/dist/src/checker/calls.d.ts +13 -0
  30. package/dist/src/checker/calls.js +127 -0
  31. package/dist/src/checker/calls.js.map +1 -0
  32. package/dist/src/checker/checker.d.ts +26 -0
  33. package/dist/src/checker/checker.js +31 -0
  34. package/dist/src/checker/checker.js.map +1 -0
  35. package/dist/src/checker/declarations.d.ts +9 -0
  36. package/dist/src/checker/declarations.js +15 -0
  37. package/dist/src/checker/declarations.js.map +1 -0
  38. package/dist/src/checker/flow.d.ts +21 -0
  39. package/dist/src/checker/flow.js +241 -0
  40. package/dist/src/checker/flow.js.map +1 -0
  41. package/dist/src/checker/globals.d.ts +9 -0
  42. package/dist/src/checker/globals.js +29 -0
  43. package/dist/src/checker/globals.js.map +1 -0
  44. package/dist/src/checker/source.d.ts +38 -0
  45. package/dist/src/checker/source.js +48 -0
  46. package/dist/src/checker/source.js.map +1 -0
  47. package/dist/src/checker/type-infer.d.ts +18 -0
  48. package/dist/src/checker/type-infer.js +173 -0
  49. package/dist/src/checker/type-infer.js.map +1 -0
  50. package/dist/src/checker/type-model.d.ts +73 -0
  51. package/dist/src/checker/type-model.js +151 -0
  52. package/dist/src/checker/type-model.js.map +1 -0
  53. package/dist/src/checker/type-system.d.ts +58 -0
  54. package/dist/src/checker/type-system.js +569 -0
  55. package/dist/src/checker/type-system.js.map +1 -0
  56. package/dist/src/checker/typecheck-types.d.ts +22 -0
  57. package/dist/src/checker/typecheck-types.js +109 -0
  58. package/dist/src/checker/typecheck-types.js.map +1 -0
  59. package/dist/src/checker/typecheck.d.ts +62 -0
  60. package/dist/src/checker/typecheck.js +574 -0
  61. package/dist/src/checker/typecheck.js.map +1 -0
  62. package/dist/src/checker/undefined.d.ts +14 -0
  63. package/dist/src/checker/undefined.js +32 -0
  64. package/dist/src/checker/undefined.js.map +1 -0
  65. package/dist/src/checker/walk.d.ts +10 -0
  66. package/dist/src/checker/walk.js +15 -0
  67. package/dist/src/checker/walk.js.map +1 -0
  68. package/dist/src/cli/help.d.ts +7 -0
  69. package/dist/src/cli/help.js +64 -0
  70. package/dist/src/cli/help.js.map +1 -0
  71. package/dist/src/cli/hints.js +2 -1
  72. package/dist/src/cli/hints.js.map +1 -1
  73. package/dist/src/cli/main.js +12 -48
  74. package/dist/src/cli/main.js.map +1 -1
  75. package/dist/src/codegen/generator/calls/access.js +8 -8
  76. package/dist/src/codegen/generator/calls/access.js.map +1 -1
  77. package/dist/src/codegen/generator/calls/invocation.js +9 -4
  78. package/dist/src/codegen/generator/calls/invocation.js.map +1 -1
  79. package/dist/src/codegen/generator/calls/super.d.ts +9 -1
  80. package/dist/src/codegen/generator/calls/super.js +56 -5
  81. package/dist/src/codegen/generator/calls/super.js.map +1 -1
  82. package/dist/src/codegen/generator/context.d.ts +13 -2
  83. package/dist/src/codegen/generator/context.js +25 -19
  84. package/dist/src/codegen/generator/context.js.map +1 -1
  85. package/dist/src/codegen/generator/debug.js +2 -1
  86. package/dist/src/codegen/generator/debug.js.map +1 -1
  87. package/dist/src/codegen/generator/expressions/primary.d.ts +4 -1
  88. package/dist/src/codegen/generator/expressions/primary.js +68 -8
  89. package/dist/src/codegen/generator/expressions/primary.js.map +1 -1
  90. package/dist/src/codegen/generator/generator.js +11 -1
  91. package/dist/src/codegen/generator/generator.js.map +1 -1
  92. package/dist/src/codegen/generator/module.d.ts +3 -0
  93. package/dist/src/codegen/generator/module.js +116 -26
  94. package/dist/src/codegen/generator/module.js.map +1 -1
  95. package/dist/src/codegen/generator/state.d.ts +11 -1
  96. package/dist/src/codegen/generator/state.js.map +1 -1
  97. package/dist/src/codegen/generator/statements/variables.js +26 -7
  98. package/dist/src/codegen/generator/statements/variables.js.map +1 -1
  99. package/dist/src/codegen/generator/tables.d.ts +2 -0
  100. package/dist/src/codegen/generator/tables.js +4 -0
  101. package/dist/src/codegen/generator/tables.js.map +1 -1
  102. package/dist/src/driver/build-key.d.ts +2 -0
  103. package/dist/src/driver/build-key.js +1 -0
  104. package/dist/src/driver/build-key.js.map +1 -1
  105. package/dist/src/driver/bundler/graph.js +5 -1
  106. package/dist/src/driver/bundler/graph.js.map +1 -1
  107. package/dist/src/driver/bundler/merge.js +16 -1
  108. package/dist/src/driver/bundler/merge.js.map +1 -1
  109. package/dist/src/driver/bundler/types.d.ts +12 -0
  110. package/dist/src/driver/compiler.d.ts +1 -1
  111. package/dist/src/driver/compiler.js +3 -0
  112. package/dist/src/driver/compiler.js.map +1 -1
  113. package/dist/src/driver/fingerprint.js +2 -1
  114. package/dist/src/driver/fingerprint.js.map +1 -1
  115. package/dist/src/driver/frontend.d.ts +8 -6
  116. package/dist/src/driver/frontend.js +4 -0
  117. package/dist/src/driver/frontend.js.map +1 -1
  118. package/dist/src/driver/options.d.ts +6 -0
  119. package/dist/src/driver/version.d.ts +1 -1
  120. package/dist/src/driver/version.js +1 -1
  121. package/dist/src/extensions/gui/css.d.ts +26 -0
  122. package/dist/src/extensions/gui/css.js +100 -0
  123. package/dist/src/extensions/gui/css.js.map +1 -0
  124. package/dist/src/extensions/gui/html.js +28 -7
  125. package/dist/src/extensions/gui/html.js.map +1 -1
  126. package/dist/src/extensions/gui/index.js +79 -2
  127. package/dist/src/extensions/gui/index.js.map +1 -1
  128. package/dist/src/extensions/gui/three.d.ts +16 -0
  129. package/dist/src/extensions/gui/three.js +22 -0
  130. package/dist/src/extensions/gui/three.js.map +1 -0
  131. package/dist/src/extensions/media/index.d.ts +6 -5
  132. package/dist/src/extensions/media/index.js +12 -14
  133. package/dist/src/extensions/media/index.js.map +1 -1
  134. package/dist/src/extensions/registry.d.ts +38 -0
  135. package/dist/src/extensions/registry.js +10 -0
  136. package/dist/src/extensions/registry.js.map +1 -1
  137. package/dist/src/index.d.ts +1 -0
  138. package/dist/src/index.js +1 -0
  139. package/dist/src/index.js.map +1 -1
  140. package/dist/src/parser/declarations/classes.js +7 -0
  141. package/dist/src/parser/declarations/classes.js.map +1 -1
  142. package/dist/src/parser/expressions.js +14 -1
  143. package/dist/src/parser/expressions.js.map +1 -1
  144. package/dist/src/parser/literals.js +6 -2
  145. package/dist/src/parser/literals.js.map +1 -1
  146. package/dist/tests/binder/binder.test.js +29 -0
  147. package/dist/tests/binder/binder.test.js.map +1 -1
  148. package/dist/tests/canonical.test.d.ts +1 -0
  149. package/dist/tests/canonical.test.js +19 -0
  150. package/dist/tests/canonical.test.js.map +1 -0
  151. package/dist/tests/checker/checker.test.d.ts +1 -0
  152. package/dist/tests/checker/checker.test.js +245 -0
  153. package/dist/tests/checker/checker.test.js.map +1 -0
  154. package/dist/tests/cli/check.test.js +20 -0
  155. package/dist/tests/cli/check.test.js.map +1 -1
  156. package/dist/tests/conformance/matrix.test.d.ts +6 -0
  157. package/dist/tests/conformance/matrix.test.js +23 -0
  158. package/dist/tests/conformance/matrix.test.js.map +1 -0
  159. package/dist/tests/conformance/test262/manifest.d.ts +115 -0
  160. package/dist/tests/conformance/test262/manifest.js +257 -0
  161. package/dist/tests/conformance/test262/manifest.js.map +1 -0
  162. package/dist/tests/conformance/test262.test.d.ts +11 -0
  163. package/dist/tests/conformance/test262.test.js +74 -0
  164. package/dist/tests/conformance/test262.test.js.map +1 -0
  165. package/dist/tests/docs/structure.test.js +9 -11
  166. package/dist/tests/docs/structure.test.js.map +1 -1
  167. package/dist/tests/e2e/child-process.test.js +3 -2
  168. package/dist/tests/e2e/child-process.test.js.map +1 -1
  169. package/dist/tests/e2e/compile-builtins.test.js +45 -0
  170. package/dist/tests/e2e/compile-builtins.test.js.map +1 -1
  171. package/dist/tests/e2e/compile-objects-classes.test.js +77 -0
  172. package/dist/tests/e2e/compile-objects-classes.test.js.map +1 -1
  173. package/dist/tests/e2e/differential-syntax.test.d.ts +5 -0
  174. package/dist/tests/e2e/differential-syntax.test.js +95 -0
  175. package/dist/tests/e2e/differential-syntax.test.js.map +1 -0
  176. package/dist/tests/e2e/differential-values.test.js +15 -0
  177. package/dist/tests/e2e/differential-values.test.js.map +1 -1
  178. package/dist/tests/e2e/gui-browser.test.d.ts +13 -0
  179. package/dist/tests/e2e/gui-browser.test.js +163 -0
  180. package/dist/tests/e2e/gui-browser.test.js.map +1 -0
  181. package/dist/tests/e2e/gui-effects.test.d.ts +6 -0
  182. package/dist/tests/e2e/gui-effects.test.js +262 -0
  183. package/dist/tests/e2e/gui-effects.test.js.map +1 -0
  184. package/dist/tests/e2e/gui-example-browser.test.js +2 -2
  185. package/dist/tests/e2e/gui-example-browser.test.js.map +1 -1
  186. package/dist/tests/e2e/gui-example-canvas.test.js +5 -4
  187. package/dist/tests/e2e/gui-example-canvas.test.js.map +1 -1
  188. package/dist/tests/e2e/gui-example-svg.test.js +4 -3
  189. package/dist/tests/e2e/gui-example-svg.test.js.map +1 -1
  190. package/dist/tests/e2e/gui-example-webgl.test.d.ts +10 -0
  191. package/dist/tests/e2e/gui-example-webgl.test.js +75 -0
  192. package/dist/tests/e2e/gui-example-webgl.test.js.map +1 -0
  193. package/dist/tests/e2e/gui-example-webgl2.test.d.ts +8 -0
  194. package/dist/tests/e2e/gui-example-webgl2.test.js +72 -0
  195. package/dist/tests/e2e/gui-example-webgl2.test.js.map +1 -0
  196. package/dist/tests/e2e/gui-example.test.js +4 -3
  197. package/dist/tests/e2e/gui-example.test.js.map +1 -1
  198. package/dist/tests/e2e/gui-helpers.js +4 -3
  199. package/dist/tests/e2e/gui-helpers.js.map +1 -1
  200. package/dist/tests/e2e/gui-layout.test.js +48 -0
  201. package/dist/tests/e2e/gui-layout.test.js.map +1 -1
  202. package/dist/tests/e2e/gui-media.test.js +10 -8
  203. package/dist/tests/e2e/gui-media.test.js.map +1 -1
  204. package/dist/tests/e2e/gui-webgl.test.d.ts +11 -0
  205. package/dist/tests/e2e/gui-webgl.test.js +179 -0
  206. package/dist/tests/e2e/gui-webgl.test.js.map +1 -0
  207. package/dist/tests/e2e/gui-webgl2.test.d.ts +10 -0
  208. package/dist/tests/e2e/gui-webgl2.test.js +238 -0
  209. package/dist/tests/e2e/gui-webgl2.test.js.map +1 -0
  210. package/dist/tests/e2e/harness.d.ts +9 -0
  211. package/dist/tests/e2e/harness.js +14 -2
  212. package/dist/tests/e2e/harness.js.map +1 -1
  213. package/dist/tests/e2e/native-extensions.test.js +2 -1
  214. package/dist/tests/e2e/native-extensions.test.js.map +1 -1
  215. package/dist/tests/e2e/property-descriptors.test.js +20 -0
  216. package/dist/tests/e2e/property-descriptors.test.js.map +1 -1
  217. package/dist/tests/e2e/unicode-output.test.js +5 -3
  218. package/dist/tests/e2e/unicode-output.test.js.map +1 -1
  219. package/dist/tests/e2e/weak-collections.test.js +16 -2
  220. package/dist/tests/e2e/weak-collections.test.js.map +1 -1
  221. package/dist/tests/extensions/gui.test.js +41 -0
  222. package/dist/tests/extensions/gui.test.js.map +1 -1
  223. package/dist/tests/extensions/media.test.js +7 -3
  224. package/dist/tests/extensions/media.test.js.map +1 -1
  225. package/dist/tests/helpers.d.ts +1 -0
  226. package/dist/tests/helpers.js +1 -0
  227. package/dist/tests/helpers.js.map +1 -1
  228. package/dist/tests/parser/declarations.test.js +20 -0
  229. package/dist/tests/parser/declarations.test.js.map +1 -1
  230. package/dist/tests/parser/expressions.test.js +36 -0
  231. package/dist/tests/parser/expressions.test.js.map +1 -1
  232. package/dist/tests/platform.d.ts +32 -0
  233. package/dist/tests/platform.js +40 -0
  234. package/dist/tests/platform.js.map +1 -0
  235. package/dist/tests/platform.test.d.ts +12 -0
  236. package/dist/tests/platform.test.js +51 -0
  237. package/dist/tests/platform.test.js.map +1 -0
  238. package/dist/tests/version.test.js +4 -4
  239. package/dist/tests/version.test.js.map +1 -1
  240. package/doc/ai/README.md +10 -4
  241. package/doc/ai/build-recipe.md +1 -0
  242. package/doc/ai/cli.md +17 -5
  243. package/doc/ai/contributing.md +59 -2
  244. package/doc/ai/extensions.md +38 -7
  245. package/doc/ai/language-support.md +25 -16
  246. package/doc/ai/troubleshooting.md +12 -8
  247. package/doc/ai/zh-CN/README.md +9 -4
  248. package/doc/ai/zh-CN/build-recipe.md +1 -0
  249. package/doc/ai/zh-CN/cli.md +13 -3
  250. package/doc/ai/zh-CN/contributing.md +49 -3
  251. package/doc/ai/zh-CN/extensions.md +33 -6
  252. package/doc/ai/zh-CN/language-support.md +23 -14
  253. package/doc/ai/zh-CN/troubleshooting.md +10 -6
  254. package/doc/gui/api.md +47 -1
  255. package/doc/gui/build.md +72 -16
  256. package/doc/gui/canvas.md +11 -3
  257. package/doc/gui/dom.md +33 -18
  258. package/doc/gui/known-issues.md +58 -15
  259. package/doc/gui/layout.md +18 -0
  260. package/doc/gui/media.md +17 -13
  261. package/doc/gui/rendering.md +50 -3
  262. package/doc/gui/runtime.md +18 -0
  263. package/doc/gui/webgl.md +256 -0
  264. package/doc/gui-scripts.md +7 -0
  265. package/doc/gui.md +108 -17
  266. package/doc/implemented/binder.md +2 -0
  267. package/doc/implemented/checker.md +117 -0
  268. package/doc/implemented/cli.md +13 -1
  269. package/doc/implemented/codegen.md +3 -2
  270. package/doc/implemented/driver.md +2 -2
  271. package/doc/implemented/operators.md +2 -1
  272. package/doc/implemented/parser.md +3 -2
  273. package/doc/implemented/pipeline.md +8 -1
  274. package/doc/implemented/stdlib.md +2 -1
  275. package/doc/implemented/tests.md +3 -1
  276. package/doc/implemented.md +2 -0
  277. package/doc/npm-package.md +419 -0
  278. package/doc/requirements.md +22 -10
  279. package/doc/support-matrix.md +83 -0
  280. package/doc/unimplemented/classes.md +3 -0
  281. package/doc/unimplemented/deviations.md +3 -2
  282. package/doc/unimplemented/toolchain.md +1 -1
  283. package/doc/unimplemented/types.md +24 -8
  284. package/doc/unimplemented.md +1 -1
  285. package/doc/zh-CN/gui/api.md +43 -1
  286. package/doc/zh-CN/gui/build.md +64 -15
  287. package/doc/zh-CN/gui/canvas.md +9 -2
  288. package/doc/zh-CN/gui/dom.md +20 -7
  289. package/doc/zh-CN/gui/known-issues.md +46 -13
  290. package/doc/zh-CN/gui/layout.md +14 -0
  291. package/doc/zh-CN/gui/media.md +15 -11
  292. package/doc/zh-CN/gui/rendering.md +41 -4
  293. package/doc/zh-CN/gui/runtime.md +16 -0
  294. package/doc/zh-CN/gui/webgl.md +115 -0
  295. package/doc/zh-CN/gui-scripts.md +5 -0
  296. package/doc/zh-CN/gui.md +89 -14
  297. package/doc/zh-CN/implemented/binder.md +2 -0
  298. package/doc/zh-CN/implemented/checker.md +99 -0
  299. package/doc/zh-CN/implemented/cli.md +12 -1
  300. package/doc/zh-CN/implemented/codegen.md +3 -2
  301. package/doc/zh-CN/implemented/driver.md +2 -2
  302. package/doc/zh-CN/implemented/operators.md +1 -1
  303. package/doc/zh-CN/implemented/parser.md +3 -2
  304. package/doc/zh-CN/implemented/pipeline.md +3 -1
  305. package/doc/zh-CN/implemented/stdlib.md +2 -1
  306. package/doc/zh-CN/implemented/tests.md +3 -1
  307. package/doc/zh-CN/implemented.md +2 -0
  308. package/doc/zh-CN/npm-package.md +394 -0
  309. package/doc/zh-CN/post/announce.md +47 -47
  310. package/doc/zh-CN/requirements.md +16 -7
  311. package/doc/zh-CN/support-matrix.md +82 -0
  312. package/doc/zh-CN/unimplemented/classes.md +3 -0
  313. package/doc/zh-CN/unimplemented/deviations.md +3 -2
  314. package/doc/zh-CN/unimplemented/toolchain.md +1 -1
  315. package/doc/zh-CN/unimplemented/types.md +16 -6
  316. package/doc/zh-CN/unimplemented.md +1 -1
  317. package/llms.txt +6 -1
  318. package/package.json +2 -1
  319. package/runtime/ext_gui/audio.cpp +316 -0
  320. package/runtime/ext_gui/browser.cpp +573 -0
  321. package/runtime/ext_gui/browser_escape.cpp +85 -0
  322. package/runtime/ext_gui/browser_loop.cpp +83 -0
  323. package/runtime/ext_gui/canvas.cpp +12 -21
  324. package/runtime/ext_gui/canvas_internal.h +10 -0
  325. package/runtime/ext_gui/canvas_raster.cpp +79 -1
  326. package/runtime/ext_gui/clip_values.cpp +246 -0
  327. package/runtime/ext_gui/css.cpp +94 -0
  328. package/runtime/ext_gui/css.h +22 -1
  329. package/runtime/ext_gui/css_match.cpp +3 -0
  330. package/runtime/ext_gui/css_selector.cpp +9 -0
  331. package/runtime/ext_gui/css_sheet.cpp +89 -45
  332. package/runtime/ext_gui/document.cpp +4 -1
  333. package/runtime/ext_gui/document.h +2 -0
  334. package/runtime/ext_gui/dom.h +16 -0
  335. package/runtime/ext_gui/dom_api.cpp +37 -0
  336. package/runtime/ext_gui/dom_api_canvas.cpp +17 -80
  337. package/runtime/ext_gui/dom_api_canvas_extra.cpp +130 -1
  338. package/runtime/ext_gui/dom_api_canvas_pending.cpp +41 -0
  339. package/runtime/ext_gui/dom_api_document.cpp +96 -5
  340. package/runtime/ext_gui/dom_api_events.cpp +20 -0
  341. package/runtime/ext_gui/dom_api_internal.h +278 -0
  342. package/runtime/ext_gui/dom_api_proto.cpp +6 -0
  343. package/runtime/ext_gui/dom_api_webgl.cpp +376 -0
  344. package/runtime/ext_gui/dom_api_webgl2.cpp +434 -0
  345. package/runtime/ext_gui/dom_api_webgl2_draw.cpp +269 -0
  346. package/runtime/ext_gui/dom_api_webgl_buffer.cpp +212 -0
  347. package/runtime/ext_gui/dom_api_webgl_rt.h +30 -0
  348. package/runtime/ext_gui/dom_api_webgl_shader.cpp +443 -0
  349. package/runtime/ext_gui/dom_api_webgl_state.cpp +444 -0
  350. package/runtime/ext_gui/dom_api_webgl_texture.cpp +445 -0
  351. package/runtime/ext_gui/effect_values.cpp +312 -0
  352. package/runtime/ext_gui/gradient_values.cpp +476 -0
  353. package/runtime/ext_gui/grid_values.cpp +230 -0
  354. package/runtime/ext_gui/gui.cpp +90 -23
  355. package/runtime/ext_gui/gui_canvas.cpp +50 -2
  356. package/runtime/ext_gui/gui_engine.h +71 -0
  357. package/runtime/ext_gui/gui_events.cpp +4 -1
  358. package/runtime/ext_gui/gui_media.cpp +1 -1
  359. package/runtime/ext_gui/gui_webgl.cpp +83 -0
  360. package/runtime/ext_gui/layout.cpp +21 -0
  361. package/runtime/ext_gui/layout_flow.cpp +81 -4
  362. package/runtime/ext_gui/layout_flow_internal.h +31 -0
  363. package/runtime/ext_gui/layout_grid.cpp +374 -0
  364. package/runtime/ext_gui/media.h +1 -1
  365. package/runtime/ext_gui/media_api.h +2 -2
  366. package/runtime/ext_gui/media_query.cpp +211 -0
  367. package/runtime/ext_gui/paint.cpp +111 -77
  368. package/runtime/ext_gui/paint.h +33 -3
  369. package/runtime/ext_gui/paint_background.cpp +229 -0
  370. package/runtime/ext_gui/paint_clip.cpp +268 -0
  371. package/runtime/ext_gui/paint_effects.cpp +324 -0
  372. package/runtime/ext_gui/paint_internal.h +85 -0
  373. package/runtime/ext_gui/renderer.cpp +8 -31
  374. package/runtime/ext_gui/renderer_clip.cpp +196 -0
  375. package/runtime/ext_gui/renderer_image.cpp +13 -8
  376. package/runtime/ext_gui/renderer_internal.h +15 -8
  377. package/runtime/ext_gui/renderer_text.cpp +6 -31
  378. package/runtime/ext_gui/style.cpp +343 -20
  379. package/runtime/ext_gui/style.h +144 -3
  380. package/runtime/ext_gui/style_print.cpp +134 -1
  381. package/runtime/ext_gui/style_values.cpp +152 -126
  382. package/runtime/ext_gui/style_values_internal.h +35 -0
  383. package/runtime/ext_gui/webgl.h +466 -0
  384. package/runtime/ext_gui/webgl2_constants.h +274 -0
  385. package/runtime/ext_gui/webgl_buffer.cpp +565 -0
  386. package/runtime/ext_gui/webgl_constants.h +317 -0
  387. package/runtime/ext_gui/webgl_context.cpp +466 -0
  388. package/runtime/ext_gui/webgl_draw.cpp +495 -0
  389. package/runtime/ext_gui/webgl_glsl.h +125 -0
  390. package/runtime/ext_gui/webgl_glsl_compile.cpp +431 -0
  391. package/runtime/ext_gui/webgl_glsl_rewrite.cpp +349 -0
  392. package/runtime/ext_gui/webgl_glsl_scan.cpp +581 -0
  393. package/runtime/ext_gui/webgl_msl.cpp +62 -0
  394. package/runtime/ext_gui/webgl_msl.h +33 -0
  395. package/runtime/ext_gui/webgl_pipeline.cpp +274 -0
  396. package/runtime/ext_gui/webgl_program_internal.h +18 -0
  397. package/runtime/ext_gui/webgl_shader.cpp +582 -0
  398. package/runtime/ext_gui/webgl_texture.cpp +293 -0
  399. package/runtime/ext_gui/webgl_uniform.cpp +167 -0
  400. package/runtime/ext_gui/webgl_webgl2.cpp +224 -0
  401. package/runtime/ext_gui/window.cpp +9 -0
  402. package/runtime/ext_media/media.cpp +1 -1
  403. package/runtime/ext_media/media_bridge.c +9 -3
  404. package/runtime/ext_node/path/path.c +7 -7
  405. package/runtime/ext_node/url/url.c +4 -2
  406. package/runtime/rt.h +15 -0
  407. package/runtime/rt_internal.h +1 -0
  408. package/runtime/xt_constructors.c +2 -1
  409. package/runtime/xt_containers/access.inc +8 -0
  410. package/runtime/xt_containers/objects.inc +22 -2
  411. package/runtime/xt_io/exception.inc +4 -2
  412. package/runtime/xt_regex/api.inc +2 -0
  413. package/runtime/xt_regex/matcher.inc +16 -3
  414. package/runtime/xt_regex/parser.inc +8 -2
  415. package/runtime/xt_regex/types.inc +3 -0
  416. package/runtime/xt_stdlib/math.inc +62 -0
  417. package/runtime/xt_stdlib2/date.inc +7 -1
  418. package/runtime/xt_stdlib2/objects.inc +14 -0
  419. package/runtime/xt_stdlib2/regexp-match.inc +60 -21
  420. package/runtime/xt_stdlib2/regexp.inc +1 -0
  421. package/runtime/xt_typed_array.c +1 -1
  422. package/scripts/build-gui.ts +90 -3
  423. package/scripts/build-media.ts +323 -58
  424. package/scripts/setup-vs-toolchain.ps1 +152 -0
  425. package/scripts/support-matrix.ts +167 -0
  426. package/src/ast/common.ts +2 -0
  427. package/src/ast/declarations.ts +12 -1
  428. package/src/ast/expressions.ts +6 -0
  429. package/src/ast/kinds.ts +2 -0
  430. package/src/binder/binder.ts +3 -0
  431. package/src/binder/declarations.ts +70 -0
  432. package/src/binder/references.ts +97 -4
  433. package/src/binder/types.ts +30 -0
  434. package/src/canonical.ts +37 -0
  435. package/src/checker/assignability.ts +134 -0
  436. package/src/checker/calls.ts +135 -0
  437. package/src/checker/checker.ts +47 -0
  438. package/src/checker/declarations.ts +26 -0
  439. package/src/checker/flow.ts +236 -0
  440. package/src/checker/globals.ts +40 -0
  441. package/src/checker/source.ts +53 -0
  442. package/src/checker/type-infer.ts +185 -0
  443. package/src/checker/type-model.ts +212 -0
  444. package/src/checker/type-system.ts +578 -0
  445. package/src/checker/typecheck-types.ts +112 -0
  446. package/src/checker/typecheck.ts +586 -0
  447. package/src/checker/undefined.ts +43 -0
  448. package/src/checker/walk.ts +16 -0
  449. package/src/cli/help.ts +65 -0
  450. package/src/cli/hints.ts +2 -1
  451. package/src/cli/main.ts +12 -49
  452. package/src/codegen/generator/calls/access.ts +8 -8
  453. package/src/codegen/generator/calls/invocation.ts +8 -5
  454. package/src/codegen/generator/calls/super.ts +67 -5
  455. package/src/codegen/generator/context.ts +31 -19
  456. package/src/codegen/generator/debug.ts +2 -1
  457. package/src/codegen/generator/expressions/primary.ts +84 -13
  458. package/src/codegen/generator/generator.ts +11 -1
  459. package/src/codegen/generator/module.ts +115 -24
  460. package/src/codegen/generator/state.ts +11 -1
  461. package/src/codegen/generator/statements/variables.ts +26 -6
  462. package/src/codegen/generator/tables.ts +5 -0
  463. package/src/driver/build-key.ts +3 -0
  464. package/src/driver/bundler/graph.ts +6 -2
  465. package/src/driver/bundler/merge.ts +14 -1
  466. package/src/driver/bundler/types.ts +13 -0
  467. package/src/driver/compiler.ts +4 -1
  468. package/src/driver/fingerprint.ts +2 -1
  469. package/src/driver/frontend.ts +13 -2
  470. package/src/driver/options.ts +6 -0
  471. package/src/driver/version.ts +1 -1
  472. package/src/extensions/gui/css.ts +113 -0
  473. package/src/extensions/gui/html.ts +31 -11
  474. package/src/extensions/gui/index.ts +81 -2
  475. package/src/extensions/gui/three.ts +25 -0
  476. package/src/extensions/media/index.ts +13 -16
  477. package/src/extensions/registry.ts +48 -0
  478. package/src/index.ts +1 -0
  479. package/src/parser/declarations/classes.ts +7 -0
  480. package/src/parser/expressions.ts +13 -1
  481. package/src/parser/literals.ts +6 -2
@@ -34,8 +34,28 @@ static const xtgui::Node *find_by_id(const xtgui::Node *node, const std::string
34
34
  METHOD(doc_query_selector) {
35
35
  (void)env;
36
36
  XtGuiWindow *win = resolve_window(self);
37
- if (win == nullptr || win->document == nullptr || argc < 1) return XT_UNDEFINED;
38
- return xt_gui_node_handle(win, win->document->querySelector(to_string_value(xt_arg(argc, argv, 0))));
37
+ if (win == nullptr || argc < 1) return XT_UNDEFINED;
38
+ std::string selector = to_string_value(xt_arg(argc, argv, 0));
39
+ const xtgui::Node *node =
40
+ win->document != nullptr ? win->document->querySelector(selector) : nullptr;
41
+ if (node != nullptr) return xt_gui_node_handle(win, node);
42
+ /* A page that is already parsed has no such element: answer undefined, like
43
+ * the browser. Only a query made *before* `loadHTML` earns a pending handle
44
+ * that binds once the tree exists. */
45
+ if (win != nullptr && !win->html.empty()) return XT_UNDEFINED;
46
+ return pending_handle(win, pending_by_selector, selector);
47
+ }
48
+
49
+ /* -- pending lookup helpers (see `dom_api.cpp`) --------------------------- */
50
+
51
+ xtgui::Node *document_find_by_id(XtGuiWindow *win, const std::string &id) {
52
+ if (win == nullptr || win->document == nullptr) return nullptr;
53
+ return const_cast<xtgui::Node *>(find_by_id(win->document->root(), id));
54
+ }
55
+
56
+ xtgui::Node *document_query_selector(XtGuiWindow *win, const std::string &selector) {
57
+ if (win == nullptr || win->document == nullptr) return nullptr;
58
+ return const_cast<xtgui::Node *>(win->document->querySelector(selector));
39
59
  }
40
60
 
41
61
  METHOD(doc_query_selector_all) {
@@ -52,9 +72,16 @@ METHOD(doc_query_selector_all) {
52
72
  METHOD(doc_get_element_by_id) {
53
73
  (void)env;
54
74
  XtGuiWindow *win = resolve_window(self);
55
- if (win == nullptr || win->document == nullptr || argc < 1) return XT_UNDEFINED;
56
- return xt_gui_node_handle(
57
- win, find_by_id(win->document->root(), to_string_value(xt_arg(argc, argv, 0))));
75
+ if (win == nullptr || argc < 1) return XT_UNDEFINED;
76
+ std::string id = to_string_value(xt_arg(argc, argv, 0));
77
+ const xtgui::Node *node =
78
+ win->document != nullptr ? find_by_id(win->document->root(), id) : nullptr;
79
+ if (node != nullptr) return xt_gui_node_handle(win, node);
80
+ if (win != nullptr && !win->html.empty()) return XT_UNDEFINED;
81
+ /* The page has not been loaded yet (a module queried the id while it
82
+ * initialized): answer with a pending handle that binds to the real node once
83
+ * the document is parsed. */
84
+ return pending_handle(win, pending_by_id, id);
58
85
  }
59
86
 
60
87
  METHOD(doc_create_element) {
@@ -66,6 +93,70 @@ METHOD(doc_create_element) {
66
93
  return xt_gui_node_handle(win, win->document->createElement(tag));
67
94
  }
68
95
 
96
+ /** `createElementNS(ns, name)`: the engine has no namespaces, so the qualified
97
+ * name after `:` is what gets created (`createElementNS(svgNS, "svg:rect")`). */
98
+ METHOD(doc_create_element_ns) {
99
+ (void)env;
100
+ XtGuiWindow *win = resolve_window(self);
101
+ if (win == nullptr || win->document == nullptr || argc < 2) return XT_UNDEFINED;
102
+ std::string name = to_string_value(xt_arg(argc, argv, 1));
103
+ size_t colon = name.rfind(':');
104
+ if (colon != std::string::npos) name = name.substr(colon + 1);
105
+ for (char &c : name) c = (char)std::tolower((unsigned char)c);
106
+ return xt_gui_node_handle(win, win->document->createElement(name));
107
+ }
108
+
109
+ /** `document.hidden` / `visibilityState`: a window in the main loop is always
110
+ * visible, and reporting hidden would make a page pause its own loop. */
111
+ METHOD(doc_hidden_get) {
112
+ (void)self;
113
+ (void)env;
114
+ (void)argc;
115
+ (void)argv;
116
+ return XT_FALSE;
117
+ }
118
+
119
+ METHOD(doc_visibility_state_get) {
120
+ (void)self;
121
+ (void)env;
122
+ (void)argc;
123
+ (void)argv;
124
+ return xt_string_from_cstr("visible");
125
+ }
126
+
127
+ /** `document.readyState`: the page is fully parsed before any script runs. */
128
+ METHOD(doc_ready_state_get) {
129
+ (void)self;
130
+ (void)env;
131
+ (void)argc;
132
+ (void)argv;
133
+ return xt_string_from_cstr("complete");
134
+ }
135
+
136
+ METHOD(doc_title_get) {
137
+ (void)env;
138
+ (void)argc;
139
+ (void)argv;
140
+ XtGuiWindow *win = resolve_window(self);
141
+ if (win == nullptr || win->document == nullptr) return xt_string_from_cstr("");
142
+ const xtgui::Node *title = find_by_tag(win->document->root(), "title");
143
+ std::string text;
144
+ if (title != nullptr) {
145
+ for (const std::unique_ptr<xtgui::Node> &child : title->children) {
146
+ if (!child->isElement()) text += child->text;
147
+ }
148
+ }
149
+ return xt_string_from_cstr(text.c_str());
150
+ }
151
+
152
+ METHOD(doc_default_view_get) {
153
+ (void)env;
154
+ (void)argc;
155
+ (void)argv;
156
+ XtGuiWindow *win = resolve_window(self);
157
+ return win != nullptr ? win->object : XT_UNDEFINED;
158
+ }
159
+
69
160
  METHOD(doc_create_text_node) {
70
161
  (void)env;
71
162
  XtGuiWindow *win = resolve_window(self);
@@ -31,6 +31,26 @@ static xt_value make_dom_event(XtGuiWindow *win, const char *type, const xtgui::
31
31
  return event;
32
32
  }
33
33
 
34
+ /** A detached event object, as `new Event(type)` / `new CustomEvent(type, init)`
35
+ * builds: no target yet, but the standard fields and `detail`. */
36
+ xt_value event_construct(xt_value type, xt_value init) {
37
+ std::string name = to_string_value(type);
38
+ xt_value event = xt_object_new_with_proto(event_proto());
39
+ xt_object_set(event, xt_string_from_cstr("type"), xt_string_from_cstr(name.c_str()));
40
+ xt_object_set(event, xt_string_from_cstr("target"), XT_NULL);
41
+ xt_object_set(event, xt_string_from_cstr("currentTarget"), XT_NULL);
42
+ xt_object_set(event, xt_string_from_cstr("defaultPrevented"), XT_FALSE);
43
+ xt_value bubbles = xt_object_get_cstr(init, "bubbles");
44
+ xt_object_set(event, xt_string_from_cstr("bubbles"), XT_IS_UNDEFINED(bubbles) ? XT_FALSE : bubbles);
45
+ xt_value cancelable = xt_object_get_cstr(init, "cancelable");
46
+ xt_object_set(event, xt_string_from_cstr("cancelable"),
47
+ XT_IS_UNDEFINED(cancelable) ? XT_FALSE : cancelable);
48
+ xt_value detail = xt_object_get_cstr(init, "detail");
49
+ xt_object_set(event, xt_string_from_cstr("detail"),
50
+ XT_IS_UNDEFINED(detail) ? XT_NULL : detail);
51
+ return event;
52
+ }
53
+
34
54
  void remove_listener(XtGuiWindow *win, xtgui::Node *node, const std::string &type, xt_value fn,
35
55
  bool capture) {
36
56
  auto found = win->node_listeners.find(node);
@@ -29,6 +29,20 @@ extern xt_value g_class_list_proto;
29
29
  extern xt_value g_style_proto;
30
30
  extern xt_value g_canvas_proto;
31
31
  extern xt_value g_canvas_gradient_proto;
32
+ extern xt_value g_webgl_proto;
33
+ extern xt_value g_webgl2_proto;
34
+ extern xt_value g_webgl_buffer_proto;
35
+ extern xt_value g_webgl_texture_proto;
36
+ extern xt_value g_webgl_shader_proto;
37
+ extern xt_value g_webgl_program_proto;
38
+ extern xt_value g_webgl_framebuffer_proto;
39
+ extern xt_value g_webgl_renderbuffer_proto;
40
+ extern xt_value g_webgl_uniform_proto;
41
+ extern xt_value g_webgl_vertex_array_proto;
42
+ extern xt_value g_webgl_sampler_proto;
43
+ extern xt_value g_webgl_query_proto;
44
+ extern xt_value g_webgl_sync_proto;
45
+ extern xt_value g_webgl_transform_feedback_proto;
32
46
 
33
47
  xt_value node_proto();
34
48
  xt_value document_proto();
@@ -37,6 +51,14 @@ xt_value class_list_proto();
37
51
  xt_value style_proto();
38
52
  xt_value canvas_proto();
39
53
  xt_value canvas_gradient_proto();
54
+ xt_value webgl_proto();
55
+ xt_value webgl2_proto();
56
+ /** The prototype a WebGL object of `kind` inherits (`buffer`, `texture`, …),
57
+ * so `buffer instanceof WebGLBuffer` holds. */
58
+ xt_value webgl_object_proto(const std::string &kind);
59
+
60
+ /** Create/return the 2D context for a pending `<canvas>` handle (before load). */
61
+ xt_value xt_canvas_pending_context(xt_value self, XtGuiWindow *win);
40
62
 
41
63
  /* -- canvas helpers shared by `dom_api_canvas*.cpp` ----------------------- */
42
64
 
@@ -51,6 +73,42 @@ xt_value canvas_gradient_handle(xt_value context, const xtgui::Canvas2D *canvas,
51
73
  * `canvas` (stale or created by another canvas). */
52
74
  uint64_t canvas_gradient_id(xt_value handle, const xtgui::Canvas2D *canvas);
53
75
 
76
+ /* -- WebGL helpers shared by `dom_api_webgl*.cpp` ------------------------- */
77
+
78
+ /** The engine WebGL context behind a context handle, or null. */
79
+ xtgui::WebGLContext *webgl_from_context(xt_value self);
80
+ /** The numeric context id stored on a context handle (0 when absent). */
81
+ uint64_t webgl_context_id(xt_value self);
82
+ /** Create the JavaScript handle for a canvas's WebGL context. */
83
+ xt_value webgl_context_handle(xt_value element, xtgui::WebGLContext *context);
84
+ /** The id stored on an object handle under `key`, or 0. */
85
+ uint32_t webgl_object_id(xt_value handle, const char *key);
86
+ /** Build an object handle (`{__xt_gl_context, __xt_gl_<key>}`). */
87
+ xt_value webgl_make_object(xt_value context, const char *key, uint32_t id,
88
+ const std::string &kind);
89
+ double webgl_number(int32_t argc, xt_value *argv, int32_t index, double fallback);
90
+ int webgl_int(int32_t argc, xt_value *argv, int32_t index, int fallback);
91
+ std::string webgl_string(int32_t argc, xt_value *argv, int32_t index);
92
+ /** Read an array/typed array of numbers. */
93
+ std::vector<double> webgl_numbers(xt_value value);
94
+ /** Read the raw bytes of a typed array / ArrayBuffer (or a byte array). */
95
+ std::vector<uint8_t> webgl_bytes(xt_value value);
96
+ /** Store `count` bytes into a typed array / array handle. */
97
+ void webgl_write_bytes(xt_value target, const uint8_t *bytes, size_t count);
98
+ /** Read the `UNPACK_FLIP_Y_WEBGL` / `UNPACK_PREMULTIPLY_ALPHA_WEBGL` flags set
99
+ * through `pixelStorei`. */
100
+ void webgl_unpack_flags(xt_value context, bool *flip_y, bool *premultiply);
101
+
102
+ /** How a pending handle names the node it will bind to. */
103
+ enum PendingKind { pending_by_id = 1, pending_by_selector = 2 };
104
+
105
+ /** A handle for a node the document does not have yet: it binds on first use
106
+ * after `loadHTML` has parsed the page (`resolve_node` does the lookup). */
107
+ xt_value pending_handle(XtGuiWindow *win, int kind, const std::string &key);
108
+ /** The first element with `id` / matching `selector`, or null. */
109
+ xtgui::Node *document_find_by_id(XtGuiWindow *win, const std::string &id);
110
+ xtgui::Node *document_query_selector(XtGuiWindow *win, const std::string &selector);
111
+
54
112
  /* -- cross-unit helpers --------------------------------------------------- */
55
113
 
56
114
  std::string to_string_value(xt_value value);
@@ -82,6 +140,12 @@ METHOD(doc_query_selector);
82
140
  METHOD(doc_query_selector_all);
83
141
  METHOD(doc_get_element_by_id);
84
142
  METHOD(doc_create_element);
143
+ METHOD(doc_create_element_ns);
144
+ METHOD(doc_hidden_get);
145
+ METHOD(doc_visibility_state_get);
146
+ METHOD(doc_ready_state_get);
147
+ METHOD(doc_title_get);
148
+ METHOD(doc_default_view_get);
85
149
  METHOD(doc_create_text_node);
86
150
  METHOD(doc_body_get);
87
151
  METHOD(doc_document_element_get);
@@ -135,6 +199,9 @@ METHOD(node_add_event_listener);
135
199
  METHOD(node_remove_event_listener);
136
200
  METHOD(node_dispatch_event);
137
201
 
202
+ /* event construction (a detached `Event`/`CustomEvent` handle) */
203
+ xt_value event_construct(xt_value type, xt_value init);
204
+
138
205
  /* event methods */
139
206
  METHOD(event_prevent_default);
140
207
  METHOD(event_stop_propagation);
@@ -238,6 +305,217 @@ METHOD(style_set_property);
238
305
  METHOD(style_get_property_value);
239
306
  METHOD(style_remove_property);
240
307
 
308
+ /* WebGL context: state and queries */
309
+ METHOD(webgl_canvas_get);
310
+ METHOD(webgl_drawing_buffer_width_get);
311
+ METHOD(webgl_drawing_buffer_height_get);
312
+ METHOD(webgl_enable);
313
+ METHOD(webgl_disable);
314
+ METHOD(webgl_is_enabled);
315
+ METHOD(webgl_clear);
316
+ METHOD(webgl_clear_color);
317
+ METHOD(webgl_clear_depth);
318
+ METHOD(webgl_clear_stencil);
319
+ METHOD(webgl_color_mask);
320
+ METHOD(webgl_depth_func);
321
+ METHOD(webgl_depth_mask);
322
+ METHOD(webgl_depth_range);
323
+ METHOD(webgl_blend_color);
324
+ METHOD(webgl_blend_equation);
325
+ METHOD(webgl_blend_equation_separate);
326
+ METHOD(webgl_blend_func);
327
+ METHOD(webgl_blend_func_separate);
328
+ METHOD(webgl_cull_face);
329
+ METHOD(webgl_front_face);
330
+ METHOD(webgl_viewport);
331
+ METHOD(webgl_scissor);
332
+ METHOD(webgl_finish);
333
+ METHOD(webgl_flush);
334
+ METHOD(webgl_hint);
335
+ METHOD(webgl_line_width);
336
+ METHOD(webgl_polygon_offset);
337
+ METHOD(webgl_sample_coverage);
338
+ METHOD(webgl_pixel_storei);
339
+ METHOD(webgl_get_error);
340
+ METHOD(webgl_get_parameter);
341
+ METHOD(webgl_get_supported_extensions);
342
+ METHOD(webgl_get_extension);
343
+ METHOD(webgl_get_context_attributes);
344
+ METHOD(webgl_is_context_lost);
345
+ METHOD(webgl_stencil_func);
346
+ METHOD(webgl_stencil_func_separate);
347
+ METHOD(webgl_stencil_op);
348
+ METHOD(webgl_stencil_op_separate);
349
+ METHOD(webgl_stencil_mask);
350
+ METHOD(webgl_stencil_mask_separate);
351
+ METHOD(webgl_get_shader_precision_format);
352
+
353
+ /* WebGL shaders, programs and uniforms */
354
+ METHOD(webgl_create_shader);
355
+ METHOD(webgl_delete_shader);
356
+ METHOD(webgl_shader_source);
357
+ METHOD(webgl_compile_shader);
358
+ METHOD(webgl_get_shader_parameter);
359
+ METHOD(webgl_get_shader_info_log);
360
+ METHOD(webgl_get_shader_source);
361
+ METHOD(webgl_create_program);
362
+ METHOD(webgl_delete_program);
363
+ METHOD(webgl_attach_shader);
364
+ METHOD(webgl_detach_shader);
365
+ METHOD(webgl_link_program);
366
+ METHOD(webgl_use_program);
367
+ METHOD(webgl_get_program_parameter);
368
+ METHOD(webgl_get_program_info_log);
369
+ METHOD(webgl_get_attached_shaders);
370
+ METHOD(webgl_validate_program);
371
+ METHOD(webgl_get_active_uniform);
372
+ METHOD(webgl_get_active_attrib);
373
+ METHOD(webgl_get_uniform_location);
374
+ METHOD(webgl_get_attrib_location);
375
+ METHOD(webgl_bind_attrib_location);
376
+ METHOD(webgl_get_uniform);
377
+ METHOD(webgl_uniform1f);
378
+ METHOD(webgl_uniform2f);
379
+ METHOD(webgl_uniform3f);
380
+ METHOD(webgl_uniform4f);
381
+ METHOD(webgl_uniform1i);
382
+ METHOD(webgl_uniform2i);
383
+ METHOD(webgl_uniform3i);
384
+ METHOD(webgl_uniform4i);
385
+ METHOD(webgl_uniform1fv);
386
+ METHOD(webgl_uniform2fv);
387
+ METHOD(webgl_uniform3fv);
388
+ METHOD(webgl_uniform4fv);
389
+ METHOD(webgl_uniform1iv);
390
+ METHOD(webgl_uniform2iv);
391
+ METHOD(webgl_uniform3iv);
392
+ METHOD(webgl_uniform4iv);
393
+ METHOD(webgl_uniform_matrix2fv);
394
+ METHOD(webgl_uniform_matrix3fv);
395
+ METHOD(webgl_uniform_matrix4fv);
396
+
397
+ /* WebGL buffers, vertex attributes and draws */
398
+ METHOD(webgl_create_buffer);
399
+ METHOD(webgl_delete_buffer);
400
+ METHOD(webgl_bind_buffer);
401
+ METHOD(webgl_buffer_data);
402
+ METHOD(webgl_buffer_sub_data);
403
+ METHOD(webgl_get_buffer_parameter);
404
+ METHOD(webgl_enable_vertex_attrib_array);
405
+ METHOD(webgl_disable_vertex_attrib_array);
406
+ METHOD(webgl_vertex_attrib_pointer);
407
+ METHOD(webgl_vertex_attrib1f);
408
+ METHOD(webgl_vertex_attrib2f);
409
+ METHOD(webgl_vertex_attrib3f);
410
+ METHOD(webgl_vertex_attrib4f);
411
+ METHOD(webgl_vertex_attrib1fv);
412
+ METHOD(webgl_vertex_attrib2fv);
413
+ METHOD(webgl_vertex_attrib3fv);
414
+ METHOD(webgl_vertex_attrib4fv);
415
+ METHOD(webgl_get_vertex_attrib);
416
+ METHOD(webgl_draw_arrays);
417
+ METHOD(webgl_draw_elements);
418
+
419
+ /* WebGL textures, framebuffers and readback */
420
+ METHOD(webgl_create_texture);
421
+ METHOD(webgl_delete_texture);
422
+ METHOD(webgl_bind_texture);
423
+ METHOD(webgl_active_texture);
424
+ METHOD(webgl_tex_parameteri);
425
+ METHOD(webgl_tex_parameterf);
426
+ METHOD(webgl_get_tex_parameter);
427
+ METHOD(webgl_tex_image_2d);
428
+ METHOD(webgl_tex_sub_image_2d);
429
+ METHOD(webgl_generate_mipmap);
430
+ METHOD(webgl_create_framebuffer);
431
+ METHOD(webgl_delete_framebuffer);
432
+ METHOD(webgl_bind_framebuffer);
433
+ METHOD(webgl_framebuffer_texture_2d);
434
+ METHOD(webgl_check_framebuffer_status);
435
+ METHOD(webgl_create_renderbuffer);
436
+ METHOD(webgl_delete_renderbuffer);
437
+ METHOD(webgl_bind_renderbuffer);
438
+ METHOD(webgl_renderbuffer_storage);
439
+ METHOD(webgl_framebuffer_renderbuffer);
440
+ METHOD(webgl_get_renderbuffer_parameter);
441
+ METHOD(webgl_read_pixels);
442
+
443
+ /* WebGL 2 context extensions */
444
+ METHOD(webgl2_create_vertex_array);
445
+ METHOD(webgl2_delete_vertex_array);
446
+ METHOD(webgl2_bind_vertex_array);
447
+ METHOD(webgl2_is_vertex_array);
448
+ METHOD(webgl2_vertex_attrib_ipointer);
449
+ METHOD(webgl2_vertex_attrib_i4i);
450
+ METHOD(webgl2_vertex_attrib_i4iv);
451
+ METHOD(webgl2_vertex_attrib_i4ui);
452
+ METHOD(webgl2_vertex_attrib_i4uiv);
453
+ METHOD(webgl2_vertex_attrib_divisor);
454
+ METHOD(webgl2_draw_arrays_instanced);
455
+ METHOD(webgl2_draw_elements_instanced);
456
+ METHOD(webgl2_draw_range_elements);
457
+ METHOD(webgl2_uniform1ui);
458
+ METHOD(webgl2_uniform2ui);
459
+ METHOD(webgl2_uniform3ui);
460
+ METHOD(webgl2_uniform4ui);
461
+ METHOD(webgl2_create_sampler);
462
+ METHOD(webgl2_delete_sampler);
463
+ METHOD(webgl2_bind_sampler);
464
+ METHOD(webgl2_sampler_parameteri);
465
+ METHOD(webgl2_sampler_parameterf);
466
+ METHOD(webgl2_get_sampler_parameter);
467
+ METHOD(webgl2_create_query);
468
+ METHOD(webgl2_delete_query);
469
+ METHOD(webgl2_begin_query);
470
+ METHOD(webgl2_end_query);
471
+ METHOD(webgl2_get_query);
472
+ METHOD(webgl2_get_query_parameter);
473
+ METHOD(webgl2_create_transform_feedback);
474
+ METHOD(webgl2_delete_transform_feedback);
475
+ METHOD(webgl2_bind_transform_feedback);
476
+ METHOD(webgl2_begin_transform_feedback);
477
+ METHOD(webgl2_end_transform_feedback);
478
+ METHOD(webgl2_pause_transform_feedback);
479
+ METHOD(webgl2_resume_transform_feedback);
480
+ METHOD(webgl2_transform_feedback_varyings);
481
+ METHOD(webgl2_get_transform_feedback_varying);
482
+ METHOD(webgl2_fence_sync);
483
+ METHOD(webgl2_delete_sync);
484
+ METHOD(webgl2_client_wait_sync);
485
+ METHOD(webgl2_wait_sync);
486
+ METHOD(webgl2_get_sync_parameter);
487
+ METHOD(webgl2_bind_buffer_base);
488
+ METHOD(webgl2_bind_buffer_range);
489
+ METHOD(webgl2_get_indexed_parameter);
490
+ METHOD(webgl2_copy_buffer_sub_data);
491
+ METHOD(webgl2_get_buffer_sub_data);
492
+ METHOD(webgl2_get_uniform_indices);
493
+ METHOD(webgl2_get_active_uniforms);
494
+ METHOD(webgl2_get_uniform_block_index);
495
+ METHOD(webgl2_get_active_uniform_block_parameter);
496
+ METHOD(webgl2_get_active_uniform_block_name);
497
+ METHOD(webgl2_uniform_block_binding);
498
+ METHOD(webgl2_tex_storage_2d);
499
+ METHOD(webgl2_tex_storage_3d);
500
+ METHOD(webgl2_tex_image_3d);
501
+ METHOD(webgl2_tex_sub_image_3d);
502
+ METHOD(webgl2_compressed_tex_image2d);
503
+ METHOD(webgl2_compressed_tex_sub_image2d);
504
+ METHOD(webgl2_compressed_tex_image3d);
505
+ METHOD(webgl2_compressed_tex_sub_image3d);
506
+ METHOD(webgl2_clear_buffer_fi);
507
+ METHOD(webgl2_clear_buffer_fv);
508
+ METHOD(webgl2_clear_buffer_iv);
509
+ METHOD(webgl2_clear_buffer_uiv);
510
+ METHOD(webgl2_draw_buffers);
511
+ METHOD(webgl2_read_buffer);
512
+ METHOD(webgl2_blit_framebuffer);
513
+ METHOD(webgl2_framebuffer_texture_layer);
514
+ METHOD(webgl2_invalidate_framebuffer);
515
+ METHOD(webgl2_invalidate_sub_framebuffer);
516
+ METHOD(webgl2_get_internalformat_parameter);
517
+ METHOD(webgl2_get_frag_data_location);
518
+
241
519
  #undef METHOD
242
520
 
243
521
  } // namespace domapi
@@ -117,6 +117,12 @@ xt_value document_proto() {
117
117
  define_method(proto, "querySelectorAll", (void *)doc_query_selector_all);
118
118
  define_method(proto, "getElementById", (void *)doc_get_element_by_id);
119
119
  define_method(proto, "createElement", (void *)doc_create_element);
120
+ define_method(proto, "createElementNS", (void *)doc_create_element_ns);
121
+ define_getter(proto, "hidden", (void *)doc_hidden_get);
122
+ define_getter(proto, "visibilityState", (void *)doc_visibility_state_get);
123
+ define_getter(proto, "readyState", (void *)doc_ready_state_get);
124
+ define_getter(proto, "title", (void *)doc_title_get);
125
+ define_getter(proto, "defaultView", (void *)doc_default_view_get);
120
126
  define_method(proto, "createTextNode", (void *)doc_create_text_node);
121
127
  /* `document.addEventListener` / element listener plumbing come from the node
122
128
  * prototype and operate on the document root node. */