Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.

62 řádky
3.7KB

  1. # E03-S01: build the parser test PRG and a fresh D81 holding every grammar and
  2. # parser fixture. The fixture order must match tests/parser/parser-test.s.
  3. [CmdletBinding()]
  4. param()
  5. $ErrorActionPreference = "Stop"
  6. $project = Split-Path $PSScriptRoot -Parent
  7. Import-Module (Join-Path $PSScriptRoot "lib\Nova128Test.psm1") -Force
  8. $out = Join-Path $project "build\parser-test"
  9. New-Item -ItemType Directory -Force -Path $out | Out-Null
  10. $g = Join-Path $project "tests\grammar"
  11. $p = Join-Path $project "tests\parser"
  12. # disk name -> @(source, group, expect file)
  13. $script:ParserFixtures = [ordered]@{
  14. "minimal.n8" = @("$g\accepted\minimal.n8", "accepted", $null)
  15. "decls.n8" = @("$g\accepted\decls.n8", "accepted", $null)
  16. "arrays.n8" = @("$g\accepted\arrays.n8", "accepted", $null)
  17. "exprs.n8" = @("$g\accepted\exprs.n8", "accepted", $null)
  18. "forward.n8" = @("$g\accepted\forward.n8", "accepted", $null)
  19. "nulls.n8" = @("$g\accepted\nulls.n8", "accepted", $null)
  20. "stmts.n8" = @("$g\accepted\stmts.n8", "accepted", $null)
  21. "badchar.n8" = @("$g\rejected\bad_char.n8", "rejected", "$g\rejected\bad_char.expect")
  22. "badclass.n8" = @("$g\rejected\bad_class.n8", "rejected", "$g\rejected\bad_class.expect")
  23. "badiface.n8" = @("$g\rejected\bad_iface.n8", "rejected", "$g\rejected\bad_iface.expect")
  24. "badmethod.n8" = @("$g\rejected\bad_method.n8", "rejected", "$g\rejected\bad_method.expect")
  25. "dupdecl.n8" = @("$g\rejected\dup_decl.n8", "rejected", "$g\rejected\dup_decl.expect")
  26. "ifacebody.n8" = @("$g\rejected\iface_body.n8", "rejected", "$g\rejected\iface_body.expect")
  27. "linecont.n8" = @("$g\rejected\line_cont.n8", "pending", "$g\rejected\line_cont.expect")
  28. "missclass.n8" = @("$g\rejected\miss_class.n8", "rejected", "$g\rejected\miss_class.expect")
  29. "missend.n8" = @("$g\rejected\miss_end.n8", "rejected", "$g\rejected\miss_end.expect")
  30. "missif.n8" = @("$g\rejected\miss_if.n8", "rejected", "$g\rejected\miss_if.expect")
  31. "missmeth.n8" = @("$g\rejected\miss_meth.n8", "rejected", "$g\rejected\miss_meth.expect")
  32. "multistmt.n8" = @("$g\rejected\multi_stmt.n8", "pending", "$g\rejected\multi_stmt.expect")
  33. "order.n8" = @("$p\order.n8", "exact", "$p\order.expect")
  34. "unknown.n8" = @("$p\unknown.n8", "exact", "$p\unknown.expect")
  35. "recover.n8" = @("$p\recover.n8", "exact", "$p\recover.expect")
  36. "noprog.n8" = @("$p\noprog.n8", "exact", "$p\noprog.expect")
  37. "eofclass.n8" = @("$p\eofclass.n8", "exact", "$p\eofclass.expect")
  38. }
  39. $link = Invoke-Nova128Link -Name "parser-test" -BuildDir $out `
  40. -Config (Join-Path $project "cfg\compiler.cfg") -Sources @(
  41. (Join-Path $project "src\compiler\mmu.s"),
  42. (Join-Path $project "src\compiler\diskio.s"),
  43. (Join-Path $project "src\compiler\source.s"),
  44. (Join-Path $project "src\compiler\lexer.s"),
  45. (Join-Path $project "src\compiler\names.s"),
  46. (Join-Path $project "src\compiler\diagnostics.s"),
  47. (Join-Path $project "src\compiler\parser.s"),
  48. (Join-Path $project "tests\parser\parser-test.s"))
  49. if ((Get-Nova128Label $link.Labels "test_entry") -ne 0x1C0D) { throw "test_entry is not at `$1C0D" }
  50. $files = @(@{ Name = "parser-test"; Path = $link.Program; Type = "prg" })
  51. foreach ($name in $ParserFixtures.Keys) {
  52. $pet = Join-Path $out ($name -replace '\.n8$', '.pet')
  53. [IO.File]::WriteAllBytes($pet, (ConvertTo-Nova128Petscii (Get-Content -Raw -LiteralPath $ParserFixtures[$name][0])))
  54. $files += @{ Name = $name; Path = $pet; Type = "seq" }
  55. }
  56. New-Nova128Disk -Path (Join-Path $out "parser-test.d81") -Files $files
  57. Write-Host ("built {0}; {1} fixtures on parser-test.d81" -f $link.Program, $ParserFixtures.Count)

Powered by TurnKey Linux.