diff --git a/src/packages/Maglev.package/Metaclass3.extension/instance/_rubyInspect..st b/src/packages/Maglev.package/Metaclass3.extension/instance/_rubyInspect..st index 2a94607cd..ee4ccf582 100644 --- a/src/packages/Maglev.package/Metaclass3.extension/instance/_rubyInspect..st +++ b/src/packages/Maglev.package/Metaclass3.extension/instance/_rubyInspect..st @@ -1,17 +1,11 @@ *maglev-runtime _rubyInspect: envId "called from smalltalk code" - self isMeta ifTrue:[ | res | - res := '# . - ^ res - ] ifFalse:[ | name | - name := self rubyFullName: envId . + (self isMeta or: [self isRubySingletonClass or: [self isMetaModule]]) + ifTrue: [^ self _rubyInspectSingletonClass] + ifFalse:[ |name| + name := self rubyFullName: envId . + (name isNil or: [name size == 0]) ifTrue: [ + ^ '#' ]. + ^ name] - (name isNil or: [name size == 0]) ifTrue: [ - self isMeta ifTrue: [ ^ (destClass rubyFullName: envId), ':Class' ]. - ^ '#' ]. - - ^ name - ] diff --git a/src/packages/Maglev.package/Metaclass3.extension/instance/_rubyInspectSingletonClass.st b/src/packages/Maglev.package/Metaclass3.extension/instance/_rubyInspectSingletonClass.st new file mode 100644 index 000000000..a62496bd1 --- /dev/null +++ b/src/packages/Maglev.package/Metaclass3.extension/instance/_rubyInspectSingletonClass.st @@ -0,0 +1,9 @@ +*maglev-runtime +_rubyInspectSingletonClass + |str| + str := '#'. + ^ str diff --git a/src/packages/Maglev.package/Metaclass3.extension/instance/destClass..st b/src/packages/Maglev.package/Metaclass3.extension/instance/destClass..st new file mode 100644 index 000000000..863ce958b --- /dev/null +++ b/src/packages/Maglev.package/Metaclass3.extension/instance/destClass..st @@ -0,0 +1,4 @@ +*maglev-runtime +destClass: aClass + "Called after Ruby singleton class creation." + destClass := aClass diff --git a/src/packages/Maglev.package/Metaclass3.extension/instance/destClass.st b/src/packages/Maglev.package/Metaclass3.extension/instance/destClass.st new file mode 100644 index 000000000..10f253315 --- /dev/null +++ b/src/packages/Maglev.package/Metaclass3.extension/instance/destClass.st @@ -0,0 +1,4 @@ +*maglev-runtime +destClass + ^ destClass + diff --git a/src/packages/Maglev.package/Metaclass3.extension/instance/rubyMethods.protection..st b/src/packages/Maglev.package/Metaclass3.extension/instance/rubyMethods.protection..st index 5df59d344..2e7090f2d 100644 --- a/src/packages/Maglev.package/Metaclass3.extension/instance/rubyMethods.protection..st +++ b/src/packages/Maglev.package/Metaclass3.extension/instance/rubyMethods.protection..st @@ -1,6 +1,4 @@ *maglev-runtime rubyMethods: includeSuper protection: protInt "a ruby primitive" - self isMeta ifTrue:[ ^ IdentitySet new ]. - ^ self class rubyMethods: includeSuper protection: protInt env: 1"__callerEnvId" - + ^ self virtualClass rubyMethods: includeSuper protection: protInt env: 1"__callerEnvId" diff --git a/src/packages/Maglev.package/Metaclass3.extension/methodProperties.json b/src/packages/Maglev.package/Metaclass3.extension/methodProperties.json index 9f4be8811..53e5b7d37 100644 --- a/src/packages/Maglev.package/Metaclass3.extension/methodProperties.json +++ b/src/packages/Maglev.package/Metaclass3.extension/methodProperties.json @@ -8,10 +8,13 @@ "_includeRubyModule:" : "DataCurator 10/02/2012 14:30", "_rubyInspect" : "DataCurator 10/02/2012 14:30", "_rubyInspect:" : "DataCurator 10/02/2012 14:30", + "_rubyInspectSingletonClass" : "DataCurator 03/28/2013 18:11", "addModuleMethodIfEnabled:env:" : "DataCurator 10/02/2012 14:30", "allModuleMethodsEnabled:" : "DataCurator 10/02/2012 14:30", "classForConstantLookup:forModuleEval:" : "DataCurator 10/02/2012 14:30", "clsMethodDefnTarget" : "DataCurator 10/02/2012 14:30", + "destClass" : "DataCurator 04/03/2013 18:28", + "destClass:" : "DataCurator 03/28/2013 18:09", "is_aModule" : "DataCurator 10/02/2012 14:30", "methodDefined:rubyEnv:" : "DataCurator 10/02/2012 14:30", "moduleIncludeSelf:" : "DataCurator 10/02/2012 14:30", diff --git a/src/packages/Maglev.package/Module.extension/instance/_rubyInspect.st b/src/packages/Maglev.package/Module.extension/instance/_rubyInspect.st index 4a61686fe..53a897013 100644 --- a/src/packages/Maglev.package/Module.extension/instance/_rubyInspect.st +++ b/src/packages/Maglev.package/Module.extension/instance/_rubyInspect.st @@ -2,10 +2,10 @@ _rubyInspect "a ruby primitive" | str | + self isMetaModule ifTrue: [^ self _rubyInspectSingletonClass]. str := self rubyFullName: 1"__callerEnvId" . str size ~~ 0 ifTrue:[ ^ str ]. str := '# . ^ str - diff --git a/src/packages/Maglev.package/Module.extension/instance/_rubyInspectSingletonClass.st b/src/packages/Maglev.package/Module.extension/instance/_rubyInspectSingletonClass.st new file mode 100644 index 000000000..8a3a8bf7e --- /dev/null +++ b/src/packages/Maglev.package/Module.extension/instance/_rubyInspectSingletonClass.st @@ -0,0 +1,7 @@ +*maglev-runtime +_rubyInspectSingletonClass + |str| + str := '#'. + ^ str diff --git a/src/packages/Maglev.package/Module.extension/instance/moduleMethodsModuleOrNil.st b/src/packages/Maglev.package/Module.extension/instance/moduleMethodsModuleOrNil.st index ec2cc30eb..2db8d9b29 100644 --- a/src/packages/Maglev.package/Module.extension/instance/moduleMethodsModuleOrNil.st +++ b/src/packages/Maglev.package/Module.extension/instance/moduleMethodsModuleOrNil.st @@ -4,7 +4,6 @@ moduleMethodsModuleOrNil for a Module " | meta | meta := self virtualClass . - meta == Module ifTrue: [ ^ meta ]. - meta isRubyModuleFunctions ifTrue:[ ^ meta ]. + meta == Module ifTrue: [meta := self _singletonClassFor: 1. ^ meta]. + meta isRubyModuleFunctions ifTrue: [^ meta]. ^ nil - diff --git a/src/packages/Maglev.package/Module.extension/instance/primaryCopy.st b/src/packages/Maglev.package/Module.extension/instance/primaryCopy.st new file mode 100644 index 000000000..52d29bcb9 --- /dev/null +++ b/src/packages/Maglev.package/Module.extension/instance/primaryCopy.st @@ -0,0 +1,3 @@ +*maglev-runtime +primaryCopy + ^ primaryCopy diff --git a/src/packages/Maglev.package/Module.extension/methodProperties.json b/src/packages/Maglev.package/Module.extension/methodProperties.json index 5ab3eeb79..fa874829f 100644 --- a/src/packages/Maglev.package/Module.extension/methodProperties.json +++ b/src/packages/Maglev.package/Module.extension/methodProperties.json @@ -24,6 +24,7 @@ "_rubyIncludeModule:envId:" : "DataCurator 10/02/2012 14:30", "_rubyInspect" : "DataCurator 10/02/2012 14:30", "_rubyInspect:" : "DataCurator 10/02/2012 14:30", + "_rubyInspectSingletonClass" : "DataCurator 04/02/2013 14:19", "_rubyModuleIncludeSelfEnv:" : "", "_setPersistable" : "DataCurator 10/02/2012 14:30", "_setTopNameSpace:persistent:env:" : "DataCurator 10/02/2012 14:30", @@ -64,6 +65,7 @@ "persistentNameSpace:put:" : "DataCurator 10/02/2012 14:30", "persistentRubySuperclass:" : "DataCurator 10/02/2012 14:30", "persistentRubySuperclass:put:" : "DataCurator 10/02/2012 14:30", + "primaryCopy" : "DataCurator 04/02/2013 14:20", "removeConst:env:" : "DataCurator 10/02/2012 14:30", "removeRubySelector:env:" : "DataCurator 10/02/2012 14:30", "rubyAncestors" : "DataCurator 10/02/2012 14:30", diff --git a/src/packages/Maglev.package/Object.extension/instance/_singletonClass..st b/src/packages/Maglev.package/Object.extension/instance/_singletonClass..st index a88ca13b3..595d8bc93 100644 --- a/src/packages/Maglev.package/Object.extension/instance/_singletonClass..st +++ b/src/packages/Maglev.package/Object.extension/instance/_singletonClass..st @@ -1,14 +1,10 @@ *maglev-runtime -_singletonClass: envId +_singletonClass: envId | cls | - self class == Module ifTrue:[ "a class< -committedOk _validateClass: Boolean . +"committedOk _validateClass: Boolean . envId _validateClass: SmallInteger . -(envId < 1 or:[ envId > 255]) ifTrue:[ OutOfRange signal:'invalid envId']. +(envId < 1 or:[ envId > 255]) ifTrue:[ OutOfRange signal:'invalid envId']." self _primitiveFailed: #_addRubySingletonClass:envId: - args: { committedOk . envId } + args: { singleton . singletonSuperclass } %