App-a2p
view release on metacpan or search on metacpan
str_scat(str,fstr=walk(useval != 0,level,ops[node+1].ival,&numarg,P_MIN));
str_free(fstr);
numeric |= numarg;
str_cat(str,")");
break;
case OCANDAND:
prec = P_ANDAND;
str = walk(1,level,ops[node+1].ival,&numarg,prec);
numeric = 1;
str_cat(str," && ");
str_scat(str,fstr=walk(1,level,ops[node+2].ival,&numarg,prec+1));
str_free(fstr);
str_scat(str,fstr=walk(1,level,ops[node+3].ival,&numarg,prec+1));
str_free(fstr);
break;
case OCOROR:
prec = P_OROR;
str = walk(1,level,ops[node+1].ival,&numarg,prec);
numeric = 1;
str_cat(str," || ");
str_scat(str,fstr=walk(1,level,ops[node+2].ival,&numarg,prec+1));
str_free(fstr);
str_scat(str,fstr=walk(1,level,ops[node+3].ival,&numarg,prec+1));
str_free(fstr);
break;
case OCNOT:
prec = P_UNARY;
str = str_new(0);
str_set(str,"!");
str_scat(str,fstr=walk(1,level,ops[node+1].ival,&numarg,prec));
str_free(fstr);
numeric = 1;
break;
case ORELOP:
prec = P_REL;
str = walk(1,level,ops[node+2].ival,&numarg,prec+1);
numeric |= numarg;
tmpstr = walk(0,level,ops[node+1].ival,&numarg,P_MIN);
tmp2str = walk(1,level,ops[node+3].ival,&numarg,prec+1);
numeric |= numarg;
if (!numeric ||
(!numarg && (*tmp2str->str_ptr == '"' || *tmp2str->str_ptr == '\''))) {
t = tmpstr->str_ptr;
if (strEQ(t,"=="))
str_set(tmpstr,"eq");
else if (strEQ(t,"!="))
str_set(tmpstr,"ne");
else if (strEQ(t,"<"))
str_set(tmpstr,"lt");
else if (strEQ(t,"<="))
str_set(tmpstr,"le");
else if (strEQ(t,">"))
str_set(tmpstr,"gt");
else if (strEQ(t,">="))
str_set(tmpstr,"ge");
if (!strchr(tmpstr->str_ptr,'\'') && !strchr(tmpstr->str_ptr,'"') &&
!strchr(tmp2str->str_ptr,'\'') && !strchr(tmp2str->str_ptr,'"') )
numeric |= 2;
}
if (numeric & 2) {
if (numeric & 1) /* numeric is very good guess */
str_cat(str," ");
else
str_cat(str,"\377");
numeric = 1;
}
else
str_cat(str," ");
str_scat(str,tmpstr);
str_free(tmpstr);
str_cat(str," ");
str_scat(str,tmp2str);
str_free(tmp2str);
numeric = 1;
break;
case ORPAREN:
str = str_new(0);
str_set(str,"(");
str_scat(str,fstr=walk(useval != 0,level,ops[node+1].ival,&numarg,P_MIN));
str_free(fstr);
numeric |= numarg;
str_cat(str,")");
break;
case OMATCHOP:
prec = P_MATCH;
str = walk(1,level,ops[node+2].ival,&numarg,prec+1);
str_cat(str," ");
tmpstr = walk(0,level,ops[node+1].ival,&numarg,P_MIN);
if (strEQ(tmpstr->str_ptr,"~"))
str_cat(str,"=~");
else {
str_scat(str,tmpstr);
str_free(tmpstr);
}
str_cat(str," ");
str_scat(str,fstr=walk(1,level,ops[node+3].ival,&numarg,prec+1));
str_free(fstr);
numeric = 1;
break;
case OMPAREN:
str = str_new(0);
str_set(str,"(");
str_scat(str,
fstr=walk(useval != 0,level,ops[node+1].ival,&numarg,P_MIN));
str_free(fstr);
numeric |= numarg;
str_cat(str,")");
break;
case OCONCAT:
prec = P_ADD;
type = ops[ops[node+1].ival].ival & 255;
str = walk(1,level,ops[node+1].ival,&numarg,prec+(type != OCONCAT));
str_cat(str," . ");
type = ops[ops[node+2].ival].ival & 255;
str_scat(str,
fstr=walk(1,level,ops[node+2].ival,&numarg,prec+(type != OCONCAT)));
str_free(fstr);
break;
case OASSIGN:
prec = P_ASSIGN;
str = walk(0,level,ops[node+2].ival,&numarg,prec+1);
( run in 2.652 seconds using v1.01-cache-2.11-cpan-d8267643d1d )