lib,src: make os.endianness() inlinable
authorBen Noordhuis <info@bnoordhuis.nl>
Mon, 10 Nov 2014 23:40:58 +0000 (00:40 +0100)
committerBen Noordhuis <info@bnoordhuis.nl>
Tue, 11 Nov 2014 11:02:27 +0000 (12:02 +0100)
Turn os.endianness() from a run-time function into a pure JS function.
Upsides: makes it a good candidate for inlining at the call site.
Downsides: none that I can think of.

PR-URL: https://github.com/node-forward/node/pull/55
Reviewed-By: Chris Dickinson <christopher.s.dickinson@gmail.com>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Fedor Indutny <fedor@indutny.com>
lib/os.js
src/node_os.cc

index 814c054..9fc4673 100644 (file)
--- a/lib/os.js
+++ b/lib/os.js
@@ -23,7 +23,6 @@ var binding = process.binding('os');
 var util = require('util');
 var isWindows = process.platform === 'win32';
 
-exports.endianness = binding.getEndianness;
 exports.hostname = binding.getHostname;
 exports.loadavg = binding.getLoadAvg;
 exports.uptime = binding.getUptime;
@@ -62,3 +61,8 @@ exports.getNetworkInterfaces = util.deprecate(function() {
 }, 'getNetworkInterfaces is now called `os.networkInterfaces`.');
 
 exports.EOL = isWindows ? '\r\n' : '\n';
+
+if (binding.isBigEndian)
+  exports.endianness = function() { return 'BE'; };
+else
+  exports.endianness = function() { return 'LE'; };
index 9341ee6..e4d9023 100644 (file)
@@ -48,6 +48,7 @@ namespace node {
 namespace os {
 
 using v8::Array;
+using v8::Boolean;
 using v8::Context;
 using v8::FunctionCallbackInfo;
 using v8::Handle;
@@ -59,13 +60,6 @@ using v8::String;
 using v8::Value;
 
 
-static void GetEndianness(const FunctionCallbackInfo<Value>& args) {
-  Environment* env = Environment::GetCurrent(args);
-  const char* rval = IsBigEndian() ? "BE" : "LE";
-  args.GetReturnValue().Set(OneByteString(env->isolate(), rval));
-}
-
-
 static void GetHostname(const FunctionCallbackInfo<Value>& args) {
   Environment* env = Environment::GetCurrent(args);
   char buf[MAXHOSTNAMELEN + 1];
@@ -300,7 +294,6 @@ void Initialize(Handle<Object> target,
                 Handle<Value> unused,
                 Handle<Context> context) {
   Environment* env = Environment::GetCurrent(context);
-  env->SetMethod(target, "getEndianness", GetEndianness);
   env->SetMethod(target, "getHostname", GetHostname);
   env->SetMethod(target, "getLoadAvg", GetLoadAvg);
   env->SetMethod(target, "getUptime", GetUptime);
@@ -310,6 +303,8 @@ void Initialize(Handle<Object> target,
   env->SetMethod(target, "getOSType", GetOSType);
   env->SetMethod(target, "getOSRelease", GetOSRelease);
   env->SetMethod(target, "getInterfaceAddresses", GetInterfaceAddresses);
+  target->Set(FIXED_ONE_BYTE_STRING(env->isolate(), "isBigEndian"),
+              Boolean::New(env->isolate(), IsBigEndian()));
 }
 
 }  // namespace os