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

Duplicated label not throw erros and remove line #24

Open
guissalustiano opened this issue Mar 15, 2023 · 3 comments · May be fixed by #25
Open

Duplicated label not throw erros and remove line #24

guissalustiano opened this issue Mar 15, 2023 · 3 comments · May be fixed by #25

Comments

@guissalustiano
Copy link
Collaborator

LABEL  LV 0
LABEL LV 5

vira

0000 5005

sumindo com a linha e n mandando nenhuma mensagem de erro.

O comportamento desejado deveria ser lançar um erro

@tomaz-suller
Copy link
Collaborator

Apesar de não conseguir reproduzir a issue exatamente como descrito, o montador deveria emitir uma mensagem de erro mesmo, e ele não emite, então essa parte consegui reproduzir.


Só pra deixar registrado, o comportamento atual tentando montar o seguinte exemplo:

FOO LV /0
FOO LV /1
BAR LD FOO

é

$ cargo run --bin mvn-cli -- assemble -i example.asm
    Finished dev [unoptimized + debuginfo] target(s) in 0.03s
     Running `target/debug/mvn-cli assemble -i example.asm`
0000 3000
0002 3005
0004 8002

@tomaz-suller
Copy link
Collaborator

O conserto vai ser adicionar mais um caso de validação no validator.rs do montador, e claro testes pra garantir que a gente não regrida pra esse caso de novo.

Deve ser bem direto.

@tomaz-suller
Copy link
Collaborator

Na verdade vai ser mais complexo do que isso porque hoje só existem validações de linha, não validações de arquivo todo:

pub fn validate<'a, 'b>(
program: &'a AddressedProgram<'b>,
label_map: &'a LabelMap<'b>,
) -> ValidatorResult<'b> {
for line in program.lines.iter() {
let validator = LineValidator::new(&line.line, &line.address, label_map);
validator.validate()?;
}
Ok(())
}
struct LineValidator<'a, 'b> {
line: &'a Line<'b>,
address: &'a Address,
label_map: &'a LabelMap<'b>,
}

Vamos precisar implementar um ProgramValidator também para verificar essas e outras condições de erro que só conseguimos detectar analisando o arquivo todo (como #19)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants