A new version of Tests was added to project The Inbox:
http://source.squeak.org/inbox/Tests-ct.446.mcz ==================== Summary ==================== Name: Tests-ct.446 Author: ct Time: 14 November 2020, 8:17:24.348394 pm UUID: 18604631-54e6-7f43-ba21-7d943f3f1465 Ancestors: Tests-mt.442 Complements Compiler-ct.453 and Compiler-ct.452 (both in inbox at this moment). =============== Diff against Tests-mt.442 =============== Item was changed: ----- Method: ClosureCompilerTest>>testDecompiledDoitMethodTempNames (in category 'tests') ----- testDecompiledDoitMethodTempNames "self new testDecompiledDoitMethodTempNames" "Test that a decompiled doit that has been copied with temps decompiles to the input" | removeComments | removeComments := [:n| n comment: nil]. self closureCases do: [:source| | mns m mps mnps | "Need to compare an ungenerated tree with the generated method's methodNode because generating code alters the tree when it introduces remote temp vectors." mns := #(first last) collect: [:ignored| source first isLetter + ifTrue: [self class newCompiler compile: source in: self class] + ifFalse: [self class newCompiler compileNoPattern: source in: self class]]. - ifTrue: - [self class newCompiler - compile: source - in: self class - notifying: nil - ifFail: [self error: 'compilation error']] - ifFalse: - [self class newCompiler - compileNoPattern: source - in: self class - notifying: nil - ifFail: [self error: 'compilation error']]]. m := (mns last generateWithTempNames). removeComments value: mns first. mns first nodesDo: removeComments. self assert: (mnps := mns first printString) = (mps := m methodNode printString)]! Item was changed: ----- Method: ClosureCompilerTest>>testMethodAndNodeTempNames (in category 'tests') ----- testMethodAndNodeTempNames "self new testMethodAndNodeTempNames" "Test that BytecodeAgnosticMethodNode>>blockExtentsToTempRefs answers the same structure as CompiledMethod>>blockExtentsToTempRefs when the method has been copied with the appropriate temps. This tests whether doit methods are debuggable since they carry their own temps." self closureCases do: [:source| | mn om m mbe obe | mn := source first isLetter + ifTrue: [self class newCompiler compile: source in: self class] + ifFalse: [self class newCompiler compileNoPattern: source in: self class]. - ifTrue: - [self class newCompiler - compile: source - in: self class - notifying: nil - ifFail: [self error: 'compilation error']] - ifFalse: - [self class newCompiler - compileNoPattern: source - in: self class - notifying: nil - ifFail: [self error: 'compilation error']]. m := (om := mn generate) copyWithTempsFromMethodNode: mn. self assert: m holdsTempNames. self assert: m endPC = om endPC. mbe := m blockExtentsToTempsMap. obe := mn blockExtentsToTempsMap. self assert: mbe keys asSet = obe keys asSet. (mbe keys intersection: obe keys) do: [:interval| self assert: (mbe at: interval) = (obe at: interval)]]! Item was changed: ----- Method: Decompiler class>>recompileAllTest (in category '*Tests') ----- recompileAllTest "[Decompiler recompileAllTest]" "decompile every method and compile it back; if the decompiler is correct then the system should keep running. :)" SystemNavigation default allBehaviorsDo: [ :behavior | UIManager default informUser: (behavior printString) during: [ behavior selectors do: [ :sel | | decompiled ast compiled | decompiled := Decompiler new decompile: sel in: behavior. + ast := Compiler new compile: decompiled in: behavior. - ast := Compiler new compile: decompiled in: behavior notifying: nil ifFail: [ self error: 'failed' ]. compiled := ast generate: (behavior compiledMethodAt: sel) trailer. behavior addSelector: sel withMethod: compiled. ] ] ]! Item was changed: ----- Method: DecompilerTests>>checkDecompileMethod: (in category 'utilities') ----- checkDecompileMethod: oldMethod | cls selector oldMethodNode methodNode newMethod oldCodeString newCodeString | cls := oldMethod methodClass. selector := oldMethod selector. oldMethodNode := (cls decompilerClass new withTempNames: oldMethod methodNode schematicTempNamesString) decompile: selector in: cls method: oldMethod methodForDecompile. [oldMethodNode properties includesKey: #warning] whileTrue: [oldMethodNode properties removeKey: #warning]. oldCodeString := oldMethodNode decompileString. methodNode := [[| compiler | compiler := cls newCompiler. compiler parser encoderClass: oldMethod encoderClass. + compiler compile: oldCodeString in: cls] - compiler - compile: oldCodeString - in: cls - notifying: nil - ifFail: []] on: SyntaxErrorNotification do: [:ex| ex errorMessage = 'Cannot store into' ifTrue: [ex return: #badStore]. ex pass]] on: OutOfScopeNotification do: [:ex| ex return: #badStore]. "Ignore cannot store into block arg errors; they're not our issue." methodNode ~~ #badStore ifTrue: [newMethod := methodNode generate. newCodeString := ((cls decompilerClass new withTempNames: methodNode schematicTempNamesString) decompile: selector in: cls method: newMethod methodForDecompile) decompileString. "(StringHolder new textContents: (TextDiffBuilder buildDisplayPatchFrom: oldCodeString to: newCodeString)) openLabel: 'Decompilation Differences for ', cls name,'>>',selector" "(StringHolder new textContents: (TextDiffBuilder buildDisplayPatchFrom: oldMethod abstractSymbolic to: newMethod abstractSymbolic)) openLabel: 'Bytecode Differences for ', cls name,'>>',selector" self assert: (oldCodeString = newCodeString or: [(Scanner new scanTokens: oldCodeString) = (Scanner new scanTokens: newCodeString)]) description: cls name asString, ' ', selector asString resumable: true]! |
Free forum by Nabble | Edit this page |