добавил iife (возможность вызова лямбда функции сразу после объявления), iife с аргументами и defer
parent
f556df4101
commit
dbfcb87b81
|
@ -72,6 +72,7 @@ LETTER_OR_DIGIT [a-zA-Z0-9_]
|
|||
"++" { return INC; }
|
||||
"--" { return DEC; }
|
||||
|
||||
"defer" { return DEFER; }
|
||||
"range" { return RANGE; }
|
||||
"for" { return FOR; }
|
||||
"break" { return BREAK; }
|
||||
|
|
|
@ -25,7 +25,7 @@ void free_node(char *str) {
|
|||
%token VAR FUNC RETURN STRING_LITERAL FLOAT_LITERAL COMPLEX_LITERAL NUMBER PACKAGE IMPORT
|
||||
%token INC DEC PLUS_EQ MINUS_EQ MUL_EQ DIV_EQ MOD_EQ
|
||||
%token AMPERSAND_EQ PIPE_EQ XOR_EQ LSHIFT_EQ RSHIFT_EQ AND_NOT_EQ
|
||||
%token FOR BREAK CONTINUE ARROW IF ELSE RANGE
|
||||
%token FOR BREAK CONTINUE ARROW IF ELSE RANGE DEFER
|
||||
%token CHAN CONST CASE SWITCH
|
||||
%token PLUS MINUS MULT DIV MOD
|
||||
%token STRING
|
||||
|
@ -58,6 +58,7 @@ program:
|
|||
;
|
||||
|
||||
statement:
|
||||
| DEFER func_call SEMICOLON
|
||||
| func_call SEMICOLON
|
||||
{ printf("\033[1;33mSTATEMENT: func_call\033[0m\n"); }
|
||||
| var_declaration SEMICOLON
|
||||
|
@ -334,6 +335,7 @@ func_literal:
|
|||
|
||||
func_call:
|
||||
any_identifier LPAREN math_expr_or_literals_list_or_empty RPAREN
|
||||
| func_literal LPAREN math_expr_or_literals_list_or_empty RPAREN
|
||||
|
||||
arg_declaration:
|
||||
identifiers_list type
|
||||
|
|
|
@ -1,6 +1,9 @@
|
|||
package main
|
||||
|
||||
import "fmt"
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
)
|
||||
|
||||
func ujas() (func() func() func() int, int, string) {
|
||||
return func() func() func() int {
|
||||
|
@ -19,5 +22,15 @@ func main() {
|
|||
fmt.Println(idx, val)
|
||||
}
|
||||
|
||||
defer func() {
|
||||
if err := recover(); err != nil {
|
||||
log.Println("work failed:", err)
|
||||
}
|
||||
}()
|
||||
|
||||
func(msg string) {
|
||||
fmt.Println("Message:", msg)
|
||||
}("Hello, IIFE!")
|
||||
|
||||
return
|
||||
}
|
||||
|
|
|
@ -2,6 +2,27 @@ package main;
|
|||
|
||||
import "fmt";
|
||||
|
||||
func server(a int) {
|
||||
for work := range workChan {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
func iife(work int) {
|
||||
|
||||
func(){}();
|
||||
func(){fmt.Println(123);}();
|
||||
|
||||
func(a, b string) {
|
||||
fmt.Println("Message:", a + b);
|
||||
}("Hello", ", world!");
|
||||
|
||||
defer func() {
|
||||
if err := recover(); err != nil {
|
||||
log.Println("work failed:", err);
|
||||
}
|
||||
}();
|
||||
}
|
||||
|
||||
func ujas() (func() func() func() int, int, string) {
|
||||
return func() func() func() int {
|
||||
|
|
Loading…
Reference in New Issue