• R/O
  • HTTP
  • SSH
  • HTTPS

Commit

Tags
No Tags

Frequently used words (click to add to your profile)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

シェルスクリプト言語xyzshのソースコード。


Commit MetaInfo

Revisãob66f3cdd2c17a19b9ea82952e4f88e4d25ea1fd0 (tree)
Hora2013-01-10 21:18:35
Autorab25cq <ab25cq@gmai...>
Commiterab25cq

Mensagem de Log

1.3.0

Mudança Sumário

Diff

--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,4 +1,12 @@
11
2+2013 1月10日 version 1.3.0
3+
4+ 1. ダイナミックライブラリーのバージョンアップ
5+
6+ 2. リファクタリング。memcheckerの廃止。オブジェクトの消費メモリが少なくなりました。(1オブジェクトを32ビットまで落とせた)
7+
8+mfiler4にも影響があります。mfiler4は1.0.9以上から、このxyzshに対応します。
9+
210 2013 1月6日 version 1.2.9
311
412 1. defとclassに-copy-stackframeオプションがつきました。xyzsh.xyzshで定義されているtimes関数で使われてます。
--- a/TODO
+++ b/TODO
@@ -15,3 +15,5 @@ ASSERTマクロをもっと使う
1515 エラー出力のリダイレクト %2>
1616
1717 変数に新規オブジェクトの作成機能はあるが代入の機能がない。
18+
19+memcheckerの廃止
--- a/configure
+++ b/configure
@@ -3029,7 +3029,7 @@ SO_VERSION=1.5.8
30293029 { $as_echo "$as_me:${as_lineno-$LINENO}: checking Operating System" >&5
30303030 $as_echo_n "checking Operating System... " >&6; }
30313031
3032-OBJ="src/gc.o src/stack.o src/string.o src/list.o src/kanji.o src/debug.o src/hash.o src/vector.o src/block.o src/fun.o src/class.o src/completion.o src/xyzsh.o src/parser.o src/run.o src/readline.o src/curses.o src/cmd_base.o src/cmd_obj.o src/cmd_file.o src/cmd_str.o src/cmd_ary.o src/cmd_condition.o src/interface.o src/memchecker.o src/object.o src/uobject.o src/cmd_num.o src/cmd_curses.o src/fd.o src/nfun.o src/extprog.o"
3032+OBJ="src/gc.o src/stack.o src/string.o src/list.o src/kanji.o src/debug.o src/hash.o src/vector.o src/block.o src/fun.o src/class.o src/completion.o src/xyzsh.o src/parser.o src/run.o src/readline.o src/curses.o src/cmd_base.o src/cmd_obj.o src/cmd_file.o src/cmd_str.o src/cmd_ary.o src/cmd_condition.o src/interface.o src/object.o src/uobject.o src/cmd_num.o src/cmd_curses.o src/fd.o src/nfun.o src/extprog.o"
30333033
30343034
30353035 if test `uname -s` = "Darwin"; then
--- a/configure.in
+++ b/configure.in
@@ -32,11 +32,11 @@ AC_SUBST(SYSTEM_MIGEMODIR)
3232 #####################################################################
3333 # check operating systems
3434 #####################################################################
35-SO_VERSION=1.5.8
35+SO_VERSION=1.6.1
3636 AC_SUBST(SO_VERSION)
3737 AC_MSG_CHECKING(Operating System)
3838
39-OBJ="src/gc.o src/stack.o src/string.o src/list.o src/kanji.o src/debug.o src/hash.o src/vector.o src/block.o src/fun.o src/class.o src/completion.o src/xyzsh.o src/parser.o src/run.o src/readline.o src/curses.o src/cmd_base.o src/cmd_obj.o src/cmd_file.o src/cmd_str.o src/cmd_ary.o src/cmd_condition.o src/interface.o src/memchecker.o src/object.o src/uobject.o src/cmd_num.o src/cmd_curses.o src/fd.o src/nfun.o src/extprog.o"
39+OBJ="src/gc.o src/stack.o src/string.o src/list.o src/kanji.o src/debug.o src/hash.o src/vector.o src/block.o src/fun.o src/class.o src/completion.o src/xyzsh.o src/parser.o src/run.o src/readline.o src/curses.o src/cmd_base.o src/cmd_obj.o src/cmd_file.o src/cmd_str.o src/cmd_ary.o src/cmd_condition.o src/interface.o src/object.o src/uobject.o src/cmd_num.o src/cmd_curses.o src/fd.o src/nfun.o src/extprog.o"
4040 AC_SUBST(OBJ)
4141
4242 if test `uname -s` = "Darwin"; then
--- a/src/block.c
+++ b/src/block.c
@@ -962,7 +962,7 @@ static BOOL expand_env_to_command(ALLOC char** result, char* str, sCommand* comm
962962 /// block ///
963963 else {
964964 int rcode;
965- sObject* nextout = FD_NEW_STACK(kFDKindBuf, 0);
965+ sObject* nextout = FD_NEW_STACK();
966966
967967 if(!run(env->mBlock, nextin, nextout, &rcode, runinfo->mCurrentObject, runinfo->mRunningObject))
968968 {
@@ -986,9 +986,9 @@ static BOOL expand_env_to_command(ALLOC char** result, char* str, sCommand* comm
986986 fd_split(nextout, env->mLineField);
987987
988988 int i;
989- for(i=0; i<vector_count(SFD(nextout).fdbuf.mLines); i++)
989+ for(i=0; i<vector_count(SFD(nextout).mLines); i++)
990990 {
991- char* item = vector_item(SFD(nextout).fdbuf.mLines, i);
991+ char* item = vector_item(SFD(nextout).mLines, i);
992992 sObject* item2 = STRING_NEW_STACK(item);
993993 string_chomp(item2);
994994
@@ -998,7 +998,7 @@ static BOOL expand_env_to_command(ALLOC char** result, char* str, sCommand* comm
998998 }
999999 }
10001000 else {
1001- add_str_to_buf(&buf, SFD(nextout).fdbuf.mBuf, SFD(nextout).fdbuf.mBufLen);
1001+ add_str_to_buf(&buf, SFD(nextout).mBuf, SFD(nextout).mBufLen);
10021002 }
10031003 }
10041004 }
@@ -1310,8 +1310,8 @@ int block_gc_children_mark(sObject* self)
13101310 for(k=0; k<SBLOCK(self).mStatments[i].mCommands[j].mBlocksNum; k++)
13111311 {
13121312 sObject* block = SBLOCK(self).mStatments[i].mCommands[j].mBlocks[k];
1313- if((block->mFlg & GC_MARK) == 0) {
1314- block->mFlg |= GC_MARK;
1313+ if(IS_MARKED(block) == 0) {
1314+ SET_MARK(block);
13151315 count++;
13161316 count += block_gc_children_mark(block);
13171317 }
@@ -1319,8 +1319,8 @@ int block_gc_children_mark(sObject* self)
13191319 for(k=0; k<SBLOCK(self).mStatments[i].mCommands[j].mEnvsNum; k++) {
13201320 if(SBLOCK(self).mStatments[i].mCommands[j].mEnvs[k].mKind == kEnvBlock) {
13211321 sObject* block = SBLOCK(self).mStatments[i].mCommands[j].mEnvs[k].mBlock;
1322- if((block->mFlg & GC_MARK) == 0) {
1323- block->mFlg |= GC_MARK;
1322+ if(IS_MARKED(block) == 0) {
1323+ SET_MARK(block);
13241324 count++;
13251325 count += block_gc_children_mark(block);
13261326 }
@@ -1355,7 +1355,7 @@ void sCommand_add_env(sCommand* self, MANAGED char* name, MANAGED char* key, BOO
13551355 self->mEnvsNum++;
13561356 }
13571357
1358-void sCommand_add_env_block(sCommand* self, sObject* block, BOOL double_dollar, enum eLineField lf)
1358+void sCommand_add_env_block(sCommand* self, sObject* block, BOOL double_dollar, eLineField lf)
13591359 {
13601360 if(self->mEnvsNum >= self->mEnvsSize) {
13611361 if(self->mEnvs == NULL) {
--- a/src/class.c
+++ b/src/class.c
@@ -141,8 +141,8 @@ int class_gc_children_mark(sObject* self)
141141
142142 sObject* block = SCLASS(self).mBlock;
143143 if(block) {
144- if((block->mFlg & GC_MARK) == 0) {
145- block->mFlg |= GC_MARK;
144+ if(IS_MARKED(block) == 0) {
145+ SET_MARK(block);
146146 count++;
147147 count += object_gc_children_mark(block);
148148 }
@@ -150,8 +150,8 @@ int class_gc_children_mark(sObject* self)
150150
151151 sObject* parent = SCLASS(self).mParent;
152152 if(parent) {
153- if((parent->mFlg & GC_MARK) == 0) {
154- parent->mFlg |= GC_MARK;
153+ if(IS_MARKED(parent) == 0) {
154+ SET_MARK(parent);
155155 count++;
156156 count += object_gc_children_mark(parent);
157157 }
@@ -159,8 +159,8 @@ int class_gc_children_mark(sObject* self)
159159
160160 sObject* lobjects = SCLASS(self).mLocalObjects;
161161 if(lobjects) {
162- if((lobjects->mFlg & GC_MARK) == 0) {
163- lobjects->mFlg |= GC_MARK;
162+ if(IS_MARKED(lobjects) == 0) {
163+ SET_MARK(lobjects);
164164 count++;
165165 count += object_gc_children_mark(lobjects);
166166 }
@@ -168,8 +168,8 @@ int class_gc_children_mark(sObject* self)
168168
169169 sObject* arg_blocks = SCLASS(self).mArgBlocks;
170170 if(arg_blocks) {
171- if((arg_blocks->mFlg & GC_MARK) == 0) {
172- arg_blocks->mFlg |= GC_MARK;
171+ if(IS_MARKED(arg_blocks) == 0) {
172+ SET_MARK(arg_blocks);
173173 count++;
174174 count += object_gc_children_mark(arg_blocks);
175175 }
--- a/src/cmd_ary.c
+++ b/src/cmd_ary.c
@@ -28,7 +28,7 @@ BOOL cmd_each(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
2828 {
2929 sCommand* command = runinfo->mCommand;
3030
31- enum eLineField lf = gLineField;
31+ eLineField lf = gLineField;
3232 if(sCommand_option_item(command, "-Lw")) {
3333 lf = kCRLF;
3434 }
@@ -47,7 +47,7 @@ BOOL cmd_each(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
4747
4848 char* argument;
4949 if(argument = sCommand_option_with_argument_item(command, "-number")) {
50- if(SFD(nextin).fdbuf.mBufLen == 0) {
50+ if(SFD(nextin).mBufLen == 0) {
5151 runinfo->mRCode = RCODE_NFUN_NULL_INPUT;
5252 }
5353 else {
@@ -56,16 +56,16 @@ BOOL cmd_each(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
5656
5757 int number = atoi(argument);
5858
59- sObject* nextin2 = FD_NEW_STACK(kFDKindBuf, 0);
59+ sObject* nextin2 = FD_NEW_STACK();
6060
6161 int i;
62- for(i=0; i<vector_count(SFD(nextin).fdbuf.mLines); i+=number) {
62+ for(i=0; i<vector_count(SFD(nextin).mLines); i+=number) {
6363 fd_clear(nextin2);
6464
6565 int j;
66- for(j=0; j<number && i+j<vector_count(SFD(nextin).fdbuf.mLines); j++)
66+ for(j=0; j<number && i+j<vector_count(SFD(nextin).mLines); j++)
6767 {
68- char* str = vector_item(SFD(nextin).fdbuf.mLines, i+j);
68+ char* str = vector_item(SFD(nextin).mLines, i+j);
6969 if(!fd_write(nextin2, str, strlen(str))) {
7070 err_msg("interrupt", runinfo->mSName, runinfo->mSLine, command->mArgs[0]);
7171 runinfo->mRCode = RCODE_SIGNAL_INTERRUPT;
@@ -89,20 +89,20 @@ BOOL cmd_each(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
8989 }
9090 }
9191 else {
92- if(SFD(nextin).fdbuf.mBufLen == 0) {
92+ if(SFD(nextin).mBufLen == 0) {
9393 runinfo->mRCode = RCODE_NFUN_NULL_INPUT;
9494 }
9595 else {
9696 runinfo->mRCode = 0;
9797 }
9898
99- sObject* nextin2 = FD_NEW_STACK(kFDKindBuf, 0);
99+ sObject* nextin2 = FD_NEW_STACK();
100100
101101 int i;
102- for(i=0; i<vector_count(SFD(nextin).fdbuf.mLines); i++) {
102+ for(i=0; i<vector_count(SFD(nextin).mLines); i++) {
103103 fd_clear(nextin2);
104104
105- char* str = vector_item(SFD(nextin).fdbuf.mLines, i);
105+ char* str = vector_item(SFD(nextin).mLines, i);
106106
107107 if(!fd_write(nextin2, str, strlen(str))) {
108108 err_msg("interrupt", runinfo->mSName, runinfo->mSLine, command->mArgs[0]);
@@ -134,7 +134,7 @@ BOOL cmd_join(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
134134 {
135135 sCommand* command = runinfo->mCommand;
136136
137- enum eLineField lf = gLineField;
137+ eLineField lf = gLineField;
138138 if(sCommand_option_item(command, "-Lw")) {
139139 lf = kCRLF;
140140 }
@@ -159,10 +159,10 @@ BOOL cmd_join(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
159159 field = " ";
160160 }
161161
162- if(vector_count(SFD(nextin).fdbuf.mLines) > 0) {
162+ if(vector_count(SFD(nextin).mLines) > 0) {
163163 int i;
164- for(i=0; i<vector_count(SFD(nextin).fdbuf.mLines)-1; i++) {
165- sObject* line = STRING_NEW_STACK(vector_item(SFD(nextin).fdbuf.mLines, i));
164+ for(i=0; i<vector_count(SFD(nextin).mLines)-1; i++) {
165+ sObject* line = STRING_NEW_STACK(vector_item(SFD(nextin).mLines, i));
166166 string_chomp(line);
167167 if(!fd_write(nextout, string_c_str(line), string_length(line))) {
168168 err_msg("signal interrupt", runinfo->mSName, runinfo->mSLine, command->mArgs[0]);
@@ -176,7 +176,7 @@ BOOL cmd_join(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
176176 }
177177 }
178178
179- sObject* line = STRING_NEW_STACK(vector_item(SFD(nextin).fdbuf.mLines, i));
179+ sObject* line = STRING_NEW_STACK(vector_item(SFD(nextin).mLines, i));
180180 string_chomp(line);
181181 if(!fd_write(nextout, string_c_str(line), string_length(line))) {
182182 err_msg("signal interrupt", runinfo->mSName, runinfo->mSLine, command->mArgs[0]);
@@ -191,7 +191,7 @@ BOOL cmd_join(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
191191 }
192192 }
193193
194- if(SFD(nextin).fdbuf.mBufLen == 0) {
194+ if(SFD(nextin).mBufLen == 0) {
195195 runinfo->mRCode = RCODE_NFUN_NULL_INPUT;
196196 }
197197 else {
@@ -206,7 +206,7 @@ BOOL cmd_lines(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
206206 {
207207 sCommand* command = runinfo->mCommand;
208208
209- enum eLineField lf = gLineField;
209+ eLineField lf = gLineField;
210210 if(sCommand_option_item(command, "-Lw")) {
211211 lf = kCRLF;
212212 }
@@ -221,7 +221,7 @@ BOOL cmd_lines(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
221221 }
222222
223223 if(command->mArgsNumRuntime > 1 && command->mBlocksNum <= command->mArgsNumRuntime-1 && runinfo->mFilter) {
224- if(SFD(nextin).fdbuf.mBufLen == 0) {
224+ if(SFD(nextin).mBufLen == 0) {
225225 runinfo->mRCode = RCODE_NFUN_NULL_INPUT;
226226 }
227227 else {
@@ -230,7 +230,7 @@ BOOL cmd_lines(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
230230
231231 fd_split(nextin, lf);
232232
233- if(vector_count(SFD(nextin).fdbuf.mLines) > 0) {
233+ if(vector_count(SFD(nextin).mLines) > 0) {
234234 int i;
235235 for(i=1; i<command->mArgsNumRuntime; i++) {
236236 char* arg = command->mArgsRuntime[i];
@@ -256,30 +256,30 @@ BOOL cmd_lines(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
256256 int second = atoi(buf2);
257257
258258 if(first < 0) {
259- first += vector_count(SFD(nextin).fdbuf.mLines);
259+ first += vector_count(SFD(nextin).mLines);
260260 if(first < 0) first = 0;
261261 }
262262 if(second < 0) {
263- second += vector_count(SFD(nextin).fdbuf.mLines);
263+ second += vector_count(SFD(nextin).mLines);
264264 if(second < 0) second = 0;
265265 }
266- if(first >= vector_count(SFD(nextin).fdbuf.mLines)) {
267- first = vector_count(SFD(nextin).fdbuf.mLines) -1;
266+ if(first >= vector_count(SFD(nextin).mLines)) {
267+ first = vector_count(SFD(nextin).mLines) -1;
268268 if(first < 0) first = 0;
269269 }
270- if(second >= vector_count(SFD(nextin).fdbuf.mLines)) {
271- second = vector_count(SFD(nextin).fdbuf.mLines) -1;
270+ if(second >= vector_count(SFD(nextin).mLines)) {
271+ second = vector_count(SFD(nextin).mLines) -1;
272272 if(second < 0) second = 0;
273273 }
274274
275275 if(first < second) {
276- sObject* nextin2 = FD_NEW_STACK(kFDKindBuf, 0);
276+ sObject* nextin2 = FD_NEW_STACK();
277277
278278 int j;
279279 for(j=first; j<=second; j++) {
280280 fd_clear(nextin2);
281281
282- char* str = vector_item(SFD(nextin).fdbuf.mLines, j);
282+ char* str = vector_item(SFD(nextin).mLines, j);
283283 if(!fd_write(nextin2,str,strlen(str))) {
284284 err_msg("interrupt", runinfo->mSName, runinfo->mSLine, command->mArgs[0]);
285285 runinfo->mRCode = RCODE_SIGNAL_INTERRUPT;
@@ -295,7 +295,7 @@ BOOL cmd_lines(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
295295 runinfo->mRCode = rcode;
296296 }
297297 else {
298- if(!fd_write(nextout, SFD(nextin2).fdbuf.mBuf, SFD(nextin2).fdbuf.mBufLen))
298+ if(!fd_write(nextout, SFD(nextin2).mBuf, SFD(nextin2).mBufLen))
299299 {
300300 err_msg("interrupt", runinfo->mSName, runinfo->mSLine, command->mArgs[0]);
301301 runinfo->mRCode = RCODE_SIGNAL_INTERRUPT;
@@ -306,13 +306,13 @@ BOOL cmd_lines(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
306306 }
307307 }
308308 else {
309- sObject* nextin2 = FD_NEW_STACK(kFDKindBuf, 0);
309+ sObject* nextin2 = FD_NEW_STACK();
310310
311311 int j;
312312 for(j=first; j>=second; j--) {
313313 fd_clear(nextin2);
314314
315- char* str = vector_item(SFD(nextin).fdbuf.mLines, j);
315+ char* str = vector_item(SFD(nextin).mLines, j);
316316 if(!fd_write(nextin2, str, strlen(str))) {
317317 err_msg("interrupt", runinfo->mSName, runinfo->mSLine, command->mArgs[0]);
318318 runinfo->mRCode = RCODE_SIGNAL_INTERRUPT;
@@ -329,7 +329,7 @@ BOOL cmd_lines(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
329329 runinfo->mRCode = rcode;
330330 }
331331 else {
332- if(!fd_write(nextout, SFD(nextin2).fdbuf.mBuf, SFD(nextin2).fdbuf.mBufLen))
332+ if(!fd_write(nextout, SFD(nextin2).mBuf, SFD(nextin2).mBufLen))
333333 {
334334 err_msg("interrupt", runinfo->mSName, runinfo->mSLine, command->mArgs[0]);
335335 runinfo->mRCode = RCODE_SIGNAL_INTERRUPT;
@@ -345,17 +345,17 @@ BOOL cmd_lines(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
345345 int num = atoi(arg);
346346
347347 if(num < 0) {
348- num += vector_count(SFD(nextin).fdbuf.mLines);
348+ num += vector_count(SFD(nextin).mLines);
349349 if(num < 0) num = 0;
350350 }
351- if(num >= vector_count(SFD(nextin).fdbuf.mLines)) {
352- num = vector_count(SFD(nextin).fdbuf.mLines) -1;
351+ if(num >= vector_count(SFD(nextin).mLines)) {
352+ num = vector_count(SFD(nextin).mLines) -1;
353353 if(num < 0) num = 0;
354354 }
355355
356- sObject* nextin2 = FD_NEW_STACK(kFDKindBuf, 0);
356+ sObject* nextin2 = FD_NEW_STACK();
357357
358- char* str = vector_item(SFD(nextin).fdbuf.mLines, num);
358+ char* str = vector_item(SFD(nextin).mLines, num);
359359 if(!fd_write(nextin2, str, strlen(str))){
360360 err_msg("interrupt", runinfo->mSName, runinfo->mSLine, command->mArgs[0]);
361361 runinfo->mRCode = RCODE_SIGNAL_INTERRUPT;
@@ -372,7 +372,7 @@ BOOL cmd_lines(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
372372 runinfo->mRCode = rcode;
373373 }
374374 else {
375- if(!fd_write(nextout, SFD(nextin2).fdbuf.mBuf, SFD(nextin2).fdbuf.mBufLen))
375+ if(!fd_write(nextout, SFD(nextin2).mBuf, SFD(nextin2).mBufLen))
376376 {
377377 err_msg("interrupt", runinfo->mSName, runinfo->mSLine, command->mArgs[0]);
378378 runinfo->mRCode = RCODE_SIGNAL_INTERRUPT;
@@ -548,7 +548,7 @@ BOOL cmd_sort(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
548548 {
549549 sCommand* command = runinfo->mCommand;
550550
551- enum eLineField lf = gLineField;
551+ eLineField lf = gLineField;
552552 if(sCommand_option_item(command, "-Lw")) {
553553 lf = kCRLF;
554554 }
@@ -566,23 +566,23 @@ BOOL cmd_sort(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
566566 if(sCommand_option_item(command, "-shuffle")) {
567567 fd_split(nextin, lf);
568568
569- if(vector_count(SFD(nextin).fdbuf.mLines) > 0) {
570- int* shuffle_num = MALLOC(sizeof(int)*vector_count(SFD(nextin).fdbuf.mLines));
569+ if(vector_count(SFD(nextin).mLines) > 0) {
570+ int* shuffle_num = MALLOC(sizeof(int)*vector_count(SFD(nextin).mLines));
571571 int i;
572- for(i=0;i<vector_count(SFD(nextin).fdbuf.mLines); i++) {
572+ for(i=0;i<vector_count(SFD(nextin).mLines); i++) {
573573 shuffle_num[i] = rand() % 2560;
574574 }
575575
576- sObject* nextin2 = FD_NEW_STACK(kFDKindBuf, 0);
577- if(!vector_sort_cancelable_shuffle(SFD(nextin).fdbuf.mLines, sort_fun_shuffle, shuffle_num)) {
576+ sObject* nextin2 = FD_NEW_STACK();
577+ if(!vector_sort_cancelable_shuffle(SFD(nextin).mLines, sort_fun_shuffle, shuffle_num)) {
578578 FREE(shuffle_num);
579579 return FALSE;
580580 }
581581
582582 FREE(shuffle_num);
583583
584- for(i=0; i<vector_count(SFD(nextin).fdbuf.mLines); i++) {
585- char* line = vector_item(SFD(nextin).fdbuf.mLines, i);
584+ for(i=0; i<vector_count(SFD(nextin).mLines); i++) {
585+ char* line = vector_item(SFD(nextin).mLines, i);
586586 if(!fd_write(nextout, line, strlen(line))) {
587587 err_msg("interrupt", runinfo->mSName, runinfo->mSLine, command->mArgs[0]);
588588 runinfo->mRCode = RCODE_SIGNAL_INTERRUPT;
@@ -591,7 +591,7 @@ BOOL cmd_sort(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
591591 }
592592 }
593593
594- if(SFD(nextin).fdbuf.mBufLen == 0) {
594+ if(SFD(nextin).mBufLen == 0) {
595595 runinfo->mRCode = RCODE_NFUN_NULL_INPUT;
596596 }
597597 else {
@@ -601,15 +601,15 @@ BOOL cmd_sort(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
601601 else if(command->mBlocksNum == 1) {
602602 fd_split(nextin, lf);
603603
604- if(vector_count(SFD(nextin).fdbuf.mLines) > 0) {
605- sObject* nextin2 = FD_NEW_STACK(kFDKindBuf, 0);
606- if(!vector_sort_cancelable(SFD(nextin).fdbuf.mLines, sort_fun, runinfo, nextin2, nextout)) {
604+ if(vector_count(SFD(nextin).mLines) > 0) {
605+ sObject* nextin2 = FD_NEW_STACK();
606+ if(!vector_sort_cancelable(SFD(nextin).mLines, sort_fun, runinfo, nextin2, nextout)) {
607607 return FALSE;
608608 }
609609
610610 int i;
611- for(i=0; i<vector_count(SFD(nextin).fdbuf.mLines); i++) {
612- char* line = vector_item(SFD(nextin).fdbuf.mLines, i);
611+ for(i=0; i<vector_count(SFD(nextin).mLines); i++) {
612+ char* line = vector_item(SFD(nextin).mLines, i);
613613 if(!fd_write(nextout, line, strlen(line))) {
614614 err_msg("interrupt", runinfo->mSName, runinfo->mSLine, command->mArgs[0]);
615615 runinfo->mRCode = RCODE_SIGNAL_INTERRUPT;
@@ -617,7 +617,7 @@ BOOL cmd_sort(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
617617 }
618618 }
619619 }
620- if(SFD(nextin).fdbuf.mBufLen == 0) {
620+ if(SFD(nextin).mBufLen == 0) {
621621 runinfo->mRCode = RCODE_NFUN_NULL_INPUT;
622622 }
623623 else {
--- a/src/cmd_base.c
+++ b/src/cmd_base.c
@@ -270,7 +270,7 @@ BOOL cmd_print(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
270270 }
271271 else if(runinfo->mFilter) {
272272 if(sCommand_option_item(command, "-read-from-error")) {
273- if(!fd_write(out, SFD(gStderr).fdbuf.mBuf, SFD(gStderr).fdbuf.mBufLen)) {
273+ if(!fd_write(out, SFD(gStderr).mBuf, SFD(gStderr).mBufLen)) {
274274 err_msg("signal interrupt", runinfo->mSName, runinfo->mSLine, command->mArgs[0]);
275275 runinfo->mRCode = RCODE_SIGNAL_INTERRUPT;
276276 return FALSE;
@@ -278,14 +278,14 @@ BOOL cmd_print(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
278278 fd_clear(gStderr);
279279 }
280280 else {
281- if(!fd_write(out, SFD(nextin).fdbuf.mBuf, SFD(nextin).fdbuf.mBufLen)) {
281+ if(!fd_write(out, SFD(nextin).mBuf, SFD(nextin).mBufLen)) {
282282 err_msg("signal interrupt", runinfo->mSName, runinfo->mSLine, command->mArgs[0]);
283283 runinfo->mRCode = RCODE_SIGNAL_INTERRUPT;
284284 return FALSE;
285285 }
286286 }
287287
288- if(SFD(nextin).fdbuf.mBufLen == 0) {
288+ if(SFD(nextin).mBufLen == 0) {
289289 runinfo->mRCode = RCODE_NFUN_NULL_INPUT;
290290 }
291291 else {
@@ -377,7 +377,12 @@ BOOL cmd_sweep(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
377377
378378 sObject* item = uobject_item(current_object, var_name);
379379
380- if(item && item->mUserObject) {
380+ if(!IS_USER_OBJECT(item)) {
381+ err_msg("it's not user object. can't delete", runinfo->mSName, runinfo->mSLine, command->mArgs[0]);
382+ return FALSE;
383+ }
384+
385+ if(item) {
381386 if(item != gCurrentObject || strcmp(var_name, SUOBJECT(item).mName) != 0) {
382387 if(uobject_erase(current_object, var_name)) {
383388 runinfo->mRCode = 0;
@@ -443,7 +448,7 @@ BOOL cmd_eval(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
443448 runinfo->mRCode = rcode;
444449 }
445450 else if(runinfo->mFilter) {
446- char* buf = SFD(nextin).fdbuf.mBuf;
451+ char* buf = SFD(nextin).mBuf;
447452
448453 stack_start_stack();
449454 int rcode = 0;
@@ -453,7 +458,7 @@ BOOL cmd_eval(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
453458 snprintf(buf2, BUFSIZ, "%s %d: eval", runinfo->mSName, runinfo->mSLine);
454459
455460 if(parse(buf, buf2, &sline, block, NULL)) {
456- sObject* nextin2 = FD_NEW_STACK(kFDKindBuf, 0);
461+ sObject* nextin2 = FD_NEW_STACK();
457462 if(!run(block, nextin2, nextout, &rcode, runinfo->mCurrentObject, runinfo->mRunningObject)) {
458463 err_msg_adding("run time error", runinfo->mSName, runinfo->mSLine, command->mArgs[0]);
459464 runinfo->mRCode = rcode;
@@ -469,7 +474,7 @@ BOOL cmd_eval(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
469474
470475 stack_end_stack();
471476
472- if(SFD(nextin).fdbuf.mBufLen == 0) {
477+ if(SFD(nextin).mBufLen == 0) {
473478 runinfo->mRCode = RCODE_NFUN_NULL_INPUT;
474479 }
475480 else {
@@ -544,7 +549,7 @@ BOOL cmd_stackframe(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
544549 char* key = uobject_loop_key(it);
545550
546551 char*obj_kind[16] = {
547- NULL, "var", "array", "hash", "list", "native function", "block", "file dicriptor", "job", "object", "memchecker", "function", "class", "external program", "completion", "external object"
552+ NULL, "var", "array", "hash", "list", "native function", "block", "file dicriptor", "job", "object", "function", "class", "external program", "completion", "external object"
548553 };
549554 int size = snprintf(buf, BUFSIZ, "%s: %s\n", key, obj_kind[TYPE(object2)]);
550555
@@ -571,8 +576,9 @@ BOOL cmd_funinfo(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
571576 {
572577 sObject* running_object = runinfo->mRunningObject;
573578
574- if(running_object && (TYPE(running_object) == T_FUN || TYPE(running_object) == T_CLASS) && SFUN(running_object).mRunInfo) {
575- sRunInfo* runinfo2 = SFUN(running_object).mRunInfo;
579+ if(running_object && (TYPE(running_object) == T_FUN || TYPE(running_object) == T_CLASS) && gRunInfoOfRunningObject)
580+ {
581+ sRunInfo* runinfo2 = gRunInfoOfRunningObject;
576582
577583 char buf[BUFSIZ];
578584 sObject* object;
--- a/src/cmd_condition.c
+++ b/src/cmd_condition.c
@@ -31,7 +31,7 @@ BOOL cmd_condition_n(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
3131
3232 if(runinfo->mFilter) {
3333 runinfo->mRCode = RCODE_NFUN_FALSE;
34- if(SFD(nextin).fdbuf.mBufLen > 0) {
34+ if(SFD(nextin).mBufLen > 0) {
3535 runinfo->mRCode = 0;
3636 }
3737 }
@@ -45,7 +45,7 @@ BOOL cmd_condition_z(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
4545
4646 if(runinfo->mFilter) {
4747 runinfo->mRCode = RCODE_NFUN_FALSE;
48- if(SFD(nextin).fdbuf.mBufLen == 0) {
48+ if(SFD(nextin).mBufLen == 0) {
4949 runinfo->mRCode = 0;
5050 }
5151 }
@@ -60,7 +60,7 @@ BOOL cmd_condition_b(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
6060 if(runinfo->mFilter) {
6161 runinfo->mRCode = RCODE_NFUN_FALSE;
6262 struct stat stat_;
63- if(stat(SFD(nextin).fdbuf.mBuf, &stat_) == 0) {
63+ if(stat(SFD(nextin).mBuf, &stat_) == 0) {
6464 if(S_ISBLK(stat_.st_mode)) {
6565 runinfo->mRCode = 0;
6666 }
@@ -77,7 +77,7 @@ BOOL cmd_condition_c(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
7777 if(runinfo->mFilter) {
7878 runinfo->mRCode = RCODE_NFUN_FALSE;
7979 struct stat stat_;
80- if(stat(SFD(nextin).fdbuf.mBuf, &stat_) == 0) {
80+ if(stat(SFD(nextin).mBuf, &stat_) == 0) {
8181 if(S_ISCHR(stat_.st_mode)) {
8282 runinfo->mRCode = 0;
8383 }
@@ -94,7 +94,7 @@ BOOL cmd_condition_d(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
9494 if(runinfo->mFilter) {
9595 runinfo->mRCode = RCODE_NFUN_FALSE;
9696 struct stat stat_;
97- if(stat(SFD(nextin).fdbuf.mBuf, &stat_) == 0) {
97+ if(stat(SFD(nextin).mBuf, &stat_) == 0) {
9898 if(S_ISDIR(stat_.st_mode)) {
9999 runinfo->mRCode = 0;
100100 }
@@ -111,7 +111,7 @@ BOOL cmd_condition_f(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
111111 if(runinfo->mFilter) {
112112 runinfo->mRCode = RCODE_NFUN_FALSE;
113113 struct stat stat_;
114- if(stat(SFD(nextin).fdbuf.mBuf, &stat_) == 0) {
114+ if(stat(SFD(nextin).mBuf, &stat_) == 0) {
115115 if(S_ISREG(stat_.st_mode)) {
116116 runinfo->mRCode = 0;
117117 }
@@ -128,7 +128,7 @@ BOOL cmd_condition_h(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
128128 if(runinfo->mFilter) {
129129 runinfo->mRCode = RCODE_NFUN_FALSE;
130130 struct stat stat_;
131- if(stat(SFD(nextin).fdbuf.mBuf, &stat_) == 0) {
131+ if(stat(SFD(nextin).mBuf, &stat_) == 0) {
132132 if(S_ISLNK(stat_.st_mode)) {
133133 runinfo->mRCode = 0;
134134 }
@@ -145,7 +145,7 @@ BOOL cmd_condition_l(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
145145 if(runinfo->mFilter) {
146146 runinfo->mRCode = RCODE_NFUN_FALSE;
147147 struct stat stat_;
148- if(stat(SFD(nextin).fdbuf.mBuf, &stat_) == 0) {
148+ if(stat(SFD(nextin).mBuf, &stat_) == 0) {
149149 if(S_ISLNK(stat_.st_mode)) {
150150 runinfo->mRCode = 0;
151151 }
@@ -162,7 +162,7 @@ BOOL cmd_condition_p(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
162162 if(runinfo->mFilter) {
163163 runinfo->mRCode = RCODE_NFUN_FALSE;
164164 struct stat stat_;
165- if(stat(SFD(nextin).fdbuf.mBuf, &stat_) == 0) {
165+ if(stat(SFD(nextin).mBuf, &stat_) == 0) {
166166 if(S_ISFIFO(stat_.st_mode)) {
167167 runinfo->mRCode = 0;
168168 }
@@ -185,7 +185,7 @@ BOOL cmd_condition_s2(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
185185 if(runinfo->mFilter) {
186186 runinfo->mRCode = RCODE_NFUN_FALSE;
187187 struct stat stat_;
188- if(stat(SFD(nextin).fdbuf.mBuf, &stat_) == 0) {
188+ if(stat(SFD(nextin).mBuf, &stat_) == 0) {
189189 if(S_ISSOCK(stat_.st_mode)) {
190190 runinfo->mRCode = 0;
191191 }
@@ -202,7 +202,7 @@ BOOL cmd_condition_g(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
202202 if(runinfo->mFilter) {
203203 runinfo->mRCode = RCODE_NFUN_FALSE;
204204 struct stat stat_;
205- if(stat(SFD(nextin).fdbuf.mBuf, &stat_) == 0) {
205+ if(stat(SFD(nextin).mBuf, &stat_) == 0) {
206206 if(stat_.st_mode & S_ISGID) {
207207 runinfo->mRCode = 0;
208208 }
@@ -219,7 +219,7 @@ BOOL cmd_condition_k(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
219219 if(runinfo->mFilter) {
220220 runinfo->mRCode = RCODE_NFUN_FALSE;
221221 struct stat stat_;
222- if(stat(SFD(nextin).fdbuf.mBuf, &stat_) == 0) {
222+ if(stat(SFD(nextin).mBuf, &stat_) == 0) {
223223 #if defined(S_ISTXT)
224224 if(stat_.st_mode & S_ISTXT) {
225225 runinfo->mRCode = 0;
@@ -243,7 +243,7 @@ BOOL cmd_condition_u(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
243243 if(runinfo->mFilter) {
244244 runinfo->mRCode = RCODE_NFUN_FALSE;
245245 struct stat stat_;
246- if(stat(SFD(nextin).fdbuf.mBuf, &stat_) == 0) {
246+ if(stat(SFD(nextin).mBuf, &stat_) == 0) {
247247 if(stat_.st_mode & S_ISUID) {
248248 runinfo->mRCode = 0;
249249 }
@@ -259,7 +259,7 @@ BOOL cmd_condition_r(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
259259
260260 if(runinfo->mFilter) {
261261 runinfo->mRCode = RCODE_NFUN_FALSE;
262- if(access(SFD(nextin).fdbuf.mBuf, R_OK) == 0) {
262+ if(access(SFD(nextin).mBuf, R_OK) == 0) {
263263 runinfo->mRCode = 0;
264264 }
265265 }
@@ -273,7 +273,7 @@ BOOL cmd_condition_w(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
273273
274274 if(runinfo->mFilter) {
275275 runinfo->mRCode = RCODE_NFUN_FALSE;
276- if(access(SFD(nextin).fdbuf.mBuf, W_OK) == 0) {
276+ if(access(SFD(nextin).mBuf, W_OK) == 0) {
277277 runinfo->mRCode = 0;
278278 }
279279 }
@@ -287,7 +287,7 @@ BOOL cmd_condition_x(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
287287
288288 if(runinfo->mFilter) {
289289 runinfo->mRCode = RCODE_NFUN_FALSE;
290- if(access(SFD(nextin).fdbuf.mBuf, X_OK) == 0) {
290+ if(access(SFD(nextin).mBuf, X_OK) == 0) {
291291 runinfo->mRCode = 0;
292292 }
293293 }
@@ -302,7 +302,7 @@ BOOL cmd_condition_o(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
302302 if(runinfo->mFilter) {
303303 runinfo->mRCode = RCODE_NFUN_FALSE;
304304 struct stat stat_;
305- if(stat(SFD(nextin).fdbuf.mBuf, &stat_) == 0) {
305+ if(stat(SFD(nextin).mBuf, &stat_) == 0) {
306306 if(stat_.st_uid == getuid()) {
307307 runinfo->mRCode = 0;
308308 }
@@ -319,7 +319,7 @@ BOOL cmd_condition_g2(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
319319 if(runinfo->mFilter) {
320320 runinfo->mRCode = RCODE_NFUN_FALSE;
321321 struct stat stat_;
322- if(stat(SFD(nextin).fdbuf.mBuf, &stat_) == 0) {
322+ if(stat(SFD(nextin).mBuf, &stat_) == 0) {
323323 if(stat_.st_gid == getgid()) {
324324 runinfo->mRCode = 0;
325325 }
@@ -336,7 +336,7 @@ BOOL cmd_condition_e(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
336336 if(runinfo->mFilter) {
337337 runinfo->mRCode = RCODE_NFUN_FALSE;
338338 struct stat stat_;
339- if(stat(SFD(nextin).fdbuf.mBuf, &stat_) == 0) {
339+ if(stat(SFD(nextin).mBuf, &stat_) == 0) {
340340 runinfo->mRCode = 0;
341341 }
342342 }
@@ -351,7 +351,7 @@ BOOL cmd_condition_s(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
351351 if(runinfo->mFilter) {
352352 runinfo->mRCode = RCODE_NFUN_FALSE;
353353 struct stat stat_;
354- if(stat(SFD(nextin).fdbuf.mBuf, &stat_) == 0) {
354+ if(stat(SFD(nextin).mBuf, &stat_) == 0) {
355355 if(stat_.st_size > 0) {
356356 runinfo->mRCode = 0;
357357 }
@@ -368,12 +368,12 @@ BOOL cmd_condition_eq(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
368368 if(runinfo->mFilter && command->mArgsNumRuntime == 2) {
369369 runinfo->mRCode = RCODE_NFUN_FALSE;
370370 if(sCommand_option_item(command, "-ignore-case")) {
371- if(strcasecmp(SFD(nextin).fdbuf.mBuf, command->mArgsRuntime[1]) == 0) {
371+ if(strcasecmp(SFD(nextin).mBuf, command->mArgsRuntime[1]) == 0) {
372372 runinfo->mRCode = 0;
373373 }
374374 }
375375 else {
376- if(strcmp(SFD(nextin).fdbuf.mBuf, command->mArgsRuntime[1]) == 0) {
376+ if(strcmp(SFD(nextin).mBuf, command->mArgsRuntime[1]) == 0) {
377377 runinfo->mRCode = 0;
378378 }
379379 }
@@ -389,12 +389,12 @@ BOOL cmd_condition_neq(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
389389 if(runinfo->mFilter && command->mArgsNumRuntime == 2) {
390390 runinfo->mRCode = RCODE_NFUN_FALSE;
391391 if(sCommand_option_item(command, "-ignore-case")) {
392- if(strcasecmp(SFD(nextin).fdbuf.mBuf, command->mArgsRuntime[1]) != 0) {
392+ if(strcasecmp(SFD(nextin).mBuf, command->mArgsRuntime[1]) != 0) {
393393 runinfo->mRCode = 0;
394394 }
395395 }
396396 else {
397- if(strcmp(SFD(nextin).fdbuf.mBuf, command->mArgsRuntime[1]) != 0) {
397+ if(strcmp(SFD(nextin).mBuf, command->mArgsRuntime[1]) != 0) {
398398 runinfo->mRCode = 0;
399399 }
400400 }
@@ -410,12 +410,12 @@ BOOL cmd_condition_slt(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
410410 if(runinfo->mFilter && command->mArgsNumRuntime == 2) {
411411 runinfo->mRCode = RCODE_NFUN_FALSE;
412412 if(sCommand_option_item(command, "-ignore-case")) {
413- if(strcasecmp(SFD(nextin).fdbuf.mBuf, command->mArgsRuntime[1]) < 0) {
413+ if(strcasecmp(SFD(nextin).mBuf, command->mArgsRuntime[1]) < 0) {
414414 runinfo->mRCode = 0;
415415 }
416416 }
417417 else {
418- if(strcmp(SFD(nextin).fdbuf.mBuf, command->mArgsRuntime[1]) < 0) {
418+ if(strcmp(SFD(nextin).mBuf, command->mArgsRuntime[1]) < 0) {
419419 runinfo->mRCode = 0;
420420 }
421421 }
@@ -431,12 +431,12 @@ BOOL cmd_condition_sgt(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
431431 if(runinfo->mFilter && command->mArgsNumRuntime == 2) {
432432 runinfo->mRCode = RCODE_NFUN_FALSE;
433433 if(sCommand_option_item(command, "-ignore-case")) {
434- if(strcasecmp(SFD(nextin).fdbuf.mBuf, command->mArgsRuntime[1]) > 0) {
434+ if(strcasecmp(SFD(nextin).mBuf, command->mArgsRuntime[1]) > 0) {
435435 runinfo->mRCode = 0;
436436 }
437437 }
438438 else {
439- if(strcmp(SFD(nextin).fdbuf.mBuf, command->mArgsRuntime[1]) > 0) {
439+ if(strcmp(SFD(nextin).mBuf, command->mArgsRuntime[1]) > 0) {
440440 runinfo->mRCode = 0;
441441 }
442442 }
@@ -452,12 +452,12 @@ BOOL cmd_condition_sle(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
452452 if(runinfo->mFilter && command->mArgsNumRuntime == 2) {
453453 runinfo->mRCode = RCODE_NFUN_FALSE;
454454 if(sCommand_option_item(command, "-ignore-case")) {
455- if(strcasecmp(SFD(nextin).fdbuf.mBuf, command->mArgsRuntime[1]) <= 0) {
455+ if(strcasecmp(SFD(nextin).mBuf, command->mArgsRuntime[1]) <= 0) {
456456 runinfo->mRCode = 0;
457457 }
458458 }
459459 else {
460- if(strcmp(SFD(nextin).fdbuf.mBuf, command->mArgsRuntime[1]) <= 0) {
460+ if(strcmp(SFD(nextin).mBuf, command->mArgsRuntime[1]) <= 0) {
461461 runinfo->mRCode = 0;
462462 }
463463 }
@@ -473,12 +473,12 @@ BOOL cmd_condition_sge(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
473473 if(runinfo->mFilter && command->mArgsNumRuntime == 2) {
474474 runinfo->mRCode = RCODE_NFUN_FALSE;
475475 if(sCommand_option_item(command, "-ignore-case")) {
476- if(strcasecmp(SFD(nextin).fdbuf.mBuf, command->mArgsRuntime[1]) >= 0) {
476+ if(strcasecmp(SFD(nextin).mBuf, command->mArgsRuntime[1]) >= 0) {
477477 runinfo->mRCode = 0;
478478 }
479479 }
480480 else {
481- if(strcmp(SFD(nextin).fdbuf.mBuf, command->mArgsRuntime[1]) >= 0) {
481+ if(strcmp(SFD(nextin).mBuf, command->mArgsRuntime[1]) >= 0) {
482482 runinfo->mRCode = 0;
483483 }
484484 }
@@ -493,7 +493,7 @@ BOOL cmd_condition_eq2(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
493493
494494 if(runinfo->mFilter && command->mArgsNumRuntime == 2) {
495495 runinfo->mRCode = RCODE_NFUN_FALSE;
496- if(atoi(SFD(nextin).fdbuf.mBuf) == atoi(command->mArgsRuntime[1])) {
496+ if(atoi(SFD(nextin).mBuf) == atoi(command->mArgsRuntime[1])) {
497497 runinfo->mRCode = 0;
498498 }
499499 }
@@ -507,7 +507,7 @@ BOOL cmd_condition_ne(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
507507
508508 if(runinfo->mFilter && command->mArgsNumRuntime == 2) {
509509 runinfo->mRCode = RCODE_NFUN_FALSE;
510- if(atoi(SFD(nextin).fdbuf.mBuf) != atoi(command->mArgsRuntime[1])) {
510+ if(atoi(SFD(nextin).mBuf) != atoi(command->mArgsRuntime[1])) {
511511 runinfo->mRCode = 0;
512512 }
513513 }
@@ -521,7 +521,7 @@ BOOL cmd_condition_lt(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
521521
522522 if(runinfo->mFilter && command->mArgsNumRuntime == 2) {
523523 runinfo->mRCode = RCODE_NFUN_FALSE;
524- if(atoi(SFD(nextin).fdbuf.mBuf) < atoi(command->mArgsRuntime[1])) {
524+ if(atoi(SFD(nextin).mBuf) < atoi(command->mArgsRuntime[1])) {
525525 runinfo->mRCode = 0;
526526 }
527527 }
@@ -535,7 +535,7 @@ BOOL cmd_condition_le(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
535535
536536 if(runinfo->mFilter && command->mArgsNumRuntime == 2) {
537537 runinfo->mRCode = RCODE_NFUN_FALSE;
538- if(atoi(SFD(nextin).fdbuf.mBuf) <= atoi(command->mArgsRuntime[1])) {
538+ if(atoi(SFD(nextin).mBuf) <= atoi(command->mArgsRuntime[1])) {
539539 runinfo->mRCode = 0;
540540 }
541541 }
@@ -549,7 +549,7 @@ BOOL cmd_condition_gt(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
549549
550550 if(runinfo->mFilter && command->mArgsNumRuntime == 2) {
551551 runinfo->mRCode = RCODE_NFUN_FALSE;
552- if(atoi(SFD(nextin).fdbuf.mBuf) > atoi(command->mArgsRuntime[1])) {
552+ if(atoi(SFD(nextin).mBuf) > atoi(command->mArgsRuntime[1])) {
553553 runinfo->mRCode = 0;
554554 }
555555 }
@@ -563,7 +563,7 @@ BOOL cmd_condition_ge(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
563563
564564 if(runinfo->mFilter && command->mArgsNumRuntime == 2) {
565565 runinfo->mRCode = RCODE_NFUN_FALSE;
566- if(atoi(SFD(nextin).fdbuf.mBuf) >= atoi(command->mArgsRuntime[1])) {
566+ if(atoi(SFD(nextin).mBuf) >= atoi(command->mArgsRuntime[1])) {
567567 runinfo->mRCode = 0;
568568 }
569569 }
@@ -579,7 +579,7 @@ BOOL cmd_condition_nt(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
579579 runinfo->mRCode = RCODE_NFUN_FALSE;
580580 struct stat lstat_;
581581 struct stat rstat_;
582- if(lstat(SFD(nextin).fdbuf.mBuf, &lstat_) == 0) {
582+ if(lstat(SFD(nextin).mBuf, &lstat_) == 0) {
583583 if(lstat(command->mArgsRuntime[1], &rstat_) == 0) {
584584 if(lstat_.st_mtime > rstat_.st_mtime)
585585 {
@@ -600,7 +600,7 @@ BOOL cmd_condition_ot(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
600600 runinfo->mRCode = RCODE_NFUN_FALSE;
601601 struct stat lstat_;
602602 struct stat rstat_;
603- if(lstat(SFD(nextin).fdbuf.mBuf, &lstat_) == 0) {
603+ if(lstat(SFD(nextin).mBuf, &lstat_) == 0) {
604604 if(lstat(command->mArgsRuntime[1], &rstat_) == 0) {
605605 if(lstat_.st_mtime < rstat_.st_mtime)
606606 {
@@ -673,7 +673,7 @@ BOOL cmd_condition_re(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
673673 //BOOL preserve = sCommand_option_item(command, "-preserve");
674674
675675 runinfo->mRCode = RCODE_NFUN_FALSE;
676- char* target = SFD(nextin).fdbuf.mBuf;
676+ char* target = SFD(nextin).mBuf;
677677 char* regex = command->mArgsRuntime[1];
678678
679679 regex_t* reg;
@@ -835,7 +835,7 @@ BOOL cmd_migemo_match(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
835835
836836 if(runinfo->mFilter && command->mArgsNumRuntime == 2) {
837837 runinfo->mRCode = RCODE_NFUN_FALSE;
838- char* target = SFD(nextin).fdbuf.mBuf;
838+ char* target = SFD(nextin).mBuf;
839839 char* regex = command->mArgsRuntime[1];
840840
841841 if(regex[0] == 0) {
--- a/src/cmd_curses.c
+++ b/src/cmd_curses.c
@@ -92,7 +92,7 @@ BOOL cmd_selector(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
9292 return FALSE;
9393 }
9494
95- enum eLineField lf = gLineField;
95+ eLineField lf = gLineField;
9696 if(sCommand_option_item(command, "-Lw")) {
9797 lf = kCRLF;
9898 }
@@ -126,7 +126,7 @@ BOOL cmd_selector(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
126126 if(runinfo->mFilter) {
127127 fd_split(nextin, lf);
128128
129- if(vector_count(SFD(nextin).fdbuf.mLines) > 0) {
129+ if(vector_count(SFD(nextin).mLines) > 0) {
130130 msave_ttysettings();
131131 msave_screen();
132132 initscr();
@@ -136,8 +136,8 @@ BOOL cmd_selector(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
136136 const int maxx = mgetmaxx();
137137 const int maxy = mgetmaxy();
138138
139- int* markfiles = MALLOC(sizeof(int)*vector_count(SFD(nextin).fdbuf.mLines));
140- memset(markfiles, 0, sizeof(int)*vector_count(SFD(nextin).fdbuf.mLines));
139+ int* markfiles = MALLOC(sizeof(int)*vector_count(SFD(nextin).mLines));
140+ memset(markfiles, 0, sizeof(int)*vector_count(SFD(nextin).mLines));
141141
142142 static int scrolltop = 0;
143143 static int cursor = 0;
@@ -150,15 +150,15 @@ BOOL cmd_selector(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
150150 if(cursor < 0) {
151151 cursor = 0;
152152 }
153- if(cursor >= vector_count(SFD(nextin).fdbuf.mLines)) {
154- cursor = vector_count(SFD(nextin).fdbuf.mLines)-1;
153+ if(cursor >= vector_count(SFD(nextin).mLines)) {
154+ cursor = vector_count(SFD(nextin).mLines)-1;
155155 if(cursor < 0) cursor = 0;
156156 }
157157 if(cursor < scrolltop) {
158158 int i = cursor;
159159 int width_sum = 0;
160160 while(width_sum < maxy) {
161- char* line = vector_item(SFD(nextin).fdbuf.mLines, i);
161+ char* line = vector_item(SFD(nextin).mLines, i);
162162 int width = str_termlen(code, line) / maxx + 1;
163163 width_sum += width;
164164 i--;
@@ -176,7 +176,7 @@ BOOL cmd_selector(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
176176 clear();
177177 int n = scrolltop;
178178 int y = 0;
179- while(y < maxy && n < vector_count(SFD(nextin).fdbuf.mLines)) {
179+ while(y < maxy && n < vector_count(SFD(nextin).mLines)) {
180180 int attrs = 0;
181181 if(n == cursor) {
182182 attrs = A_REVERSE;
@@ -186,7 +186,7 @@ BOOL cmd_selector(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
186186 }
187187 if(attrs) attron(attrs);
188188
189- char* line = vector_item(SFD(nextin).fdbuf.mLines, n);
189+ char* line = vector_item(SFD(nextin).mLines, n);
190190
191191 if(str_termlen(code, line) <= maxx) {
192192 mvprintw(y, 0, "%s", line);
@@ -239,7 +239,7 @@ BOOL cmd_selector(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
239239 }
240240 else if(key == 'a' && multiple) {
241241 int i;
242- for(i=0; i<vector_count(SFD(nextin).fdbuf.mLines); i++) {
242+ for(i=0; i<vector_count(SFD(nextin).mLines); i++) {
243243 markfiles[i] = !markfiles[i];
244244 }
245245 }
@@ -251,9 +251,9 @@ BOOL cmd_selector(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
251251 if(multiple) {
252252 BOOL flg_mark = FALSE;
253253 int k;
254- for(k=0; k<vector_count(SFD(nextin).fdbuf.mLines); k++) {
254+ for(k=0; k<vector_count(SFD(nextin).mLines); k++) {
255255 if(markfiles[k]) {
256- char* str = vector_item(SFD(nextin).fdbuf.mLines, k);
256+ char* str = vector_item(SFD(nextin).mLines, k);
257257 if(!fd_write(nextout,str, strlen(str))) {
258258 err_msg("interrupt", runinfo->mSName, runinfo->mSLine, command->mArgs[0]);
259259 runinfo->mRCode = RCODE_SIGNAL_INTERRUPT;
@@ -266,7 +266,7 @@ BOOL cmd_selector(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
266266 }
267267
268268 if(!flg_mark) {
269- char* str = vector_item(SFD(nextin).fdbuf.mLines, cursor);
269+ char* str = vector_item(SFD(nextin).mLines, cursor);
270270 if(!fd_write(nextout, str, strlen(str))) {
271271 err_msg("interrupt", runinfo->mSName, runinfo->mSLine, command->mArgs[0]);
272272 runinfo->mRCode = RCODE_SIGNAL_INTERRUPT;
@@ -276,7 +276,7 @@ BOOL cmd_selector(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
276276 }
277277 }
278278 else {
279- char* str = vector_item(SFD(nextin).fdbuf.mLines, cursor);
279+ char* str = vector_item(SFD(nextin).mLines, cursor);
280280 if(!fd_write(nextout, str, strlen(str))) {
281281 err_msg("interrupt", runinfo->mSName, runinfo->mSLine, command->mArgs[0]);
282282 runinfo->mRCode = RCODE_SIGNAL_INTERRUPT;
@@ -284,7 +284,7 @@ BOOL cmd_selector(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
284284 return FALSE;
285285 }
286286 }
287- if(SFD(nextin).fdbuf.mBufLen == 0) {
287+ if(SFD(nextin).mBufLen == 0) {
288288 runinfo->mRCode = RCODE_NFUN_NULL_INPUT;
289289 }
290290 else {
@@ -296,8 +296,8 @@ BOOL cmd_selector(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
296296 if(cursor < 0) {
297297 cursor = 0;
298298 }
299- if(cursor >= vector_count(SFD(nextin).fdbuf.mLines)) {
300- cursor = vector_count(SFD(nextin).fdbuf.mLines)-1;
299+ if(cursor >= vector_count(SFD(nextin).mLines)) {
300+ cursor = vector_count(SFD(nextin).mLines)-1;
301301 if(cursor < 0) cursor = 0;
302302 }
303303 if(cursor >= n) {
@@ -307,7 +307,7 @@ BOOL cmd_selector(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
307307 int i = cursor;
308308 int width_sum = 0;
309309 while(width_sum < maxy) {
310- char* line = vector_item(SFD(nextin).fdbuf.mLines, i);
310+ char* line = vector_item(SFD(nextin).mLines, i);
311311 int width = str_termlen(code, line) / maxx + 1;
312312 width_sum += width;
313313 i--;
@@ -353,7 +353,7 @@ BOOL cmd_p(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
353353 return FALSE;
354354 }
355355
356- enum eLineField lf = kLF;
356+ eLineField lf = kLF;
357357
358358 enum eKanjiCode code = gKanjiCode;
359359 if(sCommand_option_item(command, "-byte")) {
@@ -370,11 +370,11 @@ BOOL cmd_p(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
370370 }
371371
372372 if(runinfo->mFilter) {
373- sObject* nextin2 = FD_NEW_STACK(kFDKindBuf, 0);
373+ sObject* nextin2 = FD_NEW_STACK();
374374
375375 /// make control characters visible ///
376- char* p = SFD(nextin).fdbuf.mBuf;
377- while(p - SFD(nextin).fdbuf.mBuf < SFD(nextin).fdbuf.mBufLen) {
376+ char* p = SFD(nextin).mBuf;
377+ while(p - SFD(nextin).mBuf < SFD(nextin).mBufLen) {
378378 if(*p == '\n') {
379379 if(!fd_writec(nextin2, *p)) {
380380 err_msg("interrupt", runinfo->mSName, runinfo->mSLine, command->mArgs[0]);
@@ -418,8 +418,8 @@ BOOL cmd_p(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
418418 const int maxx = mgetmaxx();
419419 const int maxy = mgetmaxy();
420420
421- int* markfiles = MALLOC(sizeof(int)*vector_count(SFD(nextin2).fdbuf.mLines));
422- memset(markfiles, 0, sizeof(int)*vector_count(SFD(nextin2).fdbuf.mLines));
421+ int* markfiles = MALLOC(sizeof(int)*vector_count(SFD(nextin2).mLines));
422+ memset(markfiles, 0, sizeof(int)*vector_count(SFD(nextin2).mLines));
423423
424424 static int scrolltop = 0;
425425 static int cursor = 0;
@@ -432,15 +432,15 @@ BOOL cmd_p(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
432432 if(cursor < 0) {
433433 cursor = 0;
434434 }
435- if(cursor >= vector_count(SFD(nextin2).fdbuf.mLines)) {
436- cursor = vector_count(SFD(nextin2).fdbuf.mLines)-1;
435+ if(cursor >= vector_count(SFD(nextin2).mLines)) {
436+ cursor = vector_count(SFD(nextin2).mLines)-1;
437437 if(cursor < 0) cursor = 0;
438438 }
439439 if(cursor < scrolltop) {
440440 int i = cursor;
441441 int width_sum = 0;
442442 while(width_sum < maxy) {
443- char* line = vector_item(SFD(nextin2).fdbuf.mLines, i);
443+ char* line = vector_item(SFD(nextin2).mLines, i);
444444 int width = str_termlen(code, line) / maxx + 1;
445445 width_sum += width;
446446 i--;
@@ -458,7 +458,7 @@ BOOL cmd_p(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
458458 clear();
459459 int n = scrolltop;
460460 int y = 0;
461- while(y < maxy && n < vector_count(SFD(nextin2).fdbuf.mLines)) {
461+ while(y < maxy && n < vector_count(SFD(nextin2).mLines)) {
462462 int attrs = 0;
463463 if(n == cursor) {
464464 attrs = A_REVERSE;
@@ -468,7 +468,7 @@ BOOL cmd_p(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
468468 }
469469 if(attrs) attron(attrs);
470470
471- char* line = vector_item(SFD(nextin2).fdbuf.mLines, n);
471+ char* line = vector_item(SFD(nextin2).mLines, n);
472472
473473 if(str_termlen(code, line) <= maxx) {
474474 mvprintw(y, 0, "%s", line);
@@ -520,13 +520,13 @@ BOOL cmd_p(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
520520 return FALSE;
521521 }
522522 else if(key == 10 || key == 13) {
523- if(!fd_write(nextout, SFD(nextin).fdbuf.mBuf, SFD(nextin).fdbuf.mBufLen)) {
523+ if(!fd_write(nextout, SFD(nextin).mBuf, SFD(nextin).mBufLen)) {
524524 err_msg("interrupt", runinfo->mSName, runinfo->mSLine, command->mArgs[0]);
525525 runinfo->mRCode = RCODE_SIGNAL_INTERRUPT;
526526 FREE(markfiles);
527527 return FALSE;
528528 }
529- if(SFD(nextin).fdbuf.mBufLen == 0) {
529+ if(SFD(nextin).mBufLen == 0) {
530530 runinfo->mRCode = RCODE_NFUN_NULL_INPUT;
531531 }
532532 else {
@@ -538,8 +538,8 @@ BOOL cmd_p(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
538538 if(cursor < 0) {
539539 cursor = 0;
540540 }
541- if(cursor >= vector_count(SFD(nextin2).fdbuf.mLines)) {
542- cursor = vector_count(SFD(nextin2).fdbuf.mLines)-1;
541+ if(cursor >= vector_count(SFD(nextin2).mLines)) {
542+ cursor = vector_count(SFD(nextin2).mLines)-1;
543543 if(cursor < 0) cursor = 0;
544544 }
545545 if(cursor >= n) {
@@ -549,7 +549,7 @@ BOOL cmd_p(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
549549 int i = cursor;
550550 int width_sum = 0;
551551 while(width_sum < maxy) {
552- char* line = vector_item(SFD(nextin2).fdbuf.mLines, i);
552+ char* line = vector_item(SFD(nextin2).mLines, i);
553553 int width = str_termlen(code, line) / maxx + 1;
554554 width_sum += width;
555555 i--;
--- a/src/cmd_file.c
+++ b/src/cmd_file.c
@@ -48,21 +48,21 @@ BOOL cmd_write(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
4848 }
4949
5050 if(sCommand_option_item(command, "-error")) {
51- if(!bufsiz_write(fd, SFD(gStderr).fdbuf.mBuf, SFD(gStderr).fdbuf.mBufLen)) {
51+ if(!bufsiz_write(fd, SFD(gStderr).mBuf, SFD(gStderr).mBufLen)) {
5252 err_msg("signal interrupt", runinfo->mSName, runinfo->mSLine, command->mArgs[0]);
5353 runinfo->mRCode = RCODE_SIGNAL_INTERRUPT;
5454 return FALSE;
5555 }
5656 fd_clear(gStderr);
5757
58- if(!fd_write(nextout, SFD(nextin).fdbuf.mBuf, SFD(nextin).fdbuf.mBufLen)) {
58+ if(!fd_write(nextout, SFD(nextin).mBuf, SFD(nextin).mBufLen)) {
5959 err_msg("signal interrupt", runinfo->mSName, runinfo->mSLine, command->mArgs[0]);
6060 runinfo->mRCode = RCODE_SIGNAL_INTERRUPT;
6161 return FALSE;
6262 }
6363 }
6464 else {
65- if(!bufsiz_write(fd, SFD(nextin).fdbuf.mBuf, SFD(nextin).fdbuf.mBufLen)) {
65+ if(!bufsiz_write(fd, SFD(nextin).mBuf, SFD(nextin).mBufLen)) {
6666 err_msg("signal interrupt", runinfo->mSName, runinfo->mSLine, command->mArgs[0]);
6767 runinfo->mRCode = RCODE_SIGNAL_INTERRUPT;
6868 return FALSE;
@@ -71,7 +71,7 @@ BOOL cmd_write(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
7171
7272 (void)close(fd);
7373
74- if(SFD(nextin).fdbuf.mBufLen == 0) {
74+ if(SFD(nextin).mBufLen == 0) {
7575 runinfo->mRCode = RCODE_NFUN_NULL_INPUT;
7676 }
7777 else {
--- a/src/cmd_num.c
+++ b/src/cmd_num.c
@@ -82,7 +82,7 @@ BOOL cmd_plus(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
8282
8383 /// output
8484 if(runinfo->mFilter && command->mArgsNumRuntime == 2) {
85- char* arg = SFD(nextin).fdbuf.mBuf;
85+ char* arg = SFD(nextin).mBuf;
8686 int num = atoi(arg);
8787
8888 num += atoi(command->mArgsRuntime[1]);
@@ -96,7 +96,7 @@ BOOL cmd_plus(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
9696 return FALSE;
9797 }
9898
99- if(SFD(nextin).fdbuf.mBufLen == 0) {
99+ if(SFD(nextin).mBufLen == 0) {
100100 runinfo->mRCode = RCODE_NFUN_NULL_INPUT;
101101 }
102102 else {
@@ -113,7 +113,7 @@ BOOL cmd_minus(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
113113
114114 /// output
115115 if(runinfo->mFilter && command->mArgsNumRuntime == 2) {
116- char* arg = SFD(nextin).fdbuf.mBuf;
116+ char* arg = SFD(nextin).mBuf;
117117 int num = atoi(arg);
118118
119119 num -= atoi(command->mArgsRuntime[1]);
@@ -127,7 +127,7 @@ BOOL cmd_minus(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
127127 return FALSE;
128128 }
129129
130- if(SFD(nextin).fdbuf.mBufLen == 0) {
130+ if(SFD(nextin).mBufLen == 0) {
131131 runinfo->mRCode = RCODE_NFUN_NULL_INPUT;
132132 }
133133 else {
@@ -144,7 +144,7 @@ BOOL cmd_mult(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
144144
145145 /// output
146146 if(runinfo->mFilter && command->mArgsNumRuntime == 2) {
147- char* arg = SFD(nextin).fdbuf.mBuf;
147+ char* arg = SFD(nextin).mBuf;
148148 int num = atoi(arg);
149149
150150 num *= atoi(command->mArgsRuntime[1]);
@@ -158,7 +158,7 @@ BOOL cmd_mult(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
158158 return FALSE;
159159 }
160160
161- if(SFD(nextin).fdbuf.mBufLen == 0) {
161+ if(SFD(nextin).mBufLen == 0) {
162162 runinfo->mRCode = RCODE_NFUN_NULL_INPUT;
163163 }
164164 else {
@@ -175,7 +175,7 @@ BOOL cmd_div(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
175175
176176 /// output
177177 if(runinfo->mFilter && command->mArgsNumRuntime == 2) {
178- char* arg = SFD(nextin).fdbuf.mBuf;
178+ char* arg = SFD(nextin).mBuf;
179179 int num = atoi(arg);
180180
181181 int num2 = atoi(command->mArgsRuntime[1]);
@@ -196,7 +196,7 @@ BOOL cmd_div(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
196196 return FALSE;
197197 }
198198
199- if(SFD(nextin).fdbuf.mBufLen == 0) {
199+ if(SFD(nextin).mBufLen == 0) {
200200 runinfo->mRCode = RCODE_NFUN_NULL_INPUT;
201201 }
202202 else {
@@ -213,7 +213,7 @@ BOOL cmd_mod(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
213213
214214 /// output
215215 if(runinfo->mFilter && command->mArgsNumRuntime == 2) {
216- char* arg = SFD(nextin).fdbuf.mBuf;
216+ char* arg = SFD(nextin).mBuf;
217217 int num = atoi(arg);
218218
219219 num = num % atoi(command->mArgsRuntime[1]);
@@ -227,7 +227,7 @@ BOOL cmd_mod(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
227227 return FALSE;
228228 }
229229
230- if(SFD(nextin).fdbuf.mBufLen == 0) {
230+ if(SFD(nextin).mBufLen == 0) {
231231 runinfo->mRCode = RCODE_NFUN_NULL_INPUT;
232232 }
233233 else {
@@ -244,7 +244,7 @@ BOOL cmd_pow(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
244244
245245 /// output
246246 if(runinfo->mFilter && command->mArgsNumRuntime == 2) {
247- char* arg = SFD(nextin).fdbuf.mBuf;
247+ char* arg = SFD(nextin).mBuf;
248248 int num = atoi(arg);
249249
250250 num = pow(num, atoi(command->mArgsRuntime[1]));
@@ -258,7 +258,7 @@ BOOL cmd_pow(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
258258 return FALSE;
259259 }
260260
261- if(SFD(nextin).fdbuf.mBufLen == 0) {
261+ if(SFD(nextin).mBufLen == 0) {
262262 runinfo->mRCode = RCODE_NFUN_NULL_INPUT;
263263 }
264264 else {
@@ -275,7 +275,7 @@ BOOL cmd_abs(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
275275
276276 /// output
277277 if(runinfo->mFilter) {
278- char* arg = SFD(nextin).fdbuf.mBuf;
278+ char* arg = SFD(nextin).mBuf;
279279 int num = abs(atoi(arg));
280280
281281 char buf[128];
@@ -287,7 +287,7 @@ BOOL cmd_abs(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
287287 return FALSE;
288288 }
289289
290- if(SFD(nextin).fdbuf.mBufLen == 0) {
290+ if(SFD(nextin).mBufLen == 0) {
291291 runinfo->mRCode = RCODE_NFUN_NULL_INPUT;
292292 }
293293 else {
--- a/src/cmd_obj.c
+++ b/src/cmd_obj.c
@@ -35,8 +35,8 @@ BOOL cmd_mshow(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
3535 char* key = uobject_loop_key(it);
3636
3737 char buf[BUFSIZ];
38- char*obj_kind[16] = {
39- NULL, "var", "array", "hash", "list", "native function", "block", "file dicriptor", "job", "object", "memchecker", "function", "class", "external program", "completion", "external object"
38+ char*obj_kind[T_TYPE_MAX] = {
39+ NULL, "var", "array", "hash", "list", "native function", "block", "file dicriptor", "file dicriptor2", "job", "object", "function", "class", "external program", "completion", "external object"
4040 };
4141 int size = snprintf(buf, BUFSIZ, "%s: %s\n", key, obj_kind[TYPE(object2)]);
4242
@@ -153,7 +153,7 @@ BOOL cmd_def(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
153153 int rcode = 0;
154154 sObject* block = BLOCK_NEW_STACK();
155155 int sline = 1;
156- if(!parse(SFD(nextin).fdbuf.mBuf, "def", &sline, block, NULL)) {
156+ if(!parse(SFD(nextin).mBuf, "def", &sline, block, NULL)) {
157157 err_msg("parser error", runinfo->mSName, runinfo->mSLine, command->mArgs[0]);
158158 stack_end_stack();
159159 return FALSE;
@@ -165,7 +165,7 @@ BOOL cmd_def(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
165165 }
166166 stack_end_stack();
167167
168- if(SFD(nextin).fdbuf.mBufLen == 0) {
168+ if(SFD(nextin).mBufLen == 0) {
169169 runinfo->mRCode = RCODE_NFUN_NULL_INPUT;
170170 }
171171 else {
@@ -221,7 +221,7 @@ BOOL cmd_class(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
221221 int rcode = 0;
222222 sObject* block = BLOCK_NEW_STACK();
223223 int sline = 1;
224- if(!parse(SFD(nextin).fdbuf.mBuf, "def", &sline, block, NULL)) {
224+ if(!parse(SFD(nextin).mBuf, "def", &sline, block, NULL)) {
225225 err_msg("parser error", runinfo->mSName, runinfo->mSLine, command->mArgs[0]);
226226 stack_end_stack();
227227 return FALSE;
@@ -233,7 +233,7 @@ BOOL cmd_class(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
233233 }
234234 stack_end_stack();
235235
236- if(SFD(nextin).fdbuf.mBufLen == 0) {
236+ if(SFD(nextin).mBufLen == 0) {
237237 runinfo->mRCode = RCODE_NFUN_NULL_INPUT;
238238 }
239239 else {
@@ -369,7 +369,7 @@ BOOL cmd_var(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
369369 sCommand* command = runinfo->mCommand;
370370
371371 char* field = "\n";
372- enum eLineField lf = gLineField;
372+ eLineField lf = gLineField;
373373 if(sCommand_option_item(command, "-Lw")) {
374374 lf = kCRLF;
375375 field = "\r\n";
@@ -401,87 +401,14 @@ BOOL cmd_var(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
401401 code = kEucjp;
402402 }
403403
404- /// output
405- if(!runinfo->mFilter) {
406- if(command->mArgsNumRuntime > 1) {
407- char* argument;
408- if(argument = sCommand_option_with_argument_item(command, "-index")) {
409- sObject* object = runinfo->mCurrentObject;
410- int i;
411- for(i=1; i<command->mArgsNumRuntime; i++) {
412- sObject* reciever = runinfo->mCurrentObject;
413- sObject* var = access_object(command->mArgsRuntime[i], &reciever, runinfo->mRunningObject);
414-
415- if(var && TYPE(var) == T_STRING) {
416- if(strlen(string_c_str(var)) > 0) {
417- int len = str_kanjilen(code, string_c_str(var));
418- int num = atoi(argument);
419- if(num < 0) {
420- num += len;
421- if(num < 0) num = 0;
422- }
423- if(num >= len) {
424- num = len -1;
425- if(num < 0) num = 0;
426- }
427-
428- char* pos = str_kanjipos2pointer(code, string_c_str(var), num);
429- char* pos2 = str_kanjipos2pointer(code, pos, 1);
430- if(!fd_write(nextout, pos, pos2-pos)) {
431- err_msg("interrupt", runinfo->mSName, runinfo->mSLine, command->mArgs[0]);
432- runinfo->mRCode = RCODE_SIGNAL_INTERRUPT;
433- return FALSE;
434- }
435- if(!fd_write(nextout, field, strlen(field))) {
436- err_msg("signal interrupt", runinfo->mSName, runinfo->mSLine, command->mArgs[0]);
437- runinfo->mRCode = RCODE_SIGNAL_INTERRUPT;
438- return FALSE;
439- }
440- }
441-
442- runinfo->mRCode = 0;
443- }
444- else {
445- err_msg("not found variable", runinfo->mSName, runinfo->mSLine, command->mArgs[0]);
446- return FALSE;
447- }
448- }
449- }
450- else {
451- sObject* object = runinfo->mCurrentObject;
452- int i;
453- for(i=1; i<command->mArgsNumRuntime; i++) {
454- sObject* reciever = runinfo->mCurrentObject;
455- sObject* var = access_object(command->mArgsRuntime[i], &reciever, runinfo->mRunningObject);
456- if(var && TYPE(var) == T_STRING) {
457- if(!fd_write(nextout, string_c_str(var), string_length(var))) {
458- err_msg("signal interrupt", runinfo->mSName, runinfo->mSLine, command->mArgs[0]);
459- runinfo->mRCode = RCODE_SIGNAL_INTERRUPT;
460- return FALSE;
461- }
462- if(!fd_write(nextout, field, strlen(field))) {
463- err_msg("signal interrupt", runinfo->mSName, runinfo->mSLine, command->mArgs[0]);
464- runinfo->mRCode = RCODE_SIGNAL_INTERRUPT;
465- return FALSE;
466- }
467- runinfo->mRCode = 0;
468- }
469- else {
470- err_msg("not found variable", runinfo->mSName, runinfo->mSLine, command->mArgs[0]);
471- return FALSE;
472- }
473- }
474- }
475- }
476- }
477- /// input ///
478- else {
404+ /// input
405+ if(runinfo->mFilter) {
479406 fd_split(nextin, lf);
480407
481408 if(sCommand_option_item(command, "-new")) {
482- int max = vector_count(SFD(nextin).fdbuf.mLines);
409+ int max = vector_count(SFD(nextin).mLines);
483410 if(max > 0) {
484- sObject* new_var = STRING_NEW_GC(vector_item(SFD(nextin).fdbuf.mLines, 0), TRUE);
411+ sObject* new_var = STRING_NEW_GC(vector_item(SFD(nextin).mLines, 0), TRUE);
485412 string_chomp(new_var);
486413
487414 if(!add_object_to_objects_in_pipe(new_var, runinfo, command))
@@ -527,7 +454,7 @@ BOOL cmd_var(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
527454 if(sCommand_option_item(command, "-shift")) {
528455 int i;
529456 for(i=1;i<max; i++) {
530- char* str = vector_item(SFD(nextin).fdbuf.mLines, i);
457+ char* str = vector_item(SFD(nextin).mLines, i);
531458 if(!fd_write(nextout, str, strlen(str))) {
532459 err_msg("signal interrupt", runinfo->mSName, runinfo->mSLine, command->mArgs[0]);
533460 runinfo->mRCode = RCODE_SIGNAL_INTERRUPT;
@@ -536,7 +463,7 @@ BOOL cmd_var(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
536463 }
537464 }
538465
539- if(SFD(nextin).fdbuf.mBufLen == 0) {
466+ if(SFD(nextin).mBufLen == 0) {
540467 runinfo->mRCode = RCODE_NFUN_NULL_INPUT;
541468 }
542469 else {
@@ -553,7 +480,7 @@ BOOL cmd_var(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
553480 }
554481
555482 int i;
556- int max = vector_count(SFD(nextin).fdbuf.mLines);
483+ int max = vector_count(SFD(nextin).mLines);
557484 for(i=1; i<command->mArgsNumRuntime; i++) {
558485 sObject* current = runinfo->mCurrentObject;
559486 sObject* tmp = access_object3(command->mArgsRuntime[i], &current);
@@ -564,7 +491,7 @@ BOOL cmd_var(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
564491 }
565492
566493 if(i-1 < max) {
567- sObject* new_var = STRING_NEW_GC(vector_item(SFD(nextin).fdbuf.mLines, i-1), TRUE);
494+ sObject* new_var = STRING_NEW_GC(vector_item(SFD(nextin).mLines, i-1), TRUE);
568495 string_chomp(new_var);
569496
570497 uobject_put(object, command->mArgsRuntime[i], new_var);
@@ -578,7 +505,7 @@ BOOL cmd_var(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
578505
579506 if(sCommand_option_item(command, "-shift")) {
580507 for(;i-1<max; i++) {
581- char* str = vector_item(SFD(nextin).fdbuf.mLines, i-1);
508+ char* str = vector_item(SFD(nextin).mLines, i-1);
582509 if(!fd_write(nextout, str, strlen(str))) {
583510 err_msg("signal interrupt", runinfo->mSName, runinfo->mSLine, command->mArgs[0]);
584511 runinfo->mRCode = RCODE_SIGNAL_INTERRUPT;
@@ -587,7 +514,7 @@ BOOL cmd_var(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
587514 }
588515 }
589516
590- if(SFD(nextin).fdbuf.mBufLen == 0) {
517+ if(SFD(nextin).mBufLen == 0) {
591518 runinfo->mRCode = RCODE_NFUN_NULL_INPUT;
592519 }
593520 else {
@@ -595,6 +522,79 @@ BOOL cmd_var(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
595522 }
596523 }
597524 }
525+ /// output ///
526+ else {
527+ if(command->mArgsNumRuntime > 1) {
528+ char* argument;
529+ if(argument = sCommand_option_with_argument_item(command, "-index")) {
530+ sObject* object = runinfo->mCurrentObject;
531+ int i;
532+ for(i=1; i<command->mArgsNumRuntime; i++) {
533+ sObject* reciever = runinfo->mCurrentObject;
534+ sObject* var = access_object(command->mArgsRuntime[i], &reciever, runinfo->mRunningObject);
535+
536+ if(var && TYPE(var) == T_STRING) {
537+ if(strlen(string_c_str(var)) > 0) {
538+ int len = str_kanjilen(code, string_c_str(var));
539+ int num = atoi(argument);
540+ if(num < 0) {
541+ num += len;
542+ if(num < 0) num = 0;
543+ }
544+ if(num >= len) {
545+ num = len -1;
546+ if(num < 0) num = 0;
547+ }
548+
549+ char* pos = str_kanjipos2pointer(code, string_c_str(var), num);
550+ char* pos2 = str_kanjipos2pointer(code, pos, 1);
551+ if(!fd_write(nextout, pos, pos2-pos)) {
552+ err_msg("interrupt", runinfo->mSName, runinfo->mSLine, command->mArgs[0]);
553+ runinfo->mRCode = RCODE_SIGNAL_INTERRUPT;
554+ return FALSE;
555+ }
556+ if(!fd_write(nextout, field, strlen(field))) {
557+ err_msg("signal interrupt", runinfo->mSName, runinfo->mSLine, command->mArgs[0]);
558+ runinfo->mRCode = RCODE_SIGNAL_INTERRUPT;
559+ return FALSE;
560+ }
561+ }
562+
563+ runinfo->mRCode = 0;
564+ }
565+ else {
566+ err_msg("not found variable", runinfo->mSName, runinfo->mSLine, command->mArgs[0]);
567+ return FALSE;
568+ }
569+ }
570+ }
571+ else {
572+ sObject* object = runinfo->mCurrentObject;
573+ int i;
574+ for(i=1; i<command->mArgsNumRuntime; i++) {
575+ sObject* reciever = runinfo->mCurrentObject;
576+ sObject* var = access_object(command->mArgsRuntime[i], &reciever, runinfo->mRunningObject);
577+ if(var && TYPE(var) == T_STRING) {
578+ if(!fd_write(nextout, string_c_str(var), string_length(var))) {
579+ err_msg("signal interrupt", runinfo->mSName, runinfo->mSLine, command->mArgs[0]);
580+ runinfo->mRCode = RCODE_SIGNAL_INTERRUPT;
581+ return FALSE;
582+ }
583+ if(!fd_write(nextout, field, strlen(field))) {
584+ err_msg("signal interrupt", runinfo->mSName, runinfo->mSLine, command->mArgs[0]);
585+ runinfo->mRCode = RCODE_SIGNAL_INTERRUPT;
586+ return FALSE;
587+ }
588+ runinfo->mRCode = 0;
589+ }
590+ else {
591+ err_msg("not found variable", runinfo->mSName, runinfo->mSLine, command->mArgs[0]);
592+ return FALSE;
593+ }
594+ }
595+ }
596+ }
597+ }
598598
599599 return TRUE;
600600 }
@@ -604,7 +604,7 @@ BOOL cmd_ary(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
604604 sCommand* command = runinfo->mCommand;
605605
606606 char* field = "\n";
607- enum eLineField lf = gLineField;
607+ eLineField lf = gLineField;
608608 if(sCommand_option_item(command, "-Lw")) {
609609 lf = kCRLF;
610610 field = "\r\n";
@@ -729,11 +729,12 @@ BOOL cmd_ary(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
729729 }
730730 }
731731 }
732- else if(sCommand_option_item(command, "-new")) {
732+ else if(sCommand_option_item(command, "-new"))
733+ {
733734 fd_split(nextin, lf);
734735
735736 int i;
736- int max = vector_count(SFD(nextin).fdbuf.mLines);
737+ int max = vector_count(SFD(nextin).mLines);
737738 sObject* new_ary = VECTOR_NEW_GC(16, TRUE);
738739
739740 if(!add_object_to_objects_in_pipe(new_ary, runinfo, command))
@@ -755,12 +756,12 @@ BOOL cmd_ary(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
755756 }
756757
757758 for(i=0; i<max; i++) {
758- sObject* new_var = STRING_NEW_GC(vector_item(SFD(nextin).fdbuf.mLines, i), FALSE);
759+ sObject* new_var = STRING_NEW_GC(vector_item(SFD(nextin).mLines, i), FALSE);
759760 string_chomp(new_var);
760761 vector_add(new_ary, new_var);
761762 }
762763
763- if(SFD(nextin).fdbuf.mBufLen == 0) {
764+ if(SFD(nextin).mBufLen == 0) {
764765 runinfo->mRCode = RCODE_NFUN_NULL_INPUT;
765766 }
766767 else {
@@ -789,17 +790,17 @@ BOOL cmd_ary(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
789790 if(append > vector_count(ary)) append = vector_count(ary);
790791
791792 int i;
792- int max = vector_count(SFD(nextin).fdbuf.mLines);
793+ int max = vector_count(SFD(nextin).mLines);
793794 void** appended_ary = MALLOC(sizeof(sObject*)*max);
794795 for(i=0; i<max; i++) {
795- sObject* new_var = STRING_NEW_GC(vector_item(SFD(nextin).fdbuf.mLines, i), FALSE);
796+ sObject* new_var = STRING_NEW_GC(vector_item(SFD(nextin).mLines, i), FALSE);
796797 string_chomp(new_var);
797798 appended_ary[i] = new_var;
798799 }
799800 vector_mass_insert(ary, append, appended_ary, max);
800801 FREE(appended_ary);
801802
802- if(SFD(nextin).fdbuf.mBufLen == 0) {
803+ if(SFD(nextin).mBufLen == 0) {
803804 runinfo->mRCode = RCODE_NFUN_NULL_INPUT;
804805 }
805806 else {
@@ -816,7 +817,7 @@ BOOL cmd_ary(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
816817 }
817818
818819 int i;
819- int max = vector_count(SFD(nextin).fdbuf.mLines);
820+ int max = vector_count(SFD(nextin).mLines);
820821 sObject* new_ary = VECTOR_NEW_GC(16, TRUE);
821822
822823 sObject* current = runinfo->mCurrentObject;
@@ -830,12 +831,12 @@ BOOL cmd_ary(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
830831 uobject_put(object, command->mArgsRuntime[1], new_ary);
831832
832833 for(i=0; i<max; i++) {
833- sObject* new_var = STRING_NEW_GC(vector_item(SFD(nextin).fdbuf.mLines, i), FALSE);
834+ sObject* new_var = STRING_NEW_GC(vector_item(SFD(nextin).mLines, i), FALSE);
834835 string_chomp(new_var);
835836 vector_add(new_ary, new_var);
836837 }
837838
838- if(SFD(nextin).fdbuf.mBufLen == 0) {
839+ if(SFD(nextin).mBufLen == 0) {
839840 runinfo->mRCode = RCODE_NFUN_NULL_INPUT;
840841 }
841842 else {
@@ -852,7 +853,7 @@ BOOL cmd_hash(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
852853 sCommand* command = runinfo->mCommand;
853854
854855 char* field = "\n";
855- enum eLineField lf = gLineField;
856+ eLineField lf = gLineField;
856857 if(sCommand_option_item(command, "-Lw")) {
857858 lf = kCRLF;
858859 field = "\r\n";
@@ -984,7 +985,7 @@ BOOL cmd_hash(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
984985 fd_split(nextin, lf);
985986
986987 int i;
987- int max = vector_count(SFD(nextin).fdbuf.mLines);
988+ int max = vector_count(SFD(nextin).mLines);
988989 sObject* new_hash = HASH_NEW_GC(16, TRUE);
989990
990991 if(!add_object_to_objects_in_pipe(new_hash, runinfo, command))
@@ -1008,17 +1009,17 @@ BOOL cmd_hash(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
10081009 sObject* key = STRING_NEW_STACK("");
10091010 for(i=0; i<max; i++) {
10101011 if((i % 2) == 0) {
1011- string_put(key, vector_item(SFD(nextin).fdbuf.mLines, i));
1012+ string_put(key, vector_item(SFD(nextin).mLines, i));
10121013 string_chomp(key);
10131014 }
10141015 else {
1015- sObject* new_var = STRING_NEW_GC(vector_item(SFD(nextin).fdbuf.mLines, i), FALSE);
1016+ sObject* new_var = STRING_NEW_GC(vector_item(SFD(nextin).mLines, i), FALSE);
10161017 string_chomp(new_var);
10171018 hash_put(new_hash, string_c_str(key), new_var);
10181019 }
10191020 }
10201021
1021- if(SFD(nextin).fdbuf.mBufLen == 0) {
1022+ if(SFD(nextin).mBufLen == 0) {
10221023 runinfo->mRCode = RCODE_NFUN_NULL_INPUT;
10231024 }
10241025 else {
@@ -1040,21 +1041,21 @@ BOOL cmd_hash(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
10401041 }
10411042
10421043 int i;
1043- int max = vector_count(SFD(nextin).fdbuf.mLines);
1044+ int max = vector_count(SFD(nextin).mLines);
10441045 sObject* key = STRING_NEW_STACK("");
10451046 for(i=0; i<max; i++) {
10461047 if((i % 2) == 0) {
1047- string_put(key, vector_item(SFD(nextin).fdbuf.mLines, i));
1048+ string_put(key, vector_item(SFD(nextin).mLines, i));
10481049 string_chomp(key);
10491050 }
10501051 else {
1051- sObject* new_var = STRING_NEW_GC(vector_item(SFD(nextin).fdbuf.mLines, i), FALSE);
1052+ sObject* new_var = STRING_NEW_GC(vector_item(SFD(nextin).mLines, i), FALSE);
10521053 string_chomp(new_var);
10531054 hash_put(hash, string_c_str(key), new_var);
10541055 }
10551056 }
10561057
1057- if(SFD(nextin).fdbuf.mBufLen == 0) {
1058+ if(SFD(nextin).mBufLen == 0) {
10581059 runinfo->mRCode = RCODE_NFUN_NULL_INPUT;
10591060 }
10601061 else {
@@ -1071,7 +1072,7 @@ BOOL cmd_hash(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
10711072 }
10721073
10731074 int i;
1074- int max = vector_count(SFD(nextin).fdbuf.mLines);
1075+ int max = vector_count(SFD(nextin).mLines);
10751076 sObject* new_hash = HASH_NEW_GC(16, TRUE);
10761077
10771078 sObject* current = runinfo->mCurrentObject;
@@ -1087,17 +1088,17 @@ BOOL cmd_hash(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
10871088 sObject* key = STRING_NEW_STACK("");
10881089 for(i=0; i<max; i++) {
10891090 if((i % 2) == 0) {
1090- string_put(key, vector_item(SFD(nextin).fdbuf.mLines, i));
1091+ string_put(key, vector_item(SFD(nextin).mLines, i));
10911092 string_chomp(key);
10921093 }
10931094 else {
1094- sObject* new_var = STRING_NEW_GC(vector_item(SFD(nextin).fdbuf.mLines, i), FALSE);
1095+ sObject* new_var = STRING_NEW_GC(vector_item(SFD(nextin).mLines, i), FALSE);
10951096 string_chomp(new_var);
10961097 hash_put(new_hash, string_c_str(key), new_var);
10971098 }
10981099 }
10991100
1100- if(SFD(nextin).fdbuf.mBufLen == 0) {
1101+ if(SFD(nextin).mBufLen == 0) {
11011102 runinfo->mRCode = RCODE_NFUN_NULL_INPUT;
11021103 }
11031104 else {
@@ -1302,7 +1303,7 @@ BOOL cmd_ref(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
13021303 sCommand* command = runinfo->mCommand;
13031304
13041305 char* field = "\n";
1305- enum eLineField lf = gLineField;
1306+ eLineField lf = gLineField;
13061307 if(sCommand_option_item(command, "-Lw")) {
13071308 lf = kCRLF;
13081309 field = "\r\n";
@@ -1361,34 +1362,32 @@ BOOL cmd_ref(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
13611362 /// type
13621363 if(sCommand_option_item(command, "-type")) {
13631364 int i;
1364- int max = vector_count(SFD(nextin).fdbuf.mLines);
1365+ int max = vector_count(SFD(nextin).mLines);
13651366 for(i=0; i<max; i++) {
1366- char* line = vector_item(SFD(nextin).fdbuf.mLines, i);
1367+ char* line = vector_item(SFD(nextin).mLines, i);
13671368 void* mem = (void*)(unsigned long)strtoll(line, NULL, 16);
1368- if(mem == NULL) break;
1369+ if(mem == NULL || !gc_valid_object(mem) || !contained_in_pipe(mem)) {
1370+ err_msg("invalid address. it's not memory managed by a xyzsh gabage collecter or it doesn't exist in pipe data", runinfo->mSName, runinfo->mSLine, command->mArgs[0]);
1371+ return FALSE;
1372+ }
13691373
1370- int type = memchecker_item(gMemChecker, mem);
1374+ sObject* obj = mem;
1375+ int type = TYPE(obj);
13711376
1372- if(type >= 0) {
1373- char buf[128];
1374- char* obj_kind[16] = {
1375- NULL, "var", "array", "hash", "list", "native function", "block", "file dicriptor", "job", "object", "memchecker", "function", "class", "external program", "completion", "external object"
1376- };
1377- int size = snprintf(buf, 128, "%s\n", obj_kind[type]);
1377+ char buf[128];
1378+ char* obj_kind[T_TYPE_MAX] = {
1379+ NULL, "var", "array", "hash", "list", "native function", "block", "file dicriptor", "file dicriptor", "job", "object", "function", "class", "external program", "completion", "external object"
1380+ };
1381+ int size = snprintf(buf, 128, "%s\n", obj_kind[type]);
13781382
1379- if(!fd_write(nextout, buf, size)) {
1380- err_msg("signal interrupt", runinfo->mSName, runinfo->mSLine, command->mArgs[0]);
1381- runinfo->mRCode = RCODE_SIGNAL_INTERRUPT;
1382- return FALSE;
1383- }
1384- }
1385- else {
1386- err_msg("invalid adress. it's not memory managed by a xyzsh gabage collecter", runinfo->mSName, runinfo->mSLine, command->mArgs[0]);
1383+ if(!fd_write(nextout, buf, size)) {
1384+ err_msg("signal interrupt", runinfo->mSName, runinfo->mSLine, command->mArgs[0]);
1385+ runinfo->mRCode = RCODE_SIGNAL_INTERRUPT;
13871386 return FALSE;
13881387 }
13891388 }
13901389
1391- if(SFD(nextin).fdbuf.mBufLen == 0) {
1390+ if(SFD(nextin).mBufLen == 0) {
13921391 runinfo->mRCode = RCODE_NFUN_NULL_INPUT;
13931392 }
13941393 else {
@@ -1406,24 +1405,21 @@ BOOL cmd_ref(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
14061405 }
14071406
14081407 int i;
1409- int max = vector_count(SFD(nextin).fdbuf.mLines);
1408+ int max = vector_count(SFD(nextin).mLines);
14101409 BOOL shift = sCommand_option_item(command, "-shift");
14111410 for(i=0; i<max; i++) {
14121411 if(i+1 < command->mArgsNumRuntime) {
1413- char* line = vector_item(SFD(nextin).fdbuf.mLines, i);
1412+ char* line = vector_item(SFD(nextin).mLines, i);
14141413 void* mem = (void*)(unsigned long)strtoll(line, NULL, 16);
1415- int type = memchecker_item(gMemChecker, mem);
1416-
1417- if(type >= 0) {
1418- uobject_put(object, command->mArgsRuntime[i+1], mem);
1419- }
1420- else {
1421- err_msg("invalid adress. it's not memory managed by a xyzsh gabage collecter", runinfo->mSName, runinfo->mSLine, command->mArgs[0]);
1414+ if(mem == NULL || !gc_valid_object(mem) || !contained_in_pipe(mem)) {
1415+ err_msg("invalid address. it's not memory managed by a xyzsh gabage collecter or it doesn't exist in pipe data", runinfo->mSName, runinfo->mSLine, command->mArgs[0]);
14221416 return FALSE;
14231417 }
1418+
1419+ uobject_put(object, command->mArgsRuntime[i+1], mem);
14241420 }
14251421 else if(shift) {
1426- char* str = vector_item(SFD(nextin).fdbuf.mLines, i);
1422+ char* str = vector_item(SFD(nextin).mLines, i);
14271423 if(!fd_write(nextout, str, strlen(str))) {
14281424 err_msg("signal interrupt", runinfo->mSName, runinfo->mSLine, command->mArgs[0]);
14291425 runinfo->mRCode = RCODE_SIGNAL_INTERRUPT;
@@ -1435,7 +1431,7 @@ BOOL cmd_ref(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
14351431 }
14361432 }
14371433
1438- if(SFD(nextin).fdbuf.mBufLen == 0) {
1434+ if(SFD(nextin).mBufLen == 0) {
14391435 runinfo->mRCode = RCODE_NFUN_NULL_INPUT;
14401436 }
14411437 else {
@@ -1454,7 +1450,7 @@ BOOL cmd_export(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
14541450 sCommand* command = runinfo->mCommand;
14551451
14561452 char* field = "\n";
1457- enum eLineField lf = gLineField;
1453+ eLineField lf = gLineField;
14581454 if(sCommand_option_item(command, "-Lw")) {
14591455 lf = kCRLF;
14601456 field = "\r\n";
@@ -1502,10 +1498,10 @@ BOOL cmd_export(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
15021498
15031499 if(command->mArgsNumRuntime > 1) {
15041500 int i;
1505- int max = vector_count(SFD(nextin).fdbuf.mLines);
1501+ int max = vector_count(SFD(nextin).mLines);
15061502 for(i=1; i<command->mArgsNumRuntime; i++) {
15071503 if(i-1 < max) {
1508- sObject* new_var = STRING_NEW_STACK(vector_item(SFD(nextin).fdbuf.mLines, i-1));
1504+ sObject* new_var = STRING_NEW_STACK(vector_item(SFD(nextin).mLines, i-1));
15091505 string_chomp(new_var);
15101506 setenv(command->mArgsRuntime[i], string_c_str(new_var), 1);
15111507 }
@@ -1516,7 +1512,7 @@ BOOL cmd_export(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
15161512
15171513 if(sCommand_option_item(command, "-shift")) {
15181514 for(;i-1<max; i++) {
1519- char* str = vector_item(SFD(nextin).fdbuf.mLines, i-1);
1515+ char* str = vector_item(SFD(nextin).mLines, i-1);
15201516 if(!fd_write(nextout, str, strlen(str))) {
15211517 err_msg("signal interrupt", runinfo->mSName, runinfo->mSLine, command->mArgs[0]);
15221518 runinfo->mRCode = RCODE_SIGNAL_INTERRUPT;
@@ -1525,7 +1521,7 @@ BOOL cmd_export(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
15251521 }
15261522 }
15271523
1528- if(SFD(nextin).fdbuf.mBufLen == 0) {
1524+ if(SFD(nextin).mBufLen == 0) {
15291525 runinfo->mRCode = RCODE_NFUN_NULL_INPUT;
15301526 }
15311527 else {
--- a/src/cmd_str.c
+++ b/src/cmd_str.c
@@ -100,7 +100,7 @@ BOOL cmd_quote(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
100100
101101 /// output
102102 if(runinfo->mFilter) {
103- char* p = SFD(nextin).fdbuf.mBuf;
103+ char* p = SFD(nextin).mBuf;
104104 if(code == kByte) {
105105 while(*p) {
106106 if(isalpha(*p)) {
@@ -189,7 +189,7 @@ BOOL cmd_quote(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
189189 }
190190 }
191191
192- if(SFD(nextin).fdbuf.mBufLen == 0) {
192+ if(SFD(nextin).mBufLen == 0) {
193193 runinfo->mRCode = RCODE_NFUN_NULL_INPUT;
194194 }
195195 else {
@@ -218,7 +218,7 @@ BOOL cmd_length(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
218218 code = kEucjp;
219219 }
220220
221- enum eLineField lf = gLineField;
221+ eLineField lf = gLineField;
222222 if(sCommand_option_item(command, "-Lw")) {
223223 lf = kCRLF;
224224 }
@@ -237,7 +237,7 @@ BOOL cmd_length(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
237237 /// line number
238238 if(sCommand_option_item(command, "-line-num")) {
239239 int result = 0;
240- char* p = SFD(nextin).fdbuf.mBuf;
240+ char* p = SFD(nextin).mBuf;
241241 if(lf == kCRLF) {
242242 while(1) {
243243 if(*p == '\r' && *(p+1) == '\n') {
@@ -288,7 +288,7 @@ BOOL cmd_length(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
288288 }
289289 }
290290 else {
291- char* arg = SFD(nextin).fdbuf.mBuf;
291+ char* arg = SFD(nextin).mBuf;
292292 int len = str_kanjilen(code, arg);
293293
294294 char buf[128];
@@ -301,7 +301,7 @@ BOOL cmd_length(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
301301 }
302302 }
303303
304- if(SFD(nextin).fdbuf.mBufLen == 0) {
304+ if(SFD(nextin).mBufLen == 0) {
305305 runinfo->mRCode = RCODE_NFUN_NULL_INPUT;
306306 }
307307 else {
@@ -324,7 +324,7 @@ BOOL cmd_x(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
324324
325325 int i;
326326 for(i=0; i<multiple; i++) {
327- if(!fd_write(nextout, SFD(nextin).fdbuf.mBuf, SFD(nextin).fdbuf.mBufLen)) {
327+ if(!fd_write(nextout, SFD(nextin).mBuf, SFD(nextin).mBufLen)) {
328328 err_msg("signal interrupt", runinfo->mSName, runinfo->mSLine, command->mArgs[0]);
329329 runinfo->mRCode = RCODE_SIGNAL_INTERRUPT;
330330 return FALSE;
@@ -332,7 +332,7 @@ BOOL cmd_x(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
332332 }
333333
334334
335- if(SFD(nextin).fdbuf.mBufLen == 0) {
335+ if(SFD(nextin).mBufLen == 0) {
336336 runinfo->mRCode = RCODE_NFUN_NULL_INPUT;
337337 }
338338 else {
@@ -365,7 +365,7 @@ BOOL cmd_index(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
365365 /// output
366366 if(runinfo->mFilter) {
367367 if(command->mArgsNumRuntime == 2) {
368- char* target = SFD(nextin).fdbuf.mBuf;
368+ char* target = SFD(nextin).mBuf;
369369
370370 char* word = command->mArgsRuntime[1];
371371
@@ -463,7 +463,7 @@ BOOL cmd_index(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
463463 int c = str_pointer2kanjipos(code, target, result);
464464 size = snprintf(msg, 64, "%d", c);
465465
466- if(SFD(nextin).fdbuf.mBufLen == 0) {
466+ if(SFD(nextin).mBufLen == 0) {
467467 runinfo->mRCode = RCODE_NFUN_NULL_INPUT;
468468 }
469469 else {
@@ -581,7 +581,7 @@ BOOL cmd_rindex(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
581581 /// output
582582 if(runinfo->mFilter) {
583583 if(command->mArgsNumRuntime == 2) {
584- char* target = SFD(nextin).fdbuf.mBuf;
584+ char* target = SFD(nextin).mBuf;
585585 char* word = command->mArgsRuntime[1];
586586
587587 /// get starting point ///
@@ -682,7 +682,7 @@ BOOL cmd_rindex(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
682682 int c = str_pointer2kanjipos(code, target, result);
683683 size = snprintf(msg, 64, "%d", c);
684684
685- if(SFD(nextin).fdbuf.mBufLen == 0) {
685+ if(SFD(nextin).mBufLen == 0) {
686686 runinfo->mRCode = RCODE_NFUN_NULL_INPUT;
687687 }
688688 else {
@@ -728,7 +728,7 @@ BOOL cmd_lc(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
728728 }
729729
730730 if(runinfo->mFilter) {
731- sObject* str = STRING_NEW_STACK(SFD(nextin).fdbuf.mBuf);
731+ sObject* str = STRING_NEW_STACK(SFD(nextin).mBuf);
732732 string_tolower(str, code);
733733
734734 if(!fd_write(nextout, string_c_str(str), string_length(str))) {
@@ -737,7 +737,7 @@ BOOL cmd_lc(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
737737 return FALSE;
738738 }
739739
740- if(SFD(nextin).fdbuf.mBufLen == 0) {
740+ if(SFD(nextin).mBufLen == 0) {
741741 runinfo->mRCode = RCODE_NFUN_NULL_INPUT;
742742 }
743743 else {
@@ -767,7 +767,7 @@ BOOL cmd_uc(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
767767 }
768768
769769 if(runinfo->mFilter) {
770- sObject* str = STRING_NEW_STACK(SFD(nextin).fdbuf.mBuf);
770+ sObject* str = STRING_NEW_STACK(SFD(nextin).mBuf);
771771 string_toupper(str, code);
772772
773773 if(!fd_write(nextout, string_c_str(str), string_length(str))) {
@@ -776,7 +776,7 @@ BOOL cmd_uc(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
776776 return FALSE;
777777 }
778778
779- if(SFD(nextin).fdbuf.mBufLen == 0) {
779+ if(SFD(nextin).mBufLen == 0) {
780780 runinfo->mRCode = RCODE_NFUN_NULL_INPUT;
781781 }
782782 else {
@@ -792,9 +792,9 @@ BOOL cmd_chomp(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
792792 sCommand* command = runinfo->mCommand;
793793
794794 if(runinfo->mFilter) {
795- sObject* str = STRING_NEW_STACK(SFD(nextin).fdbuf.mBuf);
795+ sObject* str = STRING_NEW_STACK(SFD(nextin).mBuf);
796796 if(string_chomp(str)) {
797- if(SFD(nextin).fdbuf.mBufLen == 0) {
797+ if(SFD(nextin).mBufLen == 0) {
798798 runinfo->mRCode = RCODE_NFUN_NULL_INPUT;
799799 }
800800 else {
@@ -802,7 +802,7 @@ BOOL cmd_chomp(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
802802 }
803803 }
804804 else {
805- if(SFD(nextin).fdbuf.mBufLen == 0) {
805+ if(SFD(nextin).mBufLen == 0) {
806806 runinfo->mRCode = RCODE_NFUN_NULL_INPUT;
807807 }
808808 else {
@@ -839,7 +839,7 @@ BOOL cmd_chop(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
839839 }
840840
841841 if(runinfo->mFilter) {
842- sObject* str = STRING_NEW_STACK(SFD(nextin).fdbuf.mBuf);
842+ sObject* str = STRING_NEW_STACK(SFD(nextin).mBuf);
843843
844844 if(code == kByte) {
845845 char* s = string_c_str(str);
@@ -849,7 +849,7 @@ BOOL cmd_chop(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
849849 {
850850 string_trunc(str, len-2);
851851
852- if(SFD(nextin).fdbuf.mBufLen == 0) {
852+ if(SFD(nextin).mBufLen == 0) {
853853 runinfo->mRCode = RCODE_NFUN_NULL_INPUT;
854854 }
855855 else {
@@ -859,7 +859,7 @@ BOOL cmd_chop(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
859859 else if(len >= 1) {
860860 string_trunc(str, len-1);
861861
862- if(SFD(nextin).fdbuf.mBufLen == 0) {
862+ if(SFD(nextin).mBufLen == 0) {
863863 runinfo->mRCode = RCODE_NFUN_NULL_INPUT;
864864 }
865865 else {
@@ -867,7 +867,7 @@ BOOL cmd_chop(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
867867 }
868868 }
869869 else {
870- if(SFD(nextin).fdbuf.mBufLen == 0) {
870+ if(SFD(nextin).mBufLen == 0) {
871871 runinfo->mRCode = RCODE_NFUN_NULL_INPUT;
872872 }
873873 else {
@@ -883,7 +883,7 @@ BOOL cmd_chop(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
883883 string_erase(str, last_char_head-s, s + strlen(s) - last_char_head);
884884
885885 if(len > 0) {
886- if(SFD(nextin).fdbuf.mBufLen == 0) {
886+ if(SFD(nextin).mBufLen == 0) {
887887 runinfo->mRCode = RCODE_NFUN_NULL_INPUT;
888888 }
889889 else {
@@ -891,7 +891,7 @@ BOOL cmd_chop(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
891891 }
892892 }
893893 else {
894- if(SFD(nextin).fdbuf.mBufLen == 0) {
894+ if(SFD(nextin).mBufLen == 0) {
895895 runinfo->mRCode = RCODE_NFUN_NULL_INPUT;
896896 }
897897 else {
@@ -914,7 +914,7 @@ BOOL cmd_pomch(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
914914 {
915915 sCommand* command = runinfo->mCommand;
916916
917- enum eLineField lf = gLineField;
917+ eLineField lf = gLineField;
918918 if(sCommand_option_item(command, "-Lw")) {
919919 lf = kCRLF;
920920 }
@@ -929,9 +929,9 @@ BOOL cmd_pomch(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
929929 }
930930
931931 if(runinfo->mFilter) {
932- sObject* str = STRING_NEW_STACK(SFD(nextin).fdbuf.mBuf);
932+ sObject* str = STRING_NEW_STACK(SFD(nextin).mBuf);
933933 if(string_pomch(str, lf)) {
934- if(SFD(nextin).fdbuf.mBufLen == 0) {
934+ if(SFD(nextin).mBufLen == 0) {
935935 runinfo->mRCode = RCODE_NFUN_NULL_INPUT;
936936 }
937937 else {
@@ -939,7 +939,7 @@ BOOL cmd_pomch(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
939939 }
940940 }
941941 else {
942- if(SFD(nextin).fdbuf.mBufLen == 0) {
942+ if(SFD(nextin).mBufLen == 0) {
943943 runinfo->mRCode = RCODE_NFUN_NULL_INPUT;
944944 }
945945 else {
@@ -961,7 +961,7 @@ BOOL cmd_printf(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
961961 {
962962 sCommand* command = runinfo->mCommand;
963963
964- enum eLineField lf = gLineField;
964+ eLineField lf = gLineField;
965965 if(sCommand_option_item(command, "-Lw")) {
966966 lf = kCRLF;
967967 }
@@ -1002,8 +1002,8 @@ BOOL cmd_printf(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
10021002 p++;
10031003
10041004 char* arg;
1005- if(strings_num < vector_count(SFD(nextin).fdbuf.mLines)) {
1006- arg = vector_item(SFD(nextin).fdbuf.mLines, strings_num);
1005+ if(strings_num < vector_count(SFD(nextin).mLines)) {
1006+ arg = vector_item(SFD(nextin).mLines, strings_num);
10071007 }
10081008 else {
10091009 arg = "0";
@@ -1027,8 +1027,8 @@ BOOL cmd_printf(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
10271027 p++;
10281028
10291029 char* arg;
1030- if(strings_num < vector_count(SFD(nextin).fdbuf.mLines)) {
1031- arg = vector_item(SFD(nextin).fdbuf.mLines, strings_num);
1030+ if(strings_num < vector_count(SFD(nextin).mLines)) {
1031+ arg = vector_item(SFD(nextin).mLines, strings_num);
10321032 }
10331033 else {
10341034 arg = "0";
@@ -1051,8 +1051,8 @@ BOOL cmd_printf(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
10511051 p++;
10521052
10531053 sObject* arg;
1054- if(strings_num < vector_count(SFD(nextin).fdbuf.mLines)) {
1055- arg = STRING_NEW_STACK(vector_item(SFD(nextin).fdbuf.mLines, strings_num));
1054+ if(strings_num < vector_count(SFD(nextin).mLines)) {
1055+ arg = STRING_NEW_STACK(vector_item(SFD(nextin).mLines, strings_num));
10561056 }
10571057 else {
10581058 arg = STRING_NEW_STACK("");
@@ -1086,8 +1086,8 @@ BOOL cmd_printf(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
10861086 }
10871087 }
10881088
1089- if(strings_num > vector_count(SFD(nextin).fdbuf.mLines)) {
1090- if(SFD(nextin).fdbuf.mBufLen == 0) {
1089+ if(strings_num > vector_count(SFD(nextin).mLines)) {
1090+ if(SFD(nextin).mBufLen == 0) {
10911091 runinfo->mRCode = RCODE_NFUN_NULL_INPUT;
10921092 }
10931093 else {
@@ -1095,7 +1095,7 @@ BOOL cmd_printf(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
10951095 }
10961096 }
10971097 else {
1098- if(SFD(nextin).fdbuf.mBufLen == 0) {
1098+ if(SFD(nextin).mBufLen == 0) {
10991099 runinfo->mRCode = RCODE_NFUN_NULL_INPUT;
11001100 }
11011101 else {
@@ -1120,8 +1120,8 @@ BOOL cmd_sub(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
11201120
11211121 if(command->mBlocksNum >= 1) {
11221122 block = command->mBlocks[0];
1123- nextin2 = FD_NEW_STACK(kFDKindBuf, 0);
1124- nextout2 = FD_NEW_STACK(kFDKindBuf, 0);
1123+ nextin2 = FD_NEW_STACK();
1124+ nextout2 = FD_NEW_STACK();
11251125 }
11261126 else {
11271127 block = NULL;
@@ -1138,7 +1138,7 @@ BOOL cmd_sub(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
11381138 int r = get_onig_regex(&reg, command, regex);
11391139
11401140 if(r == ONIG_NORMAL) {
1141- char* p = SFD(nextin).fdbuf.mBuf;
1141+ char* p = SFD(nextin).mBuf;
11421142
11431143 sObject* sub_str = STRING_NEW_STACK("");
11441144
@@ -1146,7 +1146,7 @@ BOOL cmd_sub(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
11461146 OnigRegion* region = onig_region_new();
11471147 OnigErrorInfo err_info;
11481148
1149- char* target = SFD(nextin).fdbuf.mBuf;
1149+ char* target = SFD(nextin).mBuf;
11501150
11511151 const int point = p - target;
11521152 int r2 = onig_search(reg, target
@@ -1231,7 +1231,7 @@ BOOL cmd_sub(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
12311231 return FALSE;
12321232 }
12331233
1234- string_put(sub_str, SFD(nextout2).fdbuf.mBuf);
1234+ string_put(sub_str, SFD(nextout2).mBuf);
12351235 }
12361236 else {
12371237 char* p2 = destination;
@@ -1361,7 +1361,7 @@ BOOL cmd_sub(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
13611361 uobject_put(gRootObject, "SUB_COUNT", STRING_NEW_GC(buf, FALSE));
13621362
13631363 if(sub_count > 0) {
1364- if(SFD(nextin).fdbuf.mBufLen == 0) {
1364+ if(SFD(nextin).mBufLen == 0) {
13651365 runinfo->mRCode = RCODE_NFUN_NULL_INPUT;
13661366 }
13671367 else {
@@ -1400,7 +1400,7 @@ BOOL cmd_scan(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
14001400
14011401 if(command->mBlocksNum >= 1) {
14021402 block = command->mBlocks[0];
1403- nextin2 = FD_NEW_STACK(kFDKindBuf, 0);
1403+ nextin2 = FD_NEW_STACK();
14041404 }
14051405 else {
14061406 block = NULL;
@@ -1413,9 +1413,9 @@ BOOL cmd_scan(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
14131413 int r = get_onig_regex(&reg, command, regex);
14141414
14151415 if(r == ONIG_NORMAL) {
1416- char* target = SFD(nextin).fdbuf.mBuf;
1417- char* p = SFD(nextin).fdbuf.mBuf;
1418- char* end = SFD(nextin).fdbuf.mBuf + strlen(SFD(nextin).fdbuf.mBuf);
1416+ char* target = SFD(nextin).mBuf;
1417+ char* p = SFD(nextin).mBuf;
1418+ char* end = SFD(nextin).mBuf + strlen(SFD(nextin).mBuf);
14191419 while(p < end) {
14201420 OnigRegion* region = onig_region_new();
14211421 int r2 = onig_search(reg, target
@@ -1587,7 +1587,7 @@ BOOL cmd_scan(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
15871587 }
15881588 }
15891589
1590- p = SFD(nextin).fdbuf.mBuf + region->end[0];
1590+ p = SFD(nextin).mBuf + region->end[0];
15911591 }
15921592 else {
15931593 p++;
@@ -1603,7 +1603,7 @@ BOOL cmd_scan(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
16031603 uobject_put(gRootObject, "MATCH_COUNT", STRING_NEW_GC(buf, FALSE));
16041604
16051605 if(match_count > 0) {
1606- if(SFD(nextin).fdbuf.mBufLen == 0) {
1606+ if(SFD(nextin).mBufLen == 0) {
16071607 runinfo->mRCode = RCODE_NFUN_NULL_INPUT;
16081608 }
16091609 else {
@@ -1624,7 +1624,7 @@ BOOL cmd_split(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
16241624 sCommand* command = runinfo->mCommand;
16251625
16261626 char* field = "\n";
1627- enum eLineField lf = gLineField;
1627+ eLineField lf = gLineField;
16281628 if(sCommand_option_item(command, "-Lw")) {
16291629 lf = kCRLF;
16301630 field = "\r\n";
@@ -1671,7 +1671,7 @@ BOOL cmd_split(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
16711671
16721672 if(r == ONIG_NORMAL) {
16731673 char* target;
1674- char* p = target = SFD(nextin).fdbuf.mBuf;
1674+ char* p = target = SFD(nextin).mBuf;
16751675
16761676 int split_count = 0;
16771677
@@ -1832,7 +1832,7 @@ BOOL cmd_split(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
18321832 }
18331833
18341834 if(split_count > 0) {
1835- if(SFD(nextin).fdbuf.mBufLen == 0) {
1835+ if(SFD(nextin).mBufLen == 0) {
18361836 runinfo->mRCode = RCODE_NFUN_NULL_INPUT;
18371837 }
18381838 else {
@@ -1882,7 +1882,7 @@ BOOL cmd_add(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
18821882 number = -1;
18831883 }
18841884
1885- const int len = str_kanjilen(code, SFD(nextin).fdbuf.mBuf);
1885+ const int len = str_kanjilen(code, SFD(nextin).mBuf);
18861886
18871887 if(number < 0) {
18881888 number += len + 1;
@@ -1890,8 +1890,8 @@ BOOL cmd_add(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
18901890 }
18911891
18921892 if(number < len) {
1893- int point = str_kanjipos2pointer(code, SFD(nextin).fdbuf.mBuf, number) - SFD(nextin).fdbuf.mBuf;
1894- if(!fd_write(nextout, SFD(nextin).fdbuf.mBuf, point)) {
1893+ int point = str_kanjipos2pointer(code, SFD(nextin).mBuf, number) - SFD(nextin).mBuf;
1894+ if(!fd_write(nextout, SFD(nextin).mBuf, point)) {
18951895 err_msg("signal interrupt", runinfo->mSName, runinfo->mSLine, command->mArgs[0]);
18961896 runinfo->mRCode = RCODE_SIGNAL_INTERRUPT;
18971897 return FALSE;
@@ -1901,14 +1901,14 @@ BOOL cmd_add(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
19011901 runinfo->mRCode = RCODE_SIGNAL_INTERRUPT;
19021902 return FALSE;
19031903 }
1904- if(!fd_write(nextout, SFD(nextin).fdbuf.mBuf + point, SFD(nextin).fdbuf.mBufLen - point)) {
1904+ if(!fd_write(nextout, SFD(nextin).mBuf + point, SFD(nextin).mBufLen - point)) {
19051905 err_msg("signal interrupt", runinfo->mSName, runinfo->mSLine, command->mArgs[0]);
19061906 runinfo->mRCode = RCODE_SIGNAL_INTERRUPT;
19071907 return FALSE;
19081908 }
19091909 }
19101910 else {
1911- if(!fd_write(nextout, SFD(nextin).fdbuf.mBuf, SFD(nextin).fdbuf.mBufLen)) {
1911+ if(!fd_write(nextout, SFD(nextin).mBuf, SFD(nextin).mBufLen)) {
19121912 err_msg("signal interrupt", runinfo->mSName, runinfo->mSLine, command->mArgs[0]);
19131913 runinfo->mRCode = RCODE_SIGNAL_INTERRUPT;
19141914 return FALSE;
@@ -1920,7 +1920,7 @@ BOOL cmd_add(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
19201920 }
19211921 }
19221922
1923- if(SFD(nextin).fdbuf.mBufLen == 0) {
1923+ if(SFD(nextin).mBufLen == 0) {
19241924 runinfo->mRCode = RCODE_NFUN_NULL_INPUT;
19251925 }
19261926 else {
@@ -1966,7 +1966,7 @@ BOOL cmd_del(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
19661966 number = 1;
19671967 }
19681968
1969- const int len = str_kanjilen(code, SFD(nextin).fdbuf.mBuf);
1969+ const int len = str_kanjilen(code, SFD(nextin).mBuf);
19701970
19711971 if(index < 0) {
19721972 index += len;
@@ -1977,15 +1977,15 @@ BOOL cmd_del(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
19771977 if(index < 0) index = 0;
19781978 }
19791979
1980- int point = str_kanjipos2pointer(code, SFD(nextin).fdbuf.mBuf, index) - SFD(nextin).fdbuf.mBuf;
1980+ int point = str_kanjipos2pointer(code, SFD(nextin).mBuf, index) - SFD(nextin).mBuf;
19811981
1982- if(!fd_write(nextout, SFD(nextin).fdbuf.mBuf, point)) {
1982+ if(!fd_write(nextout, SFD(nextin).mBuf, point)) {
19831983 err_msg("signal interrupt", runinfo->mSName, runinfo->mSLine, command->mArgs[0]);
19841984 runinfo->mRCode = RCODE_SIGNAL_INTERRUPT;
19851985 return FALSE;
19861986 }
19871987 if(index + number < len) {
1988- char* point = str_kanjipos2pointer(code, SFD(nextin).fdbuf.mBuf, index + number);
1988+ char* point = str_kanjipos2pointer(code, SFD(nextin).mBuf, index + number);
19891989 if(!fd_write(nextout, point, strlen(point))) {
19901990 err_msg("signal interrupt", runinfo->mSName, runinfo->mSLine, command->mArgs[0]);
19911991 runinfo->mRCode = RCODE_SIGNAL_INTERRUPT;
@@ -1993,7 +1993,7 @@ BOOL cmd_del(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
19931993 }
19941994 }
19951995
1996- if(SFD(nextin).fdbuf.mBufLen == 0) {
1996+ if(SFD(nextin).mBufLen == 0) {
19971997 runinfo->mRCode = RCODE_NFUN_NULL_INPUT;
19981998 }
19991999 else {
@@ -2023,7 +2023,7 @@ BOOL cmd_rows(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
20232023 }
20242024
20252025 if(runinfo->mFilter && command->mArgsNumRuntime > 1 && command->mBlocksNum <= command->mArgsNumRuntime-1) {
2026- if(SFD(nextin).fdbuf.mBufLen == 0) {
2026+ if(SFD(nextin).mBufLen == 0) {
20272027 runinfo->mRCode = RCODE_NFUN_NULL_INPUT;
20282028 }
20292029 else {
@@ -2051,7 +2051,7 @@ BOOL cmd_rows(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
20512051 return FALSE;
20522052 }
20532053
2054- const int kanjilen = str_kanjilen(code, SFD(nextin).fdbuf.mBuf);
2054+ const int kanjilen = str_kanjilen(code, SFD(nextin).mBuf);
20552055 if(kanjilen > 0) {
20562056 int first = atoi(buf);
20572057 int second = atoi(buf2);
@@ -2078,12 +2078,12 @@ BOOL cmd_rows(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
20782078 if(code == kByte) {
20792079 int k;
20802080 for(k=0; k<kanjilen; k++) {
2081- array[k] = SFD(nextin).fdbuf.mBuf + k;
2081+ array[k] = SFD(nextin).mBuf + k;
20822082 }
2083- array[k] = SFD(nextin).fdbuf.mBuf + k;
2083+ array[k] = SFD(nextin).mBuf + k;
20842084 }
20852085 else if(code == kUtf8) {
2086- char* p = SFD(nextin).fdbuf.mBuf;
2086+ char* p = SFD(nextin).mBuf;
20872087
20882088 int k;
20892089 for(k=0; k<kanjilen; k++) {
@@ -2099,7 +2099,7 @@ BOOL cmd_rows(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
20992099 array[k] = p;
21002100 }
21012101 else {
2102- char* p = SFD(nextin).fdbuf.mBuf;
2102+ char* p = SFD(nextin).mBuf;
21032103
21042104 int k;
21052105 for(k=0; k<kanjilen; k++) {
@@ -2111,7 +2111,7 @@ BOOL cmd_rows(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
21112111 }
21122112
21132113 if(first < second) {
2114- sObject* nextin2 = FD_NEW_STACK(kFDKindBuf, 0);
2114+ sObject* nextin2 = FD_NEW_STACK();
21152115
21162116 int j;
21172117 for(j=first; j<=second; j++) {
@@ -2134,7 +2134,7 @@ BOOL cmd_rows(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
21342134 runinfo->mRCode = rcode;
21352135 }
21362136 else {
2137- if(!fd_write(nextout, SFD(nextin2).fdbuf.mBuf, SFD(nextin2).fdbuf.mBufLen))
2137+ if(!fd_write(nextout, SFD(nextin2).mBuf, SFD(nextin2).mBufLen))
21382138 {
21392139 err_msg("interrupt", runinfo->mSName, runinfo->mSLine, command->mArgs[0]);
21402140 runinfo->mRCode = RCODE_SIGNAL_INTERRUPT;
@@ -2146,7 +2146,7 @@ BOOL cmd_rows(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
21462146 }
21472147 }
21482148 else {
2149- sObject* nextin2 = FD_NEW_STACK(kFDKindBuf, 0);
2149+ sObject* nextin2 = FD_NEW_STACK();
21502150
21512151 int j;
21522152 for(j=first; j>=second; j--) {
@@ -2169,7 +2169,7 @@ BOOL cmd_rows(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
21692169 runinfo->mRCode = rcode;
21702170 }
21712171 else {
2172- if(!fd_write(nextout, SFD(nextin2).fdbuf.mBuf, SFD(nextin2).fdbuf.mBufLen))
2172+ if(!fd_write(nextout, SFD(nextin2).mBuf, SFD(nextin2).mBufLen))
21732173 {
21742174 err_msg("interrupt", runinfo->mSName, runinfo->mSLine, command->mArgs[0]);
21752175 runinfo->mRCode = RCODE_SIGNAL_INTERRUPT;
@@ -2185,7 +2185,7 @@ BOOL cmd_rows(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
21852185 }
21862186 }
21872187 else {
2188- const int len = str_kanjilen(code, SFD(nextin).fdbuf.mBuf);
2188+ const int len = str_kanjilen(code, SFD(nextin).mBuf);
21892189 int num = atoi(arg);
21902190
21912191 if(num < 0) {
@@ -2197,9 +2197,9 @@ BOOL cmd_rows(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
21972197 if(num < 0) num = 0;
21982198 }
21992199
2200- sObject* nextin2 = FD_NEW_STACK(kFDKindBuf, 0);
2200+ sObject* nextin2 = FD_NEW_STACK();
22012201
2202- char* str = str_kanjipos2pointer(code, SFD(nextin).fdbuf.mBuf, num);
2202+ char* str = str_kanjipos2pointer(code, SFD(nextin).mBuf, num);
22032203 char* str2 = str_kanjipos2pointer(code, str, 1);
22042204 if(!fd_write(nextin2, str, str2 -str)) {
22052205 err_msg("interrupt", runinfo->mSName, runinfo->mSLine, command->mArgs[0]);
@@ -2216,7 +2216,7 @@ BOOL cmd_rows(sObject* nextin, sObject* nextout, sRunInfo* runinfo)
22162216 runinfo->mRCode = rcode;
22172217 }
22182218 else {
2219- if(!fd_write(nextout, SFD(nextin2).fdbuf.mBuf, SFD(nextin2).fdbuf.mBufLen))
2219+ if(!fd_write(nextout, SFD(nextin2).mBuf, SFD(nextin2).mBufLen))
22202220 {
22212221 err_msg("interrupt", runinfo->mSName, runinfo->mSLine, command->mArgs[0]);
22222222 runinfo->mRCode = RCODE_SIGNAL_INTERRUPT;
--- a/src/completion.c
+++ b/src/completion.c
@@ -18,8 +18,8 @@ int completion_gc_children_mark(sObject* self)
1818
1919 sObject* block = SCOMPLETION(self).mBlock;
2020 if(block) {
21- if((block->mFlg & GC_MARK) == 0) {
22- block->mFlg |= GC_MARK;
21+ if(IS_MARKED(block) == 0) {
22+ SET_MARK(block);
2323 count++;
2424 count += object_gc_children_mark(block);
2525 }
--- a/src/fd.c
+++ b/src/fd.c
@@ -4,41 +4,50 @@
44 #include <stdio.h>
55 #include <errno.h>
66
7-sObject* fd_new_from_stack(int kind, int fd)
7+sObject* fd_new_from_stack()
88 {
99 sObject* self = stack_get_free_object(T_FD);
1010
11- SFD(self).mKind = kind;
11+ SFD(self).mBuf = MALLOC(1024);
12+ SFD(self).mBuf[0] = 0;
1213
13- if(kind == kFDKindFD) {
14- SFD(self).fd.mFD = fd;
15- }
16- else {
17- SFD(self).fdbuf.mBuf = MALLOC(1024);
18- SFD(self).fdbuf.mBuf[0] = 0;
14+ SFD(self).mBufSize = 1024;
15+ SFD(self).mBufLen = 0;
1916
20- SFD(self).fdbuf.mBufSize = 1024;
21- SFD(self).fdbuf.mBufLen = 0;
22-
23- SFD(self).fdbuf.mLines = VECTOR_NEW_MALLOC(32);
24- SFD(self).fdbuf.mReadedLineNumber = 0;
25- }
17+ SFD(self).mLines = VECTOR_NEW_MALLOC(32);
18+ SFD(self).mReadedLineNumber = 0;
2619
2720 return self;
2821 }
2922
3023 void fd_delete_stack(sObject* self)
3124 {
32- if(SFD(self).mKind == kFDKindBuf) {
33- sObject* v = SFD(self).fdbuf.mLines;
34- int i;
35- for(i=0; i<vector_count(v); i++) {
36- FREE(vector_item(v, i));
37- }
38- vector_delete_malloc(SFD(self).fdbuf.mLines);
25+ sObject* v = SFD(self).mLines;
26+ int i;
27+ for(i=0; i<vector_count(v); i++) {
28+ FREE(vector_item(v, i));
29+ }
30+ vector_delete_malloc(SFD(self).mLines);
31+
32+ FREE(SFD(self).mBuf);
33+}
34+
35+void fd_put(sObject* self, MANAGED char* buf, int buf_size, int buf_len)
36+{
37+ ASSERT(TYPE(self) == T_FD);
38+
39+ FREE(SFD(self).mBuf);
40+
41+ SFD(self).mBuf = MANAGED buf;
42+ SFD(self).mBufSize = buf_size;
43+ SFD(self).mBufLen = buf_len;
3944
40- FREE(SFD(self).fdbuf.mBuf);
45+ int i;
46+ for(i=0; i<vector_count(SFD(self).mLines); i++) {
47+ FREE(vector_item(SFD(self).mLines, i));
4148 }
49+ vector_clear(SFD(self).mLines);
50+ SFD(self).mReadedLineNumber = 0;
4251 }
4352
4453 // TRUE: Success
@@ -75,10 +84,12 @@ BOOL bufsiz_write(int fd, char* buf, int buf_size)
7584 return TRUE;
7685 }
7786
78-BOOL fd_guess_lf(sObject* self, enum eLineField* lf)
87+BOOL fd_guess_lf(sObject* self, eLineField* lf)
7988 {
89+ ASSERT(TYPE(self) == T_FD);
90+
8091 *lf = -1;
81- char* p = SFD(self).fdbuf.mBuf;
92+ char* p = SFD(self).mBuf;
8293
8394 while(*p) {
8495 if(*p == '\a') {
@@ -91,7 +102,7 @@ BOOL fd_guess_lf(sObject* self, enum eLineField* lf)
91102 }
92103
93104 if(*lf == -1) {
94- p = SFD(self).fdbuf.mBuf;
105+ p = SFD(self).mBuf;
95106
96107 while(*p) {
97108 if(*p == '\r' && *(p+1) == '\n') {
@@ -105,7 +116,7 @@ BOOL fd_guess_lf(sObject* self, enum eLineField* lf)
105116 }
106117
107118 if(*lf == -1) {
108- p = SFD(self).fdbuf.mBuf;
119+ p = SFD(self).mBuf;
109120
110121 while(*p) {
111122 if(*p == '\r') {
@@ -119,7 +130,7 @@ BOOL fd_guess_lf(sObject* self, enum eLineField* lf)
119130 }
120131
121132 if(*lf == -1) {
122- p = SFD(self).fdbuf.mBuf;
133+ p = SFD(self).mBuf;
123134
124135 while(*p) {
125136 if(*p == '\n') {
@@ -135,23 +146,23 @@ BOOL fd_guess_lf(sObject* self, enum eLineField* lf)
135146 return FALSE;
136147 }
137148
138-void fd_split(sObject* self, enum eLineField lf)
149+void fd_split(sObject* self, eLineField lf)
139150 {
140- assert(TYPE(self) == T_FD && SFD(self).mKind == kFDKindBuf);
151+ assert(TYPE(self) == T_FD);
141152
142- sObject* v = SFD(self).fdbuf.mLines;
153+ sObject* v = SFD(self).mLines;
143154
144- if(SFD(self).fdbuf.mLinesLineField != lf) {
155+ if(SFD(self).mLinesLineField != lf) {
145156 int i;
146157 for(i=0; i<vector_count(v); i++) {
147158 FREE(vector_item(v, i));
148159 }
149160 vector_clear(v);
150- SFD(self).fdbuf.mReadedLineNumber = 0;
161+ SFD(self).mReadedLineNumber = 0;
151162 }
152163
153164 if(vector_count(v) == 0) {
154- char* p = SFD(self).fdbuf.mBuf;
165+ char* p = SFD(self).mBuf;
155166 char* new_line = p;
156167 if(lf == kCRLF) {
157168 while(1) {
@@ -164,7 +175,7 @@ void fd_split(sObject* self, enum eLineField lf)
164175 vector_add(v, line);
165176 new_line = p;
166177 }
167- else if(p - SFD(self).fdbuf.mBuf >= SFD(self).fdbuf.mBufLen) {
178+ else if(p - SFD(self).mBuf >= SFD(self).mBufLen) {
168179 const int size = p - new_line;
169180 if(size > 0) {
170181 char* line = MALLOC(size + 1 + 2);
@@ -203,7 +214,7 @@ void fd_split(sObject* self, enum eLineField lf)
203214 p++;
204215 new_line = p;
205216 }
206- else if(p - SFD(self).fdbuf.mBuf >= SFD(self).fdbuf.mBufLen) {
217+ else if(p - SFD(self).mBuf >= SFD(self).mBufLen) {
207218 const int size = p - new_line;
208219 if(size > 0) {
209220 char* line = MALLOC(size + 1 + 1);
@@ -220,7 +231,7 @@ void fd_split(sObject* self, enum eLineField lf)
220231 }
221232 }
222233
223- SFD(self).fdbuf.mLinesLineField = lf;
234+ SFD(self).mLinesLineField = lf;
224235 }
225236 }
226237
@@ -253,42 +264,41 @@ void fd_clear(sObject* self)
253264 {
254265 assert(TYPE(self) == T_FD);
255266
256- if(SFD(self).mKind == kFDKindBuf) {
257- SFD(self).fdbuf.mBufLen = 0;
258- SFD(self).fdbuf.mBuf[0] = 0;
267+ SFD(self).mBufLen = 0;
268+ SFD(self).mBuf[0] = 0;
259269
260- int i;
261- for(i=0; i<vector_count(SFD(self).fdbuf.mLines); i++) {
262- FREE(vector_item(SFD(self).fdbuf.mLines, i));
263- }
264- vector_clear(SFD(self).fdbuf.mLines);
265- SFD(self).fdbuf.mReadedLineNumber = 0;
266- }
270+ int i;
271+ for(i=0; i<vector_count(SFD(self).mLines); i++) {
272+ FREE(vector_item(SFD(self).mLines, i));
273+ }
274+ vector_clear(SFD(self).mLines);
275+ SFD(self).mReadedLineNumber = 0;
267276 }
268277
269278 // TRUE: Success
270279 // FALSE: signal interrupt. set RCODE_SIGNAL_INTERRUPT on rcode and err message
271280 BOOL fd_write(sObject* self, char* str, int len)
272281 {
273- if(SFD(self).mKind == kFDKindFD) {
274- if(write(SFD(self).fd.mFD, str, len) < 0) {
282+ ASSERT(TYPE(self) == T_FD || TYPE(self) == T_FD2);
283+
284+ if(TYPE(self) == T_FD2) {
285+ if(write(SFD2(self).mFD, str, len) < 0) {
275286 return FALSE;
276287 }
277288 }
278289 else {
279- if((SFD(self).fdbuf.mBufLen+len+1) >= SFD(self).fdbuf.mBufSize) {
280- int new_size = (SFD(self).fdbuf.mBufSize + len+1) * 1.8;
290+ if((SFD(self).mBufLen+len+1) >= SFD(self).mBufSize) {
291+ int new_size = (SFD(self).mBufSize + len+1) * 1.8;
281292
282- SFD(self).fdbuf.mBuf = REALLOC(SFD(self).fdbuf.mBuf, new_size);
283- SFD(self).fdbuf.mBufSize = new_size;
293+ SFD(self).mBuf = REALLOC(SFD(self).mBuf, new_size);
294+ SFD(self).mBufSize = new_size;
284295 }
285296
286-
287- if(!memcpy_buf(SFD(self).fdbuf.mBuf + SFD(self).fdbuf.mBufLen, str, len)) {
297+ if(!memcpy_buf(SFD(self).mBuf + SFD(self).mBufLen, str, len)) {
288298 return FALSE;
289299 }
290- SFD(self).fdbuf.mBufLen += len;
291- SFD(self).fdbuf.mBuf[SFD(self).fdbuf.mBufLen] = 0;
300+ SFD(self).mBufLen += len;
301+ SFD(self).mBuf[SFD(self).mBufLen] = 0;
292302 }
293303
294304 return TRUE;
@@ -298,20 +308,22 @@ BOOL fd_write(sObject* self, char* str, int len)
298308 // FALSE: signal interrupt. set RCODE_SIGNAL_INTERRUPT on rcode and err message
299309 BOOL fd_writec(sObject* self, char c)
300310 {
301- if(SFD(self).mKind == kFDKindFD) {
302- if(write(SFD(self).fd.mFD, &c, 1) < 0) {
311+ ASSERT(TYPE(self) == T_FD || TYPE(self) == T_FD2);
312+
313+ if(TYPE(self) == T_FD2) {
314+ if(write(SFD2(self).mFD, &c, 1) < 0) {
303315 return FALSE;
304316 }
305317 }
306318 else {
307- if((SFD(self).fdbuf.mBufLen) >= SFD(self).fdbuf.mBufSize) {
308- int new_size = (SFD(self).fdbuf.mBufSize) * 1.8;
309- SFD(self).fdbuf.mBuf = REALLOC(SFD(self).fdbuf.mBuf, new_size);
310- SFD(self).fdbuf.mBufSize = new_size;
319+ if((SFD(self).mBufLen) >= SFD(self).mBufSize) {
320+ int new_size = (SFD(self).mBufSize) * 1.8;
321+ SFD(self).mBuf = REALLOC(SFD(self).mBuf, new_size);
322+ SFD(self).mBufSize = new_size;
311323 }
312324
313- SFD(self).fdbuf.mBuf[SFD(self).fdbuf.mBufLen++] = c;
314- SFD(self).fdbuf.mBuf[SFD(self).fdbuf.mBufLen] = 0;
325+ SFD(self).mBuf[SFD(self).mBufLen++] = c;
326+ SFD(self).mBuf[SFD(self).mBufLen] = 0;
315327
316328 if(gXyzshSigInt) {
317329 gXyzshSigInt = FALSE;
@@ -326,14 +338,25 @@ BOOL fd_writec(sObject* self, char c)
326338 // FALSE: signal interrupt. set RCODE_SIGNAL_INTERRUPT on rcode and err message
327339 BOOL fd_flash(sObject* self, int fd)
328340 {
329- if(SFD(self).mKind == kFDKindBuf) {
330- if(!bufsiz_write(fd, SFD(self).fdbuf.mBuf, SFD(self).fdbuf.mBufLen)) {
341+ ASSERT(TYPE(self) == T_FD);
342+
343+ if(TYPE(self) == T_FD) {
344+ if(!bufsiz_write(fd, SFD(self).mBuf, SFD(self).mBufLen)) {
331345 return FALSE;
332346 }
333347
334- SFD(self).fdbuf.mBufLen = 0;
335- SFD(self).fdbuf.mBuf[0] = 0;
348+ SFD(self).mBufLen = 0;
349+ SFD(self).mBuf[0] = 0;
336350 }
337351
338352 return TRUE;
339353 }
354+
355+sObject* fd2_new_from_stack(uint fd)
356+{
357+ sObject* self = stack_get_free_object(T_FD2);
358+
359+ SFD2(self).mFD = fd;
360+
361+ return self;
362+}
--- a/src/fun.c
+++ b/src/fun.c
@@ -25,7 +25,6 @@ sObject* fun_new_from_gc(sObject* parent, BOOL user_object, BOOL no_stackframe)
2525
2626 SFUN(self).mArgBlocks = NULL;
2727
28- SFUN(self).mRunInfo = NULL;
2928 SFUN(self).mOptions = MALLOC(sizeof(option_hash_it)*XYZSH_OPTION_MAX);
3029 memset(SFUN(self).mOptions, 0, sizeof(option_hash_it)*XYZSH_OPTION_MAX);
3130
@@ -45,7 +44,6 @@ sObject* fun_new_from_stack(sObject* parent)
4544 SFUN(self).mLocalObjects = NULL;
4645 SFUN(self).mArgBlocks = NULL;
4746
48- SFUN(self).mRunInfo = NULL;
4947 SFUN(self).mOptions = MALLOC(sizeof(option_hash_it)*XYZSH_OPTION_MAX);
5048 memset(SFUN(self).mOptions, 0, sizeof(option_hash_it)*XYZSH_OPTION_MAX);
5149
@@ -65,7 +63,6 @@ sObject* fun_clone_from_stack_block_to_gc(sObject* block, BOOL user_object, sObj
6563 SFUN(self).mLocalObjects = NULL;
6664 SFUN(self).mArgBlocks = NULL;
6765
68- SFUN(self).mRunInfo = NULL;
6966 SFUN(self).mOptions = MALLOC(sizeof(option_hash_it)*XYZSH_OPTION_MAX);
7067 memset(SFUN(self).mOptions, 0, sizeof(option_hash_it)*XYZSH_OPTION_MAX);
7168
@@ -85,7 +82,6 @@ sObject* fun_clone_from_stack_block_to_stack(sObject* block, sObject* parent, BO
8582 SFUN(self).mLocalObjects = NULL;
8683 SFUN(self).mArgBlocks = NULL;
8784
88- SFUN(self).mRunInfo = NULL;
8985 SFUN(self).mOptions = MALLOC(sizeof(option_hash_it)*XYZSH_OPTION_MAX);
9086 memset(SFUN(self).mOptions, 0, sizeof(option_hash_it)*XYZSH_OPTION_MAX);
9187
@@ -120,8 +116,8 @@ int fun_gc_children_mark(sObject* self)
120116
121117 sObject* block = SFUN(self).mBlock;
122118 if(block) {
123- if((block->mFlg & GC_MARK) == 0) {
124- block->mFlg |= GC_MARK;
119+ if(IS_MARKED(block) == 0) {
120+ SET_MARK(block);
125121 count++;
126122 count += object_gc_children_mark(block);
127123 }
@@ -129,8 +125,8 @@ int fun_gc_children_mark(sObject* self)
129125
130126 sObject* parent = SFUN(self).mParent;
131127 if(parent) {
132- if((parent->mFlg & GC_MARK) == 0) {
133- parent->mFlg |= GC_MARK;
128+ if(IS_MARKED(parent) == 0) {
129+ SET_MARK(parent);
134130 count++;
135131 count += object_gc_children_mark(parent);
136132 }
@@ -138,8 +134,8 @@ int fun_gc_children_mark(sObject* self)
138134
139135 sObject* lobjects = SFUN(self).mLocalObjects;
140136 if(lobjects) {
141- if((lobjects->mFlg & GC_MARK) == 0) {
142- lobjects->mFlg |= GC_MARK;
137+ if(IS_MARKED(lobjects) == 0) {
138+ SET_MARK(lobjects);
143139 count++;
144140 count += object_gc_children_mark(lobjects);
145141 }
@@ -147,8 +143,8 @@ int fun_gc_children_mark(sObject* self)
147143
148144 sObject* arg_blocks = SFUN(self).mArgBlocks;
149145 if(arg_blocks) {
150- if((arg_blocks->mFlg & GC_MARK) == 0) {
151- arg_blocks->mFlg |= GC_MARK;
146+ if(IS_MARKED(arg_blocks) == 0) {
147+ SET_MARK(arg_blocks);
152148 count++;
153149 count += object_gc_children_mark(arg_blocks);
154150 }
--- a/src/gc.c
+++ b/src/gc.c
@@ -13,16 +13,13 @@ sObject* gRootObject;
1313 sObject* gCompletionObject;
1414 sObject* gXyzshObject;
1515 sObject* gCurrentObject;
16-sObject* gMemChecker;
1716 sObject* gStackFrames;
1817
1918 #define SLOT_SIZE 64
2019
2120 static void object_delete(sObject* obj)
2221 {
23- if(obj->mUserObject) memchecker_erase(gMemChecker, obj);
24-
25- switch(obj->mFlg & 0xff) {
22+ switch(TYPE(obj)) {
2623 case T_STRING:
2724 string_delete_gc(obj);
2825 break;
@@ -70,10 +67,6 @@ static void object_delete(sObject* obj)
7067 uobject_delete_gc(obj);
7168 break;
7269
73- case T_MEMCHECKER:
74- fprintf(stderr, "unexpected err on object_delete at gc.c");
75- exit(1);
76-
7770 case T_EXTOBJ:
7871 SEXTOBJ(obj).mFreeFun(SEXTOBJ(obj).mObject);
7972 break;
@@ -141,7 +134,7 @@ static int sweep()
141134 sObject* p = gPool[i];
142135 int j;
143136 for(j=0; j<SLOT_SIZE; j++) {
144- if((p[j].mFlg & 0xff) != 0 && !(p[j].mFlg & GC_MARK)) {
137+ if(TYPE(p + j) != 0 && !IS_MARKED(p + j)) {
145138 object_delete(p + j);
146139
147140 memset(p + j, 0, sizeof(sObject));
@@ -157,10 +150,32 @@ static int sweep()
157150 return count;
158151 }
159152
160-void gc_init(int pool_size)
153+BOOL gc_valid_object(sObject* object)
161154 {
162- gMemChecker = MEMCHECKER_NEW_STACK(128);
155+ int i;
156+ for(i=0; i<gPoolSize; i++) {
157+ if(object >= gPool[i] && object < gPool[i] + SLOT_SIZE) {
158+ ulong n = ((ulong)object - (ulong)gPool[i]) % (ulong)sizeof(sObject);
159+ if(n == 0) {
160+ if(TYPE(object) > 0 && TYPE(object) < T_TYPE_MAX) {
161+ return TRUE;
162+ }
163+ else {
164+ return FALSE;
165+ }
166+
167+ }
168+ else {
169+ return FALSE;
170+ }
171+ }
172+ }
173+
174+ return FALSE;
175+}
163176
177+void gc_init(int pool_size)
178+{
164179 gPoolSize = pool_size;
165180 gPool = (sObject**)MALLOC(sizeof(sObject*)*gPoolSize);
166181 memset(gPool, 0, sizeof(sObject*)*gPoolSize);
@@ -222,7 +237,7 @@ void gc_final()
222237 sObject* p = gPool[i];
223238 int j;
224239 for(j=0; j<SLOT_SIZE; j++) {
225- if(p[j].mFlg & 0xff) {
240+ if(TYPE(p + j)) {
226241 object_delete(p + j);
227242 }
228243 }
@@ -239,15 +254,18 @@ static int mark()
239254 sObject* p = gPool[i];
240255 int j;
241256 for(j=0; j<SLOT_SIZE; j++) {
242- p[j].mFlg &= ~GC_MARK;
257+ CLEAR_MARK(p + j);
243258 }
244259 }
245260
246261 /// mark all objects
247- gRootObject->mFlg |= GC_MARK;
248- int count = uobject_gc_children_mark(gRootObject);
262+ int count = 0;
263+ SET_MARK(gRootObject);
264+ count++;
265+ count += uobject_gc_children_mark(gRootObject);
249266
250- gXyzshObject->mFlg |= GC_MARK;
267+ SET_MARK(gXyzshObject);
268+ count++;
251269 count += uobject_gc_children_mark(gXyzshObject);
252270
253271 return count;
@@ -311,10 +329,11 @@ sObject* gc_get_free_object(int kind, BOOL user_object)
311329 sObject* result = gFreeObjectHead;
312330 gFreeObjectHead = gFreeObjectHead->mNextFreeObject;
313331
314- result->mUserObject = user_object;
315- if(user_object) memchecker_put(gMemChecker, result, kind);
332+ if(user_object) {
333+ SET_USER_OBJECT(result);
334+ }
316335
317- result->mFlg = kind;
336+ result->mFlg |= kind;
318337
319338 return result;
320339 }
--- a/src/hash.c
+++ b/src/hash.c
@@ -418,8 +418,8 @@ int hash_gc_children_mark(sObject* self)
418418 while(it) {
419419 sObject* item = it->mItem;
420420
421- if(item && (item->mFlg & GC_MARK) == 0) {
422- item->mFlg |= GC_MARK;
421+ if(item && IS_MARKED(item) == 0) {
422+ SET_MARK(item);
423423 count++;
424424 count += object_gc_children_mark(item);
425425 }
--- a/src/interface.c
+++ b/src/interface.c
@@ -68,7 +68,7 @@ static char* prompt()
6868 //uobject_init(stackframe);
6969 SFUN(fun).mLocalObjects = stackframe;
7070
71- sObject* nextout = FD_NEW_STACK(kFDKindBuf, 0);
71+ sObject* nextout = FD_NEW_STACK();
7272
7373 int rcode;
7474 if(!run(gPrompt, gStdin, nextout, &rcode, gCurrentObject, fun)) {
@@ -90,7 +90,7 @@ static char* prompt()
9090
9191 mreset_tty();
9292 readline_signal();
93- char* buf = readline(SFD(nextout).fdbuf.mBuf);
93+ char* buf = readline(SFD(nextout).mBuf);
9494
9595 (void)vector_pop_back(gStackFrames);
9696
@@ -121,8 +121,6 @@ BOOL xyzsh_run(int* rcode, sObject* block, char* source_name, fXyzshJobDone xyzs
121121 }
122122 uobject_put(SFUN(fun).mLocalObjects, "ARGV", argv2);
123123
124- SFUN(fun).mRunInfo = NULL;
125-
126124 if(!run(block, nextin, nextout, rcode, current_object, fun)) {
127125 xyzsh_restore_signal_default();
128126 (void)vector_pop_back(gStackFrames);
@@ -281,8 +279,6 @@ BOOL xyzsh_readline_interface_onetime(int* rcode, char* cmdline, int cursor_poin
281279 }
282280 uobject_put(SFUN(fun).mLocalObjects, "ARGV", argv2);
283281
284- SFUN(fun).mRunInfo = NULL;
285-
286282 if(!run(block, gStdin, gStdout, rcode, gCurrentObject, fun)) {
287283 xyzsh_restore_signal_default();
288284
@@ -441,8 +437,6 @@ void xyzsh_readline_interface(char* cmdline, int cursor_point, char** argv, int
441437 }
442438 uobject_put(SFUN(fun).mLocalObjects, "ARGV", argv2);
443439
444- SFUN(fun).mRunInfo = NULL;
445-
446440 if(!run(block, gStdin, gStdout, &rcode, gCurrentObject, fun)) {
447441 readline_signal();
448442 if(rcode == RCODE_BREAK) {
--- a/src/list.c
+++ b/src/list.c
@@ -301,8 +301,8 @@ int list_gc_children_mark(sObject* self)
301301 for(it= SLIST(self).mEntryIt; it; it=it->mNextIt) {
302302 sObject* item = it->mItem;
303303
304- if(item && (item->mFlg & GC_MARK) == 0) {
305- item->mFlg |= GC_MARK;
304+ if(item && IS_MARKED(item) == 0) {
305+ SET_MARK(item);
306306 count ++;
307307 count += object_gc_children_mark(item);
308308 }
--- a/src/main.c
+++ b/src/main.c
@@ -15,7 +15,24 @@ static void main_xyzsh_job_done(int job_num, char* job_title)
1515 int main(int argc, char** argv)
1616 {
1717 CHECKML_BEGIN(FALSE);
18-
18+/*
19+printf("sObject %d\n", (int)sizeof(sObject));
20+printf("string_obj %d\n", (int)sizeof(string_obj));
21+printf("vector_obj %d\n", (int)sizeof(vector_obj));
22+printf("hash_obj %d\n", (int)sizeof(hash_obj));
23+printf("list_obj %d\n", (int)sizeof(list_obj));
24+printf("fd_obj %d\n", (int)sizeof(fd_obj));
25+printf("fd2_obj %d\n", (int)sizeof(fd2_obj));
26+printf("job_obj %d\n", (int)sizeof(job_obj));
27+printf("block_obj %d\n", (int)sizeof(struct block_obj));
28+printf("uobject_obj %d\n", (int)sizeof(uobject_obj));
29+printf("nfun_obj %d\n", (int)sizeof(nfun_obj));
30+printf("fun_obj %d\n", (int)sizeof(fun_obj));
31+printf("class_obj %d\n", (int)sizeof(class_obj));
32+printf("completion_obj %d\n", (int)sizeof(completion_obj));
33+printf("external_prog_obj %d\n", (int)sizeof(external_prog_obj));
34+printf("external_obj %d\n", (int)sizeof(external_obj));
35+*/
1936 srandom((unsigned)time(NULL));
2037
2138 char* optc = NULL;
--- a/src/nfun.c
+++ b/src/nfun.c
@@ -90,8 +90,8 @@ int nfun_gc_children_mark(sObject* self)
9090
9191 sObject* parent = SNFUN(self).mParent;
9292 if(parent) {
93- if((parent->mFlg & GC_MARK) == 0) {
94- parent->mFlg |= GC_MARK;
93+ if(IS_MARKED(parent) == 0) {
94+ SET_MARK(parent);
9595 count++;
9696 count += object_gc_children_mark(parent);
9797 }
--- a/src/parser.c
+++ b/src/parser.c
@@ -121,7 +121,7 @@ static BOOL read_env(char** p, sBuf* buf, char* sname, int* sline, BOOL expand_q
121121 {
122122 (*p)++;
123123
124- enum eLineField lf = kLF;
124+ eLineField lf = kLF;
125125
126126 BOOL double_dollar;
127127 if(**p == '$') {
--- a/src/readline.c
+++ b/src/readline.c
@@ -259,8 +259,8 @@ static char* user_completion(const char* text, int stat)
259259 gCompletionArray = VECTOR_NEW_STACK(16);
260260
261261 int i;
262- for(i=0; i<vector_count(SFD(gUserCompletionNextout).fdbuf.mLines); i++) {
263- sObject* candidate = STRING_NEW_STACK(vector_item(SFD(gUserCompletionNextout).fdbuf.mLines, i));
262+ for(i=0; i<vector_count(SFD(gUserCompletionNextout).mLines); i++) {
263+ sObject* candidate = STRING_NEW_STACK(vector_item(SFD(gUserCompletionNextout).mLines, i));
264264 string_chomp(candidate);
265265 vector_add(gCompletionArray, string_c_str(candidate));
266266 }
@@ -562,12 +562,12 @@ char** readline_on_complete(const char* text, int start, int end)
562562 }
563563 }
564564 else if(ucompletion && TYPE(ucompletion) == T_COMPLETION) {
565- sObject* nextin = FD_NEW_STACK(kFDKindBuf, 0);
565+ sObject* nextin = FD_NEW_STACK();
566566 if(!fd_write(nextin, string_c_str(cmdline), string_length(cmdline))) {
567567 stack_end_stack();
568568 return NULL;
569569 }
570- sObject* nextout = FD_NEW_STACK(kFDKindBuf, 0);
570+ sObject* nextout = FD_NEW_STACK();
571571
572572 sObject* fun = FUN_NEW_STACK(NULL);
573573 sObject* stackframe = UOBJECT_NEW_GC(8, gXyzshObject, "_stackframe", FALSE);
@@ -612,7 +612,7 @@ char** readline_on_complete(const char* text, int start, int end)
612612 (void)vector_pop_back(gStackFrames);
613613 readline_signal();
614614
615- enum eLineField lf;
615+ eLineField lf;
616616 if(fd_guess_lf(nextout, &lf)) {
617617 fd_split(nextout, lf);
618618 } else {
@@ -804,7 +804,7 @@ BOOL cmd_readline_insert_text(sObject* nextin, sObject* nextout, sRunInfo* runin
804804 sCommand* command = runinfo->mCommand;
805805
806806 if(runinfo->mFilter) {
807- (void)rl_insert_text(SFD(nextin).fdbuf.mBuf);
807+ (void)rl_insert_text(SFD(nextin).mBuf);
808808 puts("");
809809 rl_forced_update_display();
810810
@@ -868,7 +868,7 @@ static int readline_macro(int count, int key)
868868 {
869869 stack_start_stack();
870870
871- sObject* nextout2 = FD_NEW_STACK(kFDKindBuf, 0);
871+ sObject* nextout2 = FD_NEW_STACK();
872872
873873 int rcode = 0;
874874 sObject* block = BLOCK_NEW_STACK();
@@ -882,7 +882,7 @@ static int readline_macro(int count, int key)
882882 //uobject_init(stackframe);
883883 SFUN(fun).mLocalObjects = stackframe;
884884
885- sObject* nextin2 = FD_NEW_STACK(kFDKindBuf, 0);
885+ sObject* nextin2 = FD_NEW_STACK();
886886
887887 (void)fd_write(nextin2, rl_line_buffer, rl_point);
888888
@@ -909,7 +909,7 @@ static int readline_macro(int count, int key)
909909 fprintf(stderr, "%s", string_c_str(gErrMsg));
910910 }
911911
912- rl_insert_text(SFD(nextout2).fdbuf.mBuf);
912+ rl_insert_text(SFD(nextout2).mBuf);
913913 puts("");
914914 rl_forced_update_display();
915915 stack_end_stack();
--- a/src/run.c
+++ b/src/run.c
@@ -29,6 +29,21 @@ static sObject* gObjectsInPipe;
2929
3030 static sObject* gRunningObjects;
3131
32+sRunInfo* gRunInfoOfRunningObject;
33+
34+BOOL contained_in_pipe(sObject* object)
35+{
36+ BOOL found = FALSE;
37+ int j;
38+ for(j=0; j<vector_count(gObjectsInPipe); j++) {
39+ if(object == vector_item(gObjectsInPipe, j)) {
40+ found = TRUE;
41+ }
42+ }
43+
44+ return found;
45+}
46+
3247 BOOL add_object_to_objects_in_pipe(sObject* object, sRunInfo* runinfo, sCommand* command)
3348 {
3449 vector_add(gObjectsInPipe, object);
@@ -41,7 +56,7 @@ BOOL add_object_to_objects_in_pipe(sObject* object, sRunInfo* runinfo, sCommand*
4156 return TRUE;
4257 }
4358
44-enum eLineField gLineField;
59+eLineField gLineField;
4560 enum eKanjiCode gKanjiCode;
4661
4762 void (*xyzsh_job_done)(int job_num, char* job_title);
@@ -51,9 +66,9 @@ sObject* gJobs;
5166 void run_init(enum eAppType app_type)
5267 {
5368 gAppType = app_type;
54- gStdin = FD_NEW_STACK(kFDKindBuf, 0);
55- gStdout = FD_NEW_STACK(kFDKindBuf, 0);
56- gStderr = FD_NEW_STACK(kFDKindBuf, 0);
69+ gStdin = FD_NEW_STACK();
70+ gStdout = FD_NEW_STACK();
71+ gStderr = FD_NEW_STACK();
5772 gJobs = VECTOR_NEW_GC(16, FALSE);
5873 uobject_put(gXyzshObject, "_jobs", gJobs);
5974
@@ -62,7 +77,9 @@ void run_init(enum eAppType app_type)
6277 gLineField = kLF;
6378 gKanjiCode = kByte;
6479
65- gGlobalPipe = FD_NEW_STACK(kFDKindBuf, 0);
80+ gRunInfoOfRunningObject = NULL;
81+
82+ gGlobalPipe = FD_NEW_STACK();
6683
6784 gObjectsInPipe = VECTOR_NEW_GC(10, FALSE);
6885 uobject_put(gXyzshObject, "_objects_in_pipe", gObjectsInPipe);
@@ -154,7 +171,7 @@ static void nextin_writer(pid_t pid, sObject* nextin, int* pipeinfds, int* pipeo
154171 }
155172 (void)close(pipeinfds[0]);
156173
157- if(!bufsiz_write(pipeinfds[1], SFD(nextin).fdbuf.mBuf, SFD(nextin).fdbuf.mBufLen)) {
174+ if(!bufsiz_write(pipeinfds[1], SFD(nextin).mBuf, SFD(nextin).mBufLen)) {
158175 if(errno != EPIPE ) {
159176 perror("write memory pipe");
160177 exit(1);
@@ -444,11 +461,11 @@ static BOOL run_external_command(char* program, sObject* nextin, sObject* nextou
444461 int nextout2;
445462 int nexterr2;
446463
447- if(nextin == gStdin && SFD(gStdin).fdbuf.mBufLen == 0) {
464+ if(nextin == gStdin && SFD(gStdin).mBufLen == 0) {
448465 nextin2 = 0;
449466 }
450- else if(SFD(nextin).mKind == kFDKindFD) {
451- nextin2 = SFD(nextin).fd.mFD;
467+ else if(TYPE(nextin) == T_FD2) {
468+ nextin2 = SFD2(nextin).mFD;
452469 }
453470 else {
454471 if(pipe(pipeinfds) < 0) {
@@ -461,8 +478,8 @@ static BOOL run_external_command(char* program, sObject* nextin, sObject* nextou
461478 nextout2 = 1;
462479 nexterr2 = 2;
463480 }
464- else if(SFD(nextout).mKind == kFDKindFD) {
465- nextout2 = SFD(nextout).fd.mFD;
481+ else if(TYPE(nextout) == T_FD2) {
482+ nextout2 = SFD2(nextout).mFD;
466483
467484 if(pipe(pipeerrfds) < 0) {
468485 perror("pipe");
@@ -547,10 +564,10 @@ if(1) {
547564 /// Therefore xyzsh can't waitpid and deadlock.
548565 /// Avoid this, xyzsh is ready for a writer process to write buffer to the xyzsh.
549566 pid_t nextin_reader_pid = -1;
550- if(SFD(nextin).mKind != kFDKindFD && nextin2 != 0) {
567+ if(TYPE(nextin) != T_FD2 && nextin2 != 0) {
551568 nextin_writer(pgroup, nextin, pipeinfds, pipeoutfds, pipeerrfds, runinfo, program, &nextin_reader_pid);
552569 }
553- if(SFD(nextout).mKind != kFDKindFD && nextout2 != 1) {
570+ if(TYPE(nextout) != T_FD2 && nextout2 != 1) {
554571 (void)close(pipeoutfds[1]);
555572 if(!nextout_reader(nextout, pipeoutfds, runinfo, program)) {
556573 // wait everytime
@@ -578,8 +595,8 @@ if(1) {
578595 BOOL run_function(sObject* fun, sObject* nextin, sObject* nextout, sRunInfo* runinfo, char** argv, int argc, sObject** blocks, int blocks_num)
579596 {
580597 sObject* local_objects = SFUN(fun).mLocalObjects;
581- sRunInfo* runinfo2 = SFUN(fun).mRunInfo;
582- SFUN(fun).mRunInfo = runinfo;
598+ sRunInfo* runinfo2 = gRunInfoOfRunningObject;
599+ gRunInfoOfRunningObject = runinfo;
583600
584601 BOOL no_stackframe = SFUN(fun).mFlags & FUN_FLAGS_NO_STACKFRAME;
585602
@@ -643,6 +660,7 @@ BOOL run_function(sObject* fun, sObject* nextin, sObject* nextout, sRunInfo* run
643660 runinfo->mRCode = rcode;
644661 SFUN(fun).mLocalObjects = local_objects;
645662 (void)vector_pop_back(gStackFrames);
663+ gRunInfoOfRunningObject = runinfo2;
646664 return FALSE;
647665 }
648666 }
@@ -653,7 +671,7 @@ BOOL run_function(sObject* fun, sObject* nextin, sObject* nextout, sRunInfo* run
653671
654672 SFUN(fun).mLocalObjects = local_objects;
655673 SFUN(fun).mArgBlocks = arg_blocks;
656- SFUN(fun).mRunInfo = runinfo2;
674+ gRunInfoOfRunningObject = runinfo2;
657675
658676 return TRUE;
659677 }
@@ -878,11 +896,6 @@ static BOOL redirect_ready(sObject** nextout, sObject** nextin, int* opened_fd,
878896
879897 switch(command->mRedirects[i] & REDIRECT_KIND) {
880898 case REDIRECT_IN:
881- if(SFD(*nextin).mKind == kFDKindBuf) {
882- FREE(SFD(*nextin).fdbuf.mBuf);
883- }
884-
885- SFD(*nextin).mKind = kFDKindBuf;
886899 fd = open(command->mRedirectsFileNamesRuntime[i], O_RDONLY);
887900 if(fd < 0) {
888901 char buf[BUFSIZ];
@@ -897,12 +910,10 @@ static BOOL redirect_ready(sObject** nextout, sObject** nextin, int* opened_fd,
897910 err_msg(buf, runinfo->mSName, runinfo->mSLine, "");
898911 return FALSE;
899912 }
900-
901- SFD(*nextin).fdbuf.mBuf = result;
902- SFD(*nextin).fdbuf.mBufSize = result_size;
903- SFD(*nextin).fdbuf.mBufLen = result_len;
904-
905913 (void)close(fd);
914+
915+ ASSERT(TYPE(*nextin) == T_FD);
916+ fd_put(*nextin, MANAGED result, result_size, result_len);
906917 break;
907918
908919 case REDIRECT_APPEND:
@@ -914,7 +925,7 @@ static BOOL redirect_ready(sObject** nextout, sObject** nextin, int* opened_fd,
914925 err_msg(buf, runinfo->mSName, runinfo->mSLine, "");
915926 return FALSE;
916927 }
917- *nextout = FD_NEW_STACK(kFDKindFD, fd);
928+ *nextout = FD2_NEW_STACK(fd);
918929
919930 *opened_fd = fd;
920931 }
@@ -929,7 +940,7 @@ static BOOL redirect_ready(sObject** nextout, sObject** nextin, int* opened_fd,
929940 err_msg(buf, runinfo->mSName, runinfo->mSLine, "");
930941 return FALSE;
931942 }
932- *nextout = FD_NEW_STACK(kFDKindFD, fd);
943+ *nextout = FD2_NEW_STACK(fd);
933944
934945 *opened_fd = fd;
935946 }
@@ -959,7 +970,7 @@ static BOOL statment_tree(sStatment* statment, sObject* pipein, sObject* pipeout
959970 sObject* nextin;
960971 if(statment->mFlags & STATMENT_CONTEXTPIPE) {
961972 /// read stdin ///
962- if(pipein == gStdin && SFD(gStdin).fdbuf.mBufLen == 0 && !isatty(0)) {
973+ if(pipein == gStdin && SFD(gStdin).mBufLen == 0 && !isatty(0)) {
963974 if(!stdin_read_out()) {
964975 sCommand* command = runinfo->mCommand;
965976 if(command) {
@@ -981,19 +992,19 @@ static BOOL statment_tree(sStatment* statment, sObject* pipein, sObject* pipeout
981992 }
982993 /// line context pipe ///
983994 else {
984- nextin = FD_NEW_STACK(kFDKindBuf, 0);
985- enum eLineField lf;
995+ nextin = FD_NEW_STACK();
996+ eLineField lf;
986997 if(fd_guess_lf(pipein, &lf)) {
987998 fd_split(pipein, lf);
988999 } else {
9891000 fd_split(pipein, kLF);
9901001 }
991- if(line_number < 0) line_number += vector_count(SFD(pipein).fdbuf.mLines)+1;
1002+ if(line_number < 0) line_number += vector_count(SFD(pipein).mLines)+1;
9921003 if(line_number < 0) line_number = 0;
993- if(line_number > vector_count(SFD(pipein).fdbuf.mLines)) line_number = vector_count(SFD(pipein).fdbuf.mLines);
1004+ if(line_number > vector_count(SFD(pipein).mLines)) line_number = vector_count(SFD(pipein).mLines);
9941005 int i;
995- for(i=SFD(pipein).fdbuf.mReadedLineNumber; i<vector_count(SFD(pipein).fdbuf.mLines) && i-SFD(pipein).fdbuf.mReadedLineNumber<line_number; i++) {
996- char* line = vector_item(SFD(pipein).fdbuf.mLines, i);
1006+ for(i=SFD(pipein).mReadedLineNumber; i<vector_count(SFD(pipein).mLines) && i-SFD(pipein).mReadedLineNumber<line_number; i++) {
1007+ char* line = vector_item(SFD(pipein).mLines, i);
9971008 if(!fd_write(nextin, line, strlen(line))) {
9981009 sCommand* command = runinfo->mCommand;
9991010 if(command) {
@@ -1006,12 +1017,12 @@ static BOOL statment_tree(sStatment* statment, sObject* pipein, sObject* pipeout
10061017 return FALSE;
10071018 }
10081019 }
1009- SFD(pipein).fdbuf.mReadedLineNumber += line_number;
1020+ SFD(pipein).mReadedLineNumber += line_number;
10101021 }
10111022 }
10121023 else if(statment->mFlags & STATMENT_GLOBALPIPEIN) {
1013- nextin = FD_NEW_STACK(kFDKindBuf, 0);
1014- if(!fd_write(nextin, SFD(gGlobalPipe).fdbuf.mBuf, SFD(gGlobalPipe).fdbuf.mBufLen)) {
1024+ nextin = FD_NEW_STACK();
1025+ if(!fd_write(nextin, SFD(gGlobalPipe).mBuf, SFD(gGlobalPipe).mBufLen)) {
10151026 sCommand* command = runinfo->mCommand;
10161027 if(command) {
10171028 err_msg("signal interrupt12", runinfo->mSName, runinfo->mSLine, command->mArgs[0]);
@@ -1049,6 +1060,8 @@ static BOOL statment_tree(sStatment* statment, sObject* pipein, sObject* pipeout
10491060 return TRUE;
10501061 }
10511062
1063+ ASSERT(TYPE(nextin) == T_FD);
1064+
10521065 if(nextout == NULL) {
10531066 if(last_program) {
10541067 if(statment->mFlags & STATMENT_GLOBALPIPEOUT) {
@@ -1063,7 +1076,7 @@ static BOOL statment_tree(sStatment* statment, sObject* pipein, sObject* pipeout
10631076 }
10641077 }
10651078 else {
1066- nextout = FD_NEW_STACK(kFDKindBuf, 0);
1079+ nextout = FD_NEW_STACK();
10671080 }
10681081 }
10691082
@@ -1226,8 +1239,8 @@ static BOOL statment_tree(sStatment* statment, sObject* pipein, sObject* pipeout
12261239
12271240 if(opened_fd != -1) redirect_finish(opened_fd);
12281241
1229- if(SFD(nextout).mKind == kFDKindFD) {
1230- nextin = FD_NEW_STACK(kFDKindBuf, 0);
1242+ if(TYPE(nextout) == T_FD2) {
1243+ nextin = FD_NEW_STACK();
12311244 }
12321245 else {
12331246 nextin = nextout;
@@ -1549,6 +1562,7 @@ BOOL bufsiz_read(int fd, ALLOC char** result, int* result_len, int* result_size)
15491562 source = REALLOC(source, source_size);
15501563 }
15511564 strcat(source, buf);
1565+ source_len += size;
15521566 break;
15531567 }
15541568 else {
--- a/src/stack.c
+++ b/src/stack.c
@@ -19,7 +19,7 @@ static int gStackFrameSlot[MAX_STACK];
1919
2020 static void object_delete(sObject* obj)
2121 {
22- switch(obj->mFlg & 0xff) {
22+ switch(TYPE(obj)) {
2323 case T_STRING:
2424 string_delete_stack(obj);
2525 break;
@@ -47,6 +47,9 @@ static void object_delete(sObject* obj)
4747 fd_delete_stack(obj);
4848 break;
4949
50+ case T_FD2:
51+ break;
52+
5053 case T_FUN:
5154 fun_delete_stack(obj);
5255 break;
@@ -59,10 +62,6 @@ static void object_delete(sObject* obj)
5962 uobject_delete_stack(obj);
6063 break;
6164
62- case T_MEMCHECKER:
63- memchecker_delete_stack(obj);
64- break;
65-
6665 case T_EXTOBJ:
6766 SEXTOBJ(obj).mFreeFun(SEXTOBJ(obj).mObject);
6867 break;
@@ -72,6 +71,19 @@ static void object_delete(sObject* obj)
7271 exit(1);
7372 }
7473 }
74+/*
75+BOOL stack_valid_object(sObject* object)
76+{
77+ int i;
78+ for(i=0; i<gStackPageSize; i++) {
79+ if(object >= gStack[i] && object < gStack[i] + SLOT_SIZE) {
80+ return TRUE;
81+ }
82+ }
83+
84+ return FALSE;
85+}
86+*/
7587
7688 void stack_init(int stack_page_size)
7789 {
--- a/src/string.c
+++ b/src/string.c
@@ -337,7 +337,7 @@ void string_toupper(sObject* self, enum eKanjiCode code)
337337 }
338338 }
339339
340-BOOL string_pomch(sObject* str, enum eLineField lf)
340+BOOL string_pomch(sObject* str, eLineField lf)
341341 {
342342 char* s = string_c_str(str);
343343 const int len = strlen(s);
--- a/src/uobject.c
+++ b/src/uobject.c
@@ -326,8 +326,8 @@ int uobject_gc_children_mark(sObject* self)
326326 while(it) {
327327 sObject* item = it->mItem;
328328
329- if(item && (item->mFlg & GC_MARK) == 0) {
330- item->mFlg |= GC_MARK;
329+ if(item && IS_MARKED(item) == 0) {
330+ SET_MARK(item);
331331 count++;
332332
333333 count += object_gc_children_mark(item);
--- a/src/vector.c
+++ b/src/vector.c
@@ -231,8 +231,8 @@ int vector_gc_children_mark(sObject* self)
231231 for(i=0; i<SVECTOR(self).mCount; i++) {
232232 sObject* item = SVECTOR(self).mTable[i];
233233
234- if(item && (item->mFlg & GC_MARK) == 0) {
235- item->mFlg |= GC_MARK;
234+ if(item && IS_MARKED(item) == 0) {
235+ SET_MARK(item);
236236 count++;
237237
238238 count += object_gc_children_mark(item);
--- a/src/xyzsh.c
+++ b/src/xyzsh.c
@@ -85,7 +85,7 @@ static void xyzsh_read_rc()
8585
8686 void xyzsh_init(enum eAppType app_type, BOOL no_runtime_script)
8787 {
88- setenv("XYZSH_VERSION", "1.2.9", 1);
88+ setenv("XYZSH_VERSION", "1.3.0", 1);
8989 setenv("XYZSH_DATAROOTDIR", DATAROOTDIR, 1);
9090
9191 setlocale(LC_ALL, "");
--- a/src/xyzsh/block.h
+++ b/src/xyzsh/block.h
@@ -21,7 +21,7 @@ void sCommand_delete(sCommand* self);
2121
2222 void sCommand_add_arg_to_command(sCommand* self, MANAGED char* buf, int env, int glob);
2323 BOOL sCommand_add_message(sCommand* self, MANAGED char* message);
24-void sCommand_add_env_block(sCommand* self, sObject* block, BOOL double_dollar, enum eLineField lf);
24+void sCommand_add_env_block(sCommand* self, sObject* block, BOOL double_dollar, eLineField lf);
2525 void sCommand_add_env(sCommand* self, MANAGED char* name, MANAGED char* key, BOOL key_env, BOOL double_dollar);
2626 void sCommand_add_redirect_to_command(sCommand* self, MANAGED char* name, BOOL env, BOOL glob, int redirect);
2727
--- a/src/xyzsh/string.h
+++ b/src/xyzsh/string.h
@@ -47,7 +47,7 @@ void string_erase(sObject* obj, int pos, int len);
4747 void string_toupper(sObject* self, enum eKanjiCode code);
4848 void string_tolower(sObject* self, enum eKanjiCode code);
4949
50-BOOL string_pomch(sObject* str, enum eLineField lf);
50+BOOL string_pomch(sObject* str, eLineField lf);
5151 BOOL string_chomp(sObject* str);
5252
5353 unsigned int string_size(sObject* self);
--- a/src/xyzsh/xyzsh.h
+++ b/src/xyzsh/xyzsh.h
@@ -21,6 +21,10 @@
2121 //#define SPACE // indicate that a memory which is enough to use
2222 #define MANAGED // indicate that a memory which is managed inside the function or object
2323
24+typedef unsigned char uchar;
25+typedef unsigned int uint;
26+typedef unsigned long ulong;
27+
2428 #include <unistd.h>
2529
2630 enum eCommandKind {
@@ -63,8 +67,14 @@ enum eCommandKind {
6367 kCommandMax
6468 };
6569
66-enum eLineField { kLF, kCRLF, kCR, kBel };
67-extern enum eLineField gLineField;
70+#define kLF 0x01
71+#define kCRLF 0x02
72+#define kCR 0x03
73+#define kBel 0x04
74+
75+typedef char eLineField;
76+
77+extern eLineField gLineField;
6878 extern enum eKanjiCode gKanjiCode;
6979
7080 enum eAppType { kATOptC, kATXApp, kATConsoleApp };
@@ -129,30 +139,21 @@ typedef struct {
129139 int mCount;
130140 } vector_obj;
131141
132-#define kFDKindFD 1
133-#define kFDKindBuf 2
134-
135142 typedef struct {
136- int mKind;
137-
138- union {
139- struct {
140- unsigned int mFD;
141- } fd;
143+ char* mBuf;
144+ int mBufSize;
145+ int mBufLen;
142146
143- struct {
144- char* mBuf;
145- int mBufSize;
146- int mBufLen;
147-
148- struct _sObject* mLines;
149- enum eLineField mLinesLineField;
150- unsigned int mReadedLineNumber;
151- } fdbuf;
152- };
147+ struct _sObject* mLines;
148+ eLineField mLinesLineField;
149+ unsigned int mReadedLineNumber;
153150 } fd_obj;
154151
155152 typedef struct {
153+ uint mFD;
154+} fd2_obj;
155+
156+typedef struct {
156157 char* mPath;
157158 } external_prog_obj;
158159
@@ -195,7 +196,7 @@ typedef struct {
195196 };
196197 struct {
197198 struct _sObject* mBlock;
198- enum eLineField mLineField;
199+ eLineField mLineField;
199200 };
200201 };
201202 } sEnv;
@@ -220,10 +221,6 @@ typedef struct {
220221 int mArgsNum;
221222 int mArgsSize;
222223
223- char** mArgsRuntime;
224- int mArgsNumRuntime;
225- int mArgsSizeRuntime;
226-
227224 sEnv* mEnvs;
228225 int mEnvsNum;
229226 int mEnvsSize;
@@ -237,12 +234,16 @@ typedef struct {
237234 int mRedirectsNum;
238235 int mRedirectsSize;
239236
240- char** mRedirectsFileNamesRuntime; //runtime
241-
242237 option_hash_it mOptions[XYZSH_OPTION_MAX]; // open adressing hash
243238
244239 char* mMessages[XYZSH_MESSAGES_MAX];
245240 int mMessagesNum;
241+
242+ char** mArgsRuntime; // runtime info
243+ int mArgsNumRuntime;
244+ int mArgsSizeRuntime;
245+
246+ char** mRedirectsFileNamesRuntime; //runtime info
246247 } sCommand;
247248
248249 typedef struct {
@@ -281,16 +282,13 @@ struct _sRunInfo;
281282 typedef struct
282283 {
283284 struct _sObject* mBlock;
284-
285285 struct _sObject* mParent;
286286
287287 struct _sObject* mLocalObjects;
288288 struct _sObject* mArgBlocks;
289-
290289 option_hash_it* mOptions;
291- struct _sRunInfo* mRunInfo;
292290
293- char mFlags;
291+ uchar mFlags;
294292 } fun_obj;
295293
296294 typedef fun_obj class_obj;
@@ -334,24 +332,6 @@ typedef struct {
334332 struct _sObject* mParent;
335333 } uobject_obj;
336334
337-typedef struct _memchecker_it {
338- void* mKey;
339-
340- int mItem;
341- struct _memchecker_it* mCollisionIt;
342-
343- struct _memchecker_it* mNextIt;
344-} memchecker_it;
345-
346-typedef struct {
347- memchecker_it** mTable;
348- int mTableSize;
349-
350- memchecker_it* mEntryIt;
351-
352- int mCounter;
353-} memchecker_obj;
354-
355335 struct _sRunInfo;
356336
357337 typedef int (*fExtObjMarkFun)(struct _sObject* self);
@@ -370,7 +350,17 @@ typedef struct {
370350 struct _sObject* mBlock;
371351 } completion_obj;
372352
373-#define GC_MARK 0x80000000
353+#define GC_MARK 0x8000
354+
355+#define SOBJ_USER_OBJECT 0x100
356+#define IS_USER_OBJECT(o) ((o)->mFlg & SOBJ_USER_OBJECT)
357+#define SET_USER_OBJECT(o) ((o)->mFlg |= SOBJ_USER_OBJECT)
358+
359+#define IS_MARKED(o) ((o)->mFlg & GC_MARK)
360+#define SET_MARK(o) ((o)->mFlg |= GC_MARK)
361+
362+#define TYPE(o) ((o)->mFlg & 0xFF)
363+#define CLEAR_MARK(o) ((o)->mFlg &= ~GC_MARK)
374364
375365 #define T_STRING 1
376366 #define T_VECTOR 2
@@ -379,19 +369,19 @@ typedef struct {
379369 #define T_NFUN 5
380370 #define T_BLOCK 6
381371 #define T_FD 7
382-#define T_JOB 8
383-#define T_UOBJECT 9
384-#define T_MEMCHECKER 10
372+#define T_FD2 8
373+#define T_JOB 9
374+#define T_UOBJECT 10
385375 #define T_FUN 11
386376 #define T_CLASS 12
387377 #define T_EXTPROG 13
388378 #define T_COMPLETION 14
389379 #define T_EXTOBJ 15
380+#define T_TYPE_MAX 16
390381
391382 typedef struct _sObject {
392- int mFlg; // contains a kind of the above and a mark flag
383+ int mFlg; // contains a kind of the above and a mark flag, user object flag
393384 struct _sObject* mNextFreeObject;
394- BOOL mUserObject;
395385
396386 union {
397387 string_obj uString;
@@ -399,11 +389,11 @@ typedef struct _sObject {
399389 hash_obj uHash;
400390 list_obj uList;
401391 fd_obj uFd;
392+ fd2_obj uFd2;
402393 job_obj uJob;
403394 struct block_obj uBlock;
404395
405396 uobject_obj uUObject;
406- memchecker_obj uMemchecker;
407397 nfun_obj uNativeFun;
408398 fun_obj uFunction;
409399 class_obj uClass;
@@ -413,8 +403,6 @@ typedef struct _sObject {
413403 };
414404 } sObject;
415405
416-#define TYPE(o) (o->mFlg & 0xFF)
417-
418406 #define SSTRING(o) (o)->uString
419407 #define SVECTOR(o) (o)->uVector
420408 #define SHASH(o) (o)->uHash
@@ -422,9 +410,9 @@ typedef struct _sObject {
422410 #define SBLOCK(o) (o)->uBlock
423411 #define SNFUN(o) (o)->uNativeFun
424412 #define SFD(o) (o)->uFd
413+#define SFD2(o) (o)->uFd2
425414 #define SJOB(o) (o)->uJob
426415 #define SUOBJECT(o) (o)->uUObject
427-#define SMEMCHECKER(o) (o)->uMemchecker
428416 #define SFUN(o) (o)->uFunction
429417 #define SCLASS(o) (o)->uClass
430418 #define SEXTPROG(o) (o)->uExternalProg
@@ -442,6 +430,7 @@ void stack_end_stack();
442430 sObject* stack_get_free_object(int kind);
443431 int stack_slot_size();
444432 int stack_page_size();
433+BOOL stack_valid_object(sObject* object);
445434
446435 #include <xyzsh/debug.h>
447436 #include <xyzsh/hash.h>
@@ -481,15 +470,6 @@ void external_prog_delete_gc();
481470
482471 #define EXTPROG_NEW_GC(o, o2) external_prog_new_from_gc(o, o2)
483472
484-sObject* memchecker_new_from_stack(int size);
485-void memchecker_delete_stack(sObject* self);
486-
487-#define MEMCHECKER_NEW_STACK(o) memchecker_new_from_stack(o)
488-
489-void memchecker_put(sObject* self, void* key, int item);
490-BOOL memchecker_erase(sObject* self, void* key);
491-int memchecker_item(sObject* self, void* key);
492-
493473 sObject* completion_new_from_gc(sObject* block, BOOL user_object);
494474 int completion_gc_children_mark(sObject* self);
495475
@@ -522,11 +502,15 @@ int class_gc_children_mark(sObject* self);
522502
523503 sObject* fd_new_from_stack();
524504 void fd_delete_stack(sObject* self);
525-#define FD_NEW_STACK(kind, fd) fd_new_from_stack(kind, fd)
505+#define FD_NEW_STACK() fd_new_from_stack()
526506 BOOL fd_write(sObject* self, char* str, int size);
527507
528-void fd_split(sObject* self, enum eLineField lf);
529-BOOL fd_guess_lf(sObject* self, enum eLineField* lf);
508+void fd_split(sObject* self, eLineField lf);
509+BOOL fd_guess_lf(sObject* self, eLineField* lf);
510+void fd_put(sObject* self, MANAGED char* buf, int buf_size, int buf_len);
511+
512+sObject* fd2_new_from_stack(uint fd);
513+#define FD2_NEW_STACK(o) fd2_new_from_stack(o)
530514
531515 sObject* job_new_from_gc(char* name, pid_t pgroup, struct termios tty);
532516 #define JOB_NEW_GC(o, o2, o3) job_new_from_gc(o, o2, o3)
@@ -715,6 +699,7 @@ int gc_slot_size();
715699 int gc_pool_size();
716700 int gc_used_objects_num();
717701 int gc_sweep();
702+BOOL gc_valid_object(sObject* object);
718703
719704 BOOL parse(char* p, char* sname, int* sline, sObject* block, sObject** current_object);
720705
@@ -737,6 +722,7 @@ extern sObject* gStackFrames;
737722 extern sObject* gMemChecker;
738723 extern sObject* gGlobalPipe;
739724 extern sObject* gInheritObject;
725+extern sRunInfo* gRunInfoOfRunningObject;
740726
741727 BOOL bufsiz_write(int fd, char* buf, int buf_len);
742728
@@ -785,6 +771,8 @@ void readline_read_history();
785771 char* xstrncpy(char* src, char* des, int size);
786772 char* xstrncat(char* src, char* des, int size);
787773
774+BOOL contained_in_pipe(sObject* object);
775+
788776 //////////////////////////////////////////////////////////////////////
789777 // xyzsh API
790778 //////////////////////////////////////////////////////////////////////