equal
deleted
inserted
replaced
7 classVariableNames:'' |
7 classVariableNames:'' |
8 poolDictionaries:'' |
8 poolDictionaries:'' |
9 category:'PetitCompiler-Nodes' |
9 category:'PetitCompiler-Nodes' |
10 ! |
10 ! |
11 |
11 |
12 !PPCPredicateNode methodsFor:'as yet unclassified'! |
12 !PPCPredicateNode methodsFor:'visiting'! |
13 |
13 |
14 bodyOfPredicate: compiler |
14 accept: visitor |
15 | id | |
15 ^ visitor visitPredicateNode: self |
16 id := (compiler idFor: predicate prefixed: #predicate). |
|
17 compiler addConstant: predicate as: id. |
|
18 |
|
19 compiler addOnLine: '(context atEnd not and: [ ', id , ' value: context uncheckedPeek])'. |
|
20 compiler indent. |
|
21 compiler add: 'ifFalse: [ self error: ''predicate not found'' ]'. |
|
22 compiler add: 'ifTrue: [ context next ].'. |
|
23 compiler dedent. |
|
24 ! |
|
25 |
|
26 rewrite: changeStatus |
|
27 | charSet | |
|
28 |
|
29 (predicate class == PPCharSetPredicate) ifTrue: [ |
|
30 charSet := predicate. |
|
31 ]. |
|
32 charSet := PPCharSetPredicate on: predicate. |
|
33 |
|
34 (charSet equals: (PPCharSetPredicate on: [ :char | char isLetter])) ifTrue: [ |
|
35 changeStatus change. |
|
36 ^ PPCMessagePredicateNode new |
|
37 name: name; |
|
38 message: #isLetter; |
|
39 predicate: predicate; |
|
40 yourself |
|
41 ]. |
|
42 |
|
43 (charSet equals: (PPCharSetPredicate on: [ :char | char isDigit])) ifTrue: [ |
|
44 changeStatus change. |
|
45 ^ PPCMessagePredicateNode new |
|
46 name: name; |
|
47 message: #isDigit; |
|
48 predicate: predicate; |
|
49 yourself |
|
50 ]. |
|
51 |
|
52 (charSet equals: (PPCharSetPredicate on: [ :char | char isAlphaNumeric])) ifTrue: [ |
|
53 changeStatus change. |
|
54 ^ PPCMessagePredicateNode new |
|
55 name: name; |
|
56 message: #isAlphaNumeric; |
|
57 predicate: predicate; |
|
58 yourself |
|
59 ]. |
|
60 |
|
61 (charSet equals: (PPCharSetPredicate on: [ :char | char isSeparator])) ifTrue: [ |
|
62 changeStatus change. |
|
63 ^ PPCMessagePredicateNode new |
|
64 name: name; |
|
65 message: #isSeparator; |
|
66 predicate: predicate; |
|
67 yourself |
|
68 ]. |
|
69 |
|
70 |
|
71 (charSet equals: (PPCharSetPredicate on: [ :char | true ])) ifTrue: [ |
|
72 changeStatus change. |
|
73 ^ PPCAnyNode new |
|
74 name: name; |
|
75 yourself |
|
76 ]. |
|
77 |
|
78 changeStatus change. |
|
79 ^ PPCCharSetPredicateNode new |
|
80 name: name; |
|
81 predicate: charSet; |
|
82 yourself. |
|
83 ! ! |
16 ! ! |
84 |
17 |