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' ]