diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 00000000..863943d2 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,34 @@ +name: smalltalkCI + +on: [push, pull_request] + +jobs: + build: + runs-on: ubuntu-16.04 + strategy: + fail-fast: false + matrix: + smalltalk: [ Pharo64-8.0, Pharo64-7.0, Pharo-6.1, Pharo-5.0, GemStone64-3.5.4, GemStone64-3.4.5, GemStone64-3.3.9, GemStone64-3.2.17, GemStone64-3.1.0.6, Squeak64-5.3, Squeak64-5.2, Squeak64-5.1 ] + experimental: [ false ] + include: + - smalltalk: Pharo64-9.0 + experimental: true + - smalltalk: Squeak64-trunk + experimental: true + continue-on-error: ${{ matrix.experimental }} + name: ${{ matrix.smalltalk }} + steps: + - uses: actions/checkout@v2 + - uses: hpi-swa/setup-smalltalkCI@v1 + with: + smalltalk-version: ${{ matrix.smalltalk }} + - name: Fix missing OS prerequisites for GemStone builds + run: | + git clone https://github.com/GsDevKit/GsDevKit_home.git + ./GsDevKit_home/bin/utils/installOsPrereqs + continue-on-error: true + if: startsWith(matrix.smalltalk,'GemStone') + - name: Run tests + run: smalltalkci -s ${{ matrix.smalltalk }} + shell: bash + timeout-minutes: 10 \ No newline at end of file diff --git a/repository/Grease-GemStone-Core.package/GRGemStonePlatform.class/instance/thisContext.st b/repository/Grease-GemStone-Core.package/GRGemStonePlatform.class/instance/thisContext.st index 44dc34ca..50e2a5b0 100644 --- a/repository/Grease-GemStone-Core.package/GRGemStonePlatform.class/instance/thisContext.st +++ b/repository/Grease-GemStone-Core.package/GRGemStonePlatform.class/instance/thisContext.st @@ -1,3 +1,3 @@ *grease-gemstone-core thisContext - ^ (GsContext fromLevel: 1) sender sender \ No newline at end of file + ^ GsContext fromLevel: 3 \ No newline at end of file diff --git a/repository/Grease-GemStone-Core.package/GsContext.class/instance/namedTempAt..st b/repository/Grease-GemStone-Core.package/GsContext.class/instance/namedTempAt..st new file mode 100644 index 00000000..4ca86721 --- /dev/null +++ b/repository/Grease-GemStone-Core.package/GsContext.class/instance/namedTempAt..st @@ -0,0 +1,3 @@ +accessing +namedTempAt: index + ^ self tempAt: index \ No newline at end of file diff --git a/repository/Grease-Tests-Core.package/GRPlatformTest.class/instance/returnSender.st b/repository/Grease-Tests-Core.package/GRPlatformTest.class/instance/returnSender.st new file mode 100644 index 00000000..1b25f567 --- /dev/null +++ b/repository/Grease-Tests-Core.package/GRPlatformTest.class/instance/returnSender.st @@ -0,0 +1,3 @@ +private +returnSender + ^ GRPlatform current thisContext sender \ No newline at end of file diff --git a/repository/Grease-Tests-Core.package/GRPlatformTest.class/instance/testThisContext.st b/repository/Grease-Tests-Core.package/GRPlatformTest.class/instance/testThisContext.st index 3cd4ceb1..fd515dd9 100644 --- a/repository/Grease-Tests-Core.package/GRPlatformTest.class/instance/testThisContext.st +++ b/repository/Grease-Tests-Core.package/GRPlatformTest.class/instance/testThisContext.st @@ -1,9 +1,18 @@ -tests-processes +tests testThisContext - | methodContext | - methodContext := self platform thisContext. - [ - | blockContext | - blockContext := self platform thisContext. - self assert: blockContext sender = methodContext ] - value \ No newline at end of file + | methodContext block | + methodContext := self platform thisContext. + block := [ | blockContext | + blockContext := self platform thisContext. + self assert: blockContext sender = methodContext. + "The following is a difference between Gemstone and Pharo... " + (Smalltalk includesKey: #GRGemStonePlatform) + ifTrue: [ self assert: blockContext receiver = block ] + ifFalse: [ + self assert: blockContext receiver = self. + self assert: (blockContext namedTempAt: (blockContext tempNames indexOf: #blockContext)) == blockContext ]. + self assert: (blockContext namedTempAt: (blockContext tempNames indexOf: #methodContext)) == methodContext ]. + block value. + self assert: self returnSender = methodContext. + self assert: methodContext receiver = self. + self assert: (self platform thisContext namedTempAt: (self platform thisContext tempNames indexOf: #block)) == block \ No newline at end of file