diff options
| author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 1995-10-25 12:33:25 -0200 |
|---|---|---|
| committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 1995-10-25 12:33:25 -0200 |
| commit | 39b071f7b13e6ed6eff4a0f0471d2450a9c48084 (patch) | |
| tree | 5e095133310f89f45c72d1c35351045afb65b44f | |
| parent | 9efc257d9d774501af4538a289729f3e8e5e3d7e (diff) | |
| download | lua-39b071f7b13e6ed6eff4a0f0471d2450a9c48084.tar.gz lua-39b071f7b13e6ed6eff4a0f0471d2450a9c48084.tar.bz2 lua-39b071f7b13e6ed6eff4a0f0471d2450a9c48084.zip | |
new syntax for function declarations: "function a.x () ... "
new semantics for function declarations: function f () is valid only
at run-time.
| -rw-r--r-- | lua.stx | 35 |
1 files changed, 16 insertions, 19 deletions
| @@ -1,6 +1,6 @@ | |||
| 1 | %{ | 1 | %{ |
| 2 | 2 | ||
| 3 | char *rcs_luastx = "$Id: lua.stx,v 3.21 1995/10/17 11:58:41 roberto Exp roberto $"; | 3 | char *rcs_luastx = "$Id: lua.stx,v 3.22 1995/10/25 13:05:51 roberto Exp roberto $"; |
| 4 | 4 | ||
| 5 | #include <stdio.h> | 5 | #include <stdio.h> |
| 6 | #include <stdlib.h> | 6 | #include <stdlib.h> |
| @@ -447,10 +447,10 @@ globalstat : stat sc | |||
| 447 | 447 | ||
| 448 | function : functiontoken NAME body | 448 | function : functiontoken NAME body |
| 449 | { | 449 | { |
| 450 | Word func = luaI_findsymbol($2); | 450 | code_byte(PUSHFUNCTION); |
| 451 | luaI_insertfunction($3); /* may take part in GC */ | 451 | code_code($3); |
| 452 | s_tag(func) = LUA_T_FUNCTION; | 452 | code_byte(STOREGLOBAL); |
| 453 | lua_table[func].object.value.tf = $3; | 453 | code_word(luaI_findsymbol($2)); |
| 454 | $3->lineDefined = $1; | 454 | $3->lineDefined = $1; |
| 455 | $3->name1 = $2->ts.str; | 455 | $3->name1 = $2->ts.str; |
| 456 | $3->name2 = NULL; | 456 | $3->name2 = NULL; |
| @@ -458,23 +458,19 @@ function : functiontoken NAME body | |||
| 458 | } | 458 | } |
| 459 | ; | 459 | ; |
| 460 | 460 | ||
| 461 | method : functiontoken NAME ':' NAME | 461 | method : functiontoken NAME methkind NAME body |
| 462 | { | ||
| 463 | add_localvar(luaI_findsymbolbyname("self")); | ||
| 464 | } | ||
| 465 | body | ||
| 466 | { | 462 | { |
| 467 | /* assign function to table field */ | 463 | /* assign function to table field */ |
| 468 | lua_pushvar(luaI_findsymbol($2)+1); | 464 | lua_pushvar(luaI_findsymbol($2)+1); |
| 469 | code_byte(PUSHSTRING); | 465 | code_byte(PUSHSTRING); |
| 470 | code_word(luaI_findconstant($4)); | 466 | code_word(luaI_findconstant($4)); |
| 471 | code_byte(PUSHFUNCTION); | 467 | code_byte(PUSHFUNCTION); |
| 472 | code_code($6); | 468 | code_code($5); |
| 473 | code_byte(STOREINDEXED0); | 469 | code_byte(STOREINDEXED0); |
| 474 | $6->lineDefined = $1; | 470 | $5->lineDefined = $1; |
| 475 | $6->name1 = $4->ts.str; | 471 | $5->name1 = $4->ts.str; |
| 476 | $6->name2 = $2->ts.str; | 472 | $5->name2 = $2->ts.str; |
| 477 | $6->fileName = lua_parsedfile; | 473 | $5->fileName = lua_parsedfile; |
| 478 | } | 474 | } |
| 479 | ; | 475 | ; |
| 480 | 476 | ||
| @@ -493,6 +489,10 @@ functiontoken : FUNCTION | |||
| 493 | } | 489 | } |
| 494 | ; | 490 | ; |
| 495 | 491 | ||
| 492 | methkind : ':' { add_localvar(luaI_findsymbolbyname("self")); } | ||
| 493 | | '.' /* no self */ | ||
| 494 | ; | ||
| 495 | |||
| 496 | body : '(' parlist ')' block END | 496 | body : '(' parlist ')' block END |
| 497 | { | 497 | { |
| 498 | codereturn(); | 498 | codereturn(); |
| @@ -581,10 +581,7 @@ PrepJump : /* empty */ | |||
| 581 | code_word (0); | 581 | code_word (0); |
| 582 | } | 582 | } |
| 583 | 583 | ||
| 584 | expr1 : expr | 584 | expr1 : expr { adjust_functioncall($1, 1); } |
| 585 | { | ||
| 586 | adjust_functioncall($1, 1); | ||
| 587 | } | ||
| 588 | ; | 585 | ; |
| 589 | 586 | ||
| 590 | expr : '(' expr ')' { $$ = $2; } | 587 | expr : '(' expr ')' { $$ = $2; } |
