|
Classes |
| struct | JSStmtInfo |
| struct | JSTreeContext |
| struct | JSSpanDep |
| struct | JSJumpTarget |
| struct | JSCodeGenerator |
| struct | JSSrcNoteSpec |
Defines |
| #define | STMT_TYPE_IN_RANGE(t, b, e) ((uint)((t) - (b)) <= (uintN)((e) - (b))) |
| #define | STMT_TYPE_MAYBE_SCOPE(type) |
| #define | STMT_TYPE_LINKS_SCOPE(type) STMT_TYPE_IN_RANGE(type, STMT_WITH, STMT_CATCH) |
| #define | STMT_TYPE_IS_TRYING(type) STMT_TYPE_IN_RANGE(type, STMT_TRY, STMT_SUBROUTINE) |
| #define | STMT_TYPE_IS_LOOP(type) ((type) >= STMT_DO_LOOP) |
| #define | STMT_MAYBE_SCOPE(stmt) STMT_TYPE_MAYBE_SCOPE((stmt)->type) |
| #define | STMT_LINKS_SCOPE(stmt) |
| #define | STMT_IS_TRYING(stmt) STMT_TYPE_IS_TRYING((stmt)->type) |
| #define | STMT_IS_LOOP(stmt) STMT_TYPE_IS_LOOP((stmt)->type) |
| #define | SIF_SCOPE 0x0001 |
| #define | SIF_BODY_BLOCK 0x0002 |
| #define | CATCHNOTE(stmt) ((stmt).update) |
| #define | GOSUBS(stmt) ((stmt).breaks) |
| #define | GUARDJUMP(stmt) ((stmt).continues) |
| #define | AT_TOP_LEVEL(tc) (!(tc)->topStmt || ((tc)->topStmt->flags & SIF_BODY_BLOCK)) |
| #define | SET_STATEMENT_TOP(stmt, top) ((stmt)->update = (top), (stmt)->breaks = (stmt)->continues = (-1)) |
| #define | TCF_COMPILING 0x01 |
| #define | TCF_IN_FUNCTION 0x02 |
| #define | TCF_RETURN_EXPR 0x04 |
| #define | TCF_RETURN_VOID 0x08 |
| #define | TCF_RETURN_FLAGS 0x0C |
| #define | TCF_IN_FOR_INIT 0x10 |
| #define | TCF_FUN_CLOSURE_VS_VAR 0x20 |
| #define | TCF_FUN_USES_NONLOCALS 0x40 |
| #define | TCF_FUN_HEAVYWEIGHT 0x80 |
| #define | TCF_FUN_IS_GENERATOR 0x100 |
| #define | TCF_FUN_FLAGS 0x1E0 |
| #define | TCF_HAS_DEFXMLNS 0x200 |
| #define | TCF_HAS_FUNCTION_STMT 0x400 |
| #define | TCF_HAS_BLOCKLOCALFUN 0x800 |
| #define | TREE_CONTEXT_INIT(tc) |
| #define | TREE_CONTEXT_FINISH(tc) ((void)0) |
| #define | JT_LEFT 0 |
| #define | JT_RIGHT 1 |
| #define | JT_OTHER_DIR(dir) (1 - (dir)) |
| #define | JT_IMBALANCE(dir) (((dir) << 1) - 1) |
| #define | JT_DIR(imbalance) (((imbalance) + 1) >> 1) |
| #define | JT_TAG_BIT ((jsword) 1) |
| #define | JT_UNTAG_SHIFT 1 |
| #define | JT_SET_TAG(jt) ((JSJumpTarget *)((jsword)(jt) | JT_TAG_BIT)) |
| #define | JT_CLR_TAG(jt) ((JSJumpTarget *)((jsword)(jt) & ~JT_TAG_BIT)) |
| #define | JT_HAS_TAG(jt) ((jsword)(jt) & JT_TAG_BIT) |
| #define | BITS_PER_PTRDIFF (sizeof(ptrdiff_t) * JS_BITS_PER_BYTE) |
| #define | BITS_PER_BPDELTA (BITS_PER_PTRDIFF - 1 - JT_UNTAG_SHIFT) |
| #define | BPDELTA_MAX (((ptrdiff_t)1 << BITS_PER_BPDELTA) - 1) |
| #define | BPDELTA_TO_JT(bp) ((JSJumpTarget *)((bp) << JT_UNTAG_SHIFT)) |
| #define | JT_TO_BPDELTA(jt) ((ptrdiff_t)((jsword)(jt) >> JT_UNTAG_SHIFT)) |
| #define | SD_SET_TARGET(sd, jt) ((sd)->target = JT_SET_TAG(jt)) |
| #define | SD_GET_TARGET(sd) |
| #define | SD_SET_BPDELTA(sd, bp) ((sd)->target = BPDELTA_TO_JT(bp)) |
| #define | SD_GET_BPDELTA(sd) |
| #define | SD_SPAN(sd, pivot) |
| #define | CG_BASE(cg) ((cg)->current->base) |
| #define | CG_LIMIT(cg) ((cg)->current->limit) |
| #define | CG_NEXT(cg) ((cg)->current->next) |
| #define | CG_CODE(cg, offset) (CG_BASE(cg) + (offset)) |
| #define | CG_OFFSET(cg) PTRDIFF(CG_NEXT(cg), CG_BASE(cg), jsbytecode) |
| #define | CG_NOTES(cg) ((cg)->current->notes) |
| #define | CG_NOTE_COUNT(cg) ((cg)->current->noteCount) |
| #define | CG_NOTE_MASK(cg) ((cg)->current->noteMask) |
| #define | CG_LAST_NOTE_OFFSET(cg) ((cg)->current->lastNoteOffset) |
| #define | CG_CURRENT_LINE(cg) ((cg)->current->currentLine) |
| #define | CG_PROLOG_BASE(cg) ((cg)->prolog.base) |
| #define | CG_PROLOG_LIMIT(cg) ((cg)->prolog.limit) |
| #define | CG_PROLOG_NEXT(cg) ((cg)->prolog.next) |
| #define | CG_PROLOG_CODE(cg, poff) (CG_PROLOG_BASE(cg) + (poff)) |
| #define | CG_PROLOG_OFFSET(cg) |
| #define | CG_SWITCH_TO_MAIN(cg) ((cg)->current = &(cg)->main) |
| #define | CG_SWITCH_TO_PROLOG(cg) ((cg)->current = &(cg)->prolog) |
| #define | CHECK_AND_SET_JUMP_OFFSET(cx, cg, pc, off) |
| #define | CHECK_AND_SET_JUMP_OFFSET_AT(cx, cg, off) CHECK_AND_SET_JUMP_OFFSET(cx, cg, CG_CODE(cg,off), CG_OFFSET(cg) - (off)) |
| #define | js_InWithStatement(tc) js_InStatement(tc, STMT_WITH) |
| #define | SRC_DECL_VAR 0 |
| #define | SRC_DECL_CONST 1 |
| #define | SRC_DECL_LET 2 |
| #define | SRC_DECL_NONE 3 |
| #define | SN_TYPE_BITS 5 |
| #define | SN_DELTA_BITS 3 |
| #define | SN_XDELTA_BITS 6 |
| #define | SN_TYPE_MASK (JS_BITMASK(SN_TYPE_BITS) << SN_DELTA_BITS) |
| #define | SN_DELTA_MASK ((ptrdiff_t)JS_BITMASK(SN_DELTA_BITS)) |
| #define | SN_XDELTA_MASK ((ptrdiff_t)JS_BITMASK(SN_XDELTA_BITS)) |
| #define | SN_MAKE_NOTE(sn, t, d) |
| #define | SN_MAKE_XDELTA(sn, d) |
| #define | SN_IS_XDELTA(sn) ((*(sn) >> SN_DELTA_BITS) >= SRC_XDELTA) |
| #define | SN_TYPE(sn) |
| #define | SN_SET_TYPE(sn, type) SN_MAKE_NOTE(sn, type, SN_DELTA(sn)) |
| #define | SN_IS_GETTABLE(sn) (SN_TYPE(sn) < SRC_NEWLINE) |
| #define | SN_DELTA(sn) |
| #define | SN_SET_DELTA(sn, delta) |
| #define | SN_DELTA_LIMIT ((ptrdiff_t)JS_BIT(SN_DELTA_BITS)) |
| #define | SN_XDELTA_LIMIT ((ptrdiff_t)JS_BIT(SN_XDELTA_BITS)) |
| #define | SN_3BYTE_OFFSET_FLAG 0x80 |
| #define | SN_3BYTE_OFFSET_MASK 0x7f |
| #define | SN_LENGTH(sn) |
| #define | SN_NEXT(sn) ((sn) + SN_LENGTH(sn)) |
| #define | SN_MAKE_TERMINATOR(sn) (*(sn) = SRC_NULL) |
| #define | SN_IS_TERMINATOR(sn) (*(sn) == SRC_NULL) |
| #define | CG_COUNT_FINAL_SRCNOTES(cg, cnt) |
| #define | CG_COUNT_FINAL_TRYNOTES(cg, cnt) |
Typedefs |
| typedef JSStmtInfo | JSStmtInfo |
| typedef JSSpanDep | JSSpanDep |
| typedef JSJumpTarget | JSJumpTarget |
Enumerations |
| enum | JSStmtType {
STMT_LABEL,
STMT_IF,
STMT_ELSE,
STMT_BODY,
STMT_BLOCK,
STMT_SWITCH,
STMT_WITH,
STMT_CATCH,
STMT_TRY,
STMT_FINALLY,
STMT_SUBROUTINE,
STMT_DO_LOOP,
STMT_FOR_LOOP,
STMT_FOR_IN_LOOP,
STMT_WHILE_LOOP
} |
| enum | JSSrcNoteType {
SRC_NULL = 0,
SRC_IF = 1,
SRC_INITPROP = 1,
SRC_IF_ELSE = 2,
SRC_WHILE = 3,
SRC_FOR = 4,
SRC_CONTINUE = 5,
SRC_DECL = 6,
SRC_DESTRUCT = 6,
SRC_PCDELTA = 7,
SRC_GROUPASSIGN = 7,
SRC_ASSIGNOP = 8,
SRC_COND = 9,
SRC_BRACE = 10,
SRC_HIDDEN = 11,
SRC_PCBASE = 12,
SRC_METHODBASE = 13,
SRC_LABEL = 13,
SRC_LABELBRACE = 14,
SRC_ENDBRACE = 15,
SRC_BREAK2LABEL = 16,
SRC_CONT2LABEL = 17,
SRC_SWITCH = 18,
SRC_FUNCDEF = 19,
SRC_CATCH = 20,
SRC_EXTENDED = 21,
SRC_NEWLINE = 22,
SRC_SETLINE = 23,
SRC_XDELTA = 24
} |
Functions |
| | JS_FRIEND_API (JSBool) js_InitCodeGenerator(JSContext *cx |
| | JS_FRIEND_API (void) js_FinishCodeGenerator(JSContext *cx |
| ptrdiff_t | js_Emit1 (JSContext *cx, JSCodeGenerator *cg, JSOp op) |
| ptrdiff_t | js_Emit2 (JSContext *cx, JSCodeGenerator *cg, JSOp op, jsbytecode op1) |
| ptrdiff_t | js_Emit3 (JSContext *cx, JSCodeGenerator *cg, JSOp op, jsbytecode op1, jsbytecode op2) |
| ptrdiff_t | js_EmitN (JSContext *cx, JSCodeGenerator *cg, JSOp op, size_t extra) |
| JSBool | js_SetJumpOffset (JSContext *cx, JSCodeGenerator *cg, jsbytecode *pc, ptrdiff_t off) |
| JSBool | js_InStatement (JSTreeContext *tc, JSStmtType type) |
| JSBool | js_IsGlobalReference (JSTreeContext *tc, JSAtom *atom, JSBool *loopyp) |
| void | js_PushStatement (JSTreeContext *tc, JSStmtInfo *stmt, JSStmtType type, ptrdiff_t top) |
| void | js_PushBlockScope (JSTreeContext *tc, JSStmtInfo *stmt, JSAtom *blockAtom, ptrdiff_t top) |
| void | js_PopStatement (JSTreeContext *tc) |
| JSBool | js_PopStatementCG (JSContext *cx, JSCodeGenerator *cg) |
| JSBool | js_DefineCompileTimeConstant (JSContext *cx, JSCodeGenerator *cg, JSAtom *atom, JSParseNode *pn) |
| JSBool | js_LookupCompileTimeConstant (JSContext *cx, JSCodeGenerator *cg, JSAtom *atom, jsval *vp) |
| JSStmtInfo * | js_LexicalLookup (JSTreeContext *tc, JSAtom *atom, jsint *slotp, JSBool letdecl) |
| JSBool | js_EmitTree (JSContext *cx, JSCodeGenerator *cg, JSParseNode *pn) |
| JSBool | js_EmitFunctionBytecode (JSContext *cx, JSCodeGenerator *cg, JSParseNode *body) |
| JSBool | js_EmitFunctionBody (JSContext *cx, JSCodeGenerator *cg, JSParseNode *body, JSFunction *fun) |
| | JS_FRIEND_DATA (JSSrcNoteSpec) js_SrcNoteSpec[] |
| | JS_FRIEND_API (uintN) js_SrcNoteLength(jssrcnote *sn) |
| intN | js_NewSrcNote (JSContext *cx, JSCodeGenerator *cg, JSSrcNoteType type) |
| intN | js_NewSrcNote2 (JSContext *cx, JSCodeGenerator *cg, JSSrcNoteType type, ptrdiff_t offset) |
| intN | js_NewSrcNote3 (JSContext *cx, JSCodeGenerator *cg, JSSrcNoteType type, ptrdiff_t offset1, ptrdiff_t offset2) |
| jssrcnote * | js_AddToSrcNoteDelta (JSContext *cx, JSCodeGenerator *cg, jssrcnote *sn, ptrdiff_t delta) |
| | JS_FRIEND_API (ptrdiff_t) js_GetSrcNoteOffset(jssrcnote *sn |
| JSBool | js_SetSrcNoteOffset (JSContext *cx, JSCodeGenerator *cg, uintN index, uintN which, ptrdiff_t offset) |
| JSBool | js_FinishTakingSrcNotes (JSContext *cx, JSCodeGenerator *cg, jssrcnote *notes) |
| JSBool | js_AllocTryNotes (JSContext *cx, JSCodeGenerator *cg) |
| JSTryNote * | js_NewTryNote (JSContext *cx, JSCodeGenerator *cg, ptrdiff_t start, ptrdiff_t end, ptrdiff_t catchStart) |
| void | js_FinishTakingTryNotes (JSContext *cx, JSCodeGenerator *cg, JSTryNote *notes) |
Variables |
| JSCodeGenerator * | cg |
| JSCodeGenerator JSArenaPool * | codePool |
JSCodeGenerator JSArenaPool
JSArenaPool * | notePool |
JSCodeGenerator JSArenaPool
JSArenaPool const char * | filename |
JSCodeGenerator JSArenaPool
JSArenaPool const char uintN | lineno |
JSCodeGenerator JSArenaPool
JSArenaPool const char uintN
JSPrincipals * | principals |
| JSCodeGenerator * | cg |
| uintN | which |