| Note:primitive support/customization is handled by ScriptParser class methods when Scripting framework is used. In case of using S8 Compiler framework for scripting, directives/primitives are customized by events on SmalltalkParser (see SmalltalkParser>>#directive:ws:)  | 
"PP primitive support"
(Compiler new respondsTo: #parse:onError:) ifFalse: [
    self note: 'Compiler support for scripting is missing'.
    ^self abortPage
].
(Compiler new parse: '
    <primitive: #hello>
    ^#ok
' onError: [:error| ^self note: 'NIY - ',error description ]) evaluate notNil ifTrue: [ self error: 'This should not happen' ].
"Sample implementation"
Object subclass: #Sample!
! Sample class methodsFor: #compiler !
compiler
	| custom parser |
	custom := super compiler.
	parser := SmalltalkParser new.
	parser when: #needsDirectiveParser:ws: do: [:pNumber :ws|
	    parser ,#basic: ,ws ,$# ,(PPInlineParser upTo: $>)
	    ==> [:node| "JSDirectiveNode code: 'return ' ,node last printString protected: false"
		ReturnNode new
			addNode: (ValueNode with: node last);
			yourself
		]
	].
	custom when: #needsParser do: [ parser ].
	^custom! !
! Sample methodsFor: #testing !
hello
    <basic: #hello>
    ^#ok! !
(Compiler new
  parse: ' Sample new hello '
  onError: [:error| ^self error: 'This should not happen' ])
  evaluate = #hello ifFalse: [ self error: 'Wrong result' ].!
Sample removeFromSystem!