[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    KDE/kdelibs/kjs
From:       Maks Orlovich <maksim () kde ! org>
Date:       2010-05-01 16:20:44
Message-ID: 20100501162044.4160BAC8AA () svn ! kde ! org
[Download RAW message or body]

SVN commit 1121538 by orlovich:

Some low-level tracing improvements.


 M  +22 -22    bytecode/opcodes.cpp.in  
 M  +50 -3     function.cpp  
 M  +5 -5      nodes.cpp  


--- trunk/KDE/kdelibs/kjs/bytecode/opcodes.cpp.in #1121537:1121538
@@ -148,7 +148,7 @@
         break;
 
     default:
-        printf("Unable to emit conversion:%s, in:%c, out:%c\n", \
ConvOpVals[convType], +        fprintf(stderr, "Unable to emit conversion:%s, in:%c, \
out:%c\n", ConvOpVals[convType],  original->immediate ? 'I' : 'R', outImm ? 'I' : \
'R');  CRASH();
     };
@@ -204,13 +204,13 @@
         emitOp(comp, Op_RegPutNumber, 0, regNum, val);
         break;
     default:
-        printf("Don't know how to store type to register:%s\n", \
OpTypeVals[val->type]); +        fprintf(stderr, "Don't know how to store type to \
register:%s\n", OpTypeVals[val->type]);  CRASH();
     }
 }
 
 static void printType(const char* prefix, int pos, OpValue* v) {
-    printf("%s%d:%s/imm:%d\n", prefix, pos, OpTypeVals[v->type], v->immediate);
+    fprintf(stderr, "%s%d:%s/imm:%d\n", prefix, pos, OpTypeVals[v->type], \
v->immediate);  }
 
 Addr CodeGen::emitOp(CompileState* comp, OpName baseInstr,
@@ -247,7 +247,7 @@
         ++numArgs;
 
 #ifdef TRACE_INSTR_SELECT
-    printf("\n\nTrying to select variant for:%s\n", OpNameVals[baseInstr]);
+    fprintf(stderr, "\n\nTrying to select variant for:%s\n", OpNameVals[baseInstr]);
     for (int i = 0; i < numArgs; ++i)
         printType("\targ", i, args[i]);
 #endif
@@ -275,9 +275,9 @@
         }
 
 #ifdef TRACE_INSTR_SELECT
-        printf("Candidate:%s, totalCost:%d, variant cost:%d\n", \
OpByteCodeVals[cand->opCode], totalCost, cand->cost); +        fprintf(stderr, \
"Candidate:%s, totalCost:%d, variant cost:%d\n", OpByteCodeVals[cand->opCode], \
totalCost, cand->cost);  for (int i = 0; i < numArgs; ++i) {
-            printf("\tconv:%s, costs:%d\n", ConvOpVals[convOps[i]], costs[i]);
+            fprintf(stderr, "\tconv:%s, costs:%d\n", ConvOpVals[convOps[i]], \
costs[i]);  }
 #endif
 
@@ -295,7 +295,7 @@
     }
 
     if (!cheapest) {
-        printf("Unable to find an acceptable conversion for:%s\n", \
OpNameVals[baseInstr]); +        fprintf(stderr, "Unable to find an acceptable \
conversion for:%s\n", OpNameVals[baseInstr]);  for (int i = 0; i < numArgs; ++i)
             printType("\ta", i, args[i]);
         CRASH(); // Should never happen!
@@ -374,43 +374,43 @@
     switch (type) {
     case OpType_bool:
         if (reinterpret_cast<NarrowArg*>(block.data() + offset)->boolVal)
-            std::printf("true");
+            std::fprintf(stderr, "true");
         else
-            std::printf("false");
+            std::fprintf(stderr, "false");
         break;
     case OpType_int32:
-        std::printf("%d", reinterpret_cast<NarrowArg*>(block.data() + \
offset)->int32Val); +        std::fprintf(stderr, "%d", \
reinterpret_cast<NarrowArg*>(block.data() + offset)->int32Val);  break;
     case OpType_value:
         // Immediate value -- should go through JSImmediate stuff..
-        std::printf("<ival:%s>", reinterpret_cast<WideArg*>(block.data() + \
offset)->valueVal->toString(0).ascii()); +        std::fprintf(stderr, "<ival:%s>", \
reinterpret_cast<WideArg*>(block.data() + offset)->valueVal->toString(0).ascii());  \
break;  case OpType_ident:
-        std::printf("%s", reinterpret_cast<WideArg*>(block.data() + \
offset)->identVal->ustring().ascii()); +        std::fprintf(stderr, "%s", \
reinterpret_cast<WideArg*>(block.data() + offset)->identVal->ustring().ascii());  \
break;  case OpType_string:
-        std::printf("\"%s\"", reinterpret_cast<WideArg*>(block.data() + \
offset)->stringVal->ascii()); +        std::fprintf(stderr, "\"%s\"", \
reinterpret_cast<WideArg*>(block.data() + offset)->stringVal->ascii());  break;
     case OpType_number:
-        std::printf("%f", reinterpret_cast<WideArg*>(block.data() + \
offset)->numberVal); +        std::fprintf(stderr, "%f", \
reinterpret_cast<WideArg*>(block.data() + offset)->numberVal);  break;
     case OpType_addr:
-        std::printf("A%08x", reinterpret_cast<NarrowArg*>(block.data() + \
offset)->addrVal); +        std::fprintf(stderr, "A%08x", \
reinterpret_cast<NarrowArg*>(block.data() + offset)->addrVal);  break;
     case OpType_reg:
-        std::printf("r%lu", reinterpret_cast<NarrowArg*>(block.data() + \
offset)->regVal / (wasImm ? +        std::fprintf(stderr, "r%lu", \
reinterpret_cast<NarrowArg*>(block.data() + offset)->regVal / (wasImm ?  1lu : \
sizeof(LocalStorageEntry)));  break;
     case OpType_node:
-        std::printf("N%p", (void*)(reinterpret_cast<WideArg*>(block.data() + \
offset)->nodeVal)); +        std::fprintf(stderr,"N%p", \
(void*)(reinterpret_cast<WideArg*>(block.data() + offset)->nodeVal));  break;
     case OpType_cstr:
-        std::printf("c\"%s\"", reinterpret_cast<WideArg*>(block.data() + \
offset)->cstrVal); +        std::fprintf(stderr, "c\"%s\"", \
reinterpret_cast<WideArg*>(block.data() + offset)->cstrVal);  break;
     default:
-        std::printf("???:%s", OpTypeVals[type]);
+        std::fprintf(stderr, "???:%s", OpTypeVals[type]);
     };
-    std::printf(" ");
+    std::fprintf(stderr, " ");
 }
 
 void CodeGen::disassembleBlock(CodeBlock& block)
@@ -420,13 +420,13 @@
         OpByteCode opCode = *reinterpret_cast<OpByteCode*>(block.data() + pc);
         const Op& opDescr = opsForOpCodes[opCode];
 
-        std::printf("%08lx %s ", pc, OpNameVals[opDescr.baseInstr]);
+        std::fprintf(stderr, "%08lx %s ", pc, OpNameVals[opDescr.baseInstr]);
         for (int p = 0; p < opDescr.numParams; ++p) {
             dumpParam(block, pc + opDescr.paramOffsets[p],
                       opDescr.immediateParams[p] ? opDescr.paramTypes[p] : \
OpType_reg, opDescr.immediateParams[p]);  }
 
-        std::printf("\t\t// %s\n", OpByteCodeVals[opCode]);
+        std::fprintf(stderr, "\t\t// %s\n", OpByteCodeVals[opCode]);
         pc += opDescr.length;
     }
 }
--- trunk/KDE/kdelibs/kjs/function.cpp #1121537:1121538
@@ -44,9 +44,12 @@
 #include "wtf/DisallowCType.h"
 #include "wtf/ASCIICType.h"
 #include "bytecode/machine.h"
+#include <string>
 
 using namespace WTF;
 
+//#define KJS_VERBOSE
+
 namespace KJS {
 
 // ----------------------------- FunctionImp ----------------------------------
@@ -93,10 +96,41 @@
     body->compile(FunctionCode, newExec->dynamicInterpreter()->debugger() ? Debug : \
Release);  }
 
+
+#ifdef KJS_VERBOSE
+static int           callDepth;
+static std::string   callIndent;
+
+static const char* ind()
+{
+    callIndent = "";
+    for (int i = 0; i < callDepth; ++i)
+        callIndent += "     ";
+    return callIndent.c_str();
+}
+
+// Multiline print adding indentation
+static void printInd(const char* str)
+{
+    fprintf(stderr, "%s", ind());
+    for (const char* c = str; *c; ++c) {
+        if (*c != '\n')
+            fprintf(stderr, "%c", *c);
+        else
+            fprintf(stderr, "\n%s", ind());
+    }
+}
+
+#endif
+
 JSValue* FunctionImp::callAsFunction(ExecState* exec, JSObject* thisObj, const List& \
args)  {
   assert(thisObj);
 
+#ifdef KJS_VERBOSE
+  ++callDepth;
+#endif
+
   Debugger* dbg = exec->dynamicInterpreter()->debugger();  
 
   // enter a new execution context
@@ -160,10 +194,13 @@
   exec->dynamicInterpreter()->stackFree(stackSize);
 
 #ifdef KJS_VERBOSE
+  fprintf(stderr, "%s", ind());
   if (exec->exception())
     printInfo(exec,"throwing", exec->exception());
   else
     printInfo(exec,"returning", result);
+
+  --callDepth;
 #endif
 
   // The debugger may have been deallocated by now if the WebFrame
@@ -488,8 +525,8 @@
 
     // Pass in the parameters (ECMA 10.1.3q)
 #ifdef KJS_VERBOSE
-    fprintf(stderr, "---------------------------------------------------\n"
-            "processing parameters for %s call\n",
+    fprintf(stderr, "%s---------------------------------------------------\n"
+            "%sprocessing parameters for %s call\n", ind(), ind(), 
             function->functionName().isEmpty() ? "(internal)" : \
function->functionName().ascii());  #endif
     size_t numParams = body->numParams();
@@ -500,11 +537,19 @@
         entries[symNum].val.valueVal = v;
 
 #ifdef KJS_VERBOSE
-        fprintf(stderr, "setting parameter %s", body->paramName(pos).ascii());
+        fprintf(stderr, "%s setting parameter %s", ind(), \
body->paramName(pos).ascii());  printInfo(exec, "to", v);
 #endif
     }
 
+#ifdef KJS_VERBOSE
+    fprintf(stderr, "\n%s---------------------------------\n", ind());
+    fprintf(stderr, "%sBody:\n", ind());
+    fprintf(stderr, "%s---------------------------------\n", ind());
+    printInd(body->toString().ascii());
+    fprintf(stderr, "\n%s---------------------------------\n\n", ind());
+#endif
+
     // Initialize the rest of the locals to 'undefined'
     for (size_t pos = numParams + ActivationImp::NumReservedSlots; pos < total; \
++pos)  entries[pos].val.valueVal = jsUndefined();
@@ -1013,3 +1058,5 @@
 }
 
 } // namespace
+
+// kate: indent-width 4; replace-tabs on; tab-width 4; space-indent on;
--- trunk/KDE/kdelibs/kjs/nodes.cpp #1121537:1121538
@@ -948,12 +948,12 @@
   m_tearOffAtEnd = comp.needsClosures();
 
 #if 0
-  printf("\n\n");
-  printf("\n---------------------------------\n\n");
-  printf("%s", toString().ascii());
-  printf("\n---------------------------------\n\n");
+  fprintf(stderr, "\n\n");
+  fprintf(stderr, "\n---------------------------------\n\n");
+  fprintf(stderr, "%s", toString().ascii());
+  fprintf(stderr, "\n---------------------------------\n\n");
   CodeGen::disassembleBlock(m_compiledCode);
-  printf("\n---------------------------------\n\n");
+  fprintf(stderr, "\n---------------------------------\n\n");
 #endif
 }
 


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic