79 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			79 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
class A ( a ) {
 | 
						|
	fun[#ci] init1() {
 | 
						|
		| b |
 | 
						|
		set b (+ 1 2);
 | 
						|
		set a b;
 | 
						|
		printf "init to %d\n" a;
 | 
						|
		return self;
 | 
						|
	};
 | 
						|
 | 
						|
	{
 | 
						|
		## this must not be allowed at this level. if it's allowed,
 | 
						|
		## it should be at the top-level which is above the class level. this is confusing.
 | 
						|
		| j | ##ERROR: syntax error - variable declaration disallowed in class init scope
 | 
						|
		set j 20;
 | 
						|
		printf ">>> %d\n" j;
 | 
						|
	}
 | 
						|
 | 
						|
	fun[#ci] init2() {
 | 
						|
		| b |
 | 
						|
		set b (+ 10 20);
 | 
						|
		set a b;
 | 
						|
		printf "init to %d\n" a;
 | 
						|
		return self;
 | 
						|
	};
 | 
						|
};
 | 
						|
 | 
						|
---
 | 
						|
 | 
						|
fun String length() { ##ERROR: syntax error - 'String' not followed by ( but followed by 'length'
 | 
						|
}
 | 
						|
 | 
						|
---
 | 
						|
 | 
						|
class A ( 10 ) { ##ERROR: syntax error - not variable name '10'
 | 
						|
}
 | 
						|
 | 
						|
---
 | 
						|
 | 
						|
class A ( a := 20 ) { ##ERROR: syntax error - block expression expected as 'class' body
 | 
						|
}
 | 
						|
 | 
						|
---
 | 
						|
 | 
						|
class A ( ( (a) ) ) { ##ERROR: syntax error - not variable name
 | 
						|
}
 | 
						|
 | 
						|
---
 | 
						|
 | 
						|
## TODO: improve the reader to be aware that it's in the class definition context
 | 
						|
##       while reading '(a + )' and to flag + as an invalid variable name...
 | 
						|
class A ( a + ) { ##ERROR: syntax error - no operand after binary selector '+'
 | 
						|
}
 | 
						|
 | 
						|
---
 | 
						|
class A ( + ) { ##ERROR: syntax error - not variable name '+'
 | 
						|
}
 | 
						|
 | 
						|
---
 | 
						|
 | 
						|
fun xxx(x :: p q) { p := (x + 1); q := (x + 2) }
 | 
						|
[a,[b]] := (xxx 20) ##ERROR: syntax error - bad lvalue - invalid token in tuple
 | 
						|
printf "%d %d\n" a b
 | 
						|
 | 
						|
---
 | 
						|
 | 
						|
20 := 90 ##ERROR: syntax error - bad lvalue - invalid identifier '20'
 | 
						|
 | 
						|
---
 | 
						|
 | 
						|
[a b] := 10 ##ERROR: syntax error - non-function call/non-message send disallowed
 | 
						|
 | 
						|
---
 | 
						|
 | 
						|
[] := 10 ##ERROR: syntax error - bad lvalue - blank expression
 | 
						|
 | 
						|
---
 | 
						|
 | 
						|
+ + 100 ##ERROR: exception not handled - "unable to send + to #<PRIM> - '+' not found in Primitive"
 |