/[jscoverage]/trunk/instrument-js.cpp
ViewVC logotype

Diff of /trunk/instrument-js.cpp

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 379 by siliconforks, Tue Oct 28 17:50:42 2008 UTC revision 390 by siliconforks, Thu Oct 30 17:53:39 2008 UTC
# Line 22  Line 22 
22  #include "instrument-js.h"  #include "instrument-js.h"
23    
24  #include <assert.h>  #include <assert.h>
25    #include <math.h>
26  #include <stdlib.h>  #include <stdlib.h>
27  #include <string.h>  #include <string.h>
28    
# Line 414  Line 415 
415      }      }
416    }    }
417    
418    Stream_write_string(f, "}\n");    Stream_write_char(f, '}');
419  }  }
420    
421  static void instrument_function_call(JSParseNode * node, Stream * f) {  static void instrument_function_call(JSParseNode * node, Stream * f) {
# Line 433  Line 434 
434        Stream_write_char(f, ')');        Stream_write_char(f, ')');
435        return;        return;
436      }      }
     else {  
       Stream_write_char(f, '(');  
       output_expression(function_node, f, false);  
       Stream_write_char(f, ')');  
     }  
   }  
   else {  
     output_expression(function_node, f, false);  
437    }    }
438      output_expression(function_node, f, false);
439    Stream_write_char(f, '(');    Stream_write_char(f, '(');
440    for (struct JSParseNode * p = function_node->pn_next; p != NULL; p = p->pn_next) {    for (struct JSParseNode * p = function_node->pn_next; p != NULL; p = p->pn_next) {
441      if (p != node->pn_head->pn_next) {      if (p != node->pn_head->pn_next) {
# Line 478  Line 472 
472  static void output_expression(JSParseNode * node, Stream * f, bool parenthesize_object_literals) {  static void output_expression(JSParseNode * node, Stream * f, bool parenthesize_object_literals) {
473    switch (node->pn_type) {    switch (node->pn_type) {
474    case TOK_FUNCTION:    case TOK_FUNCTION:
475        Stream_write_char(f, '(');
476      instrument_function(node, f, 0, FUNCTION_NORMAL);      instrument_function(node, f, 0, FUNCTION_NORMAL);
477        Stream_write_char(f, ')');
478      break;      break;
479    case TOK_COMMA:    case TOK_COMMA:
480      for (struct JSParseNode * p = node->pn_head; p != NULL; p = p->pn_next) {      for (struct JSParseNode * p = node->pn_head; p != NULL; p = p->pn_next) {
# Line 555  Line 551 
551    case TOK_UNARYOP:    case TOK_UNARYOP:
552      switch (node->pn_op) {      switch (node->pn_op) {
553      case JSOP_NEG:      case JSOP_NEG:
554        Stream_write_char(f, '-');        Stream_write_string(f, "- ");
555        output_expression(node->pn_kid, f, false);        output_expression(node->pn_kid, f, false);
556        break;        break;
557      case JSOP_POS:      case JSOP_POS:
558        Stream_write_char(f, '+');        Stream_write_string(f, "+ ");
559        output_expression(node->pn_kid, f, false);        output_expression(node->pn_kid, f, false);
560        break;        break;
561      case JSOP_NOT:      case JSOP_NOT:
562        Stream_write_char(f, '!');        Stream_write_string(f, "! ");
563        output_expression(node->pn_kid, f, false);        output_expression(node->pn_kid, f, false);
564        break;        break;
565      case JSOP_BITNOT:      case JSOP_BITNOT:
566        Stream_write_char(f, '~');        Stream_write_string(f, "~ ");
567        output_expression(node->pn_kid, f, false);        output_expression(node->pn_kid, f, false);
568        break;        break;
569      case JSOP_TYPEOF:      case JSOP_TYPEOF:
# Line 768  Line 764 
764      To keep the output simple, special-case zero.      To keep the output simple, special-case zero.
765      */      */
766      if (node->pn_dval == 0.0) {      if (node->pn_dval == 0.0) {
767        Stream_write_string(f, "0");        if (signbit(node->pn_dval)) {
768            Stream_write_string(f, "-0");
769          }
770          else {
771            Stream_write_string(f, "0");
772          }
773        }
774        else if (node->pn_dval == INFINITY) {
775          Stream_write_string(f, "Number.POSITIVE_INFINITY");
776        }
777        else if (node->pn_dval == -INFINITY) {
778          Stream_write_string(f, "Number.NEGATIVE_INFINITY");
779        }
780        else if (node->pn_dval == NAN) {
781          Stream_write_string(f, "Number.NaN");
782      }      }
783      else {      else {
784        Stream_printf(f, "%.15g", node->pn_dval);        Stream_printf(f, "%.15g", node->pn_dval);
# Line 861  Line 871 
871    switch (node->pn_type) {    switch (node->pn_type) {
872    case TOK_FUNCTION:    case TOK_FUNCTION:
873      instrument_function(node, f, indent, FUNCTION_NORMAL);      instrument_function(node, f, indent, FUNCTION_NORMAL);
874        Stream_write_char(f, '\n');
875      break;      break;
876    case TOK_LC:    case TOK_LC:
877      assert(node->pn_arity == PN_LIST);      assert(node->pn_arity == PN_LIST);

Legend:
Removed from v.379  
changed lines
  Added in v.390

  ViewVC Help
Powered by ViewVC 1.1.24