compiler/tests/PPCTokenGuardTest.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Tue, 16 Jun 2015 06:45:26 +0100
changeset 489 0ca7a70db0f5
parent 464 f6d77fee9811
child 528 ebfddc82b8bb
permissions -rw-r--r--
Fix in codegen for inlined sequence nodes. For inlined sequence nodes, generate nested ifs rather than sequential code which does not work when inlined. The reason is that #codeReturn: in inline generates instvar assignment, not method return, so in sequential code the next child of a sequence will be probed even if previous failed. If that happends, the whole sequence fail and therefore we must generate nested ifs to correctly handle this w.r.t. inlining.

"{ Package: 'stx:goodies/petitparser/compiler/tests' }"

"{ NameSpace: Smalltalk }"

TestCase subclass:#PPCTokenGuardTest
	instanceVariableNames:'guard compiler node tokenNode'
	classVariableNames:''
	poolDictionaries:''
	category:'PetitCompiler-Tests-Guards'
!

!PPCTokenGuardTest methodsFor:'as yet unclassified'!

setUp
    super setUp.
    compiler := PPCMockCompiler new.
!

testMakesSense
    tokenNode := PPCTokenNode new
        child: 'foo' asParser asCompilerTree.
    node := PPCPlusNode new
        child: tokenNode;
        yourself.	
    guard := PPCTokenGuard on: node.
    
    self assert: guard makesSense.
!

testMakesSense2
    node := PPCPlusNode new
        child: ('foo' asParser asCompilerTree);
        yourself.	
    guard := PPCTokenGuard on: node.
    
    self assert: guard makesSense not.
! !