Skip to content

Commit 399da7a

Browse files
committed
Allow constant and variable definitions via grouping syntax (#41)
1 parent b393eed commit 399da7a

8 files changed

Lines changed: 426 additions & 295 deletions

File tree

README.md

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,20 +30,28 @@ Supported variable types are *bool*, *int*, *string* and *error*.
3030
```golang
3131
// Variable definition with default value.
3232
var a int
33-
var a, b int
33+
var b, c int
3434
```
3535

3636
```golang
3737
// Variable definition with assigned value.
3838
var a int = 5
39-
var a, b int = divisionWithRemainder(5, 2)
39+
var b, c int = divisionWithRemainder(5, 2)
40+
```
41+
42+
```golang
43+
// Variable definition via grouping.
44+
var (
45+
a = 5
46+
b, c int = divisionWithRemainder(5, 2)
47+
)
4048
```
4149

4250
```golang
4351
// Variable definition short form.
4452
a := 5
45-
a, b := 5, 6
46-
a, b := divisionWithRemainder(5, 2)
53+
b, c := 5, 6
54+
d, e := divisionWithRemainder(5, 2)
4755
```
4856

4957
### Control flow

parser/assignment.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package parser
2+
3+
type Assignment interface {
4+
Statement
5+
AssignmentType() AssignmentType
6+
}

parser/const.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,10 @@ func (c ConstDefinition) StatementType() StatementType {
4949
return STATEMENT_TYPE_CONST_DEFINITION
5050
}
5151

52+
func (c ConstDefinition) AssignmentType() AssignmentType {
53+
return ASSIGNMENT_TYPE_VALUE
54+
}
55+
5256
func (c ConstDefinition) Constants() []Const {
5357
return c.constants
5458
}

parser/namedvalue.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,3 +7,19 @@ type NamedValue interface {
77
Public() bool
88
IsConstant() bool
99
}
10+
11+
type NamedValuesDefinition struct {
12+
assignments []Assignment
13+
}
14+
15+
func (v NamedValuesDefinition) StatementType() StatementType {
16+
return STATEMENT_TYPE_NAMED_VALUES_DEFINITION
17+
}
18+
19+
func (v *NamedValuesDefinition) AddAssignment(assignment Assignment) {
20+
v.assignments = append(v.assignments, assignment)
21+
}
22+
23+
func (v NamedValuesDefinition) Assignments() []Assignment {
24+
return v.assignments
25+
}

0 commit comments

Comments
 (0)