* Finally, a real "let" syntax: `let x = ...; ... z = ...; in ...'.
This commit is contained in:
		
							parent
							
								
									7581cfdee4
								
							
						
					
					
						commit
						ac19b333b3
					
				
					 5 changed files with 21 additions and 3 deletions
				
			
		|  | @ -66,8 +66,8 @@ The hook `nix-mode-hook' is run when Nix mode is started. | |||
| 
 | ||||
| 
 | ||||
| (defvar nix-keywords | ||||
|   '("\\<if\\>" "\\<then\\>" "\\<else\\>" "\\<assert\\>" | ||||
|     "\\<let\\>" "\\<rec\\>" "\\<inherit\\>" | ||||
|   '("\\<if\\>" "\\<then\\>" "\\<else\\>" "\\<assert\\>" "\\<with\\>" | ||||
|     "\\<let\\>" "\\<in\\>" "\\<rec\\>" "\\<inherit\\>" | ||||
|     ("\\<true\\>" . font-lock-builtin-face) | ||||
|     ("\\<false\\>" . font-lock-builtin-face) | ||||
|     ("\\<null\\>" . font-lock-builtin-face) | ||||
|  |  | |||
|  | @ -91,6 +91,7 @@ else        { return ELSE; } | |||
| assert      { return ASSERT; } | ||||
| with        { return WITH; } | ||||
| let         { return LET; } | ||||
| in          { return IN; } | ||||
| rec         { return REC; } | ||||
| inherit     { return INHERIT; } | ||||
| 
 | ||||
|  |  | |||
|  | @ -123,7 +123,7 @@ static void freeAndUnprotect(void * p) | |||
| %type <t> expr_app expr_select expr_simple bind inheritsrc formal | ||||
| %type <ts> binds ids expr_list formals string_parts | ||||
| %token <t> ID INT STR PATH URI | ||||
| %token IF THEN ELSE ASSERT WITH LET REC INHERIT EQ NEQ AND OR IMPL | ||||
| %token IF THEN ELSE ASSERT WITH LET IN REC INHERIT EQ NEQ AND OR IMPL | ||||
| %token DOLLAR_CURLY /* == ${ */ | ||||
| 
 | ||||
| %nonassoc IMPL | ||||
|  | @ -152,6 +152,8 @@ expr_function | |||
|     { $$ = makeAssert($2, $4, CUR_POS); } | ||||
|   | WITH expr ';' expr_function | ||||
|     { $$ = makeWith($2, $4, CUR_POS); } | ||||
|   | LET binds IN expr_function | ||||
|     { $$ = makeSelect(fixAttrs(1, ATinsert($2, makeBind(toATerm("<let-body>"), $4, CUR_POS))), toATerm("<let-body>")); } | ||||
|   | expr_if | ||||
|   ; | ||||
| 
 | ||||
|  |  | |||
							
								
								
									
										1
									
								
								tests/lang/eval-okay-new-let.exp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								tests/lang/eval-okay-new-let.exp
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1 @@ | |||
| Str("xyzzyfoobar") | ||||
							
								
								
									
										14
									
								
								tests/lang/eval-okay-new-let.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								tests/lang/eval-okay-new-let.nix
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,14 @@ | |||
| let | ||||
| 
 | ||||
|   f = z:  | ||||
| 
 | ||||
|     let | ||||
|       x = "foo"; | ||||
|       y = "bar"; | ||||
|       body = 1; # compat test | ||||
|     in | ||||
|       z + x + y; | ||||
| 
 | ||||
|   arg = "xyzzy"; | ||||
| 
 | ||||
| in f arg | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue