/**! * optimized - index.js * * Copyright(c) fengmk2 and other contributors. * MIT Licensed * * Authors: * fengmk2 (http://fengmk2.github.com) */ 'use strict'; /** * Module dependencies. */ var fmt = require('util').format; require('colors'); function printStatus(fn, args, data) { var argsString = ''; if (args) { argsString = args.map(function (a) { return JSON.stringify(a); }).join(', '); } console.log(fmt('Function %s(%s) is %s', fn._name || fn.name || 'anonymous', argsString, data.result)[data.color]); } function detect(fn) { var result = 'unknow'; var optimized = false; var color = 'grey'; switch (%GetOptimizationStatus(fn)) { case 1: result = 'optimized'; optimized = true; color = 'green'; break; case 2: result = 'not optimized'; optimized = false; color = 'red'; break; case 3: result = 'always optimized'; optimized = true; color = 'green'; break; case 4: result = 'never optimized'; optimized = false; color = 'red'; break; case 6: result = 'maybe deoptimized'; optimized = false; color = 'yellow'; break; } return { optimized: optimized, result: result, color: color }; } function optimized(fn, args, ctx) { // Fill type-info if (args) { fn.apply(ctx, args); } else { fn(); } %OptimizeFunctionOnNextCall(fn); // The next call if (args) { fn.apply(ctx, args); } else { fn(); } // Check var data = detect(fn); printStatus(fn, args, data); return data.optimized; } module.exports = optimized; module.exports.detect = detect;