Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Considerações quanto a vetores e variaveis #4

Open
GChicha opened this issue Nov 2, 2018 · 1 comment
Open

Considerações quanto a vetores e variaveis #4

GChicha opened this issue Nov 2, 2018 · 1 comment
Labels
question Further information is requested

Comments

@GChicha
Copy link
Collaborator

GChicha commented Nov 2, 2018

Estou analisando a possibilidade de tratar todas as variaveis como vetores, sendo elas de um unico elemento, só para diminuir o tamanho do codigo mesmo.

Alem disso, se não estou enganado o compilador sempre sabe o tamanho do vetor em tempo de compilação, com isso estou pensando em simplificar e sumir com aquele ArrayRef já que náo precisamos, só precisaremos achar um jeito de carregar a informação do tamanho até a função, isso até simplifica aquela discussão de vetor multidimensional, já que não precisaremos nem mesmo da ultima dimensão para poder usar isso.

@GChicha
Copy link
Collaborator Author

GChicha commented Nov 2, 2018

Para tentar tornar isso umm pouco mais prático:

enum Type {
  Integer,
  Boolean,
  Agg { type: Type, length: usize },
  LiteralString // Ainda não sei lidar
}

enum Symbol {
  Variable { value: LLVMValueRef, type: Type },
  Function { value: LLVMValueRef, return_type: Option<Type>, args_type: Vec<Type> }
}

Penso tambem que a expressão vai ter de retornar um tipo para tornar mais simples a verificação da validade das operações

id1 + 3 //Valido se id == Symbol {..., type: Type::Agg{ type: Type::Int, length: 1 }
sort(vetor) // Valido se vetor == Symbol { ..., type: Type::Agg{ type: Type::Int, length: NUM } }
true + 4 // Invalido?? não sei se seria estranho mas fazer 4 e true retornar Symbol tbm

let foo : int;

foo = add(3, 4) // No caso como symbol retorna o return_type como Type::Agg { type: Type::Int, length: 1 }

expr + expr

Se retornarmos expr como Symbol talvez seja suficiente

@GChicha GChicha added the question Further information is requested label Nov 2, 2018
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
question Further information is requested
Projects
None yet
Development

No branches or pull requests

1 participant