1536 lines
37 KiB
Text
Generated
1536 lines
37 KiB
Text
Generated
'(* LIFO Storage Library\n *\n * @file LIFO.mod\n * LIFO implementation\n *\n * Universal Dynamic Stack\n *\n * Author: Benjamin Kowarsch\n *\n * Copyright (C) 2009 Benjamin Kowarsch. All rights reserved.\n *\n * License:\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met\n *\n * 1) NO FEES may be charged for the provision of the software. The software\n * may NOT be published on websites that contain advertising, unless\n * specific prior written permission has been obtained.\n *\n * 2) Redistributions of source code must retain the above copyright notice,\n * this list of conditions and the following disclaimer.\n *\n * 3) Redistributions in binary form must reproduce the above copyright\n * notice, this list of conditions and the following disclaimer in the\n * documentation and other materials provided with the distribution.\n *\n * 4) Neither the author\'s name nor the names of any contributors may be used\n * to endorse or promote products derived from this software without\n * specific prior written permission.\n *\n * 5) Where this list of conditions or the following disclaimer, in part or\n * as a whole is overruled or nullified by applicable law, no permission\n * is granted to use the software.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\n * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n * \n *)' Comment.Multiline
|
|
'\n\n\n' Text
|
|
|
|
'IMPLEMENTATION' Keyword.Reserved
|
|
' ' Text
|
|
'(* OF *)' Comment.Multiline
|
|
' ' Text
|
|
'MODULE' Keyword.Reserved
|
|
' ' Text
|
|
'LIFO' Name
|
|
';' Punctuation
|
|
'\n\n' Text
|
|
|
|
'FROM' Keyword.Reserved
|
|
' ' Text
|
|
'SYSTEM' Name.Builtin.Pseudo
|
|
' ' Text
|
|
'IMPORT' Keyword.Reserved
|
|
' ' Text
|
|
'ADDRESS' Name.Builtin.Pseudo
|
|
',' Punctuation
|
|
' ' Text
|
|
'ADR' Name.Builtin.Pseudo
|
|
',' Punctuation
|
|
' ' Text
|
|
'TSIZE' Name.Builtin
|
|
';' Punctuation
|
|
'\n' Text
|
|
|
|
'FROM' Keyword.Reserved
|
|
' ' Text
|
|
'Storage' Name
|
|
' ' Text
|
|
'IMPORT' Keyword.Reserved
|
|
' ' Text
|
|
'ALLOCATE' Name
|
|
',' Punctuation
|
|
' ' Text
|
|
'DEALLOCATE' Name
|
|
';' Punctuation
|
|
'\n\n\n' Text
|
|
|
|
'(* ---------------------------------------------------------------------------\n// Private type : ListEntry\n// ---------------------------------------------------------------------------\n*)' Comment.Multiline
|
|
'\n' Text
|
|
|
|
'TYPE' Keyword.Reserved
|
|
' ' Text
|
|
'ListPtr' Name
|
|
' ' Text
|
|
'=' Operator
|
|
' ' Text
|
|
'POINTER' Keyword.Reserved
|
|
' ' Text
|
|
'TO' Keyword.Reserved
|
|
' ' Text
|
|
'ListEntry' Name
|
|
';' Punctuation
|
|
'\n\n' Text
|
|
|
|
'TYPE' Keyword.Reserved
|
|
' ' Text
|
|
'ListEntry' Name
|
|
' ' Text
|
|
'=' Operator
|
|
' ' Text
|
|
'RECORD' Keyword.Reserved
|
|
'\n' Text
|
|
|
|
' ' Text
|
|
'value' Name
|
|
' ' Text
|
|
':' Punctuation
|
|
' ' Text
|
|
'DataPtr' Name
|
|
';' Punctuation
|
|
'\n' Text
|
|
|
|
' ' Text
|
|
'next' Name
|
|
' ' Text
|
|
':' Punctuation
|
|
' ' Text
|
|
'ListPtr' Name
|
|
'\n' Text
|
|
|
|
'END' Keyword.Reserved
|
|
';' Punctuation
|
|
' ' Text
|
|
'(* ListEntry *)' Comment.Multiline
|
|
'\n\n\n' Text
|
|
|
|
'(* ---------------------------------------------------------------------------\n// Opaque type : LIFO.Stack\n// ---------------------------------------------------------------------------\n// CAUTION: Modula-2 does not support the use of variable length array fields\n// in records. VLAs can only be implemented using pointer arithmetic which\n// means there is no type checking and no boundary checking on the array.\n// It also means that array notation cannot be used on the array which makes\n// the code difficult to read and maintain. As a result, Modula-2 is less\n// safe and less readable than C when it comes to using VLAs. Great care must\n// be taken to make sure that the code accessing VLA fields is safe. Boundary\n// checks must be inserted manually. Size checks must be inserted manually to\n// compensate for the absence of type checks. *)' Comment.Multiline
|
|
'\n\n' Text
|
|
|
|
'TYPE' Keyword.Reserved
|
|
' ' Text
|
|
'Stack' Name
|
|
' ' Text
|
|
'=' Operator
|
|
' ' Text
|
|
'POINTER' Keyword.Reserved
|
|
' ' Text
|
|
'TO' Keyword.Reserved
|
|
' ' Text
|
|
'StackDescriptor' Name
|
|
';' Punctuation
|
|
'\n\n' Text
|
|
|
|
'TYPE' Keyword.Reserved
|
|
' ' Text
|
|
'StackDescriptor' Name
|
|
' ' Text
|
|
'=' Operator
|
|
' ' Text
|
|
'RECORD' Keyword.Reserved
|
|
'\n' Text
|
|
|
|
' ' Text
|
|
'overflow' Name
|
|
' ' Text
|
|
':' Punctuation
|
|
' ' Text
|
|
'ListPtr' Name
|
|
';' Punctuation
|
|
'\n' Text
|
|
|
|
' ' Text
|
|
'entryCount' Name
|
|
' ' Text
|
|
':' Punctuation
|
|
' ' Text
|
|
'StackSize' Name
|
|
';' Punctuation
|
|
'\n' Text
|
|
|
|
' ' Text
|
|
'arraySize' Name
|
|
' ' Text
|
|
':' Punctuation
|
|
' ' Text
|
|
'StackSize' Name
|
|
';' Punctuation
|
|
'\n' Text
|
|
|
|
' ' Text
|
|
'array' Name
|
|
' ' Text
|
|
':' Punctuation
|
|
' ' Text
|
|
'ADDRESS' Name.Builtin.Pseudo
|
|
' ' Text
|
|
'(* ARRAY OF DataPtr *)' Comment.Multiline
|
|
'\n' Text
|
|
|
|
'END' Keyword.Reserved
|
|
';' Punctuation
|
|
' ' Text
|
|
'(* StackDescriptor *)' Comment.Multiline
|
|
'\n\n\n' Text
|
|
|
|
'(* ---------------------------------------------------------------------------\n// function: LIFO.new( initial_size, status )\n// ---------------------------------------------------------------------------\n//\n// Creates and returns a new LIFO stack object with an initial capacity of\n// <initialSize>. If zero is passed in for <initialSize>, then the stack\n// will be created with an initial capacity of LIFO.defaultStackSize. The\n// function fails if a value greater than LIFO.maximumStackSize is passed\n// in for <initialSize> or if memory could not be allocated.\n//\n// The initial capacity of a stack is the number of entries that can be stored\n// in the stack without enlargement.\n//\n// The status of the operation is passed back in <status>. *)' Comment.Multiline
|
|
'\n\n' Text
|
|
|
|
'PROCEDURE' Keyword.Reserved
|
|
' ' Text
|
|
'new' Name
|
|
' ' Text
|
|
'(' Punctuation
|
|
' ' Text
|
|
'initialSize' Name
|
|
' ' Text
|
|
':' Punctuation
|
|
' ' Text
|
|
'StackSize' Name
|
|
';' Punctuation
|
|
' ' Text
|
|
'VAR' Keyword.Reserved
|
|
' ' Text
|
|
'status' Name
|
|
' ' Text
|
|
':' Punctuation
|
|
' ' Text
|
|
'Status' Name
|
|
' ' Text
|
|
')' Punctuation
|
|
' ' Text
|
|
':' Punctuation
|
|
' ' Text
|
|
'Stack' Name
|
|
';' Punctuation
|
|
'\n\n' Text
|
|
|
|
'VAR' Keyword.Reserved
|
|
'\n' Text
|
|
|
|
' ' Text
|
|
'newStack' Name
|
|
' ' Text
|
|
':' Punctuation
|
|
' ' Text
|
|
'Stack' Name
|
|
';' Punctuation
|
|
'\n' Text
|
|
|
|
' \n' Text
|
|
|
|
'BEGIN' Keyword.Reserved
|
|
'\n\n' Text
|
|
|
|
' ' Text
|
|
'(* zero size means default *)' Comment.Multiline
|
|
'\n' Text
|
|
|
|
' ' Text
|
|
'IF' Keyword.Reserved
|
|
' ' Text
|
|
'initialSize' Name
|
|
' ' Text
|
|
'=' Operator
|
|
' ' Text
|
|
'0' Literal.Number.Integer
|
|
' ' Text
|
|
'THEN' Keyword.Reserved
|
|
'\n' Text
|
|
|
|
' ' Text
|
|
'initialSize' Name
|
|
' ' Text
|
|
':=' Operator
|
|
' ' Text
|
|
'defaultStackSize' Name
|
|
';' Punctuation
|
|
'\n' Text
|
|
|
|
' ' Text
|
|
'END' Keyword.Reserved
|
|
';' Punctuation
|
|
' ' Text
|
|
'(* IF *)' Comment.Multiline
|
|
'\n' Text
|
|
|
|
' \n ' Text
|
|
'(* bail out if initial size is too high *)' Comment.Multiline
|
|
'\n' Text
|
|
|
|
' ' Text
|
|
'IF' Keyword.Reserved
|
|
' ' Text
|
|
'initialSize' Name
|
|
' ' Text
|
|
'>' Operator
|
|
' ' Text
|
|
'maximumStackSize' Name
|
|
' ' Text
|
|
'THEN' Keyword.Reserved
|
|
'\n' Text
|
|
|
|
' ' Text
|
|
'status' Name
|
|
' ' Text
|
|
':=' Operator
|
|
' ' Text
|
|
'invalidSize' Name
|
|
';' Punctuation
|
|
'\n' Text
|
|
|
|
' ' Text
|
|
'RETURN' Keyword.Reserved
|
|
' ' Text
|
|
'NIL' Name.Builtin
|
|
';' Punctuation
|
|
'\n' Text
|
|
|
|
' ' Text
|
|
'END' Keyword.Reserved
|
|
';' Punctuation
|
|
' ' Text
|
|
'(* IF *)' Comment.Multiline
|
|
'\n' Text
|
|
|
|
' \n ' Text
|
|
'(* allocate new stack object *)' Comment.Multiline
|
|
'\n' Text
|
|
|
|
' ' Text
|
|
'ALLOCATE' Name
|
|
'(' Punctuation
|
|
'newStack' Name
|
|
',' Punctuation
|
|
' ' Text
|
|
'TSIZE' Name.Builtin
|
|
'(' Punctuation
|
|
'Stack' Name
|
|
')' Punctuation
|
|
' ' Text
|
|
'+' Operator
|
|
' ' Text
|
|
'TSIZE' Name.Builtin
|
|
'(' Punctuation
|
|
'DataPtr' Name
|
|
')' Punctuation
|
|
' ' Text
|
|
'*' Operator
|
|
' ' Text
|
|
'(' Punctuation
|
|
'initialSize' Name
|
|
' ' Text
|
|
'-' Operator
|
|
' ' Text
|
|
'1' Literal.Number.Integer
|
|
')' Punctuation
|
|
')' Punctuation
|
|
';' Punctuation
|
|
'\n' Text
|
|
|
|
' \n ' Text
|
|
'(* bail out if allocation failed *)' Comment.Multiline
|
|
'\n' Text
|
|
|
|
' ' Text
|
|
'IF' Keyword.Reserved
|
|
' ' Text
|
|
'newStack' Name
|
|
' ' Text
|
|
'=' Operator
|
|
' ' Text
|
|
'NIL' Name.Builtin
|
|
' ' Text
|
|
'THEN' Keyword.Reserved
|
|
'\n' Text
|
|
|
|
' ' Text
|
|
'status' Name
|
|
' ' Text
|
|
':=' Operator
|
|
' ' Text
|
|
'allocationFailed' Name
|
|
';' Punctuation
|
|
'\n' Text
|
|
|
|
' ' Text
|
|
'RETURN' Keyword.Reserved
|
|
' ' Text
|
|
'NIL' Name.Builtin
|
|
';' Punctuation
|
|
'\n' Text
|
|
|
|
' ' Text
|
|
'END' Keyword.Reserved
|
|
';' Punctuation
|
|
' ' Text
|
|
'(* IF *)' Comment.Multiline
|
|
'\n' Text
|
|
|
|
' \n ' Text
|
|
'(* initialise meta data *)' Comment.Multiline
|
|
'\n' Text
|
|
|
|
' ' Text
|
|
'newStack' Name
|
|
'^' Operator
|
|
'.' Punctuation
|
|
'arraySize' Name
|
|
' ' Text
|
|
':=' Operator
|
|
' ' Text
|
|
'initialSize' Name
|
|
';' Punctuation
|
|
'\n' Text
|
|
|
|
' ' Text
|
|
'newStack' Name
|
|
'^' Operator
|
|
'.' Punctuation
|
|
'entryCount' Name
|
|
' ' Text
|
|
':=' Operator
|
|
' ' Text
|
|
'0' Literal.Number.Integer
|
|
';' Punctuation
|
|
'\n' Text
|
|
|
|
' ' Text
|
|
'newStack' Name
|
|
'^' Operator
|
|
'.' Punctuation
|
|
'overflow' Name
|
|
' ' Text
|
|
':=' Operator
|
|
' ' Text
|
|
'NIL' Name.Builtin
|
|
';' Punctuation
|
|
'\n' Text
|
|
|
|
' \n ' Text
|
|
'(* pass status and new stack to caller *)' Comment.Multiline
|
|
'\n' Text
|
|
|
|
' ' Text
|
|
'status' Name
|
|
' ' Text
|
|
':=' Operator
|
|
' ' Text
|
|
'success' Name
|
|
';' Punctuation
|
|
'\n' Text
|
|
|
|
' ' Text
|
|
'RETURN' Keyword.Reserved
|
|
' ' Text
|
|
'newStack' Name
|
|
'\n' Text
|
|
|
|
' \n' Text
|
|
|
|
'END' Keyword.Reserved
|
|
' ' Text
|
|
'new' Name
|
|
';' Punctuation
|
|
'\n\n\n' Text
|
|
|
|
'(* ---------------------------------------------------------------------------\n// function: LIFO.push( stack, value, status )\n// ---------------------------------------------------------------------------\n//\n// Adds a new entry <value> to the top of stack <stack>. The new entry is\n// added by reference, no data is copied. However, no entry is added if the\n// the stack is full, that is when the number of entries stored in the stack\n// has reached LIFO.maximumStackSize. The function fails if NIL is passed in\n// for <stack> or <value>, or if memory could not be allocated.\n//\n// New entries are allocated dynamically if the number of entries exceeds the\n// initial capacity of the stack.\n//\n// The status of the operation is passed back in <status>. *)' Comment.Multiline
|
|
'\n\n' Text
|
|
|
|
'PROCEDURE' Keyword.Reserved
|
|
' ' Text
|
|
'push' Name
|
|
' ' Text
|
|
'(' Punctuation
|
|
' ' Text
|
|
'VAR' Keyword.Reserved
|
|
' ' Text
|
|
'stack' Name
|
|
' ' Text
|
|
':' Punctuation
|
|
' ' Text
|
|
'Stack' Name
|
|
';' Punctuation
|
|
' ' Text
|
|
'value' Name
|
|
' ' Text
|
|
':' Punctuation
|
|
' ' Text
|
|
'DataPtr' Name
|
|
';' Punctuation
|
|
' ' Text
|
|
'VAR' Keyword.Reserved
|
|
' ' Text
|
|
'status' Name
|
|
' ' Text
|
|
':' Punctuation
|
|
' ' Text
|
|
'Status' Name
|
|
' ' Text
|
|
')' Punctuation
|
|
';' Punctuation
|
|
'\n' Text
|
|
|
|
'VAR' Keyword.Reserved
|
|
'\n' Text
|
|
|
|
' ' Text
|
|
'newEntry' Name
|
|
' ' Text
|
|
':' Punctuation
|
|
' ' Text
|
|
'ListPtr' Name
|
|
';' Punctuation
|
|
'\n' Text
|
|
|
|
' ' Text
|
|
'valuePtr' Name
|
|
' ' Text
|
|
':' Punctuation
|
|
' ' Text
|
|
'POINTER' Keyword.Reserved
|
|
' ' Text
|
|
'TO' Keyword.Reserved
|
|
' ' Text
|
|
'DataPtr' Name
|
|
';' Punctuation
|
|
'\n\n' Text
|
|
|
|
'BEGIN' Keyword.Reserved
|
|
'\n\n' Text
|
|
|
|
' ' Text
|
|
'(* bail out if stack is NIL *)' Comment.Multiline
|
|
'\n' Text
|
|
|
|
' ' Text
|
|
'IF' Keyword.Reserved
|
|
' ' Text
|
|
'stack' Name
|
|
' ' Text
|
|
'=' Operator
|
|
' ' Text
|
|
'NIL' Name.Builtin
|
|
' ' Text
|
|
'THEN' Keyword.Reserved
|
|
'\n' Text
|
|
|
|
' ' Text
|
|
'status' Name
|
|
' ' Text
|
|
':=' Operator
|
|
' ' Text
|
|
'invalidStack' Name
|
|
';' Punctuation
|
|
'\n' Text
|
|
|
|
' ' Text
|
|
'RETURN' Keyword.Reserved
|
|
';' Punctuation
|
|
'\n' Text
|
|
|
|
' ' Text
|
|
'END' Keyword.Reserved
|
|
';' Punctuation
|
|
' ' Text
|
|
'(* IF *)' Comment.Multiline
|
|
'\n' Text
|
|
|
|
' \n ' Text
|
|
'(* bail out if value is NIL *)' Comment.Multiline
|
|
'\n' Text
|
|
|
|
' ' Text
|
|
'IF' Keyword.Reserved
|
|
' ' Text
|
|
'value' Name
|
|
' ' Text
|
|
'=' Operator
|
|
' ' Text
|
|
'NIL' Name.Builtin
|
|
' ' Text
|
|
'THEN' Keyword.Reserved
|
|
'\n' Text
|
|
|
|
' ' Text
|
|
'status' Name
|
|
' ' Text
|
|
':=' Operator
|
|
' ' Text
|
|
'invalidData' Name
|
|
';' Punctuation
|
|
'\n' Text
|
|
|
|
' ' Text
|
|
'RETURN' Keyword.Reserved
|
|
';' Punctuation
|
|
'\n' Text
|
|
|
|
' ' Text
|
|
'END' Keyword.Reserved
|
|
';' Punctuation
|
|
' ' Text
|
|
'(* IF *)' Comment.Multiline
|
|
'\n\n' Text
|
|
|
|
' ' Text
|
|
'(* bail out if stack is full *)' Comment.Multiline
|
|
'\n' Text
|
|
|
|
' ' Text
|
|
'IF' Keyword.Reserved
|
|
' ' Text
|
|
'stack' Name
|
|
'^' Operator
|
|
'.' Punctuation
|
|
'entryCount' Name
|
|
' ' Text
|
|
'>=' Operator
|
|
' ' Text
|
|
'maximumStackSize' Name
|
|
' ' Text
|
|
'THEN' Keyword.Reserved
|
|
'\n' Text
|
|
|
|
' ' Text
|
|
'status' Name
|
|
' ' Text
|
|
':=' Operator
|
|
' ' Text
|
|
'stackFull' Name
|
|
';' Punctuation
|
|
'\n' Text
|
|
|
|
' ' Text
|
|
'RETURN' Keyword.Reserved
|
|
';' Punctuation
|
|
'\n' Text
|
|
|
|
' ' Text
|
|
'END' Keyword.Reserved
|
|
';' Punctuation
|
|
' ' Text
|
|
'(* IF *)' Comment.Multiline
|
|
'\n\n' Text
|
|
|
|
' ' Text
|
|
'(* check if index falls within array segment *)' Comment.Multiline
|
|
'\n' Text
|
|
|
|
' ' Text
|
|
'IF' Keyword.Reserved
|
|
' ' Text
|
|
'stack' Name
|
|
'^' Operator
|
|
'.' Punctuation
|
|
'entryCount' Name
|
|
' ' Text
|
|
'<' Operator
|
|
' ' Text
|
|
'stack' Name
|
|
'^' Operator
|
|
'.' Punctuation
|
|
'arraySize' Name
|
|
' ' Text
|
|
'THEN' Keyword.Reserved
|
|
'\n' Text
|
|
|
|
' \n ' Text
|
|
'(* store value in array segment *)' Comment.Multiline
|
|
'\n' Text
|
|
|
|
' \n ' Text
|
|
'(* stack^.array^[stack^.entryCount] := value; *)' Comment.Multiline
|
|
'\n' Text
|
|
|
|
' ' Text
|
|
'valuePtr' Name
|
|
' ' Text
|
|
':=' Operator
|
|
' ' Text
|
|
'ADR' Name.Builtin.Pseudo
|
|
'(' Punctuation
|
|
'stack' Name
|
|
'^' Operator
|
|
'.' Punctuation
|
|
'array' Name
|
|
')' Punctuation
|
|
' ' Text
|
|
'+' Operator
|
|
' ' Text
|
|
'TSIZE' Name.Builtin
|
|
'(' Punctuation
|
|
'DataPtr' Name
|
|
')' Punctuation
|
|
' ' Text
|
|
'*' Operator
|
|
' ' Text
|
|
'stack' Name
|
|
'^' Operator
|
|
'.' Punctuation
|
|
'entryCount' Name
|
|
';' Punctuation
|
|
'\n' Text
|
|
|
|
' ' Text
|
|
'valuePtr' Name
|
|
'^' Operator
|
|
' ' Text
|
|
':=' Operator
|
|
' ' Text
|
|
'value' Name
|
|
';' Punctuation
|
|
'\n' Text
|
|
|
|
' \n ' Text
|
|
'ELSE' Keyword.Reserved
|
|
' ' Text
|
|
'(* index falls within overflow segment *)' Comment.Multiline
|
|
'\n' Text
|
|
|
|
' \n ' Text
|
|
'(* allocate new entry slot *)' Comment.Multiline
|
|
'\n' Text
|
|
|
|
' ' Text
|
|
'NEW' Keyword.Reserved
|
|
'(' Punctuation
|
|
'newEntry' Name
|
|
')' Punctuation
|
|
';' Punctuation
|
|
'\n' Text
|
|
|
|
' \n ' Text
|
|
'(* bail out if allocation failed *)' Comment.Multiline
|
|
'\n' Text
|
|
|
|
' ' Text
|
|
'IF' Keyword.Reserved
|
|
' ' Text
|
|
'newEntry' Name
|
|
' ' Text
|
|
'=' Operator
|
|
' ' Text
|
|
'NIL' Name.Builtin
|
|
' ' Text
|
|
'THEN' Keyword.Reserved
|
|
'\n' Text
|
|
|
|
' ' Text
|
|
'status' Name
|
|
' ' Text
|
|
':=' Operator
|
|
' ' Text
|
|
'allocationFailed' Name
|
|
';' Punctuation
|
|
'\n' Text
|
|
|
|
' ' Text
|
|
'RETURN' Keyword.Reserved
|
|
';' Punctuation
|
|
'\n' Text
|
|
|
|
' ' Text
|
|
'END' Keyword.Reserved
|
|
';' Punctuation
|
|
' ' Text
|
|
'(* IF *)' Comment.Multiline
|
|
'\n' Text
|
|
|
|
' \n ' Text
|
|
'(* initialise new entry *)' Comment.Multiline
|
|
'\n' Text
|
|
|
|
' ' Text
|
|
'newEntry' Name
|
|
'^' Operator
|
|
'.' Punctuation
|
|
'value' Name
|
|
' ' Text
|
|
':=' Operator
|
|
' ' Text
|
|
'value' Name
|
|
';' Punctuation
|
|
'\n' Text
|
|
|
|
' \n ' Text
|
|
'(* link new entry into overflow list *)' Comment.Multiline
|
|
'\n' Text
|
|
|
|
' ' Text
|
|
'newEntry' Name
|
|
'^' Operator
|
|
'.' Punctuation
|
|
'next' Name
|
|
' ' Text
|
|
':=' Operator
|
|
' ' Text
|
|
'stack' Name
|
|
'^' Operator
|
|
'.' Punctuation
|
|
'overflow' Name
|
|
';' Punctuation
|
|
'\n' Text
|
|
|
|
' ' Text
|
|
'stack' Name
|
|
'^' Operator
|
|
'.' Punctuation
|
|
'overflow' Name
|
|
' ' Text
|
|
':=' Operator
|
|
' ' Text
|
|
'newEntry' Name
|
|
';' Punctuation
|
|
'\n' Text
|
|
|
|
' \n ' Text
|
|
'END' Keyword.Reserved
|
|
';' Punctuation
|
|
' ' Text
|
|
'(* IF *)' Comment.Multiline
|
|
'\n' Text
|
|
|
|
' \n ' Text
|
|
'(* update entry counter *)' Comment.Multiline
|
|
'\n' Text
|
|
|
|
' ' Text
|
|
'INC' Name.Builtin
|
|
'(' Punctuation
|
|
'stack' Name
|
|
'^' Operator
|
|
'.' Punctuation
|
|
'entryCount' Name
|
|
')' Punctuation
|
|
';' Punctuation
|
|
'\n' Text
|
|
|
|
' \n ' Text
|
|
'(* pass status to caller *)' Comment.Multiline
|
|
'\n' Text
|
|
|
|
' ' Text
|
|
'status' Name
|
|
' ' Text
|
|
':=' Operator
|
|
' ' Text
|
|
'success' Name
|
|
';' Punctuation
|
|
'\n' Text
|
|
|
|
' ' Text
|
|
'RETURN' Keyword.Reserved
|
|
'\n\n' Text
|
|
|
|
'END' Keyword.Reserved
|
|
' ' Text
|
|
'push' Name
|
|
';' Punctuation
|
|
'\n\n\n' Text
|
|
|
|
'(* ---------------------------------------------------------------------------\n// function: LIFO.pop( stack, status )\n// ---------------------------------------------------------------------------\n//\n// Removes the top most value from stack <stack> and returns it. If the stack\n// is empty, that is when the number of entries stored in the stack has\n// reached zero, then NIL is returned.\n//\n// Entries which were allocated dynamically (above the initial capacity) are\n// deallocated when their values are popped.\n//\n// The status of the operation is passed back in <status>. *)' Comment.Multiline
|
|
'\n\n' Text
|
|
|
|
'PROCEDURE' Keyword.Reserved
|
|
' ' Text
|
|
'pop' Name
|
|
' ' Text
|
|
'(' Punctuation
|
|
' ' Text
|
|
'VAR' Keyword.Reserved
|
|
' ' Text
|
|
'stack' Name
|
|
' ' Text
|
|
':' Punctuation
|
|
' ' Text
|
|
'Stack' Name
|
|
';' Punctuation
|
|
' ' Text
|
|
'VAR' Keyword.Reserved
|
|
' ' Text
|
|
'status' Name
|
|
' ' Text
|
|
':' Punctuation
|
|
' ' Text
|
|
'Status' Name
|
|
' ' Text
|
|
')' Punctuation
|
|
' ' Text
|
|
':' Punctuation
|
|
' ' Text
|
|
'DataPtr' Name
|
|
';' Punctuation
|
|
'\n\n' Text
|
|
|
|
'VAR' Keyword.Reserved
|
|
'\n' Text
|
|
|
|
' ' Text
|
|
'thisValue' Name
|
|
' ' Text
|
|
':' Punctuation
|
|
' ' Text
|
|
'DataPtr' Name
|
|
';' Punctuation
|
|
'\n' Text
|
|
|
|
' ' Text
|
|
'thisEntry' Name
|
|
' ' Text
|
|
':' Punctuation
|
|
' ' Text
|
|
'ListPtr' Name
|
|
';' Punctuation
|
|
'\n' Text
|
|
|
|
' ' Text
|
|
'valuePtr' Name
|
|
' ' Text
|
|
':' Punctuation
|
|
' ' Text
|
|
'POINTER' Keyword.Reserved
|
|
' ' Text
|
|
'TO' Keyword.Reserved
|
|
' ' Text
|
|
'DataPtr' Name
|
|
';' Punctuation
|
|
'\n\n' Text
|
|
|
|
'BEGIN' Keyword.Reserved
|
|
'\n\n' Text
|
|
|
|
' ' Text
|
|
'(* bail out if stack is NIL *)' Comment.Multiline
|
|
'\n' Text
|
|
|
|
' ' Text
|
|
'IF' Keyword.Reserved
|
|
' ' Text
|
|
'stack' Name
|
|
' ' Text
|
|
'=' Operator
|
|
' ' Text
|
|
'NIL' Name.Builtin
|
|
' ' Text
|
|
'THEN' Keyword.Reserved
|
|
'\n' Text
|
|
|
|
' ' Text
|
|
'status' Name
|
|
' ' Text
|
|
':=' Operator
|
|
' ' Text
|
|
'invalidStack' Name
|
|
';' Punctuation
|
|
'\n' Text
|
|
|
|
' ' Text
|
|
'RETURN' Keyword.Reserved
|
|
' ' Text
|
|
'NIL' Name.Builtin
|
|
';' Punctuation
|
|
'\n' Text
|
|
|
|
' ' Text
|
|
'END' Keyword.Reserved
|
|
';' Punctuation
|
|
' ' Text
|
|
'(* IF *)' Comment.Multiline
|
|
'\n' Text
|
|
|
|
' \n ' Text
|
|
'(* bail out if stack is empty *)' Comment.Multiline
|
|
'\n' Text
|
|
|
|
' ' Text
|
|
'IF' Keyword.Reserved
|
|
' ' Text
|
|
'stack' Name
|
|
'^' Operator
|
|
'.' Punctuation
|
|
'entryCount' Name
|
|
' ' Text
|
|
'=' Operator
|
|
' ' Text
|
|
'0' Literal.Number.Integer
|
|
' ' Text
|
|
'THEN' Keyword.Reserved
|
|
'\n' Text
|
|
|
|
' ' Text
|
|
'status' Name
|
|
' ' Text
|
|
':=' Operator
|
|
' ' Text
|
|
'stackEmpty' Name
|
|
';' Punctuation
|
|
'\n' Text
|
|
|
|
' ' Text
|
|
'RETURN' Keyword.Reserved
|
|
' ' Text
|
|
'NIL' Name.Builtin
|
|
';' Punctuation
|
|
'\n' Text
|
|
|
|
' ' Text
|
|
'END' Keyword.Reserved
|
|
';' Punctuation
|
|
' ' Text
|
|
'(* IF *)' Comment.Multiline
|
|
'\n\n' Text
|
|
|
|
' ' Text
|
|
'DEC' Name.Builtin
|
|
'(' Punctuation
|
|
'stack' Name
|
|
'^' Operator
|
|
'.' Punctuation
|
|
'entryCount' Name
|
|
')' Punctuation
|
|
';' Punctuation
|
|
'\n' Text
|
|
|
|
' \n ' Text
|
|
'(* check if index falls within array segment *)' Comment.Multiline
|
|
'\n' Text
|
|
|
|
' ' Text
|
|
'IF' Keyword.Reserved
|
|
' ' Text
|
|
'stack' Name
|
|
'^' Operator
|
|
'.' Punctuation
|
|
'entryCount' Name
|
|
' ' Text
|
|
'<' Operator
|
|
' ' Text
|
|
'stack' Name
|
|
'^' Operator
|
|
'.' Punctuation
|
|
'arraySize' Name
|
|
' ' Text
|
|
'THEN' Keyword.Reserved
|
|
'\n' Text
|
|
|
|
' \n ' Text
|
|
'(* obtain value at index entryCount in array segment *)' Comment.Multiline
|
|
'\n' Text
|
|
|
|
' \n ' Text
|
|
'(* thisValue := stack^.array^[stack^.entryCount]; *)' Comment.Multiline
|
|
'\n' Text
|
|
|
|
' ' Text
|
|
'valuePtr' Name
|
|
' ' Text
|
|
':=' Operator
|
|
' ' Text
|
|
'ADR' Name.Builtin.Pseudo
|
|
'(' Punctuation
|
|
'stack' Name
|
|
'^' Operator
|
|
'.' Punctuation
|
|
'array' Name
|
|
')' Punctuation
|
|
' ' Text
|
|
'+' Operator
|
|
' ' Text
|
|
'TSIZE' Name.Builtin
|
|
'(' Punctuation
|
|
'DataPtr' Name
|
|
')' Punctuation
|
|
' ' Text
|
|
'*' Operator
|
|
' ' Text
|
|
'stack' Name
|
|
'^' Operator
|
|
'.' Punctuation
|
|
'entryCount' Name
|
|
';' Punctuation
|
|
'\n' Text
|
|
|
|
' ' Text
|
|
'thisValue' Name
|
|
' ' Text
|
|
':=' Operator
|
|
' ' Text
|
|
'valuePtr' Name
|
|
'^' Operator
|
|
';' Punctuation
|
|
'\n' Text
|
|
|
|
' \n ' Text
|
|
'ELSE' Keyword.Reserved
|
|
' ' Text
|
|
'(* index falls within overflow segment *)' Comment.Multiline
|
|
'\n' Text
|
|
|
|
' \n ' Text
|
|
'(* obtain value of first entry in overflow list *)' Comment.Multiline
|
|
'\n' Text
|
|
|
|
' ' Text
|
|
'thisValue' Name
|
|
' ' Text
|
|
':=' Operator
|
|
' ' Text
|
|
'stack' Name
|
|
'^' Operator
|
|
'.' Punctuation
|
|
'overflow' Name
|
|
'^' Operator
|
|
'.' Punctuation
|
|
'value' Name
|
|
';' Punctuation
|
|
'\n' Text
|
|
|
|
' \n ' Text
|
|
'(* isolate first entry in overflow list *)' Comment.Multiline
|
|
'\n' Text
|
|
|
|
' ' Text
|
|
'thisEntry' Name
|
|
' ' Text
|
|
':=' Operator
|
|
' ' Text
|
|
'stack' Name
|
|
'^' Operator
|
|
'.' Punctuation
|
|
'overflow' Name
|
|
';' Punctuation
|
|
'\n' Text
|
|
|
|
' ' Text
|
|
'stack' Name
|
|
'^' Operator
|
|
'.' Punctuation
|
|
'overflow' Name
|
|
' ' Text
|
|
':=' Operator
|
|
' ' Text
|
|
'stack' Name
|
|
'^' Operator
|
|
'.' Punctuation
|
|
'overflow' Name
|
|
'^' Operator
|
|
'.' Punctuation
|
|
'next' Name
|
|
';' Punctuation
|
|
'\n' Text
|
|
|
|
' \n ' Text
|
|
'(* remove the entry from overflow list *)' Comment.Multiline
|
|
'\n' Text
|
|
|
|
' ' Text
|
|
'DISPOSE' Name.Builtin
|
|
'(' Punctuation
|
|
'thisEntry' Name
|
|
')' Punctuation
|
|
';' Punctuation
|
|
'\n' Text
|
|
|
|
' \n ' Text
|
|
'END' Keyword.Reserved
|
|
';' Punctuation
|
|
' ' Text
|
|
'(* IF *)' Comment.Multiline
|
|
'\n\n' Text
|
|
|
|
' ' Text
|
|
'(* return value and status to caller *)' Comment.Multiline
|
|
'\n' Text
|
|
|
|
' ' Text
|
|
'status' Name
|
|
' ' Text
|
|
':=' Operator
|
|
' ' Text
|
|
'success' Name
|
|
';' Punctuation
|
|
'\n' Text
|
|
|
|
' ' Text
|
|
'RETURN' Keyword.Reserved
|
|
' ' Text
|
|
'thisValue' Name
|
|
'\n\n' Text
|
|
|
|
'END' Keyword.Reserved
|
|
' ' Text
|
|
'pop' Name
|
|
';' Punctuation
|
|
'\n\n\n' Text
|
|
|
|
'(* ---------------------------------------------------------------------------\n// function: LIFO.stackSize( stack )\n// ---------------------------------------------------------------------------\n//\n// Returns the current capacity of <stack>. The current capacity is the total\n// number of allocated entries. Returns zero if NIL is passed in for <stack>.\n*)' Comment.Multiline
|
|
'\n' Text
|
|
|
|
'PROCEDURE' Keyword.Reserved
|
|
' ' Text
|
|
'stackSize' Name
|
|
'(' Punctuation
|
|
' ' Text
|
|
'VAR' Keyword.Reserved
|
|
' ' Text
|
|
'stack' Name
|
|
' ' Text
|
|
':' Punctuation
|
|
' ' Text
|
|
'Stack' Name
|
|
' ' Text
|
|
')' Punctuation
|
|
' ' Text
|
|
':' Punctuation
|
|
' ' Text
|
|
'StackSize' Name
|
|
';' Punctuation
|
|
'\n\n' Text
|
|
|
|
'BEGIN' Keyword.Reserved
|
|
'\n\n' Text
|
|
|
|
' ' Text
|
|
'(* bail out if stack is NIL *)' Comment.Multiline
|
|
'\n' Text
|
|
|
|
' ' Text
|
|
'IF' Keyword.Reserved
|
|
' ' Text
|
|
'stack' Name
|
|
' ' Text
|
|
'=' Operator
|
|
' ' Text
|
|
'NIL' Name.Builtin
|
|
' ' Text
|
|
'THEN' Keyword.Reserved
|
|
'\n' Text
|
|
|
|
' ' Text
|
|
'RETURN' Keyword.Reserved
|
|
' ' Text
|
|
'0' Literal.Number.Integer
|
|
';' Punctuation
|
|
'\n' Text
|
|
|
|
' ' Text
|
|
'END' Keyword.Reserved
|
|
';' Punctuation
|
|
' ' Text
|
|
'(* IF *)' Comment.Multiline
|
|
'\n\n' Text
|
|
|
|
' ' Text
|
|
'IF' Keyword.Reserved
|
|
' ' Text
|
|
'stack' Name
|
|
'^' Operator
|
|
'.' Punctuation
|
|
'entryCount' Name
|
|
' ' Text
|
|
'<' Operator
|
|
' ' Text
|
|
'stack' Name
|
|
'^' Operator
|
|
'.' Punctuation
|
|
'arraySize' Name
|
|
' ' Text
|
|
'THEN' Keyword.Reserved
|
|
'\n' Text
|
|
|
|
' ' Text
|
|
'RETURN' Keyword.Reserved
|
|
' ' Text
|
|
'stack' Name
|
|
'^' Operator
|
|
'.' Punctuation
|
|
'arraySize' Name
|
|
';' Punctuation
|
|
'\n' Text
|
|
|
|
' ' Text
|
|
'ELSE' Keyword.Reserved
|
|
'\n' Text
|
|
|
|
' ' Text
|
|
'RETURN' Keyword.Reserved
|
|
' ' Text
|
|
'stack' Name
|
|
'^' Operator
|
|
'.' Punctuation
|
|
'entryCount' Name
|
|
';' Punctuation
|
|
'\n' Text
|
|
|
|
' ' Text
|
|
'END' Keyword.Reserved
|
|
';' Punctuation
|
|
' ' Text
|
|
'(* IF *)' Comment.Multiline
|
|
'\n' Text
|
|
|
|
' \n' Text
|
|
|
|
'END' Keyword.Reserved
|
|
' ' Text
|
|
'stackSize' Name
|
|
';' Punctuation
|
|
'\n\n\n' Text
|
|
|
|
'(* ---------------------------------------------------------------------------\n// function: LIFO.stackEntries( stack )\n// ---------------------------------------------------------------------------\n//\n// Returns the number of entries stored in stack <stack>, returns zero if\n// NIL is passed in for <stack>. *)' Comment.Multiline
|
|
'\n\n' Text
|
|
|
|
'PROCEDURE' Keyword.Reserved
|
|
' ' Text
|
|
'stackEntries' Name
|
|
'(' Punctuation
|
|
' ' Text
|
|
'VAR' Keyword.Reserved
|
|
' ' Text
|
|
'stack' Name
|
|
' ' Text
|
|
':' Punctuation
|
|
' ' Text
|
|
'Stack' Name
|
|
' ' Text
|
|
')' Punctuation
|
|
' ' Text
|
|
':' Punctuation
|
|
' ' Text
|
|
'StackSize' Name
|
|
';' Punctuation
|
|
'\n\n' Text
|
|
|
|
'BEGIN' Keyword.Reserved
|
|
'\n\n' Text
|
|
|
|
' ' Text
|
|
'(* bail out if stack is NIL *)' Comment.Multiline
|
|
'\n' Text
|
|
|
|
' ' Text
|
|
'IF' Keyword.Reserved
|
|
' ' Text
|
|
'stack' Name
|
|
' ' Text
|
|
'=' Operator
|
|
' ' Text
|
|
'NIL' Name.Builtin
|
|
' ' Text
|
|
'THEN' Keyword.Reserved
|
|
'\n' Text
|
|
|
|
' ' Text
|
|
'RETURN' Keyword.Reserved
|
|
' ' Text
|
|
'0' Literal.Number.Integer
|
|
';' Punctuation
|
|
'\n' Text
|
|
|
|
' ' Text
|
|
'END' Keyword.Reserved
|
|
';' Punctuation
|
|
' ' Text
|
|
'(* IF *)' Comment.Multiline
|
|
'\n\n' Text
|
|
|
|
' ' Text
|
|
'RETURN' Keyword.Reserved
|
|
' ' Text
|
|
'stack' Name
|
|
'^' Operator
|
|
'.' Punctuation
|
|
'entryCount' Name
|
|
'\n' Text
|
|
|
|
' \n' Text
|
|
|
|
'END' Keyword.Reserved
|
|
' ' Text
|
|
'stackEntries' Name
|
|
';' Punctuation
|
|
'\n\n\n' Text
|
|
|
|
'(* ---------------------------------------------------------------------------\n// function: LIFO.dispose( stack )\n// ---------------------------------------------------------------------------\n//\n// Disposes of LIFO stack object <stack>. Returns NIL. *)' Comment.Multiline
|
|
'\n\n' Text
|
|
|
|
'PROCEDURE' Keyword.Reserved
|
|
' ' Text
|
|
'dispose' Name
|
|
' ' Text
|
|
'(' Punctuation
|
|
' ' Text
|
|
'VAR' Keyword.Reserved
|
|
' ' Text
|
|
'stack' Name
|
|
' ' Text
|
|
':' Punctuation
|
|
' ' Text
|
|
'Stack' Name
|
|
' ' Text
|
|
')' Punctuation
|
|
' ' Text
|
|
':' Punctuation
|
|
' ' Text
|
|
'Stack' Name
|
|
';' Punctuation
|
|
'\n\n' Text
|
|
|
|
'VAR' Keyword.Reserved
|
|
'\n' Text
|
|
|
|
' ' Text
|
|
'thisEntry' Name
|
|
' ' Text
|
|
':' Punctuation
|
|
' ' Text
|
|
'ListPtr' Name
|
|
';' Punctuation
|
|
'\n\n' Text
|
|
|
|
'BEGIN' Keyword.Reserved
|
|
'\n\n' Text
|
|
|
|
' ' Text
|
|
'(* bail out if stack is NIL *)' Comment.Multiline
|
|
'\n' Text
|
|
|
|
' ' Text
|
|
'IF' Keyword.Reserved
|
|
' ' Text
|
|
'stack' Name
|
|
' ' Text
|
|
'=' Operator
|
|
' ' Text
|
|
'NIL' Name.Builtin
|
|
' ' Text
|
|
'THEN' Keyword.Reserved
|
|
'\n' Text
|
|
|
|
' ' Text
|
|
'RETURN' Keyword.Reserved
|
|
' ' Text
|
|
'NIL' Name.Builtin
|
|
';' Punctuation
|
|
'\n' Text
|
|
|
|
' ' Text
|
|
'END' Keyword.Reserved
|
|
';' Punctuation
|
|
' ' Text
|
|
'(* IF *)' Comment.Multiline
|
|
'\n' Text
|
|
|
|
' \n ' Text
|
|
"(* deallocate any entries in stack's overflow list *)" Comment.Multiline
|
|
'\n' Text
|
|
|
|
' ' Text
|
|
'WHILE' Keyword.Reserved
|
|
' ' Text
|
|
'stack' Name
|
|
'^' Operator
|
|
'.' Punctuation
|
|
'overflow' Name
|
|
' ' Text
|
|
'#' Operator
|
|
' ' Text
|
|
'NIL' Name.Builtin
|
|
' ' Text
|
|
'DO' Keyword.Reserved
|
|
'\n' Text
|
|
|
|
' \n ' Text
|
|
'(* isolate first entry in overflow list *)' Comment.Multiline
|
|
'\n' Text
|
|
|
|
' ' Text
|
|
'thisEntry' Name
|
|
' ' Text
|
|
':=' Operator
|
|
' ' Text
|
|
'stack' Name
|
|
'^' Operator
|
|
'.' Punctuation
|
|
'overflow' Name
|
|
';' Punctuation
|
|
'\n' Text
|
|
|
|
' ' Text
|
|
'stack' Name
|
|
'^' Operator
|
|
'.' Punctuation
|
|
'overflow' Name
|
|
' ' Text
|
|
':=' Operator
|
|
' ' Text
|
|
'stack' Name
|
|
'^' Operator
|
|
'.' Punctuation
|
|
'overflow' Name
|
|
'^' Operator
|
|
'.' Punctuation
|
|
'next' Name
|
|
';' Punctuation
|
|
'\n' Text
|
|
|
|
' \n ' Text
|
|
'(* deallocate the entry *)' Comment.Multiline
|
|
'\n' Text
|
|
|
|
' ' Text
|
|
'DISPOSE' Name.Builtin
|
|
'(' Punctuation
|
|
'thisEntry' Name
|
|
')' Punctuation
|
|
';' Punctuation
|
|
'\n' Text
|
|
|
|
' \n ' Text
|
|
'END' Keyword.Reserved
|
|
';' Punctuation
|
|
' ' Text
|
|
'(* WHILE *)' Comment.Multiline
|
|
'\n' Text
|
|
|
|
' \n ' Text
|
|
'(* deallocate stack object and pass NIL to caller *)' Comment.Multiline
|
|
'\n' Text
|
|
|
|
' ' Text
|
|
'DEALLOCATE' Name
|
|
'(' Punctuation
|
|
'stack' Name
|
|
',' Punctuation
|
|
' ' Text
|
|
'TSIZE' Name.Builtin
|
|
'(' Punctuation
|
|
'Stack' Name
|
|
')' Punctuation
|
|
' ' Text
|
|
'+' Operator
|
|
' ' Text
|
|
'TSIZE' Name.Builtin
|
|
'(' Punctuation
|
|
'DataPtr' Name
|
|
')' Punctuation
|
|
' ' Text
|
|
'*' Operator
|
|
' ' Text
|
|
'(' Punctuation
|
|
'stack' Name
|
|
'^' Operator
|
|
'.' Punctuation
|
|
'arraySize' Name
|
|
' ' Text
|
|
'-' Operator
|
|
' ' Text
|
|
'1' Literal.Number.Integer
|
|
')' Punctuation
|
|
')' Punctuation
|
|
';' Punctuation
|
|
'\n' Text
|
|
|
|
' ' Text
|
|
'RETURN' Keyword.Reserved
|
|
' ' Text
|
|
'NIL' Name.Builtin
|
|
'\n\n' Text
|
|
|
|
'END' Keyword.Reserved
|
|
' ' Text
|
|
'dispose' Name
|
|
';' Punctuation
|
|
'\n\n\n' Text
|
|
|
|
'END' Keyword.Reserved
|
|
' ' Text
|
|
'LIFO' Name
|
|
'.' Punctuation
|
|
'\n' Text
|