Merge pull request 'alter-fixed-array-syntax' (#3) from alter-fixed-array-syntax into main
Reviewed-on: arf/arf#3
This commit is contained in:
commit
d8c0ce8d28
@ -3,7 +3,7 @@ require "io"
|
|||||||
---
|
---
|
||||||
|
|
||||||
func ro main
|
func ro main
|
||||||
> arguments:{String}
|
> arguments:{String ..}
|
||||||
< status:Int 0
|
< status:Int 0
|
||||||
---
|
---
|
||||||
io.println "hello world"
|
io.println "hello world"
|
||||||
|
@ -13,7 +13,7 @@ objt ro Greeter:Obj
|
|||||||
|
|
||||||
# this is a function
|
# this is a function
|
||||||
func ro main
|
func ro main
|
||||||
> arguments:{String}
|
> arguments:{String ..}
|
||||||
< status:Int 0
|
< status:Int 0
|
||||||
---
|
---
|
||||||
= greeter:Greeter:mut
|
= greeter:Greeter:mut
|
||||||
|
@ -75,10 +75,11 @@ func (what Type) Mutable () (mutable bool) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// Length returns the length of the type if the type is a fixed length array.
|
// Length returns the length of the type. If it is greater than 1, that means
|
||||||
// Otherwise, it just returns zero.
|
// the type is a fixed length array.
|
||||||
func (what Type) Length () (length uint64) {
|
func (what Type) Length () (length uint64) {
|
||||||
if what.kind == TypeKindArray {
|
length = 1
|
||||||
|
if what.length > 1 {
|
||||||
length = what.length
|
length = what.length
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
|
@ -15,37 +15,37 @@ func (parser *ParsingOperation) parseBody () (err error) {
|
|||||||
section, parseErr := parser.parseDataSection()
|
section, parseErr := parser.parseDataSection()
|
||||||
err = parser.tree.addSection(section)
|
err = parser.tree.addSection(section)
|
||||||
if err != nil { return }
|
if err != nil { return }
|
||||||
if parseErr != nil { return }
|
if parseErr != nil { return parseErr }
|
||||||
|
|
||||||
case "type":
|
case "type":
|
||||||
section, parseErr := parser.parseTypeSection()
|
section, parseErr := parser.parseTypeSection()
|
||||||
err = parser.tree.addSection(section)
|
err = parser.tree.addSection(section)
|
||||||
if err != nil { return }
|
if err != nil { return }
|
||||||
if parseErr != nil { return }
|
if parseErr != nil { return parseErr }
|
||||||
|
|
||||||
case "objt":
|
case "objt":
|
||||||
section, parseErr := parser.parseObjtSection()
|
section, parseErr := parser.parseObjtSection()
|
||||||
err = parser.tree.addSection(section)
|
err = parser.tree.addSection(section)
|
||||||
if err != nil { return }
|
if err != nil { return }
|
||||||
if parseErr != nil { return }
|
if parseErr != nil { return parseErr }
|
||||||
|
|
||||||
case "face":
|
case "face":
|
||||||
section, parseErr := parser.parseFaceSection()
|
section, parseErr := parser.parseFaceSection()
|
||||||
err = parser.tree.addSection(section)
|
err = parser.tree.addSection(section)
|
||||||
if err != nil { return }
|
if err != nil { return }
|
||||||
if parseErr != nil { return }
|
if parseErr != nil { return parseErr }
|
||||||
|
|
||||||
case "enum":
|
case "enum":
|
||||||
section, parseErr := parser.parseEnumSection()
|
section, parseErr := parser.parseEnumSection()
|
||||||
err = parser.tree.addSection(section)
|
err = parser.tree.addSection(section)
|
||||||
if err != nil { return }
|
if err != nil { return }
|
||||||
if parseErr != nil { return }
|
if parseErr != nil { return parseErr }
|
||||||
|
|
||||||
case "func":
|
case "func":
|
||||||
section, parseErr := parser.parseFuncSection()
|
section, parseErr := parser.parseFuncSection()
|
||||||
err = parser.tree.addSection(section)
|
err = parser.tree.addSection(section)
|
||||||
if err != nil { return }
|
if err != nil { return }
|
||||||
if parseErr != nil { return }
|
if parseErr != nil { return parseErr }
|
||||||
|
|
||||||
default:
|
default:
|
||||||
err = parser.token.NewError (
|
err = parser.token.NewError (
|
||||||
|
@ -6,9 +6,13 @@ func TestData (test *testing.T) {
|
|||||||
checkTree ("../tests/parser/data",
|
checkTree ("../tests/parser/data",
|
||||||
`:arf
|
`:arf
|
||||||
---
|
---
|
||||||
data ro integer:Int 3202
|
data ro aInteger:Int 3202
|
||||||
data ro integerArray16:{Int 16}
|
data ro bMutInteger:Int:mut 3202
|
||||||
data ro integerArrayInitialized:{Int 16}
|
data ro cIntegerPointer:{Int}
|
||||||
|
data ro dMutIntegerPointer:{Int}:mut
|
||||||
|
data ro eIntegerArray16:Int:16
|
||||||
|
data ro fIntegerArrayVariable:{Int ..}
|
||||||
|
data ro gIntegerArrayInitialized:Int:16
|
||||||
3948
|
3948
|
||||||
293
|
293
|
||||||
293049
|
293049
|
||||||
@ -20,19 +24,28 @@ data ro integerArrayInitialized:{Int 16}
|
|||||||
0
|
0
|
||||||
4785
|
4785
|
||||||
92
|
92
|
||||||
data ro integerArrayVariable:{Int ..}
|
data ro jObject:thing.Thing.thing.thing
|
||||||
data ro integerPointer:{Int}
|
.that 2139
|
||||||
data ro mutInteger:Int:mut 3202
|
.this 324
|
||||||
data ro mutIntegerPointer:{Int}:mut
|
data ro kNestedObject:Obj
|
||||||
data ro nestedObject:Obj
|
|
||||||
.that
|
.that
|
||||||
.bird2 123.8439
|
.bird2 123.8439
|
||||||
.bird3 9328.21348239
|
.bird3 9328.21348239
|
||||||
.this
|
.this
|
||||||
.bird0 324
|
.bird0 324
|
||||||
.bird1 "hello world"
|
.bird1 "hello world"
|
||||||
data ro object:thing.thing.thing.thing
|
data ro lMutIntegerArray16:Int:16:mut
|
||||||
.that 2139
|
data ro mIntegerArrayInitialized:Int:16:mut
|
||||||
.this 324
|
3948
|
||||||
|
293
|
||||||
|
293049
|
||||||
|
948
|
||||||
|
912
|
||||||
|
340
|
||||||
|
0
|
||||||
|
2304
|
||||||
|
0
|
||||||
|
4785
|
||||||
|
92
|
||||||
`, test)
|
`, test)
|
||||||
}
|
}
|
||||||
|
@ -6,7 +6,7 @@ func TestEnum (test *testing.T) {
|
|||||||
checkTree ("../tests/parser/enum",
|
checkTree ("../tests/parser/enum",
|
||||||
`:arf
|
`:arf
|
||||||
---
|
---
|
||||||
enum ro AffrontToGod:{Int 4}
|
enum ro AffrontToGod:Int:4
|
||||||
bird0
|
bird0
|
||||||
28394
|
28394
|
||||||
9328
|
9328
|
||||||
|
@ -25,7 +25,7 @@ func ro cBasicPhrases
|
|||||||
[fn [gn 329 983 57] 123]
|
[fn [gn 329 983 57] 123]
|
||||||
func ro dArgumentTypes
|
func ro dArgumentTypes
|
||||||
---
|
---
|
||||||
[bird tree butterfly.wing "hello world" grass:{Int:mut 8}]
|
[bird tree butterfly.wing "hello world" grass:Int:8:mut]
|
||||||
func ro eMath
|
func ro eMath
|
||||||
> x:Int
|
> x:Int
|
||||||
> y:Int
|
> y:Int
|
||||||
@ -103,7 +103,7 @@ func ro hSetPhrase
|
|||||||
---
|
---
|
||||||
[= x:Int 3]
|
[= x:Int 3]
|
||||||
[= y:{Int} [loc x]]
|
[= y:{Int} [loc x]]
|
||||||
[= z:{Int 8}]
|
[= z:Int:8]
|
||||||
398
|
398
|
||||||
9
|
9
|
||||||
2309
|
2309
|
||||||
|
@ -44,19 +44,11 @@ func (parser *ParsingOperation) parseType () (what Type, err error) {
|
|||||||
what.points = &points
|
what.points = &points
|
||||||
|
|
||||||
err = parser.expect (
|
err = parser.expect (
|
||||||
lexer.TokenKindUInt,
|
|
||||||
lexer.TokenKindRBrace,
|
lexer.TokenKindRBrace,
|
||||||
lexer.TokenKindElipsis)
|
lexer.TokenKindElipsis)
|
||||||
if err != nil { return }
|
if err != nil { return }
|
||||||
|
|
||||||
if parser.token.Is(lexer.TokenKindUInt) {
|
if parser.token.Is(lexer.TokenKindElipsis) {
|
||||||
what.kind = TypeKindArray
|
|
||||||
|
|
||||||
what.length = parser.token.Value().(uint64)
|
|
||||||
|
|
||||||
err = parser.nextToken(lexer.TokenKindRBrace)
|
|
||||||
if err != nil { return }
|
|
||||||
} else if parser.token.Is(lexer.TokenKindElipsis) {
|
|
||||||
what.kind = TypeKindVariableArray
|
what.kind = TypeKindVariableArray
|
||||||
|
|
||||||
err = parser.nextToken(lexer.TokenKindRBrace)
|
err = parser.nextToken(lexer.TokenKindRBrace)
|
||||||
@ -70,19 +62,28 @@ func (parser *ParsingOperation) parseType () (what Type, err error) {
|
|||||||
if err != nil { return }
|
if err != nil { return }
|
||||||
}
|
}
|
||||||
|
|
||||||
if parser.token.Is(lexer.TokenKindColon) {
|
for {
|
||||||
err = parser.nextToken(lexer.TokenKindName)
|
if !parser.token.Is(lexer.TokenKindColon) { break }
|
||||||
|
|
||||||
|
err = parser.nextToken(lexer.TokenKindName, lexer.TokenKindUInt)
|
||||||
if err != nil { return }
|
if err != nil { return }
|
||||||
|
|
||||||
qualifier := parser.token.Value().(string)
|
if parser.token.Is(lexer.TokenKindName) {
|
||||||
switch qualifier {
|
// parse type qualifier
|
||||||
case "mut":
|
qualifier := parser.token.Value().(string)
|
||||||
what.mutable = true
|
switch qualifier {
|
||||||
default:
|
case "mut":
|
||||||
err = parser.token.NewError (
|
what.mutable = true
|
||||||
"unknown type qualifier \"" + qualifier + "\"",
|
default:
|
||||||
infoerr.ErrorKindError)
|
err = parser.token.NewError (
|
||||||
return
|
"unknown type qualifier \"" +
|
||||||
|
qualifier + "\"",
|
||||||
|
infoerr.ErrorKindError)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// parse fixed array length
|
||||||
|
what.length = parser.token.Value().(uint64)
|
||||||
}
|
}
|
||||||
|
|
||||||
err = parser.nextToken()
|
err = parser.nextToken()
|
||||||
|
@ -13,7 +13,7 @@ objt ro BitFields:Obj
|
|||||||
ro that:Int & 1
|
ro that:Int & 1
|
||||||
ro this:Int & 24 298
|
ro this:Int & 24 298
|
||||||
objt ro ComplexInit:Obj
|
objt ro ComplexInit:Obj
|
||||||
ro whatever:{Int 3}
|
ro whatever:Int:3
|
||||||
230984
|
230984
|
||||||
849
|
849
|
||||||
394580
|
394580
|
||||||
|
@ -73,15 +73,17 @@ func (what Type) ToString () (output string) {
|
|||||||
output += "{"
|
output += "{"
|
||||||
output += what.points.ToString()
|
output += what.points.ToString()
|
||||||
|
|
||||||
if what.kind == TypeKindArray {
|
if what.kind == TypeKindVariableArray {
|
||||||
output += fmt.Sprint(" ", what.length)
|
|
||||||
} else if what.kind == TypeKindVariableArray {
|
|
||||||
output += " .."
|
output += " .."
|
||||||
}
|
}
|
||||||
|
|
||||||
output += "}"
|
output += "}"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if what.length > 1 {
|
||||||
|
output += fmt.Sprint(":", what.length)
|
||||||
|
}
|
||||||
|
|
||||||
if what.mutable {
|
if what.mutable {
|
||||||
output += ":mut"
|
output += ":mut"
|
||||||
}
|
}
|
||||||
|
@ -55,9 +55,6 @@ const (
|
|||||||
// TypeKindPointer means it's a pointer
|
// TypeKindPointer means it's a pointer
|
||||||
TypeKindPointer
|
TypeKindPointer
|
||||||
|
|
||||||
// TypeKindArray means it's a fixed length array.
|
|
||||||
TypeKindArray
|
|
||||||
|
|
||||||
// TypeKindVariableArray means it's an array of variable length.
|
// TypeKindVariableArray means it's an array of variable length.
|
||||||
TypeKindVariableArray
|
TypeKindVariableArray
|
||||||
)
|
)
|
||||||
@ -68,8 +65,6 @@ type Type struct {
|
|||||||
|
|
||||||
mutable bool
|
mutable bool
|
||||||
kind TypeKind
|
kind TypeKind
|
||||||
|
|
||||||
// only applicable for fixed length arrays.
|
|
||||||
length uint64
|
length uint64
|
||||||
|
|
||||||
// only applicable for basic.
|
// only applicable for basic.
|
||||||
|
@ -9,7 +9,7 @@ func TestType (test *testing.T) {
|
|||||||
type ro Basic:Int
|
type ro Basic:Int
|
||||||
type ro BasicInit:Int 6
|
type ro BasicInit:Int 6
|
||||||
type ro IntArray:{Int ..}
|
type ro IntArray:{Int ..}
|
||||||
type ro IntArrayInit:{Int 3}
|
type ro IntArrayInit:Int:3
|
||||||
3298
|
3298
|
||||||
923
|
923
|
||||||
92
|
92
|
||||||
|
@ -1,34 +1,34 @@
|
|||||||
:arf
|
:arf
|
||||||
---
|
---
|
||||||
|
|
||||||
data ro integer:Int 3202
|
data ro aInteger:Int 3202
|
||||||
|
|
||||||
data ro mutInteger:Int:mut 3202
|
data ro bMutInteger:Int:mut 3202
|
||||||
|
|
||||||
data ro integerPointer:{Int}
|
data ro cIntegerPointer:{Int}
|
||||||
|
|
||||||
data ro mutIntegerPointer:{Int}:mut
|
data ro dMutIntegerPointer:{Int}:mut
|
||||||
|
|
||||||
data ro integerArray16:{Int 16}
|
data ro eIntegerArray16:Int:16
|
||||||
|
|
||||||
data ro integerArrayVariable:{Int ..}
|
data ro fIntegerArrayVariable:{Int ..}
|
||||||
|
|
||||||
data ro integerArrayInitialized:{Int 16}
|
data ro gIntegerArrayInitialized:Int:16
|
||||||
3948 293 293049 948 912
|
3948 293 293049 948 912
|
||||||
340 0 2304 0 4785 92
|
340 0 2304 0 4785 92
|
||||||
|
|
||||||
# TODO: reinstate these two after phrase parsing is implemented
|
# TODO: reinstate these two after phrase parsing is implemented
|
||||||
# data wr integerPointerInit:{Int} [& integer]
|
# data wr hIntegerPointerInit:{Int} [& integer]
|
||||||
|
|
||||||
# data wr mutIntegerPointerInit:{Int}:mut [& integer]
|
# data wr iMutIntegerPointerInit:{Int}:mut [& integer]
|
||||||
|
|
||||||
# TODO: maybe test identifiers somewhere else?
|
# TODO: maybe test identifiers somewhere else?
|
||||||
data ro object:thing.thing.
|
data ro jObject:thing.Thing.
|
||||||
thing.thing
|
thing.thing
|
||||||
.this 324
|
.this 324
|
||||||
.that 2139
|
.that 2139
|
||||||
|
|
||||||
data ro nestedObject:Obj
|
data ro kNestedObject:Obj
|
||||||
.this
|
.this
|
||||||
.bird0 324
|
.bird0 324
|
||||||
.bird1 "hello world"
|
.bird1 "hello world"
|
||||||
@ -36,19 +36,8 @@ data ro nestedObject:Obj
|
|||||||
.bird2 123.8439
|
.bird2 123.8439
|
||||||
.bird3 9328.21348239
|
.bird3 9328.21348239
|
||||||
|
|
||||||
|
data ro lMutIntegerArray16:Int:16:mut
|
||||||
|
|
||||||
# func ro main
|
data ro mIntegerArrayInitialized:Int:16:mut
|
||||||
# ---
|
3948 293 293049 948 912
|
||||||
# # TODO: set should be a special case, checking under itself for object
|
340 0 2304 0 4785 92
|
||||||
# member initialization args. it should also check for args in general
|
|
||||||
# under there which should be treated as array initialization args.
|
|
||||||
# basically, under a set phrase, it should do the same checks that it
|
|
||||||
# does under a data section.
|
|
||||||
#
|
|
||||||
# [set object:Obj]
|
|
||||||
# .this 324
|
|
||||||
# .that 2139
|
|
||||||
#
|
|
||||||
# set object:Obj
|
|
||||||
# .this 324
|
|
||||||
# .that 2139
|
|
||||||
|
@ -15,7 +15,7 @@ enum ro NamedColor:U32
|
|||||||
green 0x00FF00
|
green 0x00FF00
|
||||||
blue 0x0000FF
|
blue 0x0000FF
|
||||||
|
|
||||||
enum ro AffrontToGod:{Int 4}
|
enum ro AffrontToGod:Int:4
|
||||||
bird0
|
bird0
|
||||||
28394 9328
|
28394 9328
|
||||||
398 9
|
398 9
|
||||||
|
@ -5,37 +5,31 @@ require "io"
|
|||||||
---
|
---
|
||||||
|
|
||||||
# this is a global variable
|
# this is a global variable
|
||||||
data wn helloText:String "Hello, world!"
|
data pv helloText:String "Hello, world!"
|
||||||
|
|
||||||
# this is a struct definition
|
# this is a struct definition
|
||||||
type rr Greeter:Obj
|
objt ro Greeter:Obj
|
||||||
# "Hi." is a string constant. all Greeters will be initialized with a
|
rw text:String "Hi."
|
||||||
# pointer to it. I don't know really it depends on what I decide that
|
|
||||||
# a String type even is.
|
|
||||||
wr text:String "Hi."
|
|
||||||
"sdfdsf" "ahh"
|
|
||||||
"asdf"
|
|
||||||
|
|
||||||
# this is a function
|
# this is a function
|
||||||
func rr main
|
func ro main
|
||||||
> argc:Int
|
> arguments:{String ..}
|
||||||
> argv:{String}
|
< status:Int 0
|
||||||
< status:Int 0
|
---
|
||||||
---
|
= greeter:Greeter:mut
|
||||||
let greeter:Greeter:mut
|
greeter.setText helloText
|
||||||
greeter.setText helloText
|
greeter.greet
|
||||||
greeter.greet
|
|
||||||
|
|
||||||
# this is a member function
|
# this is a member function
|
||||||
func rr greet
|
func ro greet
|
||||||
@ greeter:{Greeter}
|
@ greeter:{Greeter}
|
||||||
---
|
---
|
||||||
io.println greeter.text
|
io.println greeter.text
|
||||||
|
|
||||||
# this is mutator member function
|
# this is mutator member function
|
||||||
func rr setText
|
func ro setText
|
||||||
@ greeter:{Greeter}
|
@ greeter:{Greeter}
|
||||||
> text:String
|
> text:String
|
||||||
---
|
---
|
||||||
greeter.text.set text
|
greeter.text.set text
|
||||||
|
|
||||||
|
@ -28,7 +28,7 @@ func ro cBasicPhrases
|
|||||||
func ro dArgumentTypes
|
func ro dArgumentTypes
|
||||||
---
|
---
|
||||||
[bird tree butterfly.wing "hello world"
|
[bird tree butterfly.wing "hello world"
|
||||||
grass:{Int:mut 8}]
|
grass:Int:mut:8]
|
||||||
|
|
||||||
func ro eMath
|
func ro eMath
|
||||||
> x:Int
|
> x:Int
|
||||||
@ -127,7 +127,7 @@ func ro hSetPhrase
|
|||||||
= x:Int 3
|
= x:Int 3
|
||||||
# loc is a reference, similar to * in C
|
# loc is a reference, similar to * in C
|
||||||
= y:{Int} [loc x]
|
= y:{Int} [loc x]
|
||||||
= z:{Int 8}
|
= z:Int:8
|
||||||
398 9 2309 983 -2387
|
398 9 2309 983 -2387
|
||||||
478 555 123
|
478 555 123
|
||||||
= bird:Bird
|
= bird:Bird
|
||||||
|
@ -13,7 +13,7 @@ objt ro Init:Obj
|
|||||||
ro this:Int 23
|
ro this:Int 23
|
||||||
|
|
||||||
objt ro ComplexInit:Obj
|
objt ro ComplexInit:Obj
|
||||||
ro whatever:{Int 3}
|
ro whatever:Int:3
|
||||||
230984
|
230984
|
||||||
849 394580
|
849 394580
|
||||||
ro complex0:Bird
|
ro complex0:Bird
|
||||||
|
@ -6,5 +6,5 @@ type ro BasicInit:Int 6
|
|||||||
|
|
||||||
type ro IntArray:{Int ..}
|
type ro IntArray:{Int ..}
|
||||||
|
|
||||||
type ro IntArrayInit:{Int 3}
|
type ro IntArrayInit:Int:3
|
||||||
3298 923 92
|
3298 923 92
|
||||||
|
Reference in New Issue
Block a user