[Vm-dev] VM Maker: SlangBrowser-dtl.12.mcz
commits at source.squeak.org
commits at source.squeak.org
Tue Mar 19 23:35:10 UTC 2013
David T. Lewis uploaded a new version of SlangBrowser to project VM Maker:
http://source.squeak.org/VMMaker/SlangBrowser-dtl.12.mcz
==================== Summary ====================
Name: SlangBrowser-dtl.12
Author: dtl
Time: 19 March 2013, 7:34:57.17 pm
UUID: 65db3519-14eb-42c7-a7f6-6eb3a215b8ba
Ancestors: SlangBrowser-dtl.11
Use ReadWriteStream on: String new in various methods.
Use VMMaker class>>buildCodeGenerator:inlined: to deobfuscate the generated code caching.
=============== Diff against SlangBrowser-dtl.11 ===============
Item was changed:
----- Method: InterpreterPlugin class>>asCString: (in category '*SlangBrowser-translation') -----
asCString: aSelector
"Answer the translated C source for a method."
| cg stream method vmm |
(Smalltalk hasClassNamed: 'VMMaker')
ifTrue: [vmm := Smalltalk at: #VMMaker]
ifFalse: [^ self notify: 'VMMaker not in this image' translated].
cg := vmm codeGenerator: #cCode forClass: self.
cg isString ifTrue:
[^ '/* ', self name, ' can not be translated. */',
String cr, '/* ', cg, ' */'].
method := cg methodNamed: aSelector.
method ifNil: [^ ObjectMemory methodNotTranslatedMessage: aSelector].
+ stream := ReadWriteStream on: String new.
- stream := ReadWriteStream on: ''.
method emitCCodeOn: stream generator: cg.
^ stream contents
!
Item was changed:
----- Method: InterpreterPlugin class>>asInlinedCString: (in category '*SlangBrowser-translation') -----
asInlinedCString: aSelector
"Answer the translated inlined C source for a method."
| cg stream method vmm |
(Smalltalk hasClassNamed: 'VMMaker')
ifTrue: [vmm := Smalltalk at: #VMMaker]
ifFalse: [^ self notify: 'VMMaker not in this image' translated].
cg := vmm codeGenerator: #inlinedCCode forClass: self.
cg isString ifTrue:
[^ '/* ', self name, ' can not be translated. */',
String cr, '/* ', cg, ' */'].
method := cg methodNamed: aSelector.
method ifNil: [^ ObjectMemory methodNotTranslatedMessage: aSelector].
+ stream := ReadWriteStream on: String new.
- stream := ReadWriteStream on: ''.
method emitCCodeOn: stream generator: cg.
^ stream contents
!
Item was changed:
----- Method: Object class>>asCString (in category '*SlangBrowser-VMMaker-Translation to C') -----
asCString
"Answer the translated C source for this class."
"Interpreter asCString"
"ObjectMemory asCString"
"FilePlugin asCString"
| vmm cg stream |
(Smalltalk hasClassNamed: 'VMMaker')
ifTrue: [vmm := Smalltalk at: #VMMaker]
ifFalse: [^ self notify: 'VMMaker not in this image'].
cg := vmm codeGenerator: #cCode forClass: self.
+ stream := ReadWriteStream on: String new.
- stream := ReadWriteStream on: ''.
cg emitCCodeOn: stream doAssertions: true.
^ stream contents
!
Item was changed:
----- Method: Object class>>asCString: (in category '*SlangBrowser-VMMaker-Translation to C') -----
asCString: aSelector
"Answer the translated C source for a method."
"Interpreter asCString: #bytecodePrimBlockCopy"
"ObjectMemory asCString: #lastPointerOf:"
| vmm cg method stream |
(Smalltalk hasClassNamed: 'VMMaker')
ifTrue: [vmm := Smalltalk at: #VMMaker]
ifFalse: [^ self notify: 'VMMaker not in this image'].
cg := vmm codeGenerator: #cCode forClass: self.
cg isString ifTrue:
[^ '/* ', self name, ' can not be translated. */',
String cr, '/* ', cg, ' */'].
method := cg methodNamed: aSelector.
method ifNil: [^ self methodNotTranslatedMessage: aSelector].
+ stream := ReadWriteStream on: String new.
- stream := ReadWriteStream on: ''.
method emitCCodeOn: stream generator: cg.
^ stream contents
!
Item was changed:
----- Method: Object class>>asInlinedCString (in category '*SlangBrowser-VMMaker-Translation to C') -----
asInlinedCString
"Answer the translated C source for this class."
"Interpreter asInlinedCString"
"ObjectMemory asInlinedCString"
"FilePlugin asInlinedCString"
| vmm cg stream |
(Smalltalk hasClassNamed: 'VMMaker')
ifTrue: [vmm := Smalltalk at: #VMMaker]
ifFalse: [^ self notify: 'VMMaker not in this image'].
cg := vmm codeGenerator: #inlinedCCode forClass: self.
+ stream := ReadWriteStream on: String new.
- stream := ReadWriteStream on: ''.
cg emitCCodeOn: stream doAssertions: true.
^ stream contents
!
Item was changed:
----- Method: Object class>>asInlinedCString: (in category '*SlangBrowser-VMMaker-Translation to C') -----
asInlinedCString: aSelector
"Answer the translated Inlined C source for a method."
"Interpreter asCString: #bytecodePrimBlockCopy"
"ObjectMemory asCString: #lastPointerOf:"
| vmm cg method stream |
(Smalltalk hasClassNamed: 'VMMaker')
ifTrue: [vmm := Smalltalk at: #VMMaker]
ifFalse: [^ self notify: 'VMMaker not in this image'].
cg := vmm codeGenerator: #inlinedCCode forClass: self.
cg isString ifTrue:
[^ '/* ', self name, ' can not be translated. */',
String cr, '/* ', cg, ' */'].
method := cg methodNamed: aSelector.
method ifNil: [^ ObjectMemory methodNotTranslatedMessage: aSelector].
+ stream := ReadWriteStream on: String new.
- stream := ReadWriteStream on: ''.
method emitCCodeOn: stream generator: cg.
^ stream contents
!
Item was added:
+ ----- Method: VMMaker class>>buildCodeGenerator:inlined: (in category '*SlangBrowser-browser support') -----
+ buildCodeGenerator: aClass inlined: doInlining
+ "Answer a new C code generator for aClass"
+
+ | cg |
+ ObjectMemory initialize; initializeConstants.
+ cg := aClass buildCodeGeneratorInlined: doInlining.
+ cg prepareMethodsInlined: doInlining doAssertions: true.
+ ^ cg
+ !
Item was changed:
----- Method: VMMaker class>>cCodeGenerator:inCache:inlined: (in category '*SlangBrowser-browser support') -----
cCodeGenerator: aClass inCache: cache inlined: doInlining
"Answer a C code generator, or a string explaining why a code generator is not available"
| cg |
cg := cache
at: aClass name asSymbol
+ ifAbsentPut: [self buildCodeGenerator: aClass inlined: doInlining].
- ifAbsentPut:
- [ObjectMemory initialize.
- ObjectMemory initializeConstants.
- cg := aClass buildCodeGeneratorInlined: doInlining.
- cg prepareMethodsInlined: doInlining doAssertions: true.
- cg].
^ cg
!
More information about the Vm-dev
mailing list