diff --git a/package.json b/package.json index bd75d3e9..7417dc2e 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,7 @@ "dependencies": { "async": "~0.2.9", "bindings": "~1.2.0", - "colony-compiler": "~0.6.23", + "colony-compiler": "0.7.x", "mkdirp": "~0.3.5", "semver": "^4.1.0" }, diff --git a/src/colony/lua/colony-init.lua b/src/colony/lua/colony-init.lua index 82f279b2..077c021c 100644 --- a/src/colony/lua/colony-init.lua +++ b/src/colony/lua/colony-init.lua @@ -506,7 +506,7 @@ end -- arguments objects -function js_arguments (...) +function js_arguments (strict, callee, ...) local a, len = {}, select('#', ...) for i=1,len do local val, _ = select(i, ...) @@ -515,6 +515,13 @@ function js_arguments (...) local obj = global._obj(a); obj.length = len + if strict then + js_define_getter(obj, 'callee', function (this) + error(js_new(global.TypeError, '\'caller\', \'callee\', and \'arguments\' properties may not be accessed on strict mode functions or the arguments objects for calls to them')) + end) + else + obj.callee = callee + end get_unique_metatable(obj).arguments = true return obj end diff --git a/test/issues/issue-runtime-573.js b/test/issues/issue-runtime-573.js new file mode 100644 index 00000000..af916779 --- /dev/null +++ b/test/issues/issue-runtime-573.js @@ -0,0 +1,10 @@ +var tap = require('../tap'); + +tap.count(1); + +iCalled(); + +function iCalled() { callMeMaybe(); } +function callMeMaybe() { + tap.ok(arguments.callee== callMeMaybe,'function callee'); +}