ДИНАМИЧЕСКАЯ КОМПИЛЯЦИЯ, ЗАГРУЗКА И ВЫГРУЗКА |
CAPER обладает средствами динамической компиляции файлов исходных текстов
программ, средствами загрузки объектных программных модулей и их удаления. CompileFile( <стиль>, < указание компилируемого текста >, <имя блока> [, <признак замещения> [, [<имя файла сохранения>] [ , [<ключи>] ] ] ]) - в отличие от предыдущей версии, в которой (см. []) был реализован оператор COMPILE [BLOCK] <указание компилируемого текста> [ IN <имя блока2> ] <указание компилируемого текста> - либо имя файла с возможным указанием пути к нему, либо указание компилируемой строки. Что именно должно быть откомпилировано
(как понимать заданную строку: как файл или как строку исходного текста) определяется параметром <стиль>: если стиль равен 0, то компилируется файл, иначе указываемая строка. Данной функцией инициируется компиляция файла, и размещение откомпилированного кода в качестве модуля и блока с указанным именем. LoadModule( <имя файла> , <имя блока> [, <признак замещения>] ) осуществляет загрузку и привязку объектных модулей CAPER. Второй параметр определяет имя блока, которым является загруженный модуль. В принципе, один и тот же модуль может быть загружен многократно при условии, что он не содержит блоков. В противном случае, в момент загрузки машиной CAPER будет выработано аварийное программное прерывание - ошибка Загрузчика, связанное с дублированием имен блоков, и загрузка модуля не будет завершена. Функцией DeleteBlock( <имя блока> ) осуществляется удаление любого блока, в том числе и блока, образованного загруженным модулем. import <указание файла> as <описание блока> загружает модуль с внутренним <описание блока>. Один и тот же модуль может быть загружен многократно под разными именами. <описание блока> - либо имя блока, либо, если задан прототип, то после ключевого слова as может указан прототип блока ‘<’ as <имя блока прототипа> ’>’ <имя блока>. Пример: import d:\Caper_Examples\capPanels.obc as < as LOADED_MODULE > Panel1 Далее вызов Panel1 должен осуществляться согласно описанию в прототипе: build private <int> [] arrOfInt := Panel1( -10, 20 ), => arrOfInt2 := Panel1( -11, 30 ) Оператор remove <имя блока> выгружает загруженный ранее модуль. remove me средство самовыгружения модуля: выгружается модуль, в теле которого выполнен данный оператор. Пример: Продолжая предыдущий пример CAPER позволяет компилировать и исполнять отдельные команды: CompileCommand ( <строка> [, <элемента массива> ] ) - функция, компилирующая строку. Если задан элемент массива, то он указывает область памяти, в которую будут размещены результаты компиляции. Возвращаемый тип значения - указатель команды. Если <элемента массива> не указан, то будет выделен собственный участок памяти. В этом случае его необходимо будет освободить командой DeleteCommand(<указатель команды>). Функция возвращает указатель на начало откомпилированных команд <указатель команды> и размер в байтах, занимаемых откомпилированными командами, который может быть получен с помощью IntRight. DeleteCommand ( <указатель команды> ) – освобождает память, выделенную под команды динамически откомпилированной строки. |