liquido
Version:
Conjunto de ferramentas para desenvolvimento de aplicações para a internet 100% em português
106 lines • 4.25 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.inferirTipoVariavel = inferirTipoVariavel;
const inferenciador_1 = require("@designliquido/delegua/inferenciador");
const primitivos_1 = __importDefault(require("@designliquido/delegua/tipos-de-dados/primitivos"));
const delegua_1 = __importDefault(require("@designliquido/delegua/tipos-de-dados/delegua"));
const delegua_2 = __importDefault(require("@designliquido/delegua/tipos-de-simbolos/delegua"));
// TODO: Depreciar na versão 0.50.1 de Delégua.
function inferirTipoVariavel(variavel) {
if (variavel === null || variavel === undefined) {
return 'nulo';
}
const tipo = variavel.constructor ? variavel.constructor.name : typeof variavel;
switch (tipo) {
case 'String':
case 'string':
return 'texto';
case 'Number':
case 'number':
return 'número';
case 'bigint':
return 'longo';
case 'Boolean':
case 'boolean':
return 'lógico';
case 'undefined':
return 'nulo';
case 'Object':
case 'object':
if (variavel === null)
return 'nulo';
return 'dicionário';
case 'Array':
case 'Vetor':
return inferirVetor(variavel);
case 'DeleguaFuncao':
return 'função';
case 'DeleguaModulo':
return 'módulo';
case 'Classe':
return 'objeto';
case 'Simbolo': // TODO: Repensar.
const simbolo = variavel;
switch (simbolo.tipo) {
case primitivos_1.default.BOOLEANO:
return inferenciador_1.TipoNativoSimbolo.BOOLEANO;
case delegua_2.default.ENQUANTO:
return inferenciador_1.TipoNativoSimbolo.ENQUANTO;
case delegua_2.default.ESCREVA:
return inferenciador_1.TipoNativoSimbolo.ESCREVA;
case delegua_2.default.FUNCAO:
case delegua_2.default.FUNÇÃO:
return inferenciador_1.TipoNativoSimbolo.FUNCAO;
case delegua_2.default.LEIA:
return inferenciador_1.TipoNativoSimbolo.LEIA;
case delegua_2.default.PARA:
return inferenciador_1.TipoNativoSimbolo.PARA;
case delegua_2.default.RETORNA:
return inferenciador_1.TipoNativoSimbolo.RETORNA;
case delegua_2.default.SE:
return inferenciador_1.TipoNativoSimbolo.SE;
case primitivos_1.default.TEXTO:
return inferenciador_1.TipoNativoSimbolo.TEXTO;
case delegua_1.default.VAZIO:
return inferenciador_1.TipoNativoSimbolo.VAZIO;
}
case 'function':
case 'FuncaoPadrao':
return 'função';
case 'symbol':
return 'símbolo';
}
}
// TODO: Depreciar na versão 0.50.1 de Delégua.
function inferirVetor(vetor) {
const tiposEmVetor = new Set(vetor.map((elemento) => elemento === null || elemento === undefined ? typeof elemento : elemento.constructor.name));
if (tiposEmVetor.size > 1) {
return 'vetor';
}
const tipoVetor = tiposEmVetor.values().next().value;
switch (tipoVetor) {
case 'bigint':
return 'longo[]';
case 'boolean':
return 'lógico[]';
case 'number':
return 'número[]';
case 'string':
return 'texto[]';
case 'object':
const tiposObjetosEmVetor = new Set(vetor.map((elemento) => elemento.tipo));
if (tiposObjetosEmVetor.size > 1) {
return 'vetor';
}
return `${tiposObjetosEmVetor.values().next().value}[]`;
case 'Literal':
// TODO: Não sei se é seguro inferir pelo primeiro valor do vetor.
return `${vetor[0].tipo}[]`;
default:
return 'vetor';
}
}
//# sourceMappingURL=inferenciador-liquido.js.map