OSSubprocess icon indicating copy to clipboard operation
OSSubprocess copied to clipboard

Can't load into Pharo 11

Open edenworky opened this issue 1 year ago • 2 comments

When loading from master like it says in the README:

Metacello new
 	baseline: 'OSSubprocess';
 	repository: 'github://pharo-contributions/OSSubprocess:master/repository';
	load.

I get an error should not be called with more than 3 arguments. Here's the debugger dump:

ConstantBlockClosure class(Object)>>error:
ConstantBlockClosure class>>numArgs:literal:
OCASTTranslatorForValue(OCASTTranslator)>>visitConstantBlockNode:
OCASTTranslatorForValue(OCASTTranslator)>>visitBlockNode:
RBBlockNode>>acceptVisitor:
OCASTTranslatorForValue(RBProgramNodeVisitor)>>visitNode:
OCASTTranslatorForValue(OCASTTranslator)>>visitNode:
[:each |
		valueTranslator visitNode: each] in OCASTTranslatorForValue(OCASTTranslator)>>emitMessageNode:
OrderedCollection>>do:
OCASTTranslatorForValue(OCASTTranslator)>>emitMessageNode:
OCASTTranslatorForValue(OCASTTranslator)>>visitMessageNode:
RBMessageNode>>acceptVisitor:
OCASTTranslatorForValue(RBProgramNodeVisitor)>>visitNode:
OCASTTranslatorForValue(OCASTTranslator)>>visitNode:
OCASTTranslatorForValue>>visitSequenceNode:
RBSequenceNode>>acceptVisitor:
OCASTTranslatorForValue(RBProgramNodeVisitor)>>visitNode:
OCASTTranslatorForValue(OCASTTranslator)>>visitNode:
OCASTTranslator>>translateFullBlock:
OCASTTranslatorForValue(OCASTTranslator)>>visitBlockNode:
RBBlockNode>>acceptVisitor:
OCASTTranslatorForValue(RBProgramNodeVisitor)>>visitNode:
OCASTTranslatorForValue(OCASTTranslator)>>visitNode:
[:each |
		valueTranslator visitNode: each] in OCASTTranslatorForEffect(OCASTTranslator)>>emitMessageNode:
OrderedCollection>>do:
OCASTTranslatorForEffect(OCASTTranslator)>>emitMessageNode:
OCASTTranslatorForEffect>>emitMessageNode:
OCASTTranslatorForEffect(OCASTTranslator)>>visitMessageNode:
RBMessageNode>>acceptVisitor:
OCASTTranslatorForEffect(RBProgramNodeVisitor)>>visitNode:
OCASTTranslatorForEffect(OCASTTranslator)>>visitNode:
[:each | self visitNode: each] in OCASTTranslatorForEffect>>visitSequenceNode:
OrderedCollection>>do:
OCASTTranslatorForEffect>>visitSequenceNode:
RBSequenceNode>>acceptVisitor:
OCASTTranslatorForEffect(RBProgramNodeVisitor)>>visitNode:
OCASTTranslatorForEffect(OCASTTranslator)>>visitNode:
OCASTTranslatorForEffect(OCASTTranslator)>>visitInlinedBlockNode:
OCASTTranslatorForEffect>>emitIfTrue:
OCASTTranslatorForEffect(OCASTTranslator)>>visitMessageNode:
RBMessageNode>>acceptVisitor:
OCASTTranslatorForEffect(RBProgramNodeVisitor)>>visitNode:
OCASTTranslatorForEffect(OCASTTranslator)>>visitNode:
[:each | self visitNode: each] in OCASTTranslatorForEffect>>visitSequenceNode:
OrderedCollection>>do:
OCASTTranslatorForEffect>>visitSequenceNode:
RBSequenceNode>>acceptVisitor:
OCASTTranslatorForEffect(RBProgramNodeVisitor)>>visitNode:
OCASTTranslatorForEffect(OCASTTranslator)>>visitNode:
OCASTTranslator>>visitMethodNode:
RBMethodNode>>acceptVisitor:
OCASTTranslator(RBProgramNodeVisitor)>>visitNode:
OCASTTranslator>>visitNode:
RBMethodNode>>generateIR
RBMethodNode>>generate:
RBMethodNode>>generateMethod
OpalCompiler>>compileMethodFromAST
OCMethodSemanticScope>>compileMethodFromASTBy:
[
		self parse.
		self semanticScope compileMethodFromASTBy: self
	] in OpalCompiler>>compile
FullBlockClosure(BlockClosure)>>on:do:
OpalCompiler>>compile
MethodAddition>>createCompiledMethod
MCMethodDefinition>>addMethodAdditionTo:
[ :each | each addMethodAdditionTo: methodAdditions ] in MCPackageLoader>>basicLoadDefinitions
[ :each | | newLabel |
			"Special handling for first and last element"
			(count = 0 or: [ count + 1 = size or: [(Time millisecondsSince: lastUpdate) >= msecs]]) 
				ifTrue: [ 
					bar current: count.
					oldLabel = (newLabel := (labelBlock cull: each) ifNil: [oldLabel]) 
						ifFalse: [
							bar label: newLabel.
							oldLabel := newLabel ].
				lastUpdate := Time millisecondClockValue ].
			aBlock value: each.
			count := count + 1 ] in [:bar |
		labelBlock := aStringOrBlock isString
			ifTrue: [
				bar label: aStringOrBlock.
				[ :dummyItem | aStringOrBlock] ]
			ifFalse: [ aStringOrBlock ].

		self do: [ :each | | newLabel |
			"Special handling for first and last element"
			(count = 0 or: [ count + 1 = size or: [(Time millisecondsSince: lastUpdate) >= msecs]]) 
				ifTrue: [ 
					bar current: count.
					oldLabel = (newLabel := (labelBlock cull: each) ifNil: [oldLabel]) 
						ifFalse: [
							bar label: newLabel.
							oldLabel := newLabel ].
				lastUpdate := Time millisecondClockValue ].
			aBlock value: each.
			count := count + 1 ] ] in OrderedCollection(Collection)>>do:displayingProgress:every:
OrderedCollection>>do:
[:bar |
		labelBlock := aStringOrBlock isString
			ifTrue: [
				bar label: aStringOrBlock.
				[ :dummyItem | aStringOrBlock] ]
			ifFalse: [ aStringOrBlock ].

		self do: [ :each | | newLabel |
			"Special handling for first and last element"
			(count = 0 or: [ count + 1 = size or: [(Time millisecondsSince: lastUpdate) >= msecs]]) 
				ifTrue: [ 
					bar current: count.
					oldLabel = (newLabel := (labelBlock cull: each) ifNil: [oldLabel]) 
						ifFalse: [
							bar label: newLabel.
							oldLabel := newLabel ].
				lastUpdate := Time millisecondClockValue ].
			aBlock value: each.
			count := count + 1 ] ] in OrderedCollection(Collection)>>do:displayingProgress:every:
FullBlockClosure(BlockClosure)>>cull:
[ ^ block cull: self ] in [ self prepareForRunning.
	  CurrentJob value: self during: [ ^ block cull: self ] ] in Job>>run
[ activeProcess
			psValueAt: index
			put: anObject.
		aBlock value ] in CurrentJob(DynamicVariable)>>value:during:
FullBlockClosure(BlockClosure)>>ensure:
CurrentJob(DynamicVariable)>>value:during:
CurrentJob class(DynamicVariable class)>>value:during:
[ self prepareForRunning.
	  CurrentJob value: self during: [ ^ block cull: self ] ] in Job>>run
FullBlockClosure(BlockClosure)>>ensure:
Job>>run
MorphicUIManager(UIManager)>>displayProgress:from:to:during:
ByteString(String)>>displayProgressFrom:to:during:
OrderedCollection(Collection)>>do:displayingProgress:every:
OrderedCollection(Collection)>>do:displayingProgress:
MCPackageLoader>>basicLoadDefinitions
[self basicLoadDefinitions] in MCPackageLoader>>basicLoad
[ aBlock value ] in SourceFileArray>>deferFlushDuring:
FullBlockClosure(BlockClosure)>>ensure:
SourceFileArray>>deferFlushDuring:
MCPackageLoader>>basicLoad
[self basicLoad] in MCPackageLoader>>loadWithNameLike:
FullBlockClosure(BlockClosure)>>ensure:
MCPackageLoader>>useChangeSetNamed:during:
MCPackageLoader>>useNewChangeSetNamedLike:during:
MCPackageLoader>>loadWithNameLike:
MCVersionLoader>>basicLoadWithNameLike:
[ self basicLoadWithNameLike: aString ] in MCVersionLoader>>loadWithNameLike:
[ returnValue := aBlock value ] in [ 
		[ returnValue := aBlock value ] ensure: [ 
			self announceLoadStop: aString ] ] in MCVersionLoader>>announceLoad:do:
FullBlockClosure(BlockClosure)>>ensure:
[ 
		[ returnValue := aBlock value ] ensure: [ 
			self announceLoadStop: aString ] ] in MCVersionLoader>>announceLoad:do:
FullBlockClosure(BlockClosure)>>ensure:
MCVersionLoader>>announceLoad:do:
MCVersionLoader>>loadWithNameLike:
[ self ensurePackage: version package.
		  self loadWithNameLike: version info name ] in [   
		| version |
		version := versions first. 
		[ self ensurePackage: version package.
		  self loadWithNameLike: version info name ] asJob
				title: 'Loading ', version info name asString;
				run ] in MCVersionLoader>>load

edenworky avatar Nov 22 '23 19:11 edenworky

The same happens when installing version 1.4.0 directly:

Metacello new
 	baseline: 'OSSubprocess';
 	repository: 'github://pharo-contributions/OSSubprocess:v1.4.0/repository';
	load.

edenworky avatar Nov 22 '23 19:11 edenworky

in OCASTTranslator>>#visitBlockNode: we check for "aBlockNode numArgs < 4 "

(self compilationContext optionConstantBlockClosure and: [aBlockNode isConstant and: [ aBlockNode numArgs < 4  ]]) ifTrue: [ ^ self visitConstantBlockNode: aBlockNode].

this means that #visitConstantBlockNode: can not be called with more than 3 arguments.

Can you check the the method OCASTTranslator>>#visitBlockNode: in your Pharo?

(I tried just now in a fresh download of Pharo11, and it loads without error)

MarcusDenker avatar Dec 16 '23 09:12 MarcusDenker