您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

88 行
5.3KB

  1. # E03-S01..E03-S04: build the parser test PRG and a fresh D81 holding every grammar,
  2. # parser, and semantic 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. $t = Join-Path $project "tests\semantic"
  13. # disk name -> @(source, group, expect file)
  14. $script:ParserFixtures = [ordered]@{
  15. "minimal.n8" = @("$g\accepted\minimal.n8", "accepted", $null)
  16. "decls.n8" = @("$g\accepted\decls.n8", "accepted", $null)
  17. "arrays.n8" = @("$g\accepted\arrays.n8", "accepted", $null)
  18. "exprs.n8" = @("$g\accepted\exprs.n8", "accepted", $null)
  19. "forward.n8" = @("$g\accepted\forward.n8", "accepted", $null)
  20. "nulls.n8" = @("$g\accepted\nulls.n8", "accepted", $null)
  21. "stmts.n8" = @("$g\accepted\stmts.n8", "accepted", $null)
  22. "badchar.n8" = @("$g\rejected\bad_char.n8", "rejected", "$g\rejected\bad_char.expect")
  23. "badclass.n8" = @("$g\rejected\bad_class.n8", "rejected", "$g\rejected\bad_class.expect")
  24. "badiface.n8" = @("$g\rejected\bad_iface.n8", "rejected", "$g\rejected\bad_iface.expect")
  25. "badmethod.n8" = @("$g\rejected\bad_method.n8", "rejected", "$g\rejected\bad_method.expect")
  26. "dupdecl.n8" = @("$g\rejected\dup_decl.n8", "rejected", "$g\rejected\dup_decl.expect")
  27. "ifacebody.n8" = @("$g\rejected\iface_body.n8", "rejected", "$g\rejected\iface_body.expect")
  28. "linecont.n8" = @("$g\rejected\line_cont.n8", "rejected", "$g\rejected\line_cont.expect")
  29. "missclass.n8" = @("$g\rejected\miss_class.n8", "rejected", "$g\rejected\miss_class.expect")
  30. "missend.n8" = @("$g\rejected\miss_end.n8", "rejected", "$g\rejected\miss_end.expect")
  31. "missif.n8" = @("$g\rejected\miss_if.n8", "rejected", "$g\rejected\miss_if.expect")
  32. "missmeth.n8" = @("$g\rejected\miss_meth.n8", "rejected", "$g\rejected\miss_meth.expect")
  33. "multistmt.n8" = @("$g\rejected\multi_stmt.n8", "rejected", "$g\rejected\multi_stmt.expect")
  34. "order.n8" = @("$p\order.n8", "exact", "$p\order.expect")
  35. "unknown.n8" = @("$p\unknown.n8", "exact", "$p\unknown.expect")
  36. "recover.n8" = @("$p\recover.n8", "exact", "$p\recover.expect")
  37. "noprog.n8" = @("$p\noprog.n8", "exact", "$p\noprog.expect")
  38. "eofclass.n8" = @("$p\eofclass.n8", "exact", "$p\eofclass.expect")
  39. "members.n8" = @("$p\members.n8", "exact", "$p\members.expect")
  40. "lifecycle.n8" = @("$p\lifecycle.n8", "exact", "$p\lifecycle.expect")
  41. "scopes.n8" = @("$p\scopes.n8", "exact", "$p\scopes.expect")
  42. "private.n8" = @("$p\private.n8", "exact", "$p\private.expect")
  43. "prec.n8" = @("$p\prec.n8", "accepted", "$p\prec.expect")
  44. "forms.n8" = @("$p\forms.n8", "accepted", $null)
  45. "syntax.n8" = @("$p\syntax.n8", "exact", "$p\syntax.expect")
  46. "typesok.n8" = @("$t\types_ok.n8", "accepted", $null)
  47. "convert.n8" = @("$t\convert.n8", "exact", "$t\convert.expect")
  48. "refs.n8" = @("$t\refs.n8", "exact", "$t\refs.expect")
  49. "ops.n8" = @("$t\ops.n8", "exact", "$t\ops.expect")
  50. "uses.n8" = @("$t\uses.n8", "exact", "$t\uses.expect")
  51. "calls.n8" = @("$t\calls.n8", "exact", "$t\calls.expect")
  52. "layout.n8" = @("$t\layout.n8", "layout", "$t\layout.expect")
  53. "toobig.n8" = @("$t\too_big.n8", "rejected", "$t\too_big.expect")
  54. "interfaces.n8" = @("$t\interfaces.n8", "iface", "$t\interfaces.expect")
  55. "ifacebad.n8" = @("$t\iface_bad.n8", "exact", "$t\iface_bad.expect")
  56. "unresolved.n8" = @("$p\unresolved.n8", "exact", "$p\unresolved.expect")
  57. }
  58. $link = Invoke-Nova128Link -Name "parser-test" -BuildDir $out `
  59. -Config (Join-Path $project "cfg\compiler.cfg") -Sources @(
  60. (Join-Path $project "src\compiler\mmu.s"),
  61. (Join-Path $project "src\compiler\diskio.s"),
  62. (Join-Path $project "src\compiler\source.s"),
  63. (Join-Path $project "src\compiler\lexer.s"),
  64. (Join-Path $project "src\compiler\names.s"),
  65. (Join-Path $project "src\compiler\diagnostics.s"),
  66. (Join-Path $project "src\compiler\parser.s"),
  67. (Join-Path $project "src\compiler\codegen.s"),
  68. (Join-Path $project "src\compiler\flow.s"),
  69. (Join-Path $project "src\compiler\members.s"),
  70. (Join-Path $project "src\compiler\sizing.s"),
  71. (Join-Path $project "src\compiler\emit.s"),
  72. (Join-Path $project "src\compiler\interfaces.s"),
  73. (Join-Path $project "src\compiler\types.s"),
  74. (Join-Path $project "tests\parser\parser-test.s"))
  75. if ((Get-Nova128Label $link.Labels "test_entry") -ne 0x1C0D) { throw "test_entry is not at `$1C0D" }
  76. $files = @(@{ Name = "parser-test"; Path = $link.Program; Type = "prg" })
  77. foreach ($name in $ParserFixtures.Keys) {
  78. $pet = Join-Path $out ($name -replace '\.n8$', '.pet')
  79. [IO.File]::WriteAllBytes($pet, (ConvertTo-Nova128Petscii (Get-Content -Raw -LiteralPath $ParserFixtures[$name][0])))
  80. $files += @{ Name = $name; Path = $pet; Type = "seq" }
  81. }
  82. New-Nova128Disk -Path (Join-Path $out "parser-test.d81") -Files $files
  83. Write-Host ("built {0}; {1} fixtures on parser-test.d81" -f $link.Program, $ParserFixtures.Count)

Powered by TurnKey Linux.