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