Skip to content

Commit

Permalink
Showing 2 changed files with 30 additions and 9 deletions.
38 changes: 30 additions & 8 deletions opal/corelib/runtime.js
Original file line number Diff line number Diff line change
@@ -262,8 +262,16 @@
// Maybe there are some browsers not abiding (IE6?)
module.constructor = constructor;

// @property $$is_class Clearly mark this as a class-like
module.$$is_class = true;
if (superklass === ModuleClass) {
// @property $$is_module Clearly mark this as a module
module.$$is_module = true;
module.$$class = ModuleClass;
}
else {
// @property $$is_class Clearly mark this as a class
module.$$is_class = true;
module.$$class = ClassClass;
}

// @property $$super the superclass, doesn't get changed by module inclusions
module.$$super = superklass;
@@ -675,14 +683,28 @@
* constant assign
*/
Opal.casgn = function(base_module, name, value) {
var scope = base_module.$$scope;
function update(klass, name) {
klass.$$name = name;

if (value.$$is_class && value.$$name === nil) {
value.$$name = name;
for (name in klass.$$scope) {
var value = klass.$$scope[name];

if (value.$$name === nil && (value.$$is_class || value.$$is_module)) {
update(value, name)
}
}
}

if (value.$$is_class) {
value.$$base_module = base_module;
var scope = base_module.$$scope;

if (value.$$is_class || value.$$is_module) {
if (value.$$base_module === ObjectClass) {
value.$$base_module = base_module;
}

if (value.$$name === nil && value.$$base_module.$$name !== nil) {
update(value, name);
}
}

scope.constants.push(name);
@@ -693,7 +715,7 @@
* constant decl
*/
Opal.cdecl = function(base_scope, name, value) {
if (value.$$is_class && value.$$orig_scope == null) {
if ((value.$$is_class || value.$$is_module) && value.$$orig_scope == null) {
value.$$name = name;
value.$$orig_scope = base_scope;
base_scope.constructor[name] = value;
1 change: 0 additions & 1 deletion spec/rubyspecs
Original file line number Diff line number Diff line change
@@ -121,7 +121,6 @@ rubyspec/language
!rubyspec/language/lambda_spec
!rubyspec/language/match_spec
!rubyspec/language/method_spec
!rubyspec/language/module_spec
!rubyspec/language/next_spec
!rubyspec/language/predefined_spec
!rubyspec/language/proc_spec

0 comments on commit 158c71f

Please sign in to comment.