|
- # E03-S01..E03-S04: build the parser test PRG and a fresh D81 holding every grammar,
- # parser, and semantic fixture. The fixture order must match tests/parser/parser-test.s.
- [CmdletBinding()]
- param()
-
- $ErrorActionPreference = "Stop"
- $project = Split-Path $PSScriptRoot -Parent
- Import-Module (Join-Path $PSScriptRoot "lib\Nova128Test.psm1") -Force
- $out = Join-Path $project "build\parser-test"
- New-Item -ItemType Directory -Force -Path $out | Out-Null
-
- $g = Join-Path $project "tests\grammar"
- $p = Join-Path $project "tests\parser"
- $t = Join-Path $project "tests\semantic"
- # disk name -> @(source, group, expect file)
- $script:ParserFixtures = [ordered]@{
- "minimal.n8" = @("$g\accepted\minimal.n8", "accepted", $null)
- "decls.n8" = @("$g\accepted\decls.n8", "accepted", $null)
- "arrays.n8" = @("$g\accepted\arrays.n8", "accepted", $null)
- "exprs.n8" = @("$g\accepted\exprs.n8", "accepted", $null)
- "forward.n8" = @("$g\accepted\forward.n8", "accepted", $null)
- "nulls.n8" = @("$g\accepted\nulls.n8", "accepted", $null)
- "stmts.n8" = @("$g\accepted\stmts.n8", "accepted", $null)
- "badchar.n8" = @("$g\rejected\bad_char.n8", "rejected", "$g\rejected\bad_char.expect")
- "badclass.n8" = @("$g\rejected\bad_class.n8", "rejected", "$g\rejected\bad_class.expect")
- "badiface.n8" = @("$g\rejected\bad_iface.n8", "rejected", "$g\rejected\bad_iface.expect")
- "badmethod.n8" = @("$g\rejected\bad_method.n8", "rejected", "$g\rejected\bad_method.expect")
- "dupdecl.n8" = @("$g\rejected\dup_decl.n8", "rejected", "$g\rejected\dup_decl.expect")
- "ifacebody.n8" = @("$g\rejected\iface_body.n8", "rejected", "$g\rejected\iface_body.expect")
- "linecont.n8" = @("$g\rejected\line_cont.n8", "rejected", "$g\rejected\line_cont.expect")
- "missclass.n8" = @("$g\rejected\miss_class.n8", "rejected", "$g\rejected\miss_class.expect")
- "missend.n8" = @("$g\rejected\miss_end.n8", "rejected", "$g\rejected\miss_end.expect")
- "missif.n8" = @("$g\rejected\miss_if.n8", "rejected", "$g\rejected\miss_if.expect")
- "missmeth.n8" = @("$g\rejected\miss_meth.n8", "rejected", "$g\rejected\miss_meth.expect")
- "multistmt.n8" = @("$g\rejected\multi_stmt.n8", "rejected", "$g\rejected\multi_stmt.expect")
- "order.n8" = @("$p\order.n8", "exact", "$p\order.expect")
- "unknown.n8" = @("$p\unknown.n8", "exact", "$p\unknown.expect")
- "recover.n8" = @("$p\recover.n8", "exact", "$p\recover.expect")
- "noprog.n8" = @("$p\noprog.n8", "exact", "$p\noprog.expect")
- "eofclass.n8" = @("$p\eofclass.n8", "exact", "$p\eofclass.expect")
- "members.n8" = @("$p\members.n8", "exact", "$p\members.expect")
- "lifecycle.n8" = @("$p\lifecycle.n8", "exact", "$p\lifecycle.expect")
- "scopes.n8" = @("$p\scopes.n8", "exact", "$p\scopes.expect")
- "private.n8" = @("$p\private.n8", "exact", "$p\private.expect")
- "prec.n8" = @("$p\prec.n8", "accepted", "$p\prec.expect")
- "forms.n8" = @("$p\forms.n8", "accepted", $null)
- "syntax.n8" = @("$p\syntax.n8", "exact", "$p\syntax.expect")
- "typesok.n8" = @("$t\types_ok.n8", "accepted", $null)
- "convert.n8" = @("$t\convert.n8", "exact", "$t\convert.expect")
- "refs.n8" = @("$t\refs.n8", "exact", "$t\refs.expect")
- "ops.n8" = @("$t\ops.n8", "exact", "$t\ops.expect")
- "uses.n8" = @("$t\uses.n8", "exact", "$t\uses.expect")
- "calls.n8" = @("$t\calls.n8", "exact", "$t\calls.expect")
- "layout.n8" = @("$t\layout.n8", "layout", "$t\layout.expect")
- "toobig.n8" = @("$t\too_big.n8", "rejected", "$t\too_big.expect")
- "interfaces.n8" = @("$t\interfaces.n8", "iface", "$t\interfaces.expect")
- "ifacebad.n8" = @("$t\iface_bad.n8", "exact", "$t\iface_bad.expect")
- "unresolved.n8" = @("$p\unresolved.n8", "exact", "$p\unresolved.expect")
- }
-
- $link = Invoke-Nova128Link -Name "parser-test" -BuildDir $out `
- -Config (Join-Path $project "cfg\compiler.cfg") -Sources @(
- (Join-Path $project "src\compiler\mmu.s"),
- (Join-Path $project "src\compiler\diskio.s"),
- (Join-Path $project "src\compiler\source.s"),
- (Join-Path $project "src\compiler\lexer.s"),
- (Join-Path $project "src\compiler\names.s"),
- (Join-Path $project "src\compiler\diagnostics.s"),
- (Join-Path $project "src\compiler\parser.s"),
- (Join-Path $project "src\compiler\codegen.s"),
- (Join-Path $project "src\compiler\flow.s"),
- (Join-Path $project "src\compiler\members.s"),
- (Join-Path $project "src\compiler\sizing.s"),
- (Join-Path $project "src\compiler\emit.s"),
- (Join-Path $project "src\compiler\interfaces.s"),
- (Join-Path $project "src\compiler\types.s"),
- (Join-Path $project "tests\parser\parser-test.s"))
- if ((Get-Nova128Label $link.Labels "test_entry") -ne 0x1C0D) { throw "test_entry is not at `$1C0D" }
-
- $files = @(@{ Name = "parser-test"; Path = $link.Program; Type = "prg" })
- foreach ($name in $ParserFixtures.Keys) {
- $pet = Join-Path $out ($name -replace '\.n8$', '.pet')
- [IO.File]::WriteAllBytes($pet, (ConvertTo-Nova128Petscii (Get-Content -Raw -LiteralPath $ParserFixtures[$name][0])))
- $files += @{ Name = $name; Path = $pet; Type = "seq" }
- }
- New-Nova128Disk -Path (Join-Path $out "parser-test.d81") -Files $files
- Write-Host ("built {0}; {1} fixtures on parser-test.d81" -f $link.Program, $ParserFixtures.Count)
|