NewtBC.h

説明を見る。
00001 /*------------------------------------------------------------------------*/
00013 #ifndef NEWTBC_H
00014 #define NEWTBC_H
00015 
00016 /* ヘッダファイル */
00017 #include "NewtType.h"
00018 #include "NewtParser.h"
00019 
00020 
00021 /* マクロ */
00022 
00023 // Instruction Code
00024 #define kNBCFieldMask               0x07        
00025 
00026 #define kNBCInstructionsLen         26          
00027 #define kNBCSimpleInstructionsLen   8           
00028 #define kBCFuncsLen                 25          
00029 
00030 
00031 /* 定数 */
00032 
00033 enum {
00034     kNBCPop                 = 000,  // 000 pop
00035     kNBCDup                 = 001,  // 001 dup
00036     kNBCReturn              = 002,  // 002 return
00037     kNBCPushSelf            = 003,  // 003 push-self
00038     kNBCSetLexScope         = 004,  // 004 set-lex-scope
00039     kNBCIterNext            = 005,  // 005 iter-next
00040     kNBCIterDone            = 006,  // 006 iter-done
00041     kNBCPopHandlers         = 007   // 007 000 001 pop-handlers
00042 };
00043 
00044 
00045 enum {
00046     kNBCPush                = 0030, // 03x push
00047     kNBCPushConstant        = 0040, // 04x (B signed) push-constant
00048     kNBCCall                = 0050, // 05x call
00049     kNBCInvoke              = 0060, // 06x invoke
00050     kNBCSend                = 0070, // 07x send
00051     kNBCSendIfDefined       = 0100, // 10x send-if-defined
00052     kNBCResend              = 0110, // 11x resend
00053     kNBCResendIfDefined     = 0120, // 12x resend-if-defined
00054     kNBCBranch              = 0130, // 13x branch
00055     kNBCBranchIfTrue        = 0140, // 14x branch-if-true
00056     kNBCBranchIfFalse       = 0150, // 15x branch-if-false
00057     kNBCFindVar             = 0160, // 16x find-var
00058     kNBCGetVar              = 0170, // 17x get-var
00059     kNBCMakeFrame           = 0200, // 20x make-frame
00060     kNBCMakeArray           = 0210, // 21x make-array
00061     kNBCGetPath             = 0220, // 220/221 get-path
00062     kNBCSetPath             = 0230, // 230/231 set-path
00063     kNBCSetVar              = 0240, // 24x set-var
00064     kNBCFindAndSetVar       = 0250, // 25x find-and-set-var
00065     kNBCIncrVar             = 0260, // 26x incr-var
00066     kNBCBranchIfLoopNotDone = 0270, // 27x branch-if-loop-not-done
00067     kNBCFreqFunc            = 0300, // 30x freq-func
00068     kNBCNewHandlers         = 0310  // 31x new-handlers
00069 };
00070 
00071 // Primitive functions
00072 enum {
00073     kNBCAdd                 = 0,    //  0 add               |+|
00074     kNBCSubtract            = 1,    //  1 subtract          |-|
00075     kNBCAref                = 2,    //  2 aref              aref
00076     kNBCSetAref             = 3,    //  3 set-aref          setAref
00077     kNBCEquals              = 4,    //  4 equals            |=|
00078     kNBCNot                 = 5,    //  5 not               |not|
00079     kNBCNotEqual            = 6,    //  6 not-equals        |<>|
00080     kNBCMultiply            = 7,    //  7 multiply          |*|
00081     kNBCDivide              = 8,    //  8 divide            |/|
00082     kNBCDiv                 = 9,    //  9 div               |div|
00083     kNBCLessThan            = 10,   // 10 less-than         |<|
00084     kNBCGreaterThan         = 11,   // 11 greater-than      |>|
00085     kNBCGreaterOrEqual      = 12,   // 12 greater-or-equal  |>=|
00086     kNBCLessOrEqual         = 13,   // 13 less-or-equal     |<=|
00087     kNBCBitAnd              = 14,   // 14 bit-and           BAnd
00088     kNBCBitOr               = 15,   // 15 bit-or            BOr
00089     kNBCBitNot              = 16,   // 16 bit-not           BNot
00090     kNBCNewIterator         = 17,   // 17 new-iterator      newIterator
00091     kNBCLength              = 18,   // 18 length            Length
00092     kNBCClone               = 19,   // 19 clone             Clone
00093     kNBCSetClass            = 20,   // 20 set-class         SetClass
00094     kNBCAddArraySlot        = 21,   // 21 add-array-slot    AddArraySlot
00095     kNBCStringer            = 22,   // 22 stringer          Stringer
00096     kNBCHasPath             = 23,   // 23 has-path          none
00097     kNBCClassOf             = 24    // 24 class-of          ClassOf
00098 };
00099 
00100 
00101 /* 関数プロトタイプ */
00102 
00103 #ifdef __cplusplus
00104 extern "C" {
00105 #endif
00106 
00107 
00108 newtRef     NBCGenBC(nps_syntax_node_t * stree, uint32_t size, bool ret);
00109 newtRef     NBCCompileFile(char * s, bool ret);
00110 newtRef     NBCCompileStr(char * s, bool ret);
00111 void        NBError(int32_t err);
00112 
00113 
00114 #ifdef __cplusplus
00115 }
00116 #endif
00117 
00118 
00119 #endif /* NEWTBC_H */
00120 
00121 

NEWT/0に対してThu Nov 23 16:50:42 2006に生成されました。  doxygen 1.5.0