@designliquido/delegua 1.20.0 → 1.21.0

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 (533) hide show
  1. package/analisador-documentario/index.d.ts +2 -2
  2. package/analisador-documentario/index.d.ts.map +1 -1
  3. package/analisador-documentario/index.js.map +1 -1
  4. package/analisador-semantico/analisador-semantico-base.d.ts +9 -8
  5. package/analisador-semantico/analisador-semantico-base.d.ts.map +1 -1
  6. package/analisador-semantico/analisador-semantico-base.js.map +1 -1
  7. package/analisador-semantico/analisador-semantico.d.ts +14 -13
  8. package/analisador-semantico/analisador-semantico.d.ts.map +1 -1
  9. package/analisador-semantico/analisador-semantico.js +10 -2
  10. package/analisador-semantico/analisador-semantico.js.map +1 -1
  11. package/analisador-semantico/dialetos/analisador-semantico-pitugues.d.ts +12 -11
  12. package/analisador-semantico/dialetos/analisador-semantico-pitugues.d.ts.map +1 -1
  13. package/analisador-semantico/dialetos/analisador-semantico-pitugues.js +9 -1
  14. package/analisador-semantico/dialetos/analisador-semantico-pitugues.js.map +1 -1
  15. package/analisador-semantico/tabela-diagnosticos-semanticos.d.ts +3 -3
  16. package/analisador-semantico/tabela-diagnosticos-semanticos.d.ts.map +1 -1
  17. package/analisador-semantico/tabela-diagnosticos-semanticos.js.map +1 -1
  18. package/avaliador-sintatico/avaliador-sintatico-base.d.ts +22 -21
  19. package/avaliador-sintatico/avaliador-sintatico-base.d.ts.map +1 -1
  20. package/avaliador-sintatico/avaliador-sintatico-base.js.map +1 -1
  21. package/avaliador-sintatico/avaliador-sintatico.d.ts +42 -41
  22. package/avaliador-sintatico/avaliador-sintatico.d.ts.map +1 -1
  23. package/avaliador-sintatico/avaliador-sintatico.js +1 -1
  24. package/avaliador-sintatico/avaliador-sintatico.js.map +1 -1
  25. package/avaliador-sintatico/dialetos/avaliador-sintatico-calango.d.ts +9 -8
  26. package/avaliador-sintatico/dialetos/avaliador-sintatico-calango.d.ts.map +1 -1
  27. package/avaliador-sintatico/dialetos/avaliador-sintatico-calango.js.map +1 -1
  28. package/avaliador-sintatico/dialetos/avaliador-sintatico-egua-classico.d.ts +22 -21
  29. package/avaliador-sintatico/dialetos/avaliador-sintatico-egua-classico.d.ts.map +1 -1
  30. package/avaliador-sintatico/dialetos/avaliador-sintatico-egua-classico.js.map +1 -1
  31. package/avaliador-sintatico/dialetos/avaliador-sintatico-guarani.d.ts +8 -7
  32. package/avaliador-sintatico/dialetos/avaliador-sintatico-guarani.d.ts.map +1 -1
  33. package/avaliador-sintatico/dialetos/avaliador-sintatico-guarani.js.map +1 -1
  34. package/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.d.ts +33 -27
  35. package/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.d.ts.map +1 -1
  36. package/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.js +102 -62
  37. package/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.js.map +1 -1
  38. package/avaliador-sintatico/dialetos/avaliador-sintatico-portugol-ipt.d.ts +10 -9
  39. package/avaliador-sintatico/dialetos/avaliador-sintatico-portugol-ipt.d.ts.map +1 -1
  40. package/avaliador-sintatico/dialetos/avaliador-sintatico-portugol-ipt.js.map +1 -1
  41. package/avaliador-sintatico/dialetos/avaliador-sintatico-prisma.d.ts +26 -25
  42. package/avaliador-sintatico/dialetos/avaliador-sintatico-prisma.d.ts.map +1 -1
  43. package/avaliador-sintatico/dialetos/avaliador-sintatico-prisma.js.map +1 -1
  44. package/avaliador-sintatico/dialetos/avaliador-sintatico-tenda.d.ts +28 -28
  45. package/avaliador-sintatico/dialetos/avaliador-sintatico-tenda.d.ts.map +1 -1
  46. package/avaliador-sintatico/dialetos/avaliador-sintatico-tenda.js +1 -1
  47. package/avaliador-sintatico/dialetos/avaliador-sintatico-tenda.js.map +1 -1
  48. package/avaliador-sintatico/dialetos/micro-avaliador-sintatico-pitugues.d.ts +19 -20
  49. package/avaliador-sintatico/dialetos/micro-avaliador-sintatico-pitugues.d.ts.map +1 -1
  50. package/avaliador-sintatico/dialetos/micro-avaliador-sintatico-pitugues.js.map +1 -1
  51. package/avaliador-sintatico/micro-avaliador-sintatico-base.d.ts +13 -13
  52. package/avaliador-sintatico/micro-avaliador-sintatico-base.d.ts.map +1 -1
  53. package/avaliador-sintatico/micro-avaliador-sintatico-base.js.map +1 -1
  54. package/avaliador-sintatico/micro-avaliador-sintatico.d.ts +17 -18
  55. package/avaliador-sintatico/micro-avaliador-sintatico.d.ts.map +1 -1
  56. package/avaliador-sintatico/micro-avaliador-sintatico.js +1 -1
  57. package/avaliador-sintatico/micro-avaliador-sintatico.js.map +1 -1
  58. package/avaliador-sintatico/tabela-diagnosticos-sintaticos.d.ts +3 -3
  59. package/avaliador-sintatico/tabela-diagnosticos-sintaticos.d.ts.map +1 -1
  60. package/avaliador-sintatico/tabela-diagnosticos-sintaticos.js.map +1 -1
  61. package/avaliador-sintatico/traducao/avaliador-sintatico-javascript.d.ts +3 -3
  62. package/avaliador-sintatico/traducao/avaliador-sintatico-javascript.d.ts.map +1 -1
  63. package/avaliador-sintatico/traducao/avaliador-sintatico-javascript.js +2 -2
  64. package/avaliador-sintatico/traducao/avaliador-sintatico-javascript.js.map +1 -1
  65. package/bibliotecas/dialetos/pitugues/biblioteca-global.d.ts +117 -141
  66. package/bibliotecas/dialetos/pitugues/biblioteca-global.d.ts.map +1 -1
  67. package/bibliotecas/dialetos/pitugues/biblioteca-global.js +723 -610
  68. package/bibliotecas/dialetos/pitugues/biblioteca-global.js.map +1 -1
  69. package/bibliotecas/dialetos/pitugues/primitivas-vetor.d.ts.map +1 -1
  70. package/bibliotecas/dialetos/pitugues/primitivas-vetor.js +21 -0
  71. package/bibliotecas/dialetos/pitugues/primitivas-vetor.js.map +1 -1
  72. package/bibliotecas/primitivas-texto.d.ts.map +1 -1
  73. package/bibliotecas/primitivas-texto.js.map +1 -1
  74. package/bin/package.json +1 -1
  75. package/construtos/acesso-elemento-matriz.d.ts +6 -6
  76. package/construtos/acesso-elemento-matriz.d.ts.map +1 -1
  77. package/construtos/acesso-elemento-matriz.js.map +1 -1
  78. package/construtos/acesso-indice-variavel.d.ts +5 -5
  79. package/construtos/acesso-indice-variavel.d.ts.map +1 -1
  80. package/construtos/acesso-indice-variavel.js.map +1 -1
  81. package/construtos/acesso-intervalo-variavel.d.ts +7 -7
  82. package/construtos/acesso-intervalo-variavel.d.ts.map +1 -1
  83. package/construtos/acesso-intervalo-variavel.js.map +1 -1
  84. package/construtos/acesso-metodo-ou-propriedade.d.ts +4 -4
  85. package/construtos/acesso-metodo-ou-propriedade.d.ts.map +1 -1
  86. package/construtos/acesso-metodo-ou-propriedade.js.map +1 -1
  87. package/construtos/acesso-metodo.d.ts +4 -4
  88. package/construtos/acesso-metodo.d.ts.map +1 -1
  89. package/construtos/acesso-metodo.js.map +1 -1
  90. package/construtos/acesso-propriedade.d.ts +4 -4
  91. package/construtos/acesso-propriedade.d.ts.map +1 -1
  92. package/construtos/acesso-propriedade.js.map +1 -1
  93. package/construtos/agrupamento.d.ts +4 -4
  94. package/construtos/agrupamento.d.ts.map +1 -1
  95. package/construtos/agrupamento.js.map +1 -1
  96. package/construtos/ajuda-como-construto.d.ts +4 -4
  97. package/construtos/ajuda-como-construto.d.ts.map +1 -1
  98. package/construtos/ajuda-como-construto.js.map +1 -1
  99. package/construtos/argumento-referencia-funcao.d.ts +2 -2
  100. package/construtos/argumento-referencia-funcao.d.ts.map +1 -1
  101. package/construtos/atribuicao-por-indice.d.ts +6 -6
  102. package/construtos/atribuicao-por-indice.d.ts.map +1 -1
  103. package/construtos/atribuicao-por-indice.js.map +1 -1
  104. package/construtos/atribuicao-por-indices-matriz.d.ts +7 -7
  105. package/construtos/atribuicao-por-indices-matriz.d.ts.map +1 -1
  106. package/construtos/atribuicao-por-indices-matriz.js.map +1 -1
  107. package/construtos/atribuir.d.ts +6 -6
  108. package/construtos/atribuir.d.ts.map +1 -1
  109. package/construtos/atribuir.js.map +1 -1
  110. package/construtos/binario.d.ts +5 -5
  111. package/construtos/binario.d.ts.map +1 -1
  112. package/construtos/binario.js.map +1 -1
  113. package/construtos/bote.d.ts +5 -5
  114. package/construtos/bote.d.ts.map +1 -1
  115. package/construtos/bote.js.map +1 -1
  116. package/construtos/chamada.d.ts +5 -5
  117. package/construtos/chamada.d.ts.map +1 -1
  118. package/construtos/chamada.js.map +1 -1
  119. package/construtos/comentario-como-construto.d.ts +2 -2
  120. package/construtos/comentario-como-construto.d.ts.map +1 -1
  121. package/construtos/componente-linguagem.d.ts +2 -2
  122. package/construtos/componente-linguagem.d.ts.map +1 -1
  123. package/construtos/constante.d.ts +2 -2
  124. package/construtos/constante.d.ts.map +1 -1
  125. package/construtos/decorador.d.ts +2 -2
  126. package/construtos/decorador.d.ts.map +1 -1
  127. package/construtos/definir-valor.d.ts +4 -4
  128. package/construtos/definir-valor.d.ts.map +1 -1
  129. package/construtos/definir-valor.js.map +1 -1
  130. package/construtos/dicionario.d.ts +4 -4
  131. package/construtos/dicionario.d.ts.map +1 -1
  132. package/construtos/dicionario.js.map +1 -1
  133. package/construtos/elvis.d.ts +5 -5
  134. package/construtos/elvis.d.ts.map +1 -1
  135. package/construtos/elvis.js.map +1 -1
  136. package/construtos/enquanto-como-construto.d.ts +4 -4
  137. package/construtos/enquanto-como-construto.d.ts.map +1 -1
  138. package/construtos/enquanto-como-construto.js.map +1 -1
  139. package/construtos/expressao-regular.d.ts +2 -2
  140. package/construtos/expressao-regular.d.ts.map +1 -1
  141. package/construtos/fazer-como-construto.d.ts +4 -4
  142. package/construtos/fazer-como-construto.d.ts.map +1 -1
  143. package/construtos/fazer-como-construto.js.map +1 -1
  144. package/construtos/fim-para.d.ts +2 -2
  145. package/construtos/fim-para.d.ts.map +1 -1
  146. package/construtos/formatacao-escrita.d.ts +4 -4
  147. package/construtos/formatacao-escrita.d.ts.map +1 -1
  148. package/construtos/formatacao-escrita.js.map +1 -1
  149. package/construtos/funcao.d.ts +2 -2
  150. package/construtos/funcao.d.ts.map +1 -1
  151. package/construtos/importar-como-construto.d.ts +2 -2
  152. package/construtos/importar-como-construto.d.ts.map +1 -1
  153. package/construtos/index.d.ts +0 -1
  154. package/construtos/index.d.ts.map +1 -1
  155. package/construtos/index.js +0 -1
  156. package/construtos/index.js.map +1 -1
  157. package/construtos/isto.d.ts +2 -2
  158. package/construtos/isto.d.ts.map +1 -1
  159. package/construtos/leia.d.ts +4 -5
  160. package/construtos/leia.d.ts.map +1 -1
  161. package/construtos/leia.js.map +1 -1
  162. package/construtos/lista-compreensao.d.ts +5 -5
  163. package/construtos/lista-compreensao.d.ts.map +1 -1
  164. package/construtos/lista-compreensao.js.map +1 -1
  165. package/construtos/literal.d.ts +3 -3
  166. package/construtos/literal.d.ts.map +1 -1
  167. package/construtos/logico.d.ts +5 -5
  168. package/construtos/logico.d.ts.map +1 -1
  169. package/construtos/logico.js.map +1 -1
  170. package/construtos/morsa.d.ts +4 -4
  171. package/construtos/morsa.d.ts.map +1 -1
  172. package/construtos/morsa.js.map +1 -1
  173. package/construtos/para-cada-como-construto.d.ts +4 -4
  174. package/construtos/para-cada-como-construto.d.ts.map +1 -1
  175. package/construtos/para-cada-como-construto.js.map +1 -1
  176. package/construtos/para-como-construto.d.ts +5 -5
  177. package/construtos/para-como-construto.d.ts.map +1 -1
  178. package/construtos/para-como-construto.js.map +1 -1
  179. package/construtos/referencia-biblioteca-global.d.ts +2 -2
  180. package/construtos/referencia-biblioteca-global.d.ts.map +1 -1
  181. package/construtos/referencia-funcao.d.ts +2 -2
  182. package/construtos/referencia-funcao.d.ts.map +1 -1
  183. package/construtos/se-ternario.d.ts +6 -6
  184. package/construtos/se-ternario.d.ts.map +1 -1
  185. package/construtos/se-ternario.js.map +1 -1
  186. package/construtos/separador.d.ts +2 -2
  187. package/construtos/separador.d.ts.map +1 -1
  188. package/construtos/super.d.ts +2 -2
  189. package/construtos/super.d.ts.map +1 -1
  190. package/construtos/tipo-de.d.ts +4 -4
  191. package/construtos/tipo-de.d.ts.map +1 -1
  192. package/construtos/tipo-de.js.map +1 -1
  193. package/construtos/tupla-n.d.ts +3 -3
  194. package/construtos/tupla-n.d.ts.map +1 -1
  195. package/construtos/tupla-n.js.map +1 -1
  196. package/construtos/tupla.d.ts +2 -2
  197. package/construtos/tupla.d.ts.map +1 -1
  198. package/construtos/tuplas/deceto.d.ts +12 -12
  199. package/construtos/tuplas/deceto.d.ts.map +1 -1
  200. package/construtos/tuplas/deceto.js.map +1 -1
  201. package/construtos/tuplas/dupla.d.ts +4 -4
  202. package/construtos/tuplas/dupla.d.ts.map +1 -1
  203. package/construtos/tuplas/dupla.js.map +1 -1
  204. package/construtos/tuplas/noneto.d.ts +11 -11
  205. package/construtos/tuplas/noneto.d.ts.map +1 -1
  206. package/construtos/tuplas/noneto.js.map +1 -1
  207. package/construtos/tuplas/octeto.d.ts +10 -10
  208. package/construtos/tuplas/octeto.d.ts.map +1 -1
  209. package/construtos/tuplas/octeto.js.map +1 -1
  210. package/construtos/tuplas/quarteto.d.ts +6 -6
  211. package/construtos/tuplas/quarteto.d.ts.map +1 -1
  212. package/construtos/tuplas/quarteto.js.map +1 -1
  213. package/construtos/tuplas/quinteto.d.ts +7 -7
  214. package/construtos/tuplas/quinteto.d.ts.map +1 -1
  215. package/construtos/tuplas/quinteto.js.map +1 -1
  216. package/construtos/tuplas/septeto.d.ts +9 -9
  217. package/construtos/tuplas/septeto.d.ts.map +1 -1
  218. package/construtos/tuplas/septeto.js.map +1 -1
  219. package/construtos/tuplas/sexteto.d.ts +8 -8
  220. package/construtos/tuplas/sexteto.d.ts.map +1 -1
  221. package/construtos/tuplas/sexteto.js.map +1 -1
  222. package/construtos/tuplas/trio.d.ts +5 -5
  223. package/construtos/tuplas/trio.d.ts.map +1 -1
  224. package/construtos/tuplas/trio.js.map +1 -1
  225. package/construtos/unario.d.ts +4 -4
  226. package/construtos/unario.d.ts.map +1 -1
  227. package/construtos/unario.js.map +1 -1
  228. package/construtos/variavel.d.ts +2 -2
  229. package/construtos/variavel.d.ts.map +1 -1
  230. package/construtos/vetor.d.ts +5 -5
  231. package/construtos/vetor.d.ts.map +1 -1
  232. package/construtos/vetor.js.map +1 -1
  233. package/declaracoes/ajuda.d.ts +3 -4
  234. package/declaracoes/ajuda.d.ts.map +1 -1
  235. package/declaracoes/ajuda.js.map +1 -1
  236. package/declaracoes/const-multiplo.d.ts +3 -4
  237. package/declaracoes/const-multiplo.d.ts.map +1 -1
  238. package/declaracoes/const-multiplo.js.map +1 -1
  239. package/declaracoes/const.d.ts +4 -4
  240. package/declaracoes/const.d.ts.map +1 -1
  241. package/declaracoes/const.js.map +1 -1
  242. package/declaracoes/enquanto.d.ts +3 -4
  243. package/declaracoes/enquanto.d.ts.map +1 -1
  244. package/declaracoes/enquanto.js.map +1 -1
  245. package/declaracoes/escolha.d.ts +3 -3
  246. package/declaracoes/escolha.d.ts.map +1 -1
  247. package/declaracoes/escolha.js.map +1 -1
  248. package/declaracoes/escreva-mesma-linha.d.ts +3 -4
  249. package/declaracoes/escreva-mesma-linha.d.ts.map +1 -1
  250. package/declaracoes/escreva-mesma-linha.js.map +1 -1
  251. package/declaracoes/escreva.d.ts +3 -3
  252. package/declaracoes/escreva.d.ts.map +1 -1
  253. package/declaracoes/escreva.js.map +1 -1
  254. package/declaracoes/expressao.d.ts +4 -3
  255. package/declaracoes/expressao.d.ts.map +1 -1
  256. package/declaracoes/expressao.js.map +1 -1
  257. package/declaracoes/fazer.d.ts +3 -4
  258. package/declaracoes/fazer.d.ts.map +1 -1
  259. package/declaracoes/fazer.js.map +1 -1
  260. package/declaracoes/importar.d.ts +3 -4
  261. package/declaracoes/importar.d.ts.map +1 -1
  262. package/declaracoes/importar.js.map +1 -1
  263. package/declaracoes/para-cada.d.ts +4 -4
  264. package/declaracoes/para-cada.d.ts.map +1 -1
  265. package/declaracoes/para-cada.js.map +1 -1
  266. package/declaracoes/para.d.ts +4 -4
  267. package/declaracoes/para.d.ts.map +1 -1
  268. package/declaracoes/para.js.map +1 -1
  269. package/declaracoes/propriedade-classe.d.ts +4 -4
  270. package/declaracoes/propriedade-classe.d.ts.map +1 -1
  271. package/declaracoes/propriedade-classe.js.map +1 -1
  272. package/declaracoes/retorna.d.ts +3 -3
  273. package/declaracoes/retorna.d.ts.map +1 -1
  274. package/declaracoes/retorna.js.map +1 -1
  275. package/declaracoes/se.d.ts +5 -6
  276. package/declaracoes/se.d.ts.map +1 -1
  277. package/declaracoes/se.js.map +1 -1
  278. package/declaracoes/tendo-como.d.ts +3 -4
  279. package/declaracoes/tendo-como.d.ts.map +1 -1
  280. package/declaracoes/tendo-como.js.map +1 -1
  281. package/declaracoes/var-multiplo.d.ts +3 -4
  282. package/declaracoes/var-multiplo.d.ts.map +1 -1
  283. package/declaracoes/var-multiplo.js.map +1 -1
  284. package/declaracoes/var.d.ts +4 -3
  285. package/declaracoes/var.d.ts.map +1 -1
  286. package/declaracoes/var.js.map +1 -1
  287. package/estilizador/estilizador-delegua.js.map +1 -1
  288. package/estilizador/regras/regra-convencao-nomenclatura.d.ts +2 -2
  289. package/estilizador/regras/regra-convencao-nomenclatura.d.ts.map +1 -1
  290. package/estilizador/regras/regra-convencao-nomenclatura.js.map +1 -1
  291. package/estilizador/regras/regra-explicitar-tipos-parametros.d.ts +2 -2
  292. package/estilizador/regras/regra-explicitar-tipos-parametros.d.ts.map +1 -1
  293. package/estilizador/regras/regra-explicitar-tipos-parametros.js.map +1 -1
  294. package/estilizador/regras/regra-fortalecer-tipos.d.ts.map +1 -1
  295. package/estilizador/regras/regra-fortalecer-tipos.js.map +1 -1
  296. package/estilizador/regras/regra-paradigma-consistente.d.ts +2 -2
  297. package/estilizador/regras/regra-paradigma-consistente.d.ts.map +1 -1
  298. package/estilizador/regras/regra-paradigma-consistente.js.map +1 -1
  299. package/formatadores/formatador-delegua.d.ts +3 -3
  300. package/formatadores/formatador-delegua.d.ts.map +1 -1
  301. package/formatadores/formatador-delegua.js.map +1 -1
  302. package/interfaces/analisador-semantico-interface.d.ts +2 -2
  303. package/interfaces/analisador-semantico-interface.d.ts.map +1 -1
  304. package/interfaces/avaliador-sintatico/avaliador-sintatico-interface.d.ts +2 -2
  305. package/interfaces/avaliador-sintatico/avaliador-sintatico-interface.d.ts.map +1 -1
  306. package/interfaces/avaliador-sintatico/correcao-implementacao-interface.d.ts +2 -2
  307. package/interfaces/avaliador-sintatico/correcao-implementacao-interface.d.ts.map +1 -1
  308. package/interfaces/avaliador-sintatico/membro-interface-faltando-interface.d.ts +1 -1
  309. package/interfaces/avaliador-sintatico/membro-interface-faltando-interface.d.ts.map +1 -1
  310. package/interfaces/construtos/caminho-escolha-interface.d.ts +7 -0
  311. package/interfaces/construtos/caminho-escolha-interface.d.ts.map +1 -0
  312. package/interfaces/{retornos/retorno-lexador.js → construtos/caminho-escolha-interface.js} +1 -1
  313. package/interfaces/construtos/caminho-escolha-interface.js.map +1 -0
  314. package/{construtos/construto.d.ts → interfaces/construtos/construto-interface.d.ts} +3 -3
  315. package/interfaces/construtos/construto-interface.d.ts.map +1 -0
  316. package/{interpretador/dialetos/egua-classico/resolvedor/retorno-resolvedor.js → interfaces/construtos/construto-interface.js} +1 -1
  317. package/interfaces/construtos/construto-interface.js.map +1 -0
  318. package/interfaces/construtos/index.d.ts +2 -6
  319. package/interfaces/construtos/index.d.ts.map +1 -1
  320. package/interfaces/construtos/index.js +16 -0
  321. package/interfaces/construtos/index.js.map +1 -1
  322. package/interfaces/declaracoes/caminho-se-senao-interface.d.ts +3 -3
  323. package/interfaces/declaracoes/caminho-se-senao-interface.d.ts.map +1 -1
  324. package/interfaces/delegua/enquanto-interface.d.ts +2 -2
  325. package/interfaces/delegua/enquanto-interface.d.ts.map +1 -1
  326. package/interfaces/delegua/fazer-interface.d.ts +2 -2
  327. package/interfaces/delegua/fazer-interface.d.ts.map +1 -1
  328. package/interfaces/delegua/para-cada-interface.d.ts +3 -2
  329. package/interfaces/delegua/para-cada-interface.d.ts.map +1 -1
  330. package/interfaces/delegua/para-interface.d.ts +3 -3
  331. package/interfaces/delegua/para-interface.d.ts.map +1 -1
  332. package/interfaces/depuracao/index.d.ts +7 -0
  333. package/interfaces/depuracao/index.d.ts.map +1 -0
  334. package/{construtos/construto.js → interfaces/depuracao/index.js} +1 -1
  335. package/interfaces/depuracao/index.js.map +1 -0
  336. package/interfaces/documentario/documentario-analisado.d.ts +5 -5
  337. package/interfaces/documentario/documentario-analisado.d.ts.map +1 -1
  338. package/interfaces/documentario/parametro-doc.d.ts +1 -1
  339. package/interfaces/documentario/parametro-doc.d.ts.map +1 -1
  340. package/interfaces/documentario/retorna-doc.d.ts +1 -1
  341. package/interfaces/documentario/retorna-doc.d.ts.map +1 -1
  342. package/interfaces/egua-classico/index.d.ts +2 -0
  343. package/interfaces/egua-classico/index.d.ts.map +1 -0
  344. package/interfaces/egua-classico/index.js +18 -0
  345. package/interfaces/egua-classico/index.js.map +1 -0
  346. package/interfaces/egua-classico/retorno-resolvedor-interface.d.ts +7 -0
  347. package/interfaces/egua-classico/retorno-resolvedor-interface.d.ts.map +1 -0
  348. package/interfaces/{retornos/retorno-analisador-semantico.js → egua-classico/retorno-resolvedor-interface.js} +1 -1
  349. package/interfaces/egua-classico/retorno-resolvedor-interface.js.map +1 -0
  350. package/interfaces/entrada-tabela-diagnostico-semantico-interface.d.ts +1 -1
  351. package/interfaces/entrada-tabela-diagnostico-semantico-interface.d.ts.map +1 -1
  352. package/interfaces/entrada-tabela-diagnosticos-sintatico-interface.d.ts +1 -1
  353. package/interfaces/entrada-tabela-diagnosticos-sintatico-interface.d.ts.map +1 -1
  354. package/interfaces/erros/{diagnostico-analisador-semantico.d.ts → diagnostico-analisador-semantico-interface.d.ts} +2 -2
  355. package/interfaces/erros/diagnostico-analisador-semantico-interface.d.ts.map +1 -0
  356. package/interfaces/erros/{diagnostico-analisador-semantico.js → diagnostico-analisador-semantico-interface.js} +1 -1
  357. package/interfaces/erros/diagnostico-analisador-semantico-interface.js.map +1 -0
  358. package/interfaces/erros/index.d.ts +1 -1
  359. package/interfaces/erros/index.d.ts.map +1 -1
  360. package/interfaces/erros/index.js +1 -1
  361. package/interfaces/erros/index.js.map +1 -1
  362. package/interfaces/escopo-execucao.d.ts +1 -1
  363. package/interfaces/escopo-execucao.d.ts.map +1 -1
  364. package/interfaces/estilizador/regra-estilizacao-interface.d.ts +2 -2
  365. package/interfaces/estilizador/regra-estilizacao-interface.d.ts.map +1 -1
  366. package/interfaces/index.d.ts +6 -1
  367. package/interfaces/index.d.ts.map +1 -1
  368. package/interfaces/index.js +6 -1
  369. package/interfaces/index.js.map +1 -1
  370. package/interfaces/interpretador-interface.d.ts +2 -2
  371. package/interfaces/interpretador-interface.d.ts.map +1 -1
  372. package/interfaces/lexador-interface.d.ts +2 -2
  373. package/interfaces/lexador-interface.d.ts.map +1 -1
  374. package/interfaces/pilha-escopos-execucao-interface.d.ts +4 -4
  375. package/interfaces/pilha-escopos-execucao-interface.d.ts.map +1 -1
  376. package/interfaces/resolvedor-interface.d.ts +3 -3
  377. package/interfaces/resolvedor-interface.d.ts.map +1 -1
  378. package/interfaces/retornos/index.d.ts +3 -3
  379. package/interfaces/retornos/index.d.ts.map +1 -1
  380. package/interfaces/retornos/index.js +3 -3
  381. package/interfaces/retornos/index.js.map +1 -1
  382. package/interfaces/retornos/retorno-analisador-semantico-interface.d.ts +5 -0
  383. package/interfaces/retornos/retorno-analisador-semantico-interface.d.ts.map +1 -0
  384. package/interfaces/retornos/retorno-analisador-semantico-interface.js +3 -0
  385. package/interfaces/retornos/retorno-analisador-semantico-interface.js.map +1 -0
  386. package/interfaces/retornos/{retorno-avaliador-sintatico.d.ts → retorno-avaliador-sintatico-interface.d.ts} +2 -2
  387. package/interfaces/retornos/retorno-avaliador-sintatico-interface.d.ts.map +1 -0
  388. package/interfaces/retornos/{retorno-avaliador-sintatico.js → retorno-avaliador-sintatico-interface.js} +1 -1
  389. package/interfaces/retornos/retorno-avaliador-sintatico-interface.js.map +1 -0
  390. package/interfaces/retornos/{retorno-lexador.d.ts → retorno-lexador-interface.d.ts} +2 -2
  391. package/interfaces/retornos/retorno-lexador-interface.d.ts.map +1 -0
  392. package/interfaces/retornos/retorno-lexador-interface.js +3 -0
  393. package/interfaces/retornos/retorno-lexador-interface.js.map +1 -0
  394. package/interfaces/tradutores/contexto-funcao-interface.d.ts +13 -0
  395. package/interfaces/tradutores/contexto-funcao-interface.d.ts.map +1 -0
  396. package/interfaces/tradutores/contexto-funcao-interface.js +3 -0
  397. package/interfaces/tradutores/contexto-funcao-interface.js.map +1 -0
  398. package/interfaces/tradutores/index.d.ts +3 -0
  399. package/interfaces/tradutores/index.d.ts.map +1 -0
  400. package/interfaces/tradutores/index.js +19 -0
  401. package/interfaces/tradutores/index.js.map +1 -0
  402. package/interfaces/tradutores/tradutor-interface.d.ts.map +1 -0
  403. package/interfaces/tradutores/tradutor-interface.js.map +1 -0
  404. package/interpretador/depuracao/avaliador-expressao-depuracao.d.ts +1 -6
  405. package/interpretador/depuracao/avaliador-expressao-depuracao.d.ts.map +1 -1
  406. package/interpretador/depuracao/avaliador-expressao-depuracao.js.map +1 -1
  407. package/interpretador/depuracao/comum.d.ts +3 -3
  408. package/interpretador/depuracao/comum.d.ts.map +1 -1
  409. package/interpretador/depuracao/comum.js.map +1 -1
  410. package/interpretador/depuracao/interpretador-base-com-depuracao.d.ts +4 -4
  411. package/interpretador/depuracao/interpretador-base-com-depuracao.d.ts.map +1 -1
  412. package/interpretador/depuracao/interpretador-base-com-depuracao.js +12 -1
  413. package/interpretador/depuracao/interpretador-base-com-depuracao.js.map +1 -1
  414. package/interpretador/depuracao/interpretador-com-depuracao.d.ts +4 -4
  415. package/interpretador/depuracao/interpretador-com-depuracao.d.ts.map +1 -1
  416. package/interpretador/depuracao/interpretador-com-depuracao.js.map +1 -1
  417. package/interpretador/dialetos/egua-classico/interpretador-egua-classico.d.ts +4 -4
  418. package/interpretador/dialetos/egua-classico/interpretador-egua-classico.d.ts.map +1 -1
  419. package/interpretador/dialetos/egua-classico/interpretador-egua-classico.js.map +1 -1
  420. package/interpretador/dialetos/egua-classico/resolvedor/index.d.ts +1 -1
  421. package/interpretador/dialetos/egua-classico/resolvedor/index.d.ts.map +1 -1
  422. package/interpretador/dialetos/egua-classico/resolvedor/index.js +1 -1
  423. package/interpretador/dialetos/egua-classico/resolvedor/index.js.map +1 -1
  424. package/interpretador/dialetos/egua-classico/resolvedor/resolvedor.d.ts +6 -5
  425. package/interpretador/dialetos/egua-classico/resolvedor/resolvedor.d.ts.map +1 -1
  426. package/interpretador/dialetos/egua-classico/resolvedor/resolvedor.js.map +1 -1
  427. package/interpretador/dialetos/portugol-ipt/interpretador-portugol-ipt.d.ts +4 -3
  428. package/interpretador/dialetos/portugol-ipt/interpretador-portugol-ipt.d.ts.map +1 -1
  429. package/interpretador/dialetos/portugol-ipt/interpretador-portugol-ipt.js.map +1 -1
  430. package/interpretador/interpretador-base.d.ts +6 -6
  431. package/interpretador/interpretador-base.d.ts.map +1 -1
  432. package/interpretador/interpretador-base.js +1 -1
  433. package/interpretador/interpretador-base.js.map +1 -1
  434. package/interpretador/interpretador.d.ts +3 -3
  435. package/interpretador/interpretador.d.ts.map +1 -1
  436. package/interpretador/interpretador.js.map +1 -1
  437. package/interpretador/pilha-escopos-execucao.d.ts +7 -7
  438. package/interpretador/pilha-escopos-execucao.d.ts.map +1 -1
  439. package/interpretador/pilha-escopos-execucao.js.map +1 -1
  440. package/lexador/dialetos/lexador-calango.d.ts +2 -2
  441. package/lexador/dialetos/lexador-calango.d.ts.map +1 -1
  442. package/lexador/dialetos/lexador-calango.js.map +1 -1
  443. package/lexador/dialetos/lexador-egua-classico.d.ts +2 -2
  444. package/lexador/dialetos/lexador-egua-classico.d.ts.map +1 -1
  445. package/lexador/dialetos/lexador-egua-classico.js.map +1 -1
  446. package/lexador/dialetos/lexador-guarani.d.ts +2 -2
  447. package/lexador/dialetos/lexador-guarani.d.ts.map +1 -1
  448. package/lexador/dialetos/lexador-guarani.js.map +1 -1
  449. package/lexador/dialetos/lexador-pitugues.d.ts +2 -2
  450. package/lexador/dialetos/lexador-pitugues.d.ts.map +1 -1
  451. package/lexador/dialetos/lexador-pitugues.js.map +1 -1
  452. package/lexador/dialetos/lexador-portugol-ipt.d.ts +2 -2
  453. package/lexador/dialetos/lexador-portugol-ipt.d.ts.map +1 -1
  454. package/lexador/dialetos/lexador-portugol-ipt.js.map +1 -1
  455. package/lexador/dialetos/lexador-prisma.d.ts +2 -2
  456. package/lexador/dialetos/lexador-prisma.d.ts.map +1 -1
  457. package/lexador/dialetos/lexador-prisma.js.map +1 -1
  458. package/lexador/dialetos/lexador-tenda.d.ts +2 -2
  459. package/lexador/dialetos/lexador-tenda.d.ts.map +1 -1
  460. package/lexador/dialetos/lexador-tenda.js.map +1 -1
  461. package/lexador/dialetos/palavras-reservadas/pitugues.d.ts +0 -2
  462. package/lexador/dialetos/palavras-reservadas/pitugues.d.ts.map +1 -1
  463. package/lexador/dialetos/palavras-reservadas/pitugues.js +0 -2
  464. package/lexador/dialetos/palavras-reservadas/pitugues.js.map +1 -1
  465. package/lexador/lexador-base-linha-unica.d.ts +2 -2
  466. package/lexador/lexador-base-linha-unica.d.ts.map +1 -1
  467. package/lexador/lexador-base.d.ts +2 -2
  468. package/lexador/lexador-base.d.ts.map +1 -1
  469. package/lexador/lexador.d.ts +2 -2
  470. package/lexador/lexador.d.ts.map +1 -1
  471. package/lexador/lexador.js.map +1 -1
  472. package/lexador/micro-lexador-pitugues.d.ts +2 -2
  473. package/lexador/micro-lexador-pitugues.d.ts.map +1 -1
  474. package/lexador/micro-lexador-pitugues.js.map +1 -1
  475. package/lexador/micro-lexador.d.ts +2 -2
  476. package/lexador/micro-lexador.d.ts.map +1 -1
  477. package/lexador/micro-lexador.js.map +1 -1
  478. package/lexador/traducao/lexador-javascript.d.ts +2 -2
  479. package/lexador/traducao/lexador-javascript.d.ts.map +1 -1
  480. package/lexador/traducao/lexador-javascript.js.map +1 -1
  481. package/package.json +1 -1
  482. package/tradutores/tradutor-assembly-arm.d.ts.map +1 -1
  483. package/tradutores/tradutor-assembly-arm.js +157 -157
  484. package/tradutores/tradutor-assembly-arm.js.map +1 -1
  485. package/tradutores/tradutor-assembly-risc-v.d.ts.map +1 -1
  486. package/tradutores/tradutor-assembly-risc-v.js +90 -90
  487. package/tradutores/tradutor-assembly-risc-v.js.map +1 -1
  488. package/tradutores/tradutor-assembly-x64.d.ts.map +1 -1
  489. package/tradutores/tradutor-assembly-x64.js +181 -181
  490. package/tradutores/tradutor-assembly-x64.js.map +1 -1
  491. package/tradutores/tradutor-assemblyscript.d.ts +4 -4
  492. package/tradutores/tradutor-assemblyscript.d.ts.map +1 -1
  493. package/tradutores/tradutor-assemblyscript.js.map +1 -1
  494. package/tradutores/tradutor-javascript.d.ts +11 -11
  495. package/tradutores/tradutor-javascript.d.ts.map +1 -1
  496. package/tradutores/tradutor-javascript.js.map +1 -1
  497. package/tradutores/tradutor-portugol-ipt.d.ts +3 -2
  498. package/tradutores/tradutor-portugol-ipt.d.ts.map +1 -1
  499. package/tradutores/tradutor-portugol-ipt.js.map +1 -1
  500. package/tradutores/tradutor-python.d.ts +11 -11
  501. package/tradutores/tradutor-python.d.ts.map +1 -1
  502. package/tradutores/tradutor-python.js.map +1 -1
  503. package/tradutores/tradutor-reverso-calango.d.ts +4 -4
  504. package/tradutores/tradutor-reverso-calango.d.ts.map +1 -1
  505. package/tradutores/tradutor-reverso-calango.js.map +1 -1
  506. package/tradutores/tradutor-reverso-tenda.d.ts +9 -9
  507. package/tradutores/tradutor-reverso-tenda.d.ts.map +1 -1
  508. package/tradutores/tradutor-reverso-tenda.js.map +1 -1
  509. package/tradutores/tradutor-ruby.d.ts +11 -11
  510. package/tradutores/tradutor-ruby.d.ts.map +1 -1
  511. package/tradutores/tradutor-ruby.js.map +1 -1
  512. package/tradutores/tradutor-webassembly.d.ts.map +1 -1
  513. package/tradutores/tradutor-webassembly.js +29 -29
  514. package/tradutores/tradutor-webassembly.js.map +1 -1
  515. package/umd/delegua.js +1173 -991
  516. package/construtos/construto.d.ts.map +0 -1
  517. package/construtos/construto.js.map +0 -1
  518. package/interfaces/erros/diagnostico-analisador-semantico.d.ts.map +0 -1
  519. package/interfaces/erros/diagnostico-analisador-semantico.js.map +0 -1
  520. package/interfaces/retornos/retorno-analisador-semantico.d.ts +0 -5
  521. package/interfaces/retornos/retorno-analisador-semantico.d.ts.map +0 -1
  522. package/interfaces/retornos/retorno-analisador-semantico.js.map +0 -1
  523. package/interfaces/retornos/retorno-avaliador-sintatico.d.ts.map +0 -1
  524. package/interfaces/retornos/retorno-avaliador-sintatico.js.map +0 -1
  525. package/interfaces/retornos/retorno-lexador.d.ts.map +0 -1
  526. package/interfaces/retornos/retorno-lexador.js.map +0 -1
  527. package/interfaces/tradutor-interface.d.ts.map +0 -1
  528. package/interfaces/tradutor-interface.js.map +0 -1
  529. package/interpretador/dialetos/egua-classico/resolvedor/retorno-resolvedor.d.ts +0 -7
  530. package/interpretador/dialetos/egua-classico/resolvedor/retorno-resolvedor.d.ts.map +0 -1
  531. package/interpretador/dialetos/egua-classico/resolvedor/retorno-resolvedor.js.map +0 -1
  532. /package/interfaces/{tradutor-interface.d.ts → tradutores/tradutor-interface.d.ts} +0 -0
  533. /package/interfaces/{tradutor-interface.js → tradutores/tradutor-interface.js} +0 -0
@@ -1,9 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.aleatorio = aleatorio;
4
- exports.aleatorio_entre = aleatorio_entre;
5
4
  exports.algum = algum;
6
- exports.arredondar = arredondar;
5
+ exports.combinar = combinar;
6
+ exports.contar = contar;
7
7
  exports.encontrar = encontrar;
8
8
  exports.encontrar_indice = encontrar_indice;
9
9
  exports.encontrar_ultimo = encontrar_ultimo;
@@ -12,22 +12,21 @@ exports.filtrar_por = filtrar_por;
12
12
  exports.incluido = incluido;
13
13
  exports.inteiro = inteiro;
14
14
  exports.intervalo = intervalo;
15
+ exports.inverter = inverter;
15
16
  exports.enumerar = enumerar;
16
17
  exports.mapear = mapear;
17
18
  exports.maximo = maximo;
18
19
  exports.minimo = minimo;
19
- exports.numero = numero;
20
20
  exports.ordenar = ordenar;
21
21
  exports.para_cada = para_cada;
22
- exports.primeiro_em_condicao = primeiro_em_condicao;
23
22
  exports.real = real;
24
23
  exports.reduzir = reduzir;
25
24
  exports.somar = somar;
26
25
  exports.tamanho = tamanho;
27
26
  exports.texto = texto;
28
27
  exports.todos = todos;
29
- exports.todos_em_condicao = todos_em_condicao;
30
28
  exports.tupla = tupla;
29
+ exports.unico = unico;
31
30
  exports.vetor = vetor;
32
31
  const excecoes_1 = require("../../../excecoes");
33
32
  const objeto_delegua_classe_1 = require("../../../interpretador/estruturas/objeto-delegua-classe");
@@ -36,8 +35,9 @@ const descritor_tipo_classe_1 = require("../../../interpretador/estruturas/descr
36
35
  const estruturas_1 = require("../../../interpretador/estruturas");
37
36
  const construtos_1 = require("../../../construtos");
38
37
  const quebras_1 = require("../../../quebras");
38
+ const iteravel_1 = require("../../../interpretador/estruturas/iteravel");
39
39
  /**
40
- * Compara dois valores (números ou vetores).
40
+ * Compara dois valores (números, textos, booleanos ou vetores).
41
41
  * Retorna:
42
42
  * > 0 se a > b
43
43
  * < 0 se a < b
@@ -48,6 +48,12 @@ function compararElementosRecursivamente(a, b) {
48
48
  if (typeof a === 'number' && typeof b === 'number') {
49
49
  return a - b;
50
50
  }
51
+ if (typeof a === 'string' && typeof b === 'string') {
52
+ return a.localeCompare(b);
53
+ }
54
+ if (typeof a === 'boolean' && typeof b === 'boolean') {
55
+ return (a === b) ? 0 : (a ? 1 : -1);
56
+ }
51
57
  if (Array.isArray(a) && Array.isArray(b)) {
52
58
  const tamanho = Math.min(a.length, b.length);
53
59
  for (let i = 0; i < tamanho; i++) {
@@ -57,879 +63,962 @@ function compararElementosRecursivamente(a, b) {
57
63
  }
58
64
  return a.length - b.length;
59
65
  }
60
- // Tipos incompatíveis (ex: comparar número com vetor)
66
+ // Tipos incompatíveis
61
67
  throw new Error('Tipos incompatíveis para comparação.');
62
68
  }
63
- /**
64
- * Retorna um número aleatório entre 0 e 1.
65
- * @returns {Promise<number>} Número real.
66
- */
67
- async function aleatorio(interpretador) {
68
- return Promise.resolve(Math.random());
69
- }
70
- /**
71
- * Retorna um número aleatório de acordo com o parâmetro passado.
72
- * Mínimo(inclusivo) - Máximo(exclusivo).
73
- * @param {number} minimo O número mínimo.
74
- * @param {number} maximo O número máximo.
75
- * @returns {Promise<number>} Um número real entre os valores máximo e mínimo especificados.
76
- */
77
- async function aleatorio_entre(interpretador, ...argumentos) {
78
- const argumentosUsuario = argumentos.filter((arg) => !(arg && typeof arg === 'object' && 'lexema' in arg && 'linha' in arg));
79
- if (argumentosUsuario.length <= 0) {
80
- return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao({
69
+ function validacao_comum_numeros(interpretador, valorParaConverter, nomeDaFuncao) {
70
+ const numeroConvertido = Number(valorParaConverter);
71
+ if (valorParaConverter === '' ||
72
+ valorParaConverter === null ||
73
+ valorParaConverter === undefined ||
74
+ typeof valorParaConverter === 'boolean' ||
75
+ Number.isNaN(numeroConvertido)) {
76
+ throw new excecoes_1.ErroEmTempoDeExecucao({
81
77
  hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
82
78
  linha: interpretador.linhaDeclaracaoAtual,
83
- }, 'A função recebe ao menos um parâmetro.'));
79
+ }, `Valor não parece estar estruturado como um número válido. Somente números ou textos com números podem ser convertidos na função ${nomeDaFuncao}().`);
84
80
  }
81
+ }
82
+ /**
83
+ * Retorna um número aleatório.
84
+ * - Sem argumentos: retorna um número real entre 0 (inclusivo) e 1 (exclusivo).
85
+ * - Com um argumento: retorna um número real entre 0 (inclusivo) e `maximo` (exclusivo).
86
+ * - Com dois argumentos: retorna um número real entre `minimo` (inclusivo) e `maximo` (exclusivo).
87
+ * @param {number} [minimo] O número mínimo (inclusivo), ou o máximo quando único argumento.
88
+ * @param {number} [maximo] O número máximo (exclusivo).
89
+ * @returns {Promise<number>} O número real aleatório gerado.
90
+ */
91
+ async function aleatorio(interpretador, ...argumentos) {
92
+ const argumentosUsuario = argumentos.filter((arg) => !(arg &&
93
+ typeof arg === 'object' &&
94
+ 'lexema' in arg &&
95
+ 'linha' in arg));
96
+ if (argumentosUsuario.length === 0)
97
+ return Math.random();
85
98
  if (argumentosUsuario.length > 2) {
86
- return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao({
87
- hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
99
+ throw new excecoes_1.ErroEmTempoDeExecucao({
88
100
  linha: interpretador.linhaDeclaracaoAtual,
89
- }, 'A quantidade de parâmetros máxima para esta função é 2.'));
101
+ hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
102
+ }, 'A função aceita no máximo 2 parâmetros.');
90
103
  }
91
104
  const minimo = interpretador.resolverValor(argumentosUsuario[0]);
92
- if (argumentosUsuario.length === 1) {
93
- if (typeof minimo !== 'number') {
94
- return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao({
95
- hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
96
- linha: interpretador.linhaDeclaracaoAtual,
97
- }, 'O parâmetro deve ser um número.'));
98
- }
99
- return Math.floor(Math.random() * (0 - minimo)) + minimo;
105
+ if (typeof minimo !== 'number') {
106
+ throw new excecoes_1.ErroEmTempoDeExecucao({
107
+ linha: interpretador.linhaDeclaracaoAtual,
108
+ hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
109
+ }, 'O primeiro parâmetro deve ser um número.');
100
110
  }
111
+ if (argumentosUsuario.length === 1)
112
+ return Math.random() * minimo;
101
113
  const maximo = interpretador.resolverValor(argumentosUsuario[1]);
102
- if (typeof minimo !== 'number' || typeof maximo !== 'number') {
103
- return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao({
104
- hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
114
+ if (typeof maximo !== 'number') {
115
+ throw new excecoes_1.ErroEmTempoDeExecucao({
105
116
  linha: interpretador.linhaDeclaracaoAtual,
106
- }, 'Os dois parâmetros devem ser do tipo número.'));
117
+ hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
118
+ }, 'O segundo parâmetro deve ser um número.');
107
119
  }
108
- return Promise.resolve(Math.floor(Math.random() * (maximo - minimo)) + minimo);
120
+ return Math.random() * (maximo - minimo) + minimo;
109
121
  }
110
122
  /**
111
- * Verifica se algum dos elementos satisfaz à condição para por parâmetro.
123
+ * Verifica se algum dos elementos satisfaz a condição passada por parâmetro.
112
124
  * @param {InterpretadorInterface} interpretador A instância do interpretador.
113
- * @param {VariavelInterface | any} vetor Uma variável de Delégua ou um vetor nativo de JavaScript.
114
- * @param {VariavelInterface | any} funcaoPesquisa A função que ensina o método de pesquisa.
115
- * @returns {Promise<boolean>} Verdadeiro se há algum elemento no vetor com a condição. Falso caso contrário.
125
+ * @param {any} iteravel Um iterável.
126
+ * @param {any} funcaoPesquisa A função que ensina o método de pesquisa.
127
+ * @returns {Promise<boolean>} Verdadeiro se há algum elemento no iterável com a condição. Falso caso contrário.
116
128
  */
117
- async function algum(interpretador, vetor, funcaoPesquisa) {
118
- const valorVetor = vetor.hasOwnProperty('valor') ? vetor.valor : vetor;
119
- const valorFuncaoPesquisa = funcaoPesquisa.hasOwnProperty('valor')
120
- ? funcaoPesquisa.valor
121
- : funcaoPesquisa;
122
- if (!Array.isArray(valorVetor)) {
123
- return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao({
124
- hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
129
+ async function algum(interpretador, iteravel, funcaoPesquisa) {
130
+ const valorIteravel = interpretador.resolverValor(iteravel);
131
+ const itens = new iteravel_1.Iteravel(valorIteravel).elementos;
132
+ if (itens.length === 0) {
133
+ throw new excecoes_1.ErroEmTempoDeExecucao({
125
134
  linha: interpretador.linhaDeclaracaoAtual,
126
- }, 'Parâmetro inválido. O primeiro parâmetro da função deve ser um vetor.'));
127
- }
128
- if (valorFuncaoPesquisa.constructor !== estruturas_1.DeleguaFuncao) {
129
- return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao({
130
135
  hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
136
+ }, 'Parâmetro inválido. O primeiro parâmetro deve ser um iterável.');
137
+ }
138
+ const valorFuncao = interpretador.resolverValor(funcaoPesquisa);
139
+ if (!(valorFuncao instanceof estruturas_1.DeleguaFuncao) &&
140
+ !(valorFuncao instanceof funcao_padrao_1.FuncaoPadrao)) {
141
+ throw new excecoes_1.ErroEmTempoDeExecucao({
131
142
  linha: interpretador.linhaDeclaracaoAtual,
132
- }, 'Parâmetro inválido. O segundo parâmetro da função deve ser uma função.'));
143
+ hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
144
+ }, 'Parâmetro inválido. O segundo parâmetro deve ser uma função.');
133
145
  }
134
- for (let indice = 0; indice < valorVetor.length; ++indice) {
135
- if (await valorFuncaoPesquisa.chamar(interpretador, [valorVetor[indice]])) {
146
+ for (const item of itens) {
147
+ if (await valorFuncao.chamar(interpretador, item, {
148
+ linha: interpretador.linhaDeclaracaoAtual,
149
+ hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
150
+ })) {
136
151
  return true;
137
152
  }
138
153
  }
139
154
  return false;
140
155
  }
141
- /**
142
- * Arredonda um número para uma quantidade específica de casas decimais.
143
- * @param {InterpretadorInterface} interpretador A instância do interpretador.
144
- * @param {any} numero O número a ser arredondado.
145
- * @param {any} casasDecimais A quantidade de casas decimais para o arredondamento.
146
- * @returns {Promise<number>} O número arredondado.
147
- */
148
- async function arredondar(interpretador, numero, casasDecimais) {
149
- const valorNumero = interpretador.resolverValor(numero);
150
- const valorCasas = interpretador.resolverValor(casasDecimais);
151
- if (numero == undefined || numero == null) {
152
- return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao(null, 'Erro: arredondar() deve receber um número.', interpretador.linhaDeclaracaoAtual));
153
- }
154
- if (typeof numero !== 'number') {
155
- return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao(null, `Erro de Tipo: arredondar() espera um número, mas recebeu '${typeof valorNumero}'.`, interpretador.linhaDeclaracaoAtual));
156
- }
157
- const fator = Math.pow(10, valorCasas);
158
- const resultado = Math.round(valorNumero * fator) / fator;
159
- return Promise.resolve(resultado);
156
+ async function combinar(interpretador, primeiroIteravel, segundoIteravel) {
157
+ const resolverEValidar = (iteravel, nomeParametro) => {
158
+ const valor = interpretador.resolverValor(iteravel);
159
+ const itens = new iteravel_1.Iteravel(valor).elementos;
160
+ if (itens.length === 0 &&
161
+ valor !== '' &&
162
+ !(valor instanceof construtos_1.TuplaN) &&
163
+ !Array.isArray(valor)) {
164
+ throw new excecoes_1.ErroEmTempoDeExecucao({
165
+ linha: interpretador.linhaDeclaracaoAtual,
166
+ hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
167
+ }, `Parâmetro inválido. O ${nomeParametro} parâmetro deve ser um iterável.`);
168
+ }
169
+ return itens;
170
+ };
171
+ const itensPrimeiroIteravel = resolverEValidar(primeiroIteravel, 'primeiro');
172
+ const itensSegundoIteravel = resolverEValidar(segundoIteravel, 'segundo');
173
+ const resultado = [];
174
+ const tamanhoMinimo = Math.min(itensPrimeiroIteravel.length, itensSegundoIteravel.length);
175
+ for (let i = 0; i < tamanhoMinimo; i++) {
176
+ resultado.push(new construtos_1.TuplaN(interpretador.hashArquivoDeclaracaoAtual, interpretador.linhaDeclaracaoAtual, [
177
+ new construtos_1.Literal(interpretador.hashArquivoDeclaracaoAtual, interpretador.linhaDeclaracaoAtual, itensPrimeiroIteravel[i], typeof itensPrimeiroIteravel[i] === 'string' ? 'texto' : 'qualquer'),
178
+ new construtos_1.Literal(interpretador.hashArquivoDeclaracaoAtual, interpretador.linhaDeclaracaoAtual, itensSegundoIteravel[i], typeof itensSegundoIteravel[i] === 'string' ? 'texto' : 'qualquer')
179
+ ]));
180
+ }
181
+ return resultado;
182
+ }
183
+ ;
184
+ async function contar(interpretador, iteravel, elemento) {
185
+ const valorIteravel = interpretador.resolverValor(iteravel);
186
+ const itens = new iteravel_1.Iteravel(valorIteravel).elementos;
187
+ if (itens.length === 0 &&
188
+ valorIteravel !== '' &&
189
+ !(valorIteravel instanceof construtos_1.TuplaN) &&
190
+ !Array.isArray(valorIteravel)) {
191
+ throw new excecoes_1.ErroEmTempoDeExecucao({
192
+ linha: interpretador.linhaDeclaracaoAtual,
193
+ hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
194
+ }, 'Parâmetro inválido. O primeiro parâmetro deve ser um iterável.');
195
+ }
196
+ const elementoResolvido = interpretador.resolverValor(elemento);
197
+ return itens.filter(item => item === elementoResolvido).length;
160
198
  }
199
+ ;
161
200
  /**
162
- * Encontra o primeiro elemento de um vetor cuja função de pesquisa retorne
163
- * verdadeiro na avaliação de cada elemento.
201
+ * Retorna o primeiro elemento de um iterável que satisfaça a condição definida na função de pesquisa.
202
+ * A execução é interrompida assim que o elemento for encontrado.
164
203
  * @param {InterpretadorInterface} interpretador A instância do interpretador.
165
- * @param {VariavelInterface | any} vetor Uma variável de Delégua ou um vetor nativo de JavaScript.
166
- * @param {VariavelInterface | any} funcaoPesquisa A função que ensina o método de pesquisa.
167
- * @returns {Promise<any>} Um elemento, caso o elemento seja encontraro, ou nulo em caso contrário.
204
+ * @param {any} iteravel O iterável a ser percorrido.
205
+ * @param {any} funcaoPesquisa A função que define a condição de busca.
206
+ * @returns {Promise<any>} O primeiro elemento encontrado, ou nulo caso nenhum elemento satisfaça a condição.
168
207
  */
169
- async function encontrar(interpretador, vetor, funcaoPesquisa) {
170
- const valorVetor = vetor.hasOwnProperty('valor') ? vetor.valor : vetor;
171
- const valorFuncaoPesquisa = funcaoPesquisa.hasOwnProperty('valor')
172
- ? funcaoPesquisa.valor
173
- : funcaoPesquisa;
174
- if (!Array.isArray(valorVetor)) {
175
- return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao({
176
- hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
208
+ async function encontrar(interpretador, iteravel, funcaoPesquisa) {
209
+ const valorIteravel = interpretador.resolverValor(iteravel);
210
+ const itens = new iteravel_1.Iteravel(valorIteravel).elementos;
211
+ if (itens.length === 0) {
212
+ throw new excecoes_1.ErroEmTempoDeExecucao({
177
213
  linha: interpretador.linhaDeclaracaoAtual,
178
- }, 'Parâmetro inválido. O primeiro parâmetro da função deve ser um vetor.'));
179
- }
180
- if (valorFuncaoPesquisa.constructor !== estruturas_1.DeleguaFuncao) {
181
- return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao({
182
214
  hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
215
+ }, 'Parâmetro inválido. O primeiro parâmetro deve ser um iterável.');
216
+ }
217
+ const valorFuncao = interpretador.resolverValor(funcaoPesquisa);
218
+ if (!(valorFuncao instanceof estruturas_1.DeleguaFuncao) &&
219
+ !(valorFuncao instanceof funcao_padrao_1.FuncaoPadrao)) {
220
+ throw new excecoes_1.ErroEmTempoDeExecucao({
183
221
  linha: interpretador.linhaDeclaracaoAtual,
184
- }, 'Parâmetro inválido. O segundo parâmetro da função deve ser uma função.'));
222
+ hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
223
+ }, 'Parâmetro inválido. O segundo parâmetro deve ser uma função.');
185
224
  }
186
- for (let indice = 0; indice < valorVetor.length; ++indice) {
187
- if (await valorFuncaoPesquisa.chamar(interpretador, [valorVetor[indice]])) {
188
- return valorVetor[indice];
225
+ for (const item of itens) {
226
+ if (await valorFuncao.chamar(interpretador, item, {
227
+ linha: interpretador.linhaDeclaracaoAtual,
228
+ hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
229
+ })) {
230
+ return item;
189
231
  }
190
232
  }
191
233
  return null;
192
234
  }
193
235
  /**
194
- * Encontra o índice do primeiro elemento de um vetor cuja função de pesquisa retorne
195
- * verdadeiro na avaliação de cada elemento.
236
+ * Retorna o índice do primeiro elemento de um iterável que satisfaça a condição definida na função de pesquisa.
237
+ * A execução é interrompida assim que o elemento for encontrado.
196
238
  * @param {InterpretadorInterface} interpretador A instância do interpretador.
197
- * @param {VariavelInterface | any} vetor Uma variável de Delégua ou um vetor nativo de JavaScript.
198
- * @param {VariavelInterface | any} funcaoPesquisa A função que ensina o método de pesquisa.
199
- * @returns {Promise<number>} O número correspondente ao índice se o elemento for encontrado, ou nulo em caso contrário.
239
+ * @param {any} iteravel O iterável a ser percorrido.
240
+ * @param {any} funcaoPesquisa A função que define a condição de busca.
241
+ * @returns {Promise<number>} O índice do primeiro elemento encontrado, ou -1 caso nenhum elemento satisfaça a condição.
200
242
  */
201
- async function encontrar_indice(interpretador, vetor, funcaoPesquisa) {
202
- const valorVetor = vetor.hasOwnProperty('valor') ? vetor.valor : vetor;
203
- const valorFuncaoPesquisa = funcaoPesquisa.hasOwnProperty('valor')
204
- ? funcaoPesquisa.valor
205
- : funcaoPesquisa;
206
- if (!Array.isArray(valorVetor)) {
207
- return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao({
208
- hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
243
+ async function encontrar_indice(interpretador, iteravel, funcaoPesquisa) {
244
+ const valorIteravel = interpretador.resolverValor(iteravel);
245
+ const itens = new iteravel_1.Iteravel(valorIteravel).elementos;
246
+ if (itens.length === 0) {
247
+ throw new excecoes_1.ErroEmTempoDeExecucao({
209
248
  linha: interpretador.linhaDeclaracaoAtual,
210
- }, 'Parâmetro inválido. O primeiro parâmetro da função deve ser um vetor.'));
211
- }
212
- if (valorFuncaoPesquisa.constructor !== estruturas_1.DeleguaFuncao) {
213
- return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao({
214
249
  hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
250
+ }, 'Parâmetro inválido. O primeiro parâmetro deve ser um iterável.');
251
+ }
252
+ const valorFuncao = interpretador.resolverValor(funcaoPesquisa);
253
+ if (!(valorFuncao instanceof estruturas_1.DeleguaFuncao) &&
254
+ !(valorFuncao instanceof funcao_padrao_1.FuncaoPadrao)) {
255
+ throw new excecoes_1.ErroEmTempoDeExecucao({
215
256
  linha: interpretador.linhaDeclaracaoAtual,
216
- }, 'Parâmetro inválido. O segundo parâmetro da função deve ser uma função.'));
257
+ hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
258
+ }, 'Parâmetro inválido. O segundo parâmetro deve ser uma função.');
217
259
  }
218
- for (let indice = 0; indice < valorVetor.length; ++indice) {
219
- if (await valorFuncaoPesquisa.chamar(interpretador, [valorVetor[indice]])) {
220
- return indice;
260
+ for (let i = 0; i < itens.length; i++) {
261
+ if (await valorFuncao.chamar(interpretador, itens[i], {
262
+ linha: interpretador.linhaDeclaracaoAtual,
263
+ hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
264
+ })) {
265
+ return i;
221
266
  }
222
267
  }
223
268
  return -1;
224
269
  }
225
270
  /**
226
- * Encontrar o último elemento de um vetor cuja função de pesquisa retorne
227
- * verdadeiro na avaliação de cada elemento.
271
+ * Retorna o último elemento de um iterável que satisfaça a condição definida na função de pesquisa.
272
+ * A execução é interrompida assim que o elemento for encontrado.
228
273
  * @param {InterpretadorInterface} interpretador A instância do interpretador.
229
- * @param {VariavelInterface | any} vetor Uma variável de Delégua ou um vetor nativo de JavaScript.
230
- * @param {VariavelInterface | any} funcaoPesquisa A função que ensina o método de pesquisa.
231
- * @returns {Promise<any>} O número correspondente ao índice se o elemento for encontrado, ou nulo em caso contrário.
274
+ * @param {any} iteravel O iterável a ser percorrido.
275
+ * @param {any} funcaoPesquisa A função que define a condição de busca.
276
+ * @returns {Promise<any>} O último elemento encontrado, ou nulo caso nenhum elemento satisfaça a condição.
232
277
  */
233
- async function encontrar_ultimo(interpretador, vetor, funcaoPesquisa) {
234
- const valorVetor = vetor.hasOwnProperty('valor') ? vetor.valor : vetor;
235
- const valorFuncaoPesquisa = funcaoPesquisa.hasOwnProperty('valor')
236
- ? funcaoPesquisa.valor
237
- : funcaoPesquisa;
238
- if (!Array.isArray(valorVetor)) {
239
- return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao({
240
- hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
278
+ async function encontrar_ultimo(interpretador, iteravel, funcaoPesquisa) {
279
+ const valorIteravel = interpretador.resolverValor(iteravel);
280
+ const itens = new iteravel_1.Iteravel(valorIteravel).elementos;
281
+ if (itens.length === 0) {
282
+ throw new excecoes_1.ErroEmTempoDeExecucao({
241
283
  linha: interpretador.linhaDeclaracaoAtual,
242
- }, 'Parâmetro inválido. O primeiro parâmetro da função deve ser um vetor.'));
243
- }
244
- if (valorFuncaoPesquisa.constructor !== estruturas_1.DeleguaFuncao) {
245
- return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao({
246
284
  hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
285
+ }, 'Parâmetro inválido. O primeiro parâmetro deve ser um iterável.');
286
+ }
287
+ const valorFuncao = interpretador.resolverValor(funcaoPesquisa);
288
+ if (!(valorFuncao instanceof estruturas_1.DeleguaFuncao) &&
289
+ !(valorFuncao instanceof funcao_padrao_1.FuncaoPadrao)) {
290
+ throw new excecoes_1.ErroEmTempoDeExecucao({
247
291
  linha: interpretador.linhaDeclaracaoAtual,
248
- }, 'Parâmetro inválido. O segundo parâmetro da função deve ser uma função.'));
292
+ hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
293
+ }, 'Parâmetro inválido. O segundo parâmetro deve ser uma função.');
249
294
  }
250
- for (let indice = valorVetor.length - 1; indice >= 0; --indice) {
251
- if (await valorFuncaoPesquisa.chamar(interpretador, [valorVetor[indice]])) {
252
- return valorVetor[indice];
295
+ for (let i = itens.length - 1; i >= 0; i--) {
296
+ if (await valorFuncao.chamar(interpretador, [itens[i]], {
297
+ linha: interpretador.linhaDeclaracaoAtual,
298
+ hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
299
+ })) {
300
+ return itens[i];
253
301
  }
254
302
  }
255
303
  return null;
256
304
  }
257
305
  /**
258
- *
306
+ * Retorna o índice do último elemento de um iterável que satisfaça a condição definida na função de pesquisa.
307
+ * A execução é interrompida assim que o elemento for encontrado.
259
308
  * @param {InterpretadorInterface} interpretador A instância do interpretador.
260
- * @param {VariavelInterface | any} vetor Uma variável de Delégua ou um vetor nativo de JavaScript.
261
- * @param {VariavelInterface | any} funcaoPesquisa A função que ensina o método de pesquisa.
262
- * @returns {Promise<number>} O número correspondente ao índice se o elemento for encontrado, ou nulo em caso contrário.
309
+ * @param {any} iteravel O iterável a ser percorrido.
310
+ * @param {any} funcaoPesquisa A função que define a condição de busca.
311
+ * @returns {Promise<number>} O índice do último elemento encontrado, ou -1 caso nenhum elemento satisfaça a condição.
263
312
  */
264
- async function encontrar_ultimo_indice(interpretador, vetor, funcaoPesquisa) {
265
- const valorVetor = vetor.hasOwnProperty('valor') ? vetor.valor : vetor;
266
- const valorFuncaoPesquisa = funcaoPesquisa.hasOwnProperty('valor')
267
- ? funcaoPesquisa.valor
268
- : funcaoPesquisa;
269
- if (!Array.isArray(valorVetor)) {
270
- return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao({
271
- hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
313
+ async function encontrar_ultimo_indice(interpretador, iteravel, funcaoPesquisa) {
314
+ const valorIteravel = interpretador.resolverValor(iteravel);
315
+ const itens = new iteravel_1.Iteravel(valorIteravel).elementos;
316
+ if (itens.length === 0) {
317
+ throw new excecoes_1.ErroEmTempoDeExecucao({
272
318
  linha: interpretador.linhaDeclaracaoAtual,
273
- }, 'Parâmetro inválido. O primeiro parâmetro da função deve ser um vetor.'));
274
- }
275
- if (valorFuncaoPesquisa.constructor !== estruturas_1.DeleguaFuncao) {
276
- return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao({
277
319
  hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
320
+ }, 'Parâmetro inválido. O primeiro parâmetro deve ser um iterável.');
321
+ }
322
+ const valorFuncao = interpretador.resolverValor(funcaoPesquisa);
323
+ if (!(valorFuncao instanceof estruturas_1.DeleguaFuncao) &&
324
+ !(valorFuncao instanceof funcao_padrao_1.FuncaoPadrao)) {
325
+ throw new excecoes_1.ErroEmTempoDeExecucao({
278
326
  linha: interpretador.linhaDeclaracaoAtual,
279
- }, 'Parâmetro inválido. O segundo parâmetro da função deve ser uma função.'));
327
+ hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
328
+ }, 'Parâmetro inválido. O segundo parâmetro deve ser uma função.');
280
329
  }
281
- for (let indice = valorVetor.length - 1; indice >= 0; --indice) {
282
- if (await valorFuncaoPesquisa.chamar(interpretador, [valorVetor[indice]])) {
283
- return indice;
330
+ for (let i = itens.length - 1; i >= 0; i--) {
331
+ if (await valorFuncao.chamar(interpretador, itens[i], {
332
+ linha: interpretador.linhaDeclaracaoAtual,
333
+ hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
334
+ })) {
335
+ return i;
284
336
  }
285
337
  }
286
- return null;
338
+ return -1;
287
339
  }
288
340
  /**
289
- *
290
- * @param interpretador
291
- * @param vetor
292
- * @param funcaoFiltragem
293
- * @returns
341
+ * Retorna os elementos que satisfazem a condição definida na função de pesquisa.
342
+ * @param {InterpretadorInterface} interpretador A instância do interpretador.
343
+ * @param {any} iteravel O iterável a ser percorrido.
344
+ * @param {any} funcaoPesquisa A função que define a condição de busca.
345
+ * @returns {Promise<any[]>} Os elementos que satisfazem a função de pesquisa.
294
346
  */
295
- async function filtrar_por(interpretador, vetor, funcaoFiltragem) {
296
- if (vetor === null || vetor === undefined)
297
- return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao({
298
- hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
347
+ async function filtrar_por(interpretador, iteravel, funcaoPesquisa) {
348
+ const valorIteravel = interpretador.resolverValor(iteravel);
349
+ const itens = new iteravel_1.Iteravel(valorIteravel).elementos;
350
+ if (itens.length === 0) {
351
+ throw new excecoes_1.ErroEmTempoDeExecucao({
299
352
  linha: interpretador.linhaDeclaracaoAtual,
300
- }, 'Parâmetro inválido. O primeiro parâmetro da função filtrarPor() não pode ser nulo.'));
301
- const valorVetor = vetor.hasOwnProperty('valor') ? vetor.valor : vetor;
302
- const valorFuncaoFiltragem = funcaoFiltragem.hasOwnProperty('valor')
303
- ? funcaoFiltragem.valor
304
- : funcaoFiltragem;
305
- if (!Array.isArray(valorVetor)) {
306
- return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao({
307
353
  hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
308
- linha: interpretador.linhaDeclaracaoAtual,
309
- }, 'Parâmetro inválido. O primeiro parâmetro da função filtrarPor() deve ser um vetor.'));
354
+ }, 'Parâmetro inválido. O primeiro parâmetro deve ser um iterável.');
310
355
  }
311
- if (valorFuncaoFiltragem.constructor !== estruturas_1.DeleguaFuncao) {
312
- return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao({
313
- hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
356
+ const valorFuncao = interpretador.resolverValor(funcaoPesquisa);
357
+ if (!(valorFuncao instanceof estruturas_1.DeleguaFuncao) &&
358
+ !(valorFuncao instanceof funcao_padrao_1.FuncaoPadrao)) {
359
+ throw new excecoes_1.ErroEmTempoDeExecucao({
314
360
  linha: interpretador.linhaDeclaracaoAtual,
315
- }, 'Parâmetro inválido. O segundo parâmetro da função filtrarPor() deve ser uma função.'));
361
+ hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
362
+ }, 'Parâmetro inválido. O segundo parâmetro deve ser uma função.');
316
363
  }
317
364
  const resultados = [];
318
- for (let indice = 0; indice < valorVetor.length; ++indice) {
319
- const informacoesValor = await valorFuncaoFiltragem.chamar(interpretador, [
320
- valorVetor[indice],
321
- ]);
322
- if (informacoesValor === null || informacoesValor === undefined) {
365
+ for (const item of itens) {
366
+ const retornoFuncao = await valorFuncao.chamar(interpretador, item, {
367
+ linha: interpretador.linhaDeclaracaoAtual,
368
+ hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
369
+ });
370
+ if (retornoFuncao === null || retornoFuncao === undefined)
323
371
  continue;
324
- }
325
- const deveRetornarValor = informacoesValor.valorRetornado.valor;
326
- if (deveRetornarValor === false)
372
+ const passouPeloFiltro = retornoFuncao.valorRetornado.valor;
373
+ if (passouPeloFiltro === false)
327
374
  continue;
328
- resultados.push(valorVetor[indice]);
375
+ resultados.push(item);
329
376
  }
330
377
  return resultados;
331
378
  }
332
379
  /**
333
- *
380
+ * Verifica se um valor específico está incluído dentro de um iterável.
334
381
  * @param {InterpretadorInterface} interpretador A instância do interpretador.
335
- * @param {VariavelInterface | any} vetor Uma variável de Delégua ou um vetor nativo de JavaScript.
336
- * @param valor
337
- * @returns
382
+ * @param {any} iteravel O iterável a ser percorrido.
383
+ * @param {any} valor O valor a ser buscado.
384
+ * @returns {Promise<boolean>} verdadeiro se o valor for encontrado, falso caso contrário.
338
385
  */
339
- async function incluido(interpretador, vetor, valor) {
340
- const valorVetor = vetor.hasOwnProperty('valor') ? vetor.valor : vetor;
341
- const valorValor = valor.hasOwnProperty('valor') ? valor.valor : valor;
342
- if (!Array.isArray(valorVetor)) {
343
- return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao({
344
- hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
386
+ async function incluido(interpretador, iteravel, valor) {
387
+ const valorIteravel = interpretador.resolverValor(iteravel);
388
+ const itens = new iteravel_1.Iteravel(valorIteravel).elementos;
389
+ if (itens.length === 0) {
390
+ throw new excecoes_1.ErroEmTempoDeExecucao({
345
391
  linha: interpretador.linhaDeclaracaoAtual,
346
- }, 'Parâmetro inválido. O primeiro parâmetro da função deve ser um vetor.'));
392
+ hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
393
+ }, 'Parâmetro inválido. O primeiro parâmetro deve ser um iterável.');
347
394
  }
348
- for (let indice = 0; indice < valorVetor.length; ++indice) {
349
- if (valorVetor[indice] == valorValor) {
395
+ const valorResolvido = interpretador.resolverValor(valor);
396
+ for (const item of itens) {
397
+ if (item == valorResolvido)
350
398
  return true;
351
- }
352
399
  }
353
400
  return false;
354
401
  }
355
- function validacao_comum_numeros(interpretador, valorParaConverter) {
356
- if (isNaN(valorParaConverter)) {
357
- return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao({
358
- hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
359
- linha: interpretador.linhaDeclaracaoAtual,
360
- }, 'Valor não parece ser um número. Somente números ou textos com números podem ser convertidos para inteiro.'));
361
- }
362
- if (!/^(-)?\d+(\.\d+)?$/.test(valorParaConverter)) {
363
- return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao({
364
- hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
365
- linha: interpretador.linhaDeclaracaoAtual,
366
- }, 'Valor não parece estar estruturado como um número (texto vazio, falso ou não definido). Somente números ou textos com números podem ser convertidos para inteiro.'));
367
- }
368
- return null;
369
- }
370
402
  /**
371
403
  * Converte um valor em um número inteiro.
372
404
  * @param {InterpretadorInterface} interpretador A instância do interpretador.
373
- * @param {VariavelInterface | any} valorParaConverter O valor a ser convertido.
374
- * @returns {Promise<any>} Uma Promise com o resultado da conversão.
405
+ * @param {any} valor O valor a ser convertido.
406
+ * @returns {Promise<number>} o resultado da conversão.
375
407
  */
376
- async function inteiro(interpretador, valorParaConverter) {
377
- if (valorParaConverter === null || valorParaConverter === undefined)
378
- return Promise.resolve(0);
379
- const valor = valorParaConverter.hasOwnProperty('valor')
380
- ? valorParaConverter.valor
381
- : valorParaConverter;
382
- const resultadoValidacao = validacao_comum_numeros(interpretador, valor);
383
- return resultadoValidacao || Promise.resolve(parseInt(valor));
408
+ async function inteiro(interpretador, valor) {
409
+ const valorResolvido = interpretador.resolverValor(valor);
410
+ validacao_comum_numeros(interpretador, valorResolvido, 'inteiro');
411
+ return parseInt(String(valorResolvido), 10);
384
412
  }
385
413
  /**
386
414
  * Cria um vetor com números inteiros no intervalo especificado.
387
415
  * O valor inicial é inclusivo e o valor final é exclusivo.
388
416
  * @param {InterpretadorInterface} interpretador A instância do interpretador.
389
- * @param {VariavelInterface | number} valorInicial O valor inicial (inclusivo).
417
+ * @param {VariavelInterface | number} valorInicial O valor inicial (inclusivo) ou o limite final se for o único parâmetro.
390
418
  * @param {VariavelInterface | number} valorFinal O valor final (exclusivo).
391
419
  * @param {VariavelInterface | number} valorPasso O valor do passo.
392
420
  * @returns {Promise<number[]>} Um vetor com os números no intervalo.
393
421
  */
394
422
  async function intervalo(interpretador, valorInicial, valorFinal, valorPasso) {
395
- const primeiroParam = interpretador.resolverValor(valorInicial);
396
- const segundoParam = interpretador.resolverValor(valorFinal);
397
- const terceiroParam = interpretador.resolverValor(valorPasso);
398
- let inicioInteiro;
399
- let fimInteiro;
400
- let passoInteiro = 1;
401
- // intervalo(parada) - apenas um parâmetro
402
- if (segundoParam === undefined || segundoParam === null) {
403
- if (typeof primeiroParam !== 'number' || isNaN(primeiroParam)) {
404
- return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao({
405
- hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
423
+ const validarEConverter = (valorBruto, mensagemErro) => {
424
+ if (valorBruto === undefined || valorBruto === null)
425
+ return undefined;
426
+ const valorResolvido = interpretador.resolverValor(valorBruto);
427
+ if (typeof valorResolvido !== 'number' ||
428
+ Number.isNaN(valorResolvido)) {
429
+ throw new excecoes_1.ErroEmTempoDeExecucao({
406
430
  linha: interpretador.linhaDeclaracaoAtual,
407
- }, 'O parâmetro deve ser do tipo número ou inteiro.'));
408
- }
409
- inicioInteiro = 0;
410
- fimInteiro = Math.floor(primeiroParam);
411
- }
412
- // intervalo(inicio, parada) ou intervalo(inicio, parada, passo)
413
- else {
414
- if (typeof primeiroParam !== 'number' ||
415
- isNaN(primeiroParam) ||
416
- typeof segundoParam !== 'number' ||
417
- isNaN(segundoParam)) {
418
- return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao({
419
431
  hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
420
- linha: interpretador.linhaDeclaracaoAtual,
421
- }, 'Os parâmetros de início e fim devem ser do tipo número ou inteiro.'));
422
- }
423
- inicioInteiro = Math.floor(primeiroParam);
424
- fimInteiro = Math.floor(segundoParam);
425
- // Se há um terceiro parâmetro (passo)
426
- if (terceiroParam !== undefined && terceiroParam !== null) {
427
- if (typeof terceiroParam !== 'number' || isNaN(terceiroParam)) {
428
- return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao({
429
- hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
430
- linha: interpretador.linhaDeclaracaoAtual,
431
- }, 'O parâmetro de passo deve ser do tipo número ou inteiro.'));
432
- }
433
- passoInteiro = Math.floor(terceiroParam);
434
- if (passoInteiro === 0) {
435
- return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao({
436
- hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
437
- linha: interpretador.linhaDeclaracaoAtual,
438
- }, 'O passo não pode ser zero.'));
439
- }
432
+ }, mensagemErro);
440
433
  }
434
+ return Math.floor(valorResolvido);
435
+ };
436
+ let inicio = validarEConverter(valorInicial, 'O parâmetro de início deve ser do tipo número ou inteiro.');
437
+ let fim = validarEConverter(valorFinal, 'O parâmetro de fim deve ser do tipo número ou inteiro.');
438
+ const passo = validarEConverter(valorPasso, 'O parâmetro de passo deve ser do tipo número ou inteiro.') ?? 1;
439
+ if (passo === 0) {
440
+ throw new excecoes_1.ErroEmTempoDeExecucao({
441
+ linha: interpretador.linhaDeclaracaoAtual,
442
+ hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
443
+ }, 'O passo não pode ser zero.');
444
+ }
445
+ if (fim === undefined) {
446
+ fim = inicio;
447
+ inicio = 0;
441
448
  }
442
449
  const resultado = [];
443
- if (passoInteiro > 0) {
444
- for (let i = inicioInteiro; i < fimInteiro; i += passoInteiro) {
450
+ if (passo > 0) {
451
+ for (let i = inicio; i < fim; i += passo) {
445
452
  resultado.push(i);
446
453
  }
447
454
  }
448
455
  else {
449
- // Parâmetro passo sendo um número negativo
450
- for (let i = inicioInteiro; i > fimInteiro; i += passoInteiro) {
456
+ // Passo negativo
457
+ for (let i = inicio; i > fim; i += passo) {
451
458
  resultado.push(i);
452
459
  }
453
460
  }
454
- return Promise.resolve(resultado);
461
+ return resultado;
455
462
  }
463
+ async function inverter(interpretador, iteravel) {
464
+ const valorIteravel = interpretador.resolverValor(iteravel);
465
+ const itens = new iteravel_1.Iteravel(valorIteravel).elementos;
466
+ if (itens.length === 0 &&
467
+ valorIteravel !== '' &&
468
+ !(valorIteravel instanceof construtos_1.TuplaN) &&
469
+ !Array.isArray(valorIteravel)) {
470
+ throw new excecoes_1.ErroEmTempoDeExecucao({
471
+ linha: interpretador.linhaDeclaracaoAtual,
472
+ hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
473
+ }, 'Parâmetro inválido. O primeiro parâmetro deve ser um iterável.');
474
+ }
475
+ const itensInvertidos = [...itens].reverse();
476
+ if (iteravel instanceof construtos_1.TuplaN) {
477
+ return new construtos_1.TuplaN(interpretador.hashArquivoDeclaracaoAtual, interpretador.linhaDeclaracaoAtual, itensInvertidos);
478
+ }
479
+ if (typeof valorIteravel === 'string') {
480
+ return itensInvertidos.join('');
481
+ }
482
+ return itensInvertidos;
483
+ }
484
+ ;
456
485
  /**
457
486
  * Dado um vetor e, opcionalmente, um valor de início, retorna um vetor de dicionários,
458
487
  * onde cada dicionário contém o índice e o valor correspondente do vetor original.
459
488
  * @param {InterpretadorInterface} interpretador A instância do interpretador.
460
- * @param {VariavelInterface | any} vetor Uma variável de Delégua ou um vetor nativo de JavaScript.
461
- * @param {number | undefined} inicio O valor de início (opcional).
489
+ * @param {any} iteravel Um iterável.
490
+ * @param {any} [inicio] O valor inicial do contador de índices (opcional, padrão 0).
462
491
  * @returns {Promise<any[]>} Um vetor de dicionários com índice e valor.
463
492
  */
464
- async function enumerar(interpretador, vetor, inicio) {
465
- if (vetor === null || vetor === undefined) {
466
- return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao({
467
- hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
493
+ async function enumerar(interpretador, iteravel, inicio) {
494
+ if (iteravel === null || iteravel === undefined) {
495
+ throw new excecoes_1.ErroEmTempoDeExecucao({
468
496
  linha: interpretador.linhaDeclaracaoAtual,
469
- }, 'Parâmetro inválido. O primeiro parâmetro da função enumerar() não pode ser nulo.'));
497
+ hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
498
+ }, 'Parâmetro inválido. O primeiro parâmetro da função enumerar() não pode ser nulo.');
470
499
  }
471
- if (inicio !== undefined && (typeof inicio !== 'number' || isNaN(inicio))) {
472
- return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao({
500
+ const valorInicioResolvido = interpretador.resolverValor(inicio);
501
+ if (valorInicioResolvido !== undefined &&
502
+ (typeof valorInicioResolvido !== 'number' || Number.isNaN(valorInicioResolvido))) {
503
+ throw new excecoes_1.ErroEmTempoDeExecucao({
504
+ linha: interpretador.linhaDeclaracaoAtual,
473
505
  hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
506
+ }, 'O parâmetro de início deve ser do tipo número ou inteiro.');
507
+ }
508
+ const valorIteravel = interpretador.resolverValor(iteravel);
509
+ const itens = new iteravel_1.Iteravel(valorIteravel).elementos;
510
+ if (itens.length === 0 &&
511
+ valorIteravel !== '' &&
512
+ !Array.isArray(valorIteravel) &&
513
+ !(valorIteravel?.constructor === construtos_1.TuplaN)) {
514
+ throw new excecoes_1.ErroEmTempoDeExecucao({
474
515
  linha: interpretador.linhaDeclaracaoAtual,
475
- }, 'O parâmetro de início deve ser do tipo número ou inteiro.'));
516
+ hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
517
+ }, 'Parâmetro inválido. O primeiro parâmetro deve ser um iterável.');
476
518
  }
477
- const valorVetor = interpretador.resolverValor(vetor);
478
- const inicioInteiro = typeof inicio === 'number' && !isNaN(inicio) ? Math.floor(inicio) : 0;
519
+ const inicioInteiro = typeof valorInicioResolvido === 'number'
520
+ ? Math.floor(valorInicioResolvido)
521
+ : 0;
479
522
  const resultados = [];
480
- for (let i = inicioInteiro; i < valorVetor.length; ++i) {
481
- resultados.push({ indice: i, valor: valorVetor[i] });
523
+ for (let i = 0; i < itens.length; i++) {
524
+ const valorResolvido = interpretador.resolverValor(itens[i]);
525
+ resultados.push({
526
+ indice: i + inicioInteiro,
527
+ valor: valorResolvido
528
+ });
482
529
  }
483
- return Promise.resolve(resultados);
530
+ return resultados;
484
531
  }
485
532
  /**
486
- * Dado um vetor e uma função de mapeamento, executa a função de mapeamento
487
- * passando como argumento cada elemento do vetor.
533
+ * Dado um iterável e uma função de mapeamento, executa a função de mapeamento
534
+ * passando como argumento cada elemento do iterável.
488
535
  * @param interpretador A instância do interpretador.
489
- * @param vetor O vetor
536
+ * @param iteravel O iteravel a ser mapeado.
490
537
  * @param funcaoMapeamento A função de mapeamento.
491
- * @returns O resultado acumulado da execução da função de mapeamento.
538
+ * @returns {Promise<any[]>} O resultado acumulado em forma de vetor.
492
539
  */
493
- async function mapear(interpretador, vetor, funcaoMapeamento) {
494
- if (vetor === null || vetor === undefined)
495
- return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao({
540
+ async function mapear(interpretador, iteravel, funcaoMapeamento) {
541
+ if (iteravel === null || iteravel === undefined) {
542
+ throw new excecoes_1.ErroEmTempoDeExecucao({
543
+ linha: interpretador.linhaDeclaracaoAtual,
496
544
  hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
545
+ }, 'Parâmetro inválido. O primeiro parâmetro da função mapear() não pode ser nulo.');
546
+ }
547
+ const valorIteravel = interpretador.resolverValor(iteravel);
548
+ const itens = new iteravel_1.Iteravel(valorIteravel).elementos;
549
+ if (itens.length === 0 &&
550
+ valorIteravel !== '' &&
551
+ !Array.isArray(valorIteravel) &&
552
+ !(valorIteravel?.constructor === construtos_1.TuplaN)) {
553
+ throw new excecoes_1.ErroEmTempoDeExecucao({
497
554
  linha: interpretador.linhaDeclaracaoAtual,
498
- }, 'Parâmetro inválido. O primeiro parâmetro da função mapear() não pode ser nulo.'));
499
- const valorVetor = interpretador.resolverValor(vetor);
500
- const valorFuncaoMapeamento = interpretador.resolverValor(funcaoMapeamento);
555
+ hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
556
+ }, 'Parâmetro inválido. O primeiro parâmetro deve ser um iterável.');
557
+ }
558
+ const valorFuncao = interpretador.resolverValor(funcaoMapeamento);
559
+ const ehUmaFuncao = valorFuncao instanceof estruturas_1.DeleguaFuncao ||
560
+ valorFuncao instanceof funcao_padrao_1.FuncaoPadrao;
561
+ if (!valorFuncao || !ehUmaFuncao) {
562
+ throw new excecoes_1.ErroEmTempoDeExecucao({
563
+ linha: interpretador.linhaDeclaracaoAtual,
564
+ hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
565
+ }, 'Parâmetro inválido. O segundo parâmetro da função mapear() deve ser uma função.');
566
+ }
501
567
  const resultados = [];
502
- for (let indice = 0; indice < valorVetor.length; ++indice) {
503
- const informacoesRetorno = await valorFuncaoMapeamento.chamar(interpretador, [
504
- valorVetor[indice],
505
- ]);
506
- if (!informacoesRetorno.hasOwnProperty('valorRetornado')) {
507
- console.warn(`Retorno inconsistente em mapear(): ${JSON.stringify(informacoesRetorno)}.`);
508
- continue;
509
- }
510
- if (!(informacoesRetorno.valorRetornado instanceof quebras_1.RetornoQuebra)) {
511
- console.warn(`mapear() finalizado com valor retornado diferente do esperado: ${JSON.stringify(informacoesRetorno)}.`);
512
- continue;
568
+ for (const item of itens) {
569
+ const retornoFuncao = await valorFuncao.chamar(interpretador, [item], {
570
+ linha: interpretador.linhaDeclaracaoAtual,
571
+ hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
572
+ });
573
+ if (retornoFuncao !== null && retornoFuncao !== undefined) {
574
+ if (retornoFuncao.hasOwnProperty('valorRetornado')) {
575
+ if (retornoFuncao.valorRetornado instanceof quebras_1.RetornoQuebra) {
576
+ resultados.push(retornoFuncao.valorRetornado.valor);
577
+ }
578
+ }
579
+ else if (retornoFuncao instanceof quebras_1.RetornoQuebra) {
580
+ resultados.push(retornoFuncao.valor);
581
+ }
513
582
  }
514
- resultados.push(informacoesRetorno.valorRetornado.valor);
515
583
  }
516
584
  return resultados;
517
585
  }
518
586
  /**
519
- * Encontra o maior número dentro de um vetor.
587
+ * Encontra o maior número dentro de um iterável.
520
588
  * @param {InterpretadorInterface} interpretador A instância do interpretador.
521
- * @param {VariavelInterface | any} vetor Uma variável de Pituguês ou um vetor nativo de JavaScript contendo números.
522
- * @returns {Promise<number>} O maior número encontrado no vetor.
589
+ * @param {any} iteravel O iterável a ser inspecionado.
590
+ * @returns {Promise<any>} O maior elemento encontrado.
523
591
  */
524
- async function maximo(interpretador, vetor) {
525
- if (vetor === null || vetor === undefined) {
526
- return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao({
527
- hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
592
+ async function maximo(interpretador, iteravel) {
593
+ if (iteravel === null || iteravel === undefined) {
594
+ throw new excecoes_1.ErroEmTempoDeExecucao({
528
595
  linha: interpretador.linhaDeclaracaoAtual,
529
- }, 'Parâmetro inválido. O parâmetro da função maximo() não pode ser nulo.'));
530
- }
531
- const valorVetor = interpretador.resolverValor(vetor);
532
- if (!Array.isArray(valorVetor)) {
533
- return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao({
534
596
  hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
535
- linha: interpretador.linhaDeclaracaoAtual,
536
- }, 'Parâmetro inválido. O parâmetro da função maximo() deve ser um vetor.'));
597
+ }, 'Parâmetro inválido. O parâmetro da função maximo() não pode ser nulo.');
537
598
  }
538
- if (vetor.length == 0) {
539
- return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao({
599
+ const valorIteravel = interpretador.resolverValor(iteravel);
600
+ const itens = new iteravel_1.Iteravel(valorIteravel).elementos;
601
+ if (itens.length === 0 &&
602
+ valorIteravel !== '' &&
603
+ !Array.isArray(valorIteravel) &&
604
+ !(valorIteravel?.constructor === construtos_1.TuplaN)) {
605
+ throw new excecoes_1.ErroEmTempoDeExecucao({
606
+ linha: interpretador.linhaDeclaracaoAtual,
540
607
  hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
608
+ }, 'Parâmetro inválido. A função maximo() espera um iterável.');
609
+ }
610
+ if (itens.length === 0) {
611
+ throw new excecoes_1.ErroEmTempoDeExecucao({
541
612
  linha: interpretador.linhaDeclaracaoAtual,
542
- }, 'Parâmetro inválido. O vetor não pode estar vazio.'));
613
+ hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
614
+ }, 'Parâmetro inválido. O iterável não pode estar vazio.');
543
615
  }
544
- let maiorValor = valorVetor[0];
616
+ let maiorValor = interpretador.resolverValor(itens[0]);
545
617
  try {
546
- for (let i = 1; i < valorVetor.length; i++) {
547
- const elementoAtual = valorVetor[i];
548
- if (compararElementosRecursivamente(elementoAtual, maiorValor) > 0) {
549
- maiorValor = elementoAtual;
618
+ for (const item of itens) {
619
+ const itemResolvido = interpretador.resolverValor(item);
620
+ if (compararElementosRecursivamente(itemResolvido, maiorValor) > 0) {
621
+ maiorValor = itemResolvido;
550
622
  }
551
623
  }
552
624
  }
553
625
  catch (erro) {
554
- return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao({
555
- hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
626
+ throw new excecoes_1.ErroEmTempoDeExecucao({
556
627
  linha: interpretador.linhaDeclaracaoAtual,
557
- }, 'Não é possível comparar elementos de tipos diferentes dentro do vetor (ex: números com vetores).'));
628
+ hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
629
+ }, 'Não é possível comparar elementos de tipos incompatíveis dentro do iterável.');
558
630
  }
559
- return Promise.resolve(maiorValor);
631
+ return maiorValor;
560
632
  }
561
633
  /**
562
- * Encontra o menor número dentro de um vetor.
634
+ * Encontra o menor número dentro de um iterável.
563
635
  * @param {InterpretadorInterface} interpretador A instância do interpretador.
564
- * @param {VariavelInterface | any} vetor Uma variável de Pituguês ou um vetor nativo de JavaScript contendo números.
565
- * @returns {Promise<number>} O menor número encontrado no vetor.
636
+ * @param {any} iteravel O iterável a ser inspecionado.
637
+ * @returns {Promise<any>} O menor elemento encontrado.
566
638
  */
567
- async function minimo(interpretador, vetor) {
568
- if (vetor === null || vetor === undefined) {
569
- return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao({
570
- hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
639
+ async function minimo(interpretador, iteravel) {
640
+ if (iteravel === null || iteravel === undefined) {
641
+ throw new excecoes_1.ErroEmTempoDeExecucao({
571
642
  linha: interpretador.linhaDeclaracaoAtual,
572
- }, 'Parâmetro inválido. O parâmetro da função minimo() não pode ser nulo.'));
573
- }
574
- const valorVetor = interpretador.resolverValor(vetor);
575
- if (!Array.isArray(valorVetor)) {
576
- return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao({
577
643
  hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
578
- linha: interpretador.linhaDeclaracaoAtual,
579
- }, 'Parâmetro inválido. O parâmetro da função minimo() deve ser um vetor.'));
644
+ }, 'Parâmetro inválido. O parâmetro da função minimo() não pode ser nulo.');
580
645
  }
581
- if (valorVetor.length == 0) {
582
- return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao({
646
+ const valorIteravel = interpretador.resolverValor(iteravel);
647
+ const itens = new iteravel_1.Iteravel(valorIteravel).elementos;
648
+ if (itens.length === 0 &&
649
+ valorIteravel !== '' &&
650
+ !Array.isArray(valorIteravel) &&
651
+ !(valorIteravel?.constructor === construtos_1.TuplaN)) {
652
+ throw new excecoes_1.ErroEmTempoDeExecucao({
653
+ linha: interpretador.linhaDeclaracaoAtual,
583
654
  hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
655
+ }, 'Parâmetro inválido. A função minimo() espera um iterável.');
656
+ }
657
+ if (itens.length === 0) {
658
+ throw new excecoes_1.ErroEmTempoDeExecucao({
584
659
  linha: interpretador.linhaDeclaracaoAtual,
585
- }, 'Parâmetro inválido. O vetor não pode estar vazio.'));
660
+ hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
661
+ }, 'Parâmetro inválido. O iterável não pode estar vazio.');
586
662
  }
587
- let menorValor = valorVetor[0];
663
+ let menorValor = interpretador.resolverValor(itens[0]);
588
664
  try {
589
- for (let i = 1; i < valorVetor.length; i++) {
590
- const elementoAtual = valorVetor[i];
591
- if (compararElementosRecursivamente(elementoAtual, menorValor) < 0) {
592
- menorValor = elementoAtual;
665
+ for (const item of itens) {
666
+ const itemResolvido = interpretador.resolverValor(item);
667
+ if (compararElementosRecursivamente(itemResolvido, menorValor) < 0) {
668
+ menorValor = itemResolvido;
593
669
  }
594
670
  }
595
671
  }
596
672
  catch (erro) {
597
- return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao({
598
- hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
673
+ throw new excecoes_1.ErroEmTempoDeExecucao({
599
674
  linha: interpretador.linhaDeclaracaoAtual,
600
- }, 'Não é possível comparar elementos de tipos diferentes dentro do vetor (ex: números com vetores).'));
675
+ hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
676
+ }, 'Não é possível comparar elementos de tipos incompatíveis dentro do iterável.');
601
677
  }
602
- return Promise.resolve(menorValor);
678
+ return menorValor;
603
679
  }
604
680
  /**
605
- * Converte um valor em um número, com parte decimal ou não.
681
+ * Ordena os elementos de um iterável
606
682
  * @param {InterpretadorInterface} interpretador A instância do interpretador.
607
- * @param {VariavelInterface | any} valorParaConverter O valor a ser convertido.
608
- * @returns {Promise<any>} Uma Promise com o resultado da conversão.
683
+ * @param {any} iteravel O iterável a ser ordenado.
684
+ * @returns {Promise<any[]>} Um novo vetor com os elementos ordenados.
609
685
  */
610
- async function numero(interpretador, valorParaConverter) {
611
- if (valorParaConverter === null || valorParaConverter === undefined)
612
- return Promise.resolve(0);
613
- const valor = valorParaConverter.hasOwnProperty('valor')
614
- ? valorParaConverter.valor
615
- : valorParaConverter;
616
- const resultadoValidacao = validacao_comum_numeros(interpretador, valor);
617
- return resultadoValidacao || Promise.resolve(Number(valor));
618
- }
619
- /**
620
- *
621
- * @param vetor
622
- * @returns
623
- */
624
- async function ordenar(interpretador, vetor) {
625
- if (vetor === null || vetor === undefined)
686
+ async function ordenar(interpretador, iteravel) {
687
+ if (iteravel === null || iteravel === undefined) {
626
688
  throw new excecoes_1.ErroEmTempoDeExecucao({
627
- hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
628
689
  linha: interpretador.linhaDeclaracaoAtual,
629
- }, 'Parâmetro inválido. O primeiro parâmetro da função ordenar() não pode ser nulo.');
630
- const objeto = vetor.hasOwnProperty('valor') ? vetor.valor : vetor;
631
- if (!Array.isArray(objeto)) {
632
- return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao({
633
690
  hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
691
+ }, 'Parâmetro inválido. O primeiro parâmetro da função ordenar() não pode ser nulo.');
692
+ }
693
+ const valorIteravel = interpretador.resolverValor(iteravel);
694
+ const itens = new iteravel_1.Iteravel(valorIteravel).elementos;
695
+ if (itens.length === 0 &&
696
+ valorIteravel !== '' &&
697
+ !Array.isArray(valorIteravel) &&
698
+ !(valorIteravel?.constructor === construtos_1.TuplaN)) {
699
+ throw new excecoes_1.ErroEmTempoDeExecucao({
634
700
  linha: interpretador.linhaDeclaracaoAtual,
635
- }, 'Valor inválido. Objeto inserido não é um vetor.'));
701
+ hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
702
+ }, 'Parâmetro inválido. A função ordenar() espera um iterável.');
636
703
  }
637
- let trocado;
638
- const tamanho = objeto.length;
639
- do {
640
- trocado = false;
641
- for (let i = 0; i < tamanho - 1; i++) {
642
- if (objeto[i] > objeto[i + 1]) {
643
- [objeto[i], objeto[i + 1]] = [objeto[i + 1], objeto[i]];
644
- trocado = true;
704
+ const itensParaOrdenar = [...itens];
705
+ try {
706
+ itensParaOrdenar.sort((a, b) => {
707
+ const valorA = interpretador.resolverValor(a);
708
+ const valorB = interpretador.resolverValor(b);
709
+ if (typeof valorA === 'string' && typeof valorB === 'string') {
710
+ return valorA.localeCompare(valorB);
645
711
  }
646
- }
647
- } while (trocado);
648
- return Promise.resolve(objeto);
649
- }
650
- /**
651
- *
652
- * @param interpretador
653
- * @param vetor
654
- * @param funcaoFiltragem
655
- * @returns
656
- */
657
- async function para_cada(interpretador, vetor, funcaoFiltragem) {
658
- if (vetor === null || vetor === undefined)
659
- return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao({
660
- hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
712
+ return compararElementosRecursivamente(valorA, valorB);
713
+ });
714
+ }
715
+ catch (erro) {
716
+ throw new excecoes_1.ErroEmTempoDeExecucao({
661
717
  linha: interpretador.linhaDeclaracaoAtual,
662
- }, 'Parâmetro inválido. O primeiro parâmetro da função paraCada() não pode ser nulo.'));
663
- const valorVetor = interpretador.resolverValor(vetor);
664
- const valorFuncaoFiltragem = interpretador.resolverValor(funcaoFiltragem);
665
- for (let indice = 0; indice < valorVetor.length; ++indice) {
666
- await valorFuncaoFiltragem.chamar(interpretador, [valorVetor[indice]]);
718
+ hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
719
+ }, 'Não é possível ordenar um iterável que contenha elementos de tipos incompatíveis.');
667
720
  }
721
+ return itensParaOrdenar;
668
722
  }
669
723
  /**
670
- *
671
- * @param interpretador
672
- * @param vetor
673
- * @param funcaoFiltragem
674
- * @returns
724
+ * Executa uma função para cada elemento do iterável.
725
+ * @param {InterpretadorInterface} interpretador A instância do interpretador.
726
+ * @param {any} iteravel O iterável a ser percorrido.
727
+ * @param {any} funcaoExecucao A função que será chamada para cada elemento.
728
+ * @returns {Promise<void>}
675
729
  */
676
- async function primeiro_em_condicao(interpretador, vetor, funcaoFiltragem) {
677
- if (vetor === null || vetor === undefined)
678
- return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao({
679
- hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
730
+ async function para_cada(interpretador, iteravel, funcaoExecucao) {
731
+ if (iteravel === null || iteravel === undefined) {
732
+ throw new excecoes_1.ErroEmTempoDeExecucao({
680
733
  linha: interpretador.linhaDeclaracaoAtual,
681
- }, 'Parâmetro inválido. O primeiro parâmetro da função primeiroEmCondicao() não pode ser nulo.'));
682
- const valorVetor = interpretador.resolverValor(vetor);
683
- const valorFuncaoFiltragem = interpretador.resolverValor(funcaoFiltragem);
684
- if (!Array.isArray(valorVetor)) {
685
- return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao({
686
734
  hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
687
- linha: interpretador.linhaDeclaracaoAtual,
688
- }, 'Parâmetro inválido. O primeiro parâmetro da função primeiroEmCondicao() deve ser um vetor.'));
735
+ }, 'Parâmetro inválido. O primeiro parâmetro da função para_cada() não pode ser nulo.');
689
736
  }
690
- if (valorFuncaoFiltragem.constructor.name !== 'DeleguaFuncao') {
691
- return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao({
737
+ const valorIteravel = interpretador.resolverValor(iteravel);
738
+ const itens = new iteravel_1.Iteravel(valorIteravel).elementos;
739
+ if (itens.length === 0 &&
740
+ valorIteravel !== '' &&
741
+ !Array.isArray(valorIteravel) &&
742
+ !(valorIteravel?.constructor === construtos_1.TuplaN)) {
743
+ throw new excecoes_1.ErroEmTempoDeExecucao({
744
+ linha: interpretador.linhaDeclaracaoAtual,
692
745
  hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
746
+ }, 'Parâmetro inválido. O primeiro parâmetro deve ser um iterável.');
747
+ }
748
+ const valorFuncao = interpretador.resolverValor(funcaoExecucao);
749
+ const ehUmaFuncao = valorFuncao instanceof estruturas_1.DeleguaFuncao ||
750
+ valorFuncao instanceof funcao_padrao_1.FuncaoPadrao;
751
+ if (!valorFuncao || !ehUmaFuncao) {
752
+ throw new excecoes_1.ErroEmTempoDeExecucao({
693
753
  linha: interpretador.linhaDeclaracaoAtual,
694
- }, 'Parâmetro inválido. O segundo parâmetro da função primeiroEmCondicao() deve ser uma função.'));
754
+ hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
755
+ }, 'Parâmetro inválido. O segundo parâmetro da função para_cada() deve ser uma função.');
695
756
  }
696
- for (let indice = 0; indice < valorVetor.length; ++indice) {
697
- const valorResolvido = await valorFuncaoFiltragem.chamar(interpretador, [
698
- valorVetor[indice],
699
- ]);
700
- if (valorResolvido !== null) {
701
- return valorResolvido;
702
- }
757
+ for (const item of itens) {
758
+ await valorFuncao.chamar(interpretador, [item], {
759
+ linha: interpretador.linhaDeclaracaoAtual,
760
+ hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
761
+ });
703
762
  }
704
- return undefined;
705
763
  }
706
764
  /**
707
- *
708
- * @param interpretador
709
- * @param numero
710
- * @returns
765
+ * Converte um valor em um número real (ponto flutuante).
766
+ * @param {InterpretadorInterface} interpretador A instância do interpretador.
767
+ * @param {any} valor O valor a ser convertido.
768
+ * @returns {Promise<number>} O resultado da conversão.
711
769
  */
712
- async function real(interpretador, numero) {
713
- if (numero === null || numero === undefined)
714
- return Promise.resolve(parseFloat('0'));
715
- const valor = numero.hasOwnProperty('valor') ? numero.valor : numero;
716
- if (!/^(-)?\d+(\.\d+)?$/.test(valor)) {
717
- return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao({
718
- hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
719
- linha: interpretador.linhaDeclaracaoAtual,
720
- }, 'Valor não parece estar estruturado como um número (texto/valor vazio, falso ou não definido). Somente números ou textos com números podem ser convertidos para real.'));
721
- }
722
- return Promise.resolve(parseFloat(valor));
770
+ async function real(interpretador, valor) {
771
+ const valorResolvido = interpretador.resolverValor(valor);
772
+ validacao_comum_numeros(interpretador, valorResolvido, 'real');
773
+ return parseFloat(String(valorResolvido));
723
774
  }
724
775
  /**
725
- *
726
- * @param interpretador
727
- * @param vetor
728
- * @param funcaoReducao
729
- * @param valorInicial
730
- * @returns
776
+ * Reduz um iterável a um único valor, executando uma função acumuladora em cada elemento.
777
+ * @param {InterpretadorInterface} interpretador A instância do interpretador.
778
+ * @param {any} iteravel O iterável a ser reduzido.
779
+ * @param {any} funcaoReducao A função que será chamada (acumulador, valorAtual).
780
+ * @param {any} [valorInicial=null] O valor inicial do acumulador.
781
+ * @returns {Promise<any>} O resultado acumulado.
731
782
  */
732
- async function reduzir(interpretador, vetor, funcaoReducao, valorInicial = null) {
733
- const valorVetor = vetor.hasOwnProperty('valor') ? vetor.valor : vetor;
734
- const valorFuncaoReducao = funcaoReducao.hasOwnProperty('valor')
735
- ? funcaoReducao.valor
736
- : funcaoReducao;
737
- const valorPadrao = valorInicial && valorInicial.hasOwnProperty && valorInicial.hasOwnProperty('valor')
738
- ? valorInicial.valor
739
- : valorInicial;
740
- if (!Array.isArray(valorVetor)) {
741
- return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao({
742
- hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
783
+ async function reduzir(interpretador, iteravel, funcaoReducao, valorInicial = null) {
784
+ const valorIteravel = interpretador.resolverValor(iteravel);
785
+ const valorFuncaoReducao = interpretador.resolverValor(funcaoReducao);
786
+ const valorPadrao = interpretador.resolverValor(valorInicial);
787
+ const itens = new iteravel_1.Iteravel(valorIteravel).elementos;
788
+ if (itens.length === 0 &&
789
+ valorIteravel !== '' &&
790
+ !Array.isArray(valorIteravel) &&
791
+ !(valorIteravel?.constructor === construtos_1.TuplaN)) {
792
+ throw new excecoes_1.ErroEmTempoDeExecucao({
743
793
  linha: interpretador.linhaDeclaracaoAtual,
744
- }, 'Parâmetro inválido. O primeiro parâmetro da função deve ser um vetor.'));
745
- }
746
- if (valorFuncaoReducao.constructor.name !== 'DeleguaFuncao') {
747
- return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao({
748
794
  hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
795
+ }, 'Parâmetro inválido. O primeiro parâmetro da função deve ser um iterável.');
796
+ }
797
+ const ehUmaFuncao = valorFuncaoReducao instanceof estruturas_1.DeleguaFuncao ||
798
+ valorFuncaoReducao instanceof funcao_padrao_1.FuncaoPadrao ||
799
+ typeof valorFuncaoReducao?.chamar === 'function';
800
+ if (!valorFuncaoReducao || !ehUmaFuncao) {
801
+ throw new excecoes_1.ErroEmTempoDeExecucao({
749
802
  linha: interpretador.linhaDeclaracaoAtual,
750
- }, 'Parâmetro inválido. O segundo parâmetro da função deve ser uma função.'));
803
+ hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
804
+ }, 'Parâmetro inválido. O segundo parâmetro da função deve ser uma função.');
751
805
  }
752
- // Se não houver valor inicial e vetor vazio, não é possível reduzir
753
806
  if ((valorPadrao === null || valorPadrao === undefined) &&
754
- (!Array.isArray(valorVetor) || valorVetor.length === 0)) {
755
- return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao({
756
- hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
807
+ itens.length === 0) {
808
+ throw new excecoes_1.ErroEmTempoDeExecucao({
757
809
  linha: interpretador.linhaDeclaracaoAtual,
758
- }, 'Não é possível reduzir um vetor vazio sem valor inicial.'));
810
+ hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
811
+ }, 'Não é possível reduzir um iterável vazio sem valor inicial.');
759
812
  }
760
813
  let resultado = valorPadrao;
761
814
  let inicio = 0;
762
815
  if (resultado === null || resultado === undefined) {
763
- resultado = valorVetor[0];
816
+ resultado = interpretador.resolverValor(itens[0]);
764
817
  inicio = 1;
765
818
  }
766
- for (let index = inicio; index < valorVetor.length; ++index) {
767
- resultado = await valorFuncaoReducao.chamar(interpretador, [resultado, valorVetor[index]]);
819
+ for (let i = inicio; i < itens.length; i++) {
820
+ const elementoAtual = interpretador.resolverValor(itens[i]);
821
+ const resultadoFuncao = await valorFuncaoReducao.chamar(interpretador, [resultado, elementoAtual], {
822
+ linha: interpretador.linhaDeclaracaoAtual,
823
+ hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
824
+ });
825
+ resultado = interpretador.resolverValor(resultadoFuncao);
768
826
  }
769
827
  return resultado;
770
828
  }
771
829
  /**
772
- * Realiza a soma de todos os números dentro de um vetor.
830
+ * Realiza a soma de todos os números dentro de um iterável.
773
831
  * @param {InterpretadorInterface} interpretador A instância do interpretador.
774
- * @param {VariavelInterface | any} vetor Uma variável de Pituguês ou um vetor nativo de JavaScript contendo números.
775
- * @returns {Promise<number>} A soma de todos os elementos do vetor.
832
+ * @param {any} iteravel O iterável contendo os números.
833
+ * @returns {Promise<number>} A soma de todos os elementos.
776
834
  */
777
- async function somar(interpretador, vetor) {
778
- if (vetor === null || vetor === undefined) {
779
- return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao({
780
- hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
835
+ async function somar(interpretador, iteravel) {
836
+ if (iteravel === null || iteravel === undefined) {
837
+ throw new excecoes_1.ErroEmTempoDeExecucao({
781
838
  linha: interpretador.linhaDeclaracaoAtual,
782
- }, 'Parâmetro inválido. O parâmetro da função somar() não pode ser nulo.'));
783
- }
784
- const valorVetor = interpretador.resolverValor(vetor);
785
- if (!Array.isArray(valorVetor)) {
786
- return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao({
787
839
  hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
840
+ }, 'Parâmetro inválido. O parâmetro da função somar() não pode ser nulo.');
841
+ }
842
+ const valorIteravel = interpretador.resolverValor(iteravel);
843
+ const itens = new iteravel_1.Iteravel(valorIteravel).elementos;
844
+ if (itens.length === 0 &&
845
+ valorIteravel !== '' &&
846
+ !Array.isArray(valorIteravel) &&
847
+ !(valorIteravel instanceof construtos_1.TuplaN)) {
848
+ throw new excecoes_1.ErroEmTempoDeExecucao({
788
849
  linha: interpretador.linhaDeclaracaoAtual,
789
- }, 'Parâmetro inválido. O parâmetro da função somar() deve ser um vetor.'));
850
+ hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
851
+ }, 'Parâmetro inválido. O parâmetro da função somar() deve ser um iterável.');
790
852
  }
791
- if (valorVetor.length === 0)
792
- return Promise.resolve(0);
853
+ if (itens.length === 0)
854
+ return 0;
793
855
  let somaDosElementos = 0;
794
- for (let elemento of valorVetor) {
795
- if (typeof elemento !== 'number' || isNaN(elemento)) {
796
- return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao({
797
- hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
856
+ for (const item of itens) {
857
+ const itemResolvido = interpretador.resolverValor(item);
858
+ if (typeof itemResolvido !== 'number' || Number.isNaN(itemResolvido)) {
859
+ throw new excecoes_1.ErroEmTempoDeExecucao({
798
860
  linha: interpretador.linhaDeclaracaoAtual,
799
- }, 'A função somar() aceita apenas vetores contendo números.'));
861
+ hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
862
+ }, 'A função somar() aceita apenas iteráveis contendo números.');
800
863
  }
801
- somaDosElementos += elemento;
864
+ somaDosElementos += itemResolvido;
802
865
  }
803
- return Promise.resolve(somaDosElementos);
866
+ return somaDosElementos;
804
867
  }
805
868
  /**
806
- *
807
- * @param objeto
808
- * @returns
869
+ * Retorna o tamanho do objeto, vetor, texto ou número de parâmetros de uma função/classe.
870
+ * * @param {InterpretadorInterface} interpretador A instância do interpretador.
871
+ * @param {any} valor O valor a ser inspecionado.
872
+ * @returns {Promise<number>} O tamanho.
809
873
  */
810
- async function tamanho(interpretador, objeto) {
811
- const valorObjeto = objeto.hasOwnProperty('valor') ? objeto.valor : objeto;
812
- if (typeof valorObjeto === 'number') {
813
- return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao({
814
- hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
874
+ async function tamanho(interpretador, valor) {
875
+ const valorResolvido = interpretador.resolverValor(valor);
876
+ if (valorResolvido === null || valorResolvido === undefined) {
877
+ throw new excecoes_1.ErroEmTempoDeExecucao({
815
878
  linha: interpretador.linhaDeclaracaoAtual,
816
- }, 'Função global tamanho() não funciona com números.'));
879
+ hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
880
+ }, 'Não é possível obter o tamanho de um valor nulo ou não definido.');
817
881
  }
818
- if (valorObjeto instanceof objeto_delegua_classe_1.ObjetoDeleguaClasse) {
819
- return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao({
882
+ if (typeof valorResolvido === 'number' ||
883
+ typeof valorResolvido === 'boolean') {
884
+ throw new excecoes_1.ErroEmTempoDeExecucao({
885
+ linha: interpretador.linhaDeclaracaoAtual,
820
886
  hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
887
+ }, `A função global tamanho() não funciona com ${typeof valorResolvido === 'number' ? 'números' : 'booleanos'}.`);
888
+ }
889
+ if (valorResolvido instanceof objeto_delegua_classe_1.ObjetoDeleguaClasse) {
890
+ throw new excecoes_1.ErroEmTempoDeExecucao({
821
891
  linha: interpretador.linhaDeclaracaoAtual,
822
- }, 'Função global tamanho não funciona com objetos complexos.'));
892
+ hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
893
+ }, 'A função global tamanho() não funciona com objetos complexos instanciados.');
823
894
  }
824
- if (valorObjeto instanceof estruturas_1.DeleguaFuncao) {
825
- return Promise.resolve(valorObjeto.declaracao.parametros.length);
895
+ if (valorResolvido instanceof estruturas_1.DeleguaFuncao) {
896
+ return valorResolvido.declaracao.parametros.length;
826
897
  }
827
- if (valorObjeto instanceof funcao_padrao_1.FuncaoPadrao) {
828
- return Promise.resolve(valorObjeto.valorAridade);
898
+ if (valorResolvido instanceof funcao_padrao_1.FuncaoPadrao) {
899
+ return valorResolvido.valorAridade;
829
900
  }
830
- if (valorObjeto instanceof descritor_tipo_classe_1.DescritorTipoClasse) {
831
- const metodos = valorObjeto.metodos;
832
- let tamanho = 0;
901
+ if (valorResolvido instanceof descritor_tipo_classe_1.DescritorTipoClasse) {
902
+ const metodos = valorResolvido.metodos;
833
903
  const metodoInicializacao = metodos.inicializacao;
904
+ let tamanho = 0;
834
905
  if (metodoInicializacao &&
835
906
  !Array.isArray(metodoInicializacao) &&
836
907
  metodoInicializacao.eInicializador) {
837
908
  tamanho = metodoInicializacao.declaracao.parametros.length;
838
909
  }
839
- return Promise.resolve(tamanho);
910
+ return tamanho;
840
911
  }
841
- return Promise.resolve(valorObjeto.length);
912
+ if (valorResolvido.length === undefined &&
913
+ typeof valorResolvido === 'object') {
914
+ if (valorResolvido.hasOwnProperty('elementos')) {
915
+ return valorResolvido.elementos.length;
916
+ }
917
+ return Object.keys(valorResolvido).length;
918
+ }
919
+ return valorResolvido.length;
842
920
  }
843
921
  /**
844
922
  * Transforma o valor ou variável em texto.
845
923
  * @param {InterpretadorInterface} interpretador A instância do interpretador.
846
- * @param {VariavelInterface | any} valorParaConverter O valor ou variável.
924
+ * @param {any} valor O valor ou variável a ser convertido em texto.
847
925
  * @returns {Promise<string>} O valor resolvido em texto.
848
926
  */
849
- async function texto(interpretador, valorParaConverter) {
850
- return Promise.resolve(`${valorParaConverter.hasOwnProperty('valor') ? valorParaConverter.valor : valorParaConverter}`);
851
- }
852
- /**
853
- * Retorna verdadeiro se todos os elementos do iterável forem truly.
854
- * @param {InterpretadorInterface} interpretador A instância do interpretador.
855
- * @param {VariavelInterface | any} iteravel O primeiro parâmetro, qualquer dado que seja iterável (vetores, tuplas, dicionários etc.).
856
- * @returns {Promise<boolean>} Verdadeiro, se todos os valores do iterável forem Truly.
857
- */
858
- async function todos(interpretador, iteravel) {
859
- const valorIteravel = interpretador.resolverValor(iteravel);
860
- const ehObjetoOuDicionario = valorIteravel && typeof valorIteravel === 'object' && !Array.isArray(valorIteravel);
861
- const ehIteravelNativo = valorIteravel && typeof valorIteravel[Symbol.iterator] === 'function';
862
- if (!ehIteravelNativo && !ehObjetoOuDicionario) {
863
- return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao({
864
- hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
865
- linha: interpretador.linhaDeclaracaoAtual,
866
- }, 'Parâmetro inválido. O primeiro parâmetro deve ser um iterável.'));
927
+ async function texto(interpretador, valor) {
928
+ const valorResolvido = interpretador.resolverValor(valor);
929
+ if (valorResolvido === null || valorResolvido === undefined) {
930
+ return 'nulo';
867
931
  }
868
- const itens = ehIteravelNativo ? valorIteravel : Object.values(valorIteravel);
869
- for (const valor of itens) {
870
- const valorResolvido = interpretador.resolverValor(valor);
871
- if (!interpretador.eVerdadeiro(valorResolvido))
872
- return false;
932
+ if (typeof valorResolvido === 'boolean') {
933
+ return valorResolvido ? 'verdadeiro' : 'falso';
873
934
  }
874
- return true;
935
+ return String(valorResolvido);
875
936
  }
876
937
  /**
877
- * Retorna verdadeiro se todos os elementos do primeiro parâmetro retornam verdadeiro ao
878
- * serem aplicados como argumentos da função passada como segundo parâmetro.
938
+ * Retorna verdadeiro se todos os elementos do iterável forem verdadeiros (truthy). Caso seja passado uma função como segundo parâmetro, cada elemento do iterável será passado para ela.
879
939
  * @param {InterpretadorInterface} interpretador A instância do interpretador.
880
- * @param {VariavelInterface | any} iteravel O primeiro parâmetro, qualquer dado que seja iterável (vetores, tuplas, dicionários etc.).
881
- * @param {VariavelInterface | any} funcaoCondicional A função que será executada com cada
882
- * valor do vetor passado como primeiro parâmetro.
883
- * @returns {Promise<boolean>} Verdadeiro, se todos os valores do iterável fazem a função passada
884
- * por parâmetro devolver verdadeiro, ou falso em caso contrário.
940
+ * @param {any} iteravel Qualquer dado que seja iterável
941
+ * @param {any} funcaoCondicional A função que será executada com cada valor.
942
+ * @returns {Promise<boolean>} Verdadeiro, se todos os valores do iterável forem verdadeiros ou se satisfazerem a função condicional.
885
943
  */
886
- async function todos_em_condicao(interpretador, iteravel, funcaoCondicional) {
887
- const simboloChamada = {
888
- linha: interpretador.linhaDeclaracaoAtual,
889
- hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
890
- };
891
- const valorIteravel = interpretador.resolverValor(iteravel);
892
- const ehObjetoOuDicionario = valorIteravel && typeof valorIteravel === 'object' && !Array.isArray(valorIteravel);
893
- const ehIteravelNativo = valorIteravel && typeof valorIteravel[Symbol.iterator] === 'function';
894
- if (!ehIteravelNativo && !ehObjetoOuDicionario) {
895
- return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao({
944
+ async function todos(interpretador, iteravel, funcaoCondicional) {
945
+ if (iteravel === null || iteravel === undefined) {
946
+ throw new excecoes_1.ErroEmTempoDeExecucao({
947
+ linha: interpretador.linhaDeclaracaoAtual,
896
948
  hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
949
+ }, 'Parâmetro inválido. O parâmetro da função todos() não pode ser nulo.');
950
+ }
951
+ const valorIteravel = interpretador.resolverValor(iteravel);
952
+ const itens = new iteravel_1.Iteravel(valorIteravel).elementos;
953
+ if (itens.length === 0 &&
954
+ valorIteravel !== '' &&
955
+ !Array.isArray(valorIteravel) &&
956
+ !(valorIteravel?.constructor === construtos_1.TuplaN)) {
957
+ throw new excecoes_1.ErroEmTempoDeExecucao({
897
958
  linha: interpretador.linhaDeclaracaoAtual,
898
- }, 'Parâmetro inválido. O primeiro parâmetro deve ser um iterável.'));
959
+ hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
960
+ }, 'Parâmetro inválido. O primeiro parâmetro deve ser um iterável.');
899
961
  }
900
962
  const valorFuncao = interpretador.resolverValor(funcaoCondicional);
901
- const naoEhUmaFuncao = !(valorFuncao instanceof estruturas_1.DeleguaFuncao || valorFuncao instanceof funcao_padrao_1.FuncaoPadrao);
902
- if (!valorFuncao || naoEhUmaFuncao) {
903
- return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao({
904
- hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
905
- linha: interpretador.linhaDeclaracaoAtual,
906
- }, 'Parâmetro inválido. O segundo parâmetro deve ser uma função.'));
963
+ if (valorFuncao) {
964
+ const ehUmaFuncao = valorFuncao instanceof estruturas_1.DeleguaFuncao ||
965
+ valorFuncao instanceof funcao_padrao_1.FuncaoPadrao;
966
+ if (!valorFuncao || !ehUmaFuncao) {
967
+ throw new excecoes_1.ErroEmTempoDeExecucao({
968
+ linha: interpretador.linhaDeclaracaoAtual,
969
+ hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
970
+ }, 'Parâmetro inválido. O segundo parâmetro deve ser uma função.');
971
+ }
907
972
  }
908
- const itens = ehIteravelNativo ? valorIteravel : Object.values(valorIteravel);
909
- for (const valor of itens) {
910
- const resultadoChamada = await valorFuncao.chamar(interpretador, [valor], simboloChamada);
911
- const resultadoResolvido = interpretador.resolverValor(resultadoChamada);
973
+ for (const item of itens) {
974
+ let resultado;
975
+ if (valorFuncao) {
976
+ const resultadoChamada = await valorFuncao.chamar(interpretador, [item], {
977
+ linha: interpretador.linhaDeclaracaoAtual,
978
+ hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
979
+ });
980
+ if (resultadoChamada !== null && resultadoChamada !== undefined) {
981
+ if (resultadoChamada.hasOwnProperty('valorRetornado')) {
982
+ resultado = resultadoChamada.valorRetornado instanceof quebras_1.RetornoQuebra
983
+ ? resultadoChamada.valorRetornado.valor
984
+ : resultadoChamada.valorRetornado;
985
+ }
986
+ else if (resultadoChamada instanceof quebras_1.RetornoQuebra) {
987
+ resultado = resultadoChamada.valor;
988
+ }
989
+ else {
990
+ resultado = resultadoChamada;
991
+ }
992
+ }
993
+ }
994
+ else {
995
+ resultado = item;
996
+ }
997
+ const resultadoResolvido = interpretador.resolverValor(resultado);
912
998
  if (!interpretador.eVerdadeiro(resultadoResolvido))
913
999
  return false;
914
1000
  }
915
1001
  return true;
916
1002
  }
917
1003
  /**
918
- * Transforma um vetor de elementos em uma tupla de N elementos, sendo N a
919
- * largura do vetor.
1004
+ * Transforma um iteravel em uma tupla.
920
1005
  * @param {InterpretadorInterface} interpretador A instância do interpretador.
921
- * @param {VariavelInterface | any[]} vetor O vetor.
1006
+ * @param {any} iteravel O iterável a ser convertido.
922
1007
  * @returns A tupla resolvida.
923
1008
  */
924
- async function tupla(interpretador, vetor) {
925
- const valorVetor = interpretador.resolverValor(vetor);
926
- if (!Array.isArray(valorVetor)) {
927
- return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao({
1009
+ async function tupla(interpretador, iteravel) {
1010
+ const valorIteravel = interpretador.resolverValor(iteravel);
1011
+ const itens = new iteravel_1.Iteravel(valorIteravel).elementos;
1012
+ if (itens.length === 0 &&
1013
+ valorIteravel !== '' &&
1014
+ !(valorIteravel instanceof construtos_1.Vetor) &&
1015
+ !Array.isArray(valorIteravel)) {
1016
+ throw new excecoes_1.ErroEmTempoDeExecucao({
928
1017
  hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
929
1018
  linha: interpretador.linhaDeclaracaoAtual,
930
- }, 'Argumento de função nativa `tupla` não parece ser um vetor.'));
1019
+ }, 'O argumento passado para a função `tupla()` deve ser iterável.');
931
1020
  }
932
- const elementos = valorVetor.map((item) => {
1021
+ const itensDaTupla = itens.map(item => {
933
1022
  const valorResolvido = interpretador.resolverValor(item);
934
1023
  const literal = new construtos_1.Literal(interpretador.hashArquivoDeclaracaoAtual, interpretador.linhaDeclaracaoAtual, valorResolvido);
935
1024
  if (typeof valorResolvido === 'string') {
@@ -937,17 +1026,41 @@ async function tupla(interpretador, vetor) {
937
1026
  }
938
1027
  return literal;
939
1028
  });
940
- return new construtos_1.TuplaN(interpretador.hashArquivoDeclaracaoAtual, interpretador.linhaDeclaracaoAtual, elementos);
1029
+ return new construtos_1.TuplaN(interpretador.hashArquivoDeclaracaoAtual, interpretador.linhaDeclaracaoAtual, itensDaTupla);
1030
+ }
1031
+ async function unico(interpretador, iteravel) {
1032
+ const valorIteravel = interpretador.resolverValor(iteravel);
1033
+ const itens = new iteravel_1.Iteravel(valorIteravel).elementos;
1034
+ if (itens.length === 0 &&
1035
+ valorIteravel !== '' &&
1036
+ !(valorIteravel?.constructor === construtos_1.TuplaN) &&
1037
+ !Array.isArray(valorIteravel)) {
1038
+ throw new excecoes_1.ErroEmTempoDeExecucao({
1039
+ hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
1040
+ linha: interpretador.linhaDeclaracaoAtual,
1041
+ }, 'O argumento passado para a função `unico()` deve ser iterável.');
1042
+ }
1043
+ return [...new Set(itens)];
941
1044
  }
942
- async function vetor(interpretador, tupla) {
943
- const objetoTupla = interpretador.resolverValor(tupla);
944
- if (!(objetoTupla instanceof construtos_1.TuplaN)) {
945
- return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao({
1045
+ ;
1046
+ /**
1047
+ * Transforma um iteravel em um vetor.
1048
+ * @param {InterpretadorInterface} interpretador A instância do interpretador.
1049
+ * @param {any} iteravel O iterável a ser convertido.
1050
+ * @returns O vetor resolvido.
1051
+ */
1052
+ async function vetor(interpretador, iteravel) {
1053
+ const valorIteravel = interpretador.resolverValor(iteravel);
1054
+ const itens = new iteravel_1.Iteravel(valorIteravel).elementos;
1055
+ if (itens.length === 0 &&
1056
+ valorIteravel !== '' &&
1057
+ !(valorIteravel?.constructor === construtos_1.TuplaN) &&
1058
+ !Array.isArray(valorIteravel)) {
1059
+ throw new excecoes_1.ErroEmTempoDeExecucao({
946
1060
  hashArquivo: interpretador.hashArquivoDeclaracaoAtual,
947
1061
  linha: interpretador.linhaDeclaracaoAtual,
948
- }, 'Argumento de função nativa `vetor` não parece ser uma tupla.'));
1062
+ }, 'O argumento passado para a função `vetor()` deve ser iterável.');
949
1063
  }
950
- const resultado = objetoTupla.elementos.map((elemento) => interpretador.resolverValor(elemento));
951
- return Promise.resolve(resultado);
1064
+ return itens.map(elemento => interpretador.resolverValor(elemento));
952
1065
  }
953
1066
  //# sourceMappingURL=biblioteca-global.js.map