All checks were successful
		
		
	
	continuous-integration/drone/push Build is passing
				
			updated the compiler to handle the assignment expression
		
			
				
	
	
		
			70 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			70 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
defclass A [ a ] {
 | 
						|
	defun :* 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;
 | 
						|
	}
 | 
						|
 | 
						|
	defun :* init2() {
 | 
						|
		| b |
 | 
						|
		set b (+ 10 20);
 | 
						|
		set a b;
 | 
						|
		printf "init to %d\n" a;
 | 
						|
		return self;
 | 
						|
	};
 | 
						|
};
 | 
						|
 | 
						|
---
 | 
						|
 | 
						|
defun String length() { ##ERROR: syntax error - no argument list
 | 
						|
}
 | 
						|
 | 
						|
---
 | 
						|
 | 
						|
class A [ 10 ] { ##ERROR: syntax error - not variable name - 10
 | 
						|
}
 | 
						|
 | 
						|
---
 | 
						|
 | 
						|
class A [ a := 20 ] { ##ERROR: syntax error - := disallowed
 | 
						|
}
 | 
						|
 | 
						|
---
 | 
						|
class A [ [ [a] ] ] { ##ERROR: syntax error - not variable name
 | 
						|
}
 | 
						|
 | 
						|
---
 | 
						|
class A [ a + ] { ##ERROR: syntax error - not variable name - +
 | 
						|
}
 | 
						|
 | 
						|
---
 | 
						|
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 - invalid lvalue - not symbol in tuple
 | 
						|
printf "%d %d\n" a b
 | 
						|
 | 
						|
---
 | 
						|
20 := 90 ##ERROR: syntax error - invalid lvalue - not symbol - 20
 | 
						|
 | 
						|
---
 | 
						|
 | 
						|
[a b] := 10 ##ERROR: syntax error - non-function call/non-message send disallowed
 | 
						|
 | 
						|
---
 | 
						|
 | 
						|
[] := 10 ##ERROR: syntax error - invalid lvalue
 |