No JS_TRACER ifdefs, keep line len < 80, reparameterize jstracer.cpp functions, js_OpLength helper.

This commit is contained in:
Brendan Eich
2008-06-02 17:19:41 -07:00
parent 1843bc66a4
commit 581542a918
8 changed files with 114 additions and 84 deletions

View File

@@ -159,6 +159,72 @@ js_GetIndexFromBytecode(JSContext *cx, JSScript *script, jsbytecode *pc,
return base + GET_UINT16(pc + pcoff);
}
uintN
js_OpLength(jsbytecode *pc)
{
const JSCodeSpec *cs;
ptrdiff_t len, off, jmplen;
jsbytecode *pc2;
uint32 type;
JS_ASSERT((JSOp) *pc < JSOP_LIMIT);
cs = &js_CodeSpec[*pc];
len = cs->length;
JS_ASSERT(len != 0);
if (len > 0)
return (uintN) len;
/* Variable-length opcode, currently only lookup and table switches. */
JS_ASSERT(len == -1);
pc2 = pc;
type = JOF_TYPE(cs->format);
switch (type) {
case JOF_TABLESWITCH:
case JOF_TABLESWITCHX:
{
jsint i, low, high;
jmplen = (type == JOF_TABLESWITCH) ? JUMP_OFFSET_LEN
: JUMPX_OFFSET_LEN;
off = GetJumpOffset(pc, pc2);
pc2 += jmplen;
low = GET_JUMP_OFFSET(pc2);
pc2 += JUMP_OFFSET_LEN;
high = GET_JUMP_OFFSET(pc2);
pc2 += JUMP_OFFSET_LEN;
for (i = low; i <= high; i++)
pc2 += jmplen;
break;
}
case JOF_LOOKUPSWITCH:
case JOF_LOOKUPSWITCHX:
{
jsatomid npairs;
jmplen = (type == JOF_LOOKUPSWITCH) ? JUMP_OFFSET_LEN
: JUMPX_OFFSET_LEN;
off = GetJumpOffset(pc, pc2);
pc2 += jmplen;
npairs = GET_UINT16(pc2);
pc2 += UINT16_LEN;
while (npairs) {
pc2 += INDEX_LEN;
pc2 += jmplen;
npairs--;
}
break;
}
default:
JS_NOT_REACHED("unknown op length");
return 0;
}
len = 1 + pc2 - pc;
return (uintN) len;
}
#ifdef DEBUG
JS_FRIEND_API(JSBool)
@@ -5035,8 +5101,6 @@ ReconstructPCStack(JSContext *cx, JSScript *script, jsbytecode *pc,
const JSCodeSpec *cs;
ptrdiff_t oplen;
jssrcnote *sn;
uint32 type;
jsbytecode *pc2;
intN i;
#define LOCAL_ASSERT(expr) LOCAL_ASSERT_RV(expr, -1);
@@ -5082,6 +5146,7 @@ ReconstructPCStack(JSContext *cx, JSScript *script, jsbytecode *pc,
JS_ASSERT(op == JSOP_GOTO || op == JSOP_GOTOX);
cs = &js_CodeSpec[op];
oplen = cs->length;
JS_ASSERT(oplen > 0);
jmplen = GetJumpOffset(pc, pc);
if (pc + jmplen < begin) {
oplen = (uintN) jmplen;
@@ -5089,7 +5154,7 @@ ReconstructPCStack(JSContext *cx, JSScript *script, jsbytecode *pc,
}
/*
* Ok, begin lies in E. Manually pop C off the model stack,
* Ok, begin lies in E. Manually pop C off the model stack,
* since we have moved beyond the IFEQ now.
*/
--pcdepth;
@@ -5097,51 +5162,6 @@ ReconstructPCStack(JSContext *cx, JSScript *script, jsbytecode *pc,
}
}
type = JOF_TYPE(cs->format);
switch (type) {
case JOF_TABLESWITCH:
case JOF_TABLESWITCHX:
{
jsint jmplen, low, high;
jmplen = (type == JOF_TABLESWITCH) ? JUMP_OFFSET_LEN
: JUMPX_OFFSET_LEN;
pc2 = pc;
pc2 += jmplen;
low = GET_JUMP_OFFSET(pc2);
pc2 += JUMP_OFFSET_LEN;
high = GET_JUMP_OFFSET(pc2);
pc2 += JUMP_OFFSET_LEN;
for (i = low; i <= high; i++)
pc2 += jmplen;
oplen = 1 + pc2 - pc;
break;
}
case JOF_LOOKUPSWITCH:
case JOF_LOOKUPSWITCHX:
{
jsint jmplen;
jsatomid npairs;
jmplen = (type == JOF_LOOKUPSWITCH) ? JUMP_OFFSET_LEN
: JUMPX_OFFSET_LEN;
pc2 = pc;
pc2 += jmplen;
npairs = GET_UINT16(pc2);
pc2 += INDEX_LEN;
while (npairs) {
pc2 += INDEX_LEN;
pc2 += jmplen;
npairs--;
}
oplen = 1 + pc2 - pc;
break;
}
default:;
}
if (sn && SN_TYPE(sn) == SRC_HIDDEN)
continue;