From 81eb0cd61cf5aa04d460ab516ae170fd8a1c418f Mon Sep 17 00:00:00 2001
From: "p.kosyh"
Date: Mon, 21 Jun 2010 19:58:44 +0000
Subject: [PATCH] @ call, args
---
stead/stead.lua | 23 ++++++++++++++---------
1 file changed, 14 insertions(+), 9 deletions(-)
diff --git a/stead/stead.lua b/stead/stead.lua
index a64702d..8a4c624 100644
--- a/stead/stead.lua
+++ b/stead/stead.lua
@@ -65,7 +65,8 @@ end
function callpush(v, ...)
stead.call_top = stead.call_top + 1;
- stead.cctx[stead.call_top] = { txt = nil, self = v, args = arg };
+ stead.cctx[stead.call_top] = { txt = nil, self = v };
+ args = arg
end
function callpop()
@@ -83,13 +84,6 @@ function self(v)
return cctx().self;
end
-function args(v)
- if v ~= nil then
- cctx().args = v;
- end
- return cctx().args;
-end
-
function pclr()
cctx().txt = nil
end
@@ -652,8 +646,19 @@ function call(v, n, ...)
return nil,nil;
end
if type(v[n]) == 'string' then
+ if v[n]:sub(1,1) == '@' then
+ callpush(v, unpack(arg))
+ local f = loadstring(v[n]:sub(2))
+ local a,b = f();
+ if a == nil and b == nil then
+ a = pget()
+ b = nil
+ end
+ callpop()
+ return a,b
+ end
return v[n];
- end
+ end
if type(v[n]) == 'function' then
callpush(v, unpack(arg))
local a,b = v[n](v, unpack(arg));