| 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:)  | 
"testing primitive support"
(ScriptParser new parse: '
    <primitive: #hello>
    ^#ok
' onError: [:error| ^self note: 'NIY - ',error description ]) evaluate notNil ifTrue: [ self error: 'This should not happen' ]
"Implement basic primitive support (for testing)"
ScriptParser defaultPrimitiveHandler: [:parser :context :type|
    self note: 'Missing primitive support for ',type.
    nil
].
ScriptParser primitiveHandlers at: #basic: put: [:parser :context :type|
    | literal |
    literal := parser nextStringConstant: context.
    literal isNil ifTrue: [ literal := parser nextSymbolConstant: context. ].
    literal isNil
    ifTrue: [ parser expected: 'String constant' ]
    ifFalse: [ PrimitiveNode doing: [:ctx :node | node exitWith: (literal evaluateIn: ctx) ] ]
] 
"testing basic primitive support"
(ScriptParser new parse: '
    < basic: #hello >
    ^#ok
' onError: [:error| ^self note: 'NIY - ',error description ]) evaluate = #hello ifFalse: [ self error: 'Wrong result' ]