Add renference links.
authorCheng Zhao <zcbenz@gmail.com>
Thu, 25 Apr 2013 07:12:56 +0000 (15:12 +0800)
committerCheng Zhao <zcbenz@gmail.com>
Thu, 25 Apr 2013 07:12:56 +0000 (15:12 +0800)
browser/atom/rpc_server.coffee
renderer/api/lib/remote.coffee

index 94528b1..f931707 100644 (file)
@@ -25,9 +25,9 @@ ipc.on 'ATOM_INTERNAL_REQUIRE', (event, process_id, routing_id, module) ->
 
 ipc.on 'ATOM_INTERNAL_CONSTRUCTOR', (event, process_id, routing_id, id, args) ->
   try
-    # Call new with array of arguments.
-    # TODO(zcbenz): Paste the URL of the StackOverflow question.
     constructor = objectsRegistry.get id
+    # Call new with array of arguments.
+    # http://stackoverflow.com/questions/1606797/use-of-apply-with-new-operator-is-this-possible
     obj = new (Function::bind.apply(constructor, [null].concat(args)))
     event.result = new PlainObject(obj)
   catch e
index f189484..2ae0b9a 100644 (file)
@@ -5,41 +5,43 @@ generateFromPainObject = (plain) ->
     return plain.value
   else if plain.type is 'error'
     throw new Error('Remote Error: ' + plain.value)
-  else
-    # A shadow class to represent the remote object.
-    class RemoteObject
-      constructor: () ->
-        if @constructor == RemoteObject
-          # Constructor call.
-          obj = ipc.sendChannelSync 'ATOM_INTERNAL_CONSTRUCTOR', plain.id, Array::slice.call(arguments)
-          # Returning object in constructor will replace constructed object
-          # with returned object.
-          return generateFromPainObject obj
-        else
-          # Function call.
-          ret = ipc.sendChannelSync 'ATOM_INTERNAL_FUNCTION_CALL', plain.id, Array::slice.call(arguments)
-          generateFromPainObject ret
 
-    # Polulate shadow members.
-    for member in plain.members
-      do (member) ->
-        if member.type is 'function'
-          RemoteObject[member.name] = ->
-            # Call member function.
-            ret = ipc.sendChannelSync 'ATOM_INTERNAL_MEMBER_CALL', plain.id, member.name, Array::slice.call(arguments)
-            generateFromPainObject ret
-        else
-          RemoteObject.__defineSetter__ member.name, (value) ->
-            # Set member data.
-            ipc.sendChannelSync 'ATOM_INTERNAL_MEMBER_SET', plain.id, member.name, value
-            undefined
+  # A shadow class to represent the remote object.
+  class RemoteObject
+    constructor: () ->
+      if @constructor == RemoteObject
+        # Constructor call.
+        obj = ipc.sendChannelSync 'ATOM_INTERNAL_CONSTRUCTOR', plain.id, Array::slice.call(arguments)
+
+        # Returning object in constructor will replace constructed object
+        # with the returned object.
+        # http://stackoverflow.com/questions/1978049/what-values-can-a-constructor-return-to-avoid-returning-this
+        return generateFromPainObject obj
+      else
+        # Function call.
+        ret = ipc.sendChannelSync 'ATOM_INTERNAL_FUNCTION_CALL', plain.id, Array::slice.call(arguments)
+        generateFromPainObject ret
 
-          RemoteObject.__defineGetter__ member.name, ->
-            # Get member data.
-            ret = ipc.sendChannelSync 'ATOM_INTERNAL_MEMBER_GET', plain.id, member.name
-            generateFromPainObject ret
+  # Polulate shadow members.
+  for member in plain.members
+    do (member) ->
+      if member.type is 'function'
+        RemoteObject[member.name] = ->
+          # Call member function.
+          ret = ipc.sendChannelSync 'ATOM_INTERNAL_MEMBER_CALL', plain.id, member.name, Array::slice.call(arguments)
+          generateFromPainObject ret
+      else
+        RemoteObject.__defineSetter__ member.name, (value) ->
+          # Set member data.
+          ipc.sendChannelSync 'ATOM_INTERNAL_MEMBER_SET', plain.id, member.name, value
+          undefined
+
+        RemoteObject.__defineGetter__ member.name, ->
+          # Get member data.
+          ret = ipc.sendChannelSync 'ATOM_INTERNAL_MEMBER_GET', plain.id, member.name
+          generateFromPainObject ret
 
-    RemoteObject
+  RemoteObject
 
 exports.require = (module) ->
   plain = ipc.sendChannelSync 'ATOM_INTERNAL_REQUIRE', module