Changeset 93
- Timestamp:
- 03/29/07 01:34:45 (20 months ago)
- Location:
- NEWT0/trunk/src
- Files:
-
- 8 modified
-
newt_core/NewtBC.c (modified) (3 diffs)
-
newt_core/NewtEnv.c (modified) (14 diffs)
-
newt_core/NewtObj.c (modified) (1 diff)
-
newt_core/NewtPrint.c (modified) (5 diffs)
-
newt_core/incs/NewtEnv.h (modified) (2 diffs)
-
newt_core/incs/NewtObj.h (modified) (1 diff)
-
parser/newt.l (modified) (3 diffs)
-
version.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
NEWT0/trunk/src/newt_core/NewtBC.c
r77 r93 1816 1816 NBCGenCodeL(kNBCFindVar, lvalue); 1817 1817 } 1818 else if (NewtRefIsMagicPointer(lvalue)) 1818 #ifdef __NAMED_MAGIC_POINTER__ 1819 else if (NewtRefIsNamedMP(lvalue)) 1819 1820 { 1820 #ifdef __NAMED_MAGIC_POINTER__1821 1821 newtRefVar sym; 1822 1822 … … 1824 1824 NBCGenFunc2(stree, NSSYM0(defMagicPointer), sym, expr); 1825 1825 NVCGenNoResult(ret); 1826 #else 1826 } 1827 #endif /* __NAMED_MAGIC_POINTER__ */ 1828 else if (NewtRefIsNumberedMP(lvalue)) 1829 { 1827 1830 int32_t index; 1828 1831 … … 1830 1833 NBCGenFunc2(stree, NSSYM0(defMagicPointer), NewtMakeInteger(index), expr); 1831 1834 NVCGenNoResult(ret); 1832 #endif1833 1835 } 1834 1836 else if (NPSRefIsSyntaxNode(lvalue)) -
NEWT0/trunk/src/newt_core/NewtEnv.c
r78 r93 30 30 #define GLOBAL_FNS (newt_env.global_fns) ///< グローバル関数テーブル 31 31 #define MAGIC_POINTERS (newt_env.magic_pointers) ///< マジックポインタテーブル 32 #define NAMED_MPS (newt_env.named_mps) ///< 名前付マジックポインタテーブル 32 33 33 34 #define INITSYM2(sym, str) sym = NewtMakeSymbol(str) ///< よく使うシンボルの初期化 … … 48 49 static void NewtInitVersInfo(void); 49 50 static void NewtInitEnv(int argc, const char * argv[], int n); 51 52 static newtRef NcResolveNamedMP(newtRefArg r); 53 static newtRef NsDefNamedMP(newtRefArg rcvr, newtRefArg r, newtRefArg v); 54 50 55 51 56 … … 183 188 INITSYM(global_fns); 184 189 INITSYM(magic_pointers); 190 #ifdef __NAMED_MAGIC_POINTER__ 191 INITSYM(named_mps); 192 #endif /* __NAMED_MAGIC_POINTER__ */ 185 193 186 194 // for print … … 377 385 GLOBAL_FNS = NcMakeFrame(); 378 386 // マジックポインタテーブルの作成 379 #ifdef __NAMED_MAGIC_POINTER__380 MAGIC_POINTERS = NcMakeFrame();381 #else382 387 MAGIC_POINTERS = NewtMakeArray(kNewtRefUnbind, 0); 383 #endif384 388 385 389 // ルートフレームに各テーブルを格納 … … 388 392 NcSetSlot(ROOT, NSSYM0(magic_pointers), MAGIC_POINTERS); 389 393 NcSetSlot(ROOT, NSSYM0(sym_table), SYM_TABLE); 394 395 #ifdef __NAMED_MAGIC_POINTER__ 396 // 名前付マジックポインタテーブルの作成 397 NAMED_MPS = NcMakeFrame(); 398 // ルートフレームに名前付マジックポインタテーブルの格納 399 NcSetSlot(ROOT, NSSYM0(named_mps), NAMED_MPS); 400 #endif /* __NAMED_MAGIC_POINTER__ */ 390 401 391 402 // 環境変数の初期化 … … 675 686 676 687 /*------------------------------------------------------------------------*/ 677 /** マジックポインタの参照を解決する688 /** 名前付マジックポインタの参照を解決する 678 689 * 679 690 * @param r [in] マジックポインタ … … 682 693 */ 683 694 684 newtRef NcResolve MagicPointer(newtRefArg r)695 newtRef NcResolveNamedMP(newtRefArg r) 685 696 { 686 697 newtRefVar sym; 687 698 688 if (! NewtRefIs MagicPointer(r))699 if (! NewtRefIsNamedMP(r)) 689 700 return r; 690 701 691 702 sym = NewtMPToSymbol(r); 692 703 693 if (NewtHasSlot( MAGIC_POINTERS, sym))694 return NcGetSlot( MAGIC_POINTERS, sym);704 if (NewtHasSlot(NAMED_MPS, sym)) 705 return NcGetSlot(NAMED_MPS, sym); 695 706 else 696 707 return r; … … 699 710 700 711 /*------------------------------------------------------------------------*/ 701 /** マジックポインタの定義712 /** 名前付マジックポインタの定義 702 713 * 703 714 * @param rcvr [in] レシーバ … … 708 719 */ 709 720 710 newtRef NsDef MagicPointer(newtRefArg rcvr, newtRefArg r, newtRefArg v)721 newtRef NsDefNamedMP(newtRefArg rcvr, newtRefArg r, newtRefArg v) 711 722 { 712 723 newtRefVar sym; 713 724 714 if (NewtRefIs MagicPointer(r))725 if (NewtRefIsNamedMP(r)) 715 726 { 716 727 sym = NewtMPToSymbol(r); … … 725 736 } 726 737 727 return NcSetSlot( MAGIC_POINTERS, sym, v);728 } 729 730 731 #else 738 return NcSetSlot(NAMED_MPS, sym, v); 739 } 740 741 #endif /* __NAMED_MAGIC_POINTER__ */ 742 732 743 733 744 /*------------------------------------------------------------------------*/ … … 744 755 int32_t index; 745 756 746 if (! NewtRefIsMagicPointer(r)) 757 if (! NewtRefIsNumberedMP(r)) 758 { 759 #ifdef __NAMED_MAGIC_POINTER__ 760 return NcResolveNamedMP(r); 761 #else 747 762 return r; 763 #endif 764 } 748 765 749 766 table = NewtMPToTable(r); … … 784 801 int32_t index; 785 802 786 if (NewtRefIs MagicPointer(r))803 if (NewtRefIsNumberedMP(r)) 787 804 { 788 805 table = NewtMPToTable(r); … … 800 817 else 801 818 { 819 #ifdef __NAMED_MAGIC_POINTER__ 820 return NsDefNamedMP(rcvr, r, v); 821 #else 802 822 return kNewtRefUnbind; 823 #endif 803 824 } 804 825 … … 811 832 } 812 833 813 #endif814 815 834 816 835 #pragma mark - -
NEWT0/trunk/src/newt_core/NewtObj.c
r78 r93 992 992 { 993 993 #ifdef __NAMED_MAGIC_POINTER__ 994 if (NewtRefIs MagicPointer(r))994 if (NewtRefIsNamedMP(r)) 995 995 return false; 996 996 #endif /* __NAMED_MAGIC_POINTER__ */ -
NEWT0/trunk/src/newt_core/NewtPrint.c
r68 r93 36 36 static void NIOPrintReal(newtStream_t * f, newtRefArg r); 37 37 static void NIOPrintObjCharacter(newtStream_t * f, newtRefArg r); 38 static void NIOPrintObjNamedMP(newtStream_t * f, newtRefArg r); 38 39 static void NIOPrintObjMagicPointer(newtStream_t * f, newtRefArg r); 39 40 static void NIOPrintObjBinary(newtStream_t * f, newtRefArg r); … … 376 377 377 378 /*------------------------------------------------------------------------*/ 378 /** 出力ファイルに マジックポインタをプリントする379 * 380 * @param f [in] 出力ファイル 381 * @param r [in] オブジェクト 382 * 383 * @return なし 384 * 385 * @note newtStream_t を使用 386 */ 387 388 void NIOPrintObj MagicPointer(newtStream_t * f, newtRefArg r)379 /** 出力ファイルに名前付マジックポインタをプリントする 380 * 381 * @param f [in] 出力ファイル 382 * @param r [in] オブジェクト 383 * 384 * @return なし 385 * 386 * @note newtStream_t を使用 387 */ 388 389 void NIOPrintObjNamedMP(newtStream_t * f, newtRefArg r) 389 390 { 390 391 newtRefVar sym; … … 396 397 } 397 398 398 #else 399 #endif /* __NAMED_MAGIC_POINTER__ */ 400 399 401 400 402 /*------------------------------------------------------------------------*/ … … 420 422 } 421 423 422 #endif423 424 424 425 /*------------------------------------------------------------------------*/ … … 815 816 } 816 817 818 #ifdef __NAMED_MAGIC_POINTER__ 819 if (NewtRefIsNamedMP(r)) 820 { // Named Magic Ponter 821 NIOPrintObjNamedMP(f, r); 822 break; 823 } 824 #endif /* __NAMED_MAGIC_POINTER__ */ 825 817 826 NIOPrintObjMagicPointer(f, r); 818 827 break; -
NEWT0/trunk/src/newt_core/incs/NewtEnv.h
r68 r93 76 76 newtRefVar magic_pointers; ///< マジックポインタテーブル 77 77 78 #ifdef __NAMED_MAGIC_POINTER__ 79 newtRefVar named_mps; ///< 名前付マジックポインタテーブル 80 #endif /* __NAMED_MAGIC_POINTER__ */ 81 78 82 // メモリ関係 79 83 newtPool pool; ///< メモリプール … … 187 191 newtRefVar global_fns; ///< global_fns 188 192 newtRefVar magic_pointers; ///< magic_pointers 193 newtRefVar named_mps; ///< named_mps 189 194 190 195 // for print -
NEWT0/trunk/src/newt_core/incs/NewtObj.h
r78 r93 40 40 #define NewtRefToSpecial(r) (int32_t)((uint32_t)r >> 2) ///< オブジェクト参照を特殊値に変換 41 41 42 #define NewtRefIsMagicPointer(r) ((r & 3) == 3) ///< マジックポインタか?42 #define NewtRefIsMagicPointer(r) ((r & 3) == 3) ///< マジックポインタか?(数値および名前付) 43 43 44 44 #ifdef __NAMED_MAGIC_POINTER__ 45 #define NewtMakeNamedMP(r) ((newtRef)((uint32_t)NewtMakeSymbol(r) | 3)) ///< 名前付マジックポインタを作成 46 #define NewtMPToSymbol(r) ((newtRef)((uint32_t)r & 0xFFFFFFFD)) ///< 名前付マジックポインタをシンボルに変換 47 #define NewtSymbolToMP(r) ((newtRef)((uint32_t)r | 3)) ///< シンボルを名前付マジックポインタに変換 48 #else 49 #define NewtMakeMagicPointer(t, i) ((newtRef)((t << 14) | ((i & 0x03ff) << 2) | 3)) ///< マジックポインタを作成 50 #define NewtMPToTable(r) ((int32_t)((uint32_t)r >> 14)) ///< マジックポインタのテーブル番号を取得 51 #define NewtMPToIndex(r) ((int32_t)(((uint32_t)r >> 2) & 0x03ff)) ///< マジックポインタのインデックスを取得 52 #endif 45 # define NewtRefIsNamedMP(r) ((r & 0x80000003) == 0x80000003) ///< 名前付マジックポインタか? 46 # define NewtMakeNamedMP(r) NewtSymbolToMP(NewtMakeSymbol(r)) ///< 名前付マジックポインタを作成 47 # define NewtMPToSymbol(r) ((newtRef)((((uint32_t)r << 1) & 0xFFFFFFF8) | 1)) ///< 名前付マジックポインタをシンボルに変換 48 # define NewtSymbolToMP(r) ((newtRef)(((uint32_t)r >> 1) | 0x80000003)) ///< シンボルを名前付マジックポインタに変換 49 #endif /* __NAMED_MAGIC_POINTER__ */ 50 51 #define NewtRefIsNumberedMP(r) ((r & 0x80000003) == 3) ///< 数値マジックポインタか? 52 #define NewtMakeMagicPointer(t, i) ((newtRef)((t << 14) | ((i & 0x03ff) << 2) | 3)) ///< マジックポインタを作成 53 #define NewtMPToTable(r) ((int32_t)((uint32_t)r >> 14)) ///< マジックポインタのテーブル番号を取得 54 #define NewtMPToIndex(r) ((int32_t)(((uint32_t)r >> 2) & 0x03ff)) ///< マジックポインタのインデックスを取得 53 55 54 56 #define NewtRefIsNotNIL(v) (! NewtRefIsNIL(v)) ///< NIL 以外か? -
NEWT0/trunk/src/parser/newt.l
r71 r93 656 656 657 657 /*------------------------------------------------------------------------*/ 658 /** マジックポインタトークンの作成659 *660 * @param n [in] マジックポインタ番号661 *662 * @return トークンID663 */664 665 int lex_makemagicpointer(int n)666 {667 return lex_update_tokenpos(kERROR);668 }669 670 671 /*------------------------------------------------------------------------*/672 658 /** 名前付マジックポインタの作成 673 659 * … … 699 685 700 686 #else 687 688 /*------------------------------------------------------------------------*/ 689 /** 名前付マジックポインタの作成 690 * 691 * @param s [in] 文字列 692 * @param trunc [in] 前後の切り詰め 693 * 694 * @return トークンID 695 */ 696 697 int lex_makenamedmp(char *s, bool trunc) 698 { 699 return lex_update_tokenpos(kERROR); 700 } 701 702 #endif 703 701 704 702 705 /*------------------------------------------------------------------------*/ … … 722 725 723 726 724 /*------------------------------------------------------------------------*/725 /** 名前付マジックポインタの作成726 *727 * @param s [in] 文字列728 * @param trunc [in] 前後の切り詰め729 *730 * @return トークンID731 */732 733 int lex_makenamedmp(char *s, bool trunc)734 {735 return lex_update_tokenpos(kERROR);736 }737 738 #endif739 740 741 727 #pragma mark - 742 728 /*------------------------------------------------------------------------*/ -
NEWT0/trunk/src/version.h
r83 r93 17 17 #define NEWT_NAME "newt" ///< コマンド名 18 18 #define NEWT_PROTO "/0" ///< プロト 19 #define NEWT_VERSION "0.1. 2" ///< バージョン19 #define NEWT_VERSION "0.1.3" ///< バージョン 20 20 #define NEWT_COPYRIGHT "Copyright (C) 2003-2007 Makoto Nukui" ///< コピーライト 21 #define NEWT_BUILD "2007-03-2 4-1" ///< ビルド番号21 #define NEWT_BUILD "2007-03-29-1" ///< ビルド番号 22 22 #define NEWT_PARAMS "[switches] [--] [programfile]" ///< 引数 23 23
