mirror of
https://github.com/irmen/prog8.git
synced 2024-11-25 19:31:36 +00:00
allow more curly brace styles
This commit is contained in:
parent
eab63ecc6c
commit
0a83b51e00
@ -151,7 +151,7 @@ class TestModuleImporter: FunSpec({
|
||||
shouldThrow<ParseError> { act() }.let {
|
||||
it.position.file shouldBe SourceCode.relative(srcPath).toString()
|
||||
withClue("line; should be 1-based") { it.position.line shouldBe 2 }
|
||||
withClue("startCol; should be 0-based") { it.position.startCol shouldBe 6 }
|
||||
withClue("startCol; should be 0-based") { it.position.startCol shouldBe 4 }
|
||||
withClue("endCol; should be 0-based") { it.position.endCol shouldBe 6 }
|
||||
}
|
||||
}
|
||||
@ -171,7 +171,7 @@ class TestModuleImporter: FunSpec({
|
||||
shouldThrow<ParseError> { act() }.let {
|
||||
it.position.file shouldBe SourceCode.relative(imported).toString()
|
||||
withClue("line; should be 1-based") { it.position.line shouldBe 2 }
|
||||
withClue("startCol; should be 0-based") { it.position.startCol shouldBe 6 }
|
||||
withClue("startCol; should be 0-based") { it.position.startCol shouldBe 4 }
|
||||
withClue("endCol; should be 0-based") { it.position.endCol shouldBe 6 }
|
||||
}
|
||||
}
|
||||
@ -231,7 +231,7 @@ class TestModuleImporter: FunSpec({
|
||||
importer.importImplicitLibraryModule(srcPath.nameWithoutExtension) }.let {
|
||||
it.position.file shouldBe SourceCode.relative(srcPath).toString()
|
||||
withClue("line; should be 1-based") { it.position.line shouldBe 2 }
|
||||
withClue("startCol; should be 0-based") { it.position.startCol shouldBe 6 }
|
||||
withClue("startCol; should be 0-based") { it.position.startCol shouldBe 4 }
|
||||
withClue("endCol; should be 0-based") { it.position.endCol shouldBe 6 }
|
||||
}
|
||||
}
|
||||
@ -253,7 +253,7 @@ class TestModuleImporter: FunSpec({
|
||||
act() }.let {
|
||||
it.position.file shouldBe SourceCode.relative(imported).toString()
|
||||
withClue("line; should be 1-based") { it.position.line shouldBe 2 }
|
||||
withClue("startCol; should be 0-based") { it.position.startCol shouldBe 6 }
|
||||
withClue("startCol; should be 0-based") { it.position.startCol shouldBe 4 }
|
||||
withClue("endCol; should be 0-based") { it.position.endCol shouldBe 6 }
|
||||
}
|
||||
}
|
||||
|
@ -274,7 +274,7 @@ class TestProg8Parser: FunSpec( {
|
||||
val path = assumeReadableFile(fixturesDir, "ast_file_with_syntax_error.p8")
|
||||
|
||||
val e = shouldThrow<ParseError> { parseModule(SourceCode.File(path)) }
|
||||
assertPosition(e.position, SourceCode.relative(path).toString(), 2, 6)
|
||||
assertPosition(e.position, SourceCode.relative(path).toString(), 2, 4)
|
||||
}
|
||||
|
||||
test("of Module parsed from a string") {
|
||||
|
@ -275,5 +275,50 @@ main {
|
||||
errors.errors[0] shouldContain "invalid statement in unroll loop"
|
||||
errors.errors[1] shouldContain "invalid statement in unroll loop"
|
||||
}
|
||||
|
||||
test("various curly brace styles") {
|
||||
val src="""
|
||||
main
|
||||
{
|
||||
sub start()
|
||||
{
|
||||
ubyte variable=55
|
||||
when variable
|
||||
{
|
||||
33 -> cx16.r0++
|
||||
else -> cx16.r1++
|
||||
}
|
||||
|
||||
if variable {
|
||||
cx16.r0++
|
||||
} else {
|
||||
cx16.r1++
|
||||
}
|
||||
|
||||
if variable { cx16.r0++ }
|
||||
else { cx16.r1++ }
|
||||
|
||||
if variable
|
||||
{
|
||||
cx16.r0++
|
||||
}
|
||||
else
|
||||
{
|
||||
cx16.r1++
|
||||
}
|
||||
|
||||
other.othersub()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
other {
|
||||
sub othersub() {
|
||||
cx16.r0++
|
||||
}
|
||||
}"""
|
||||
|
||||
compileText(VMTarget(), optimize=false, src, writeAssembly=false) shouldNotBe null
|
||||
}
|
||||
})
|
||||
|
||||
|
@ -1,2 +1,2 @@
|
||||
; test expects the following 2nd (!) line:
|
||||
bad { } ; -> missing EOL at '}' (ie: *after* the '{')
|
||||
bad bad bad { } } }
|
||||
|
@ -1,2 +1,2 @@
|
||||
; test expects the following 2nd (!) line:
|
||||
bad { } ; -> missing EOL at '}' (ie: *after* the '{')
|
||||
bad bad bad { } } }
|
||||
|
@ -621,8 +621,6 @@ The syntax is::
|
||||
return X * 3
|
||||
}
|
||||
|
||||
The open curly brace must immediately follow the subroutine result specification on the same line,
|
||||
and can have nothing following it. The close curly brace must be on its own line as well.
|
||||
The parameters is a (possibly empty) comma separated list of "<datatype> <parametername>" pairs specifying the input parameters.
|
||||
The return type has to be specified if the subroutine returns a value.
|
||||
|
||||
|
@ -1,11 +1,6 @@
|
||||
TODO
|
||||
====
|
||||
|
||||
- also allow this?
|
||||
if variable { txt.print("yes") }
|
||||
else { txt.print("no") }
|
||||
- is it possible to allow the curly brace to be on the next line instead of requiring it to follow on the same line?
|
||||
|
||||
...
|
||||
|
||||
|
||||
|
@ -1,24 +1,39 @@
|
||||
%import textio
|
||||
%zeropage basicsafe
|
||||
|
||||
main {
|
||||
|
||||
main
|
||||
{
|
||||
sub start()
|
||||
{
|
||||
ubyte variable=55
|
||||
when variable
|
||||
{
|
||||
33 -> txt.print("33")
|
||||
33 -> cx16.r0++
|
||||
else -> cx16.r1++
|
||||
}
|
||||
|
||||
if variable {
|
||||
cx16.r0++
|
||||
} else {
|
||||
cx16.r1++
|
||||
}
|
||||
|
||||
if variable { cx16.r0++ }
|
||||
else { cx16.r1++ }
|
||||
|
||||
if variable
|
||||
{
|
||||
txt.print("yes")
|
||||
cx16.r0++
|
||||
}
|
||||
else
|
||||
{
|
||||
txt.print("no")
|
||||
cx16.r1++
|
||||
}
|
||||
|
||||
other.othersub()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
other {
|
||||
sub othersub() {
|
||||
cx16.r0++
|
||||
}
|
||||
}
|
||||
|
@ -66,7 +66,7 @@ ARRAYSIG :
|
||||
// Note: the parser may see *several* consecutive EOLs - this happens when EOL and comments are interleaved (see #47)
|
||||
module: EOL* ((directive | block) (EOL+ (directive | block))*)? EOL* EOF;
|
||||
|
||||
block: identifier integerliteral? '{' EOL (block_statement | EOL)* '}';
|
||||
block: identifier integerliteral? EOL? '{' EOL? (block_statement | EOL)* '}';
|
||||
|
||||
block_statement:
|
||||
directive
|
||||
@ -245,7 +245,7 @@ subroutine :
|
||||
sub_return_part : '->' datatype ;
|
||||
|
||||
statement_block :
|
||||
'{' EOL
|
||||
'{' EOL?
|
||||
(statement | EOL) *
|
||||
'}'
|
||||
;
|
||||
@ -296,6 +296,6 @@ repeatloop: 'repeat' expression? EOL? (statement | statement_block) ;
|
||||
|
||||
unrollloop: 'unroll' integerliteral? EOL? (statement | statement_block) ;
|
||||
|
||||
whenstmt: 'when' expression EOL? '{' EOL (when_choice | EOL) * '}' EOL? ;
|
||||
whenstmt: 'when' expression EOL? '{' EOL? (when_choice | EOL) * '}' EOL? ;
|
||||
|
||||
when_choice: (expression_list | 'else' ) '->' (statement | statement_block ) ;
|
||||
|
Loading…
Reference in New Issue
Block a user