[FIX] Prolog & alternate syntax

Henrik Gedenryd Henrik.Gedenryd at lucs.lu.se
Fri Jul 14 14:01:37 UTC 2000


The changes for the alternate syntax made Bolot's Prolog/V port not work any
longer. Adding the following method to LParser enables it to parse Prolog
again.

Henrik



'From Squeak2.9alpha of 8 July 2000 [latest update: #2447] on 14 July 2000
at 2:26:55 pm'!

!LParser methodsFor: 'Alternate syntax patches' stamp: 'hg 7/14/2000 14:21'!
method: doit context: ctxt encoder: encoderToUse

    | sap blk prim messageComment methodNode |
    encoder _ encoderToUse.
    "need temporaries/statements in doits - to enable unbounds"
    temporaries _ OrderedCollection new.
    statements _ OrderedCollection new.
    "may need to change (temporarily) for doits"
    typeTable _ typeTable copy.

    "check if it's a Prolog method definition"
    ((doit not and: [hereType == #word]) and: [tokenType ==
#leftParenthesis])
        ifTrue:
            [^self prologMethod: doit context: ctxt].

    sap _ self pattern: doit inContext: ctxt.
    "sap={selector, arguments, precedence}"
    (sap at: 2) do: [:argNode | argNode isArg: true].
    temporaries _ self temporaries asOrderedCollection.

    messageComment _ currentComment.
    currentComment _ nil.
    prim _ doit ifTrue: [0] ifFalse: [self primitive].
    self statements: #() innerBlock: doit.

    parseNode statements: statements , parseNode statements.

    blk _ parseNode.
    doit ifTrue: [blk returnLast]
        ifFalse: [blk returnSelfIfNoOther].
    hereType == #doIt ifFalse: [^self expected: 'Nothing more'].
    self interactive ifTrue: [self removeUnusedTemps].

    methodNode _ self newMethodNode comment: messageComment.
    ^methodNode
        selector: (sap at: 1)
        arguments: (sap at: 2)
        precedence: (sap at: 3)
        temporaries: temporaries
        block: blk
        encoder: encoder
        primitive: prim! !






More information about the Squeak-dev mailing list