The glsl-toolkit Reference Manual

Table of Contents

Next: , Previous: , Up: (dir)   [Contents][Index]

The glsl-toolkit Reference Manual

This is the glsl-toolkit Reference Manual, version 1.0.0, generated automatically by Declt version 2.4 "Will Decker" on Wed Jun 20 11:53:17 2018 GMT+0.


Next: , Previous: , Up: Top   [Contents][Index]

1 Introduction

About GLSL-Toolkit

This is a collection of tools written to allow you to wrangle OpenGL Shader Language (GLSL) source files. The library was written for GLSL4.5 sources, but should work with higher or lower versions as well.

How To

The primary functionality that this library gives you is parsing, serialising, and walking GLSL source code.

(glsl-toolkit:parse "int a = 0;
                     void main(){
                       int b = 1;
                       a = b;
                     }")

This will lex and parse the source into an AST. You can then turn the AST back into a code representation.

(glsl-toolkit:serialize *)

The library will take certain liberties at transforming the code while parsing and printing. This is done to normalise the code and make it easier to walk and change. The semantic meaning of the code should however be preserved verbatim. If this is not the case, please file an issue.

Aside from simply printing the source out again, you can also walk over it and transform it in a syntactically and semantically useful way. This way you can refactor the code. A simple example is in order.

(glsl-toolkit:serialize
  (glsl-toolkit:walk **
    (lambda (ast context environment)
      (if (glsl-toolkit:global-identifier-p ast environment)
          (format NIL "__~a" ast)
          ast))))

The code walker provides access to a number of predicates that allow you to figure out properties of the current node and the lexical meaning of identifiers. Have a look at the symbol index for the various predicate functions.

Finally, the library provides a way to merge individual shader files together. It does so while attempting to either unify or rename global identifiers that might clash. This is useful when multiple shader effects need to be chained together in a single shader pass.

(glsl-toolkit:merge-shader-sources '("
  out layout (location = 0) vec4 position;
  
  void foo();
  
  void main(){
    position += vec4(1, 2, 3, 4);
  }" "
  out layout (location = 0) vec4 pos;
  in layout (location = 0) vec4 col;
  
  void foo(){
    a();
  }
  
  void main(){
    pos += col;
  }"))

The merging does not come without its caveats. At times, it may be impossible to merge due to conflicting type declarations, and other times the system may not recognise a possible merge due to name or qualifier mismatch. While it should work for most cases, some exotic cases are likely to fail at may need manual intervention.

Some caveats exist in the parser as well. Since we cannot implement the behaviour of the preprocessor ourselves, we instead must opt for allowing preprocessor directives verbatim at certain points in the parse tree. We opt for allowing them at any point where a statement or declaration might occur, but not within expressions.


Next: , Previous: , Up: Top   [Contents][Index]

2 Systems

The main system appears first, followed by any subsystem dependency.


Previous: , Up: Systems   [Contents][Index]

2.1 glsl-toolkit

Maintainer

Nicolas Hafner <shinmera@tymoon.eu>

Author

Nicolas Hafner <shinmera@tymoon.eu>

Home Page

https://github.com/Shirakumo/glsl-toolkit

License

Artistic

Description

A library to parse and modify OpenGL Shader Language (GLSL) source code

Version

1.0.0

Dependencies
Source

glsl-toolkit.asd (file)

Components

Next: , Previous: , Up: Top   [Contents][Index]

3 Files

Files are sorted by type and then listed depth-first from the systems components trees.


Previous: , Up: Files   [Contents][Index]

3.1 Lisp


Next: , Previous: , Up: Lisp files   [Contents][Index]

3.1.1 glsl-toolkit.asd

Location

glsl-toolkit.asd

Systems

glsl-toolkit (system)


Next: , Previous: , Up: Lisp files   [Contents][Index]

3.1.2 glsl-toolkit/package.lisp

Parent

glsl-toolkit (system)

Location

package.lisp

Packages

Next: , Previous: , Up: Lisp files   [Contents][Index]

3.1.3 glsl-toolkit/toolkit.lisp

Dependency

package.lisp (file)

Parent

glsl-toolkit (system)

Location

toolkit.lisp

Exported Definitions
Internal Definitions

Next: , Previous: , Up: Lisp files   [Contents][Index]

3.1.4 glsl-toolkit/parser.lisp

Dependency

toolkit.lisp (file)

Parent

glsl-toolkit (system)

Location

parser.lisp

Exported Definitions
Internal Definitions

Next: , Previous: , Up: Lisp files   [Contents][Index]

3.1.5 glsl-toolkit/grammar.lisp

Dependency

parser.lisp (file)

Parent

glsl-toolkit (system)

Location

grammar.lisp

Exported Definitions
Internal Definitions

Next: , Previous: , Up: Lisp files   [Contents][Index]

3.1.6 glsl-toolkit/printer.lisp

Dependency

grammar.lisp (file)

Parent

glsl-toolkit (system)

Location

printer.lisp

Exported Definitions
Internal Definitions

Next: , Previous: , Up: Lisp files   [Contents][Index]

3.1.7 glsl-toolkit/walker.lisp

Dependency

printer.lisp (file)

Parent

glsl-toolkit (system)

Location

walker.lisp

Exported Definitions
Internal Definitions

Next: , Previous: , Up: Lisp files   [Contents][Index]

3.1.8 glsl-toolkit/merge.lisp

Dependency

walker.lisp (file)

Parent

glsl-toolkit (system)

Location

merge.lisp

Exported Definitions
Internal Definitions

Next: , Previous: , Up: Lisp files   [Contents][Index]

3.1.9 glsl-toolkit/sexpr.lisp

Dependency

merge.lisp (file)

Parent

glsl-toolkit (system)

Location

sexpr.lisp

Internal Definitions

Previous: , Up: Lisp files   [Contents][Index]

3.1.10 glsl-toolkit/documentation.lisp

Dependency

sexpr.lisp (file)

Parent

glsl-toolkit (system)

Location

documentation.lisp


Next: , Previous: , Up: Top   [Contents][Index]

4 Packages

Packages are listed by definition order.


Next: , Previous: , Up: Packages   [Contents][Index]

4.1 glsl-parser-rules

Source

package.lisp (file)

Nickname

org.shirakumo.trial.glsl.parser.rules

Exported Definitions

Previous: , Up: Packages   [Contents][Index]

4.2 glsl-toolkit

Source

package.lisp (file)

Nickname

org.shirakumo.trial.glsl

Use List

common-lisp

Exported Definitions
Internal Definitions

Next: , Previous: , Up: Top   [Contents][Index]

5 Definitions

Definitions are sorted by export status, category, package, and then by lexicographic order.


Next: , Previous: , Up: Definitions   [Contents][Index]

5.1 Exported definitions


Next: , Previous: , Up: Exported definitions   [Contents][Index]

5.1.1 Special variables

Special Variable: *glsl-keyword-symbols*

List to all the keywords in GLSL shader files but as interned and upcased keyword symbols.

See *GLSL-KEYWORDS*

Package

glsl-toolkit

Source

toolkit.lisp (file)

Special Variable: *glsl-keywords*

List to all the keywords in GLSL shader files.

This does not include terminals and other keywords such as {}/*+ etc.

Package

glsl-toolkit

Source

toolkit.lisp (file)


Next: , Previous: , Up: Exported definitions   [Contents][Index]

5.1.2 Symbol macros

Symbol Macro: no-value
Package

glsl-toolkit

Source

parser.lisp (file)

Expansion

(quote glsl-toolkit:no-value)


Next: , Previous: , Up: Exported definitions   [Contents][Index]

5.1.3 Macros

Macro: define-binary-op-walker TYPE

Define a walker for a binary AST object.

This walker recurses over the left and right nodes in the object and returns a fresh value constructed from them.

Package

glsl-toolkit

Source

walker.lisp (file)

Macro: define-empty-op-walker TYPE

Define a walker for an empty AST object.

This walker function does nothing but construct a fresh return value.

Package

glsl-toolkit

Source

walker.lisp (file)

Macro: define-object NAME RULE &body TRANSFORM

Defines a parsing object.

The RULE should be a parsing rule to match against. It should probably contain calls to the V rule in order to populate the V values list. This list is used to store the return values of the object.

TRANSFORM is an optional list of forms to be evaluated to transform the values list on a successful match. It acts as an implicit PROGN and the last value is returned as the value of the rule.

If no TRANSFORM is given, the return value is the V values list prepended with the name of the rule.

See DEFINE-RULE

Package

glsl-toolkit

Source

parser.lisp (file)

Macro: define-reference NAME &body RULES

Defines a reference parsing rule.

The body should be a number of sub-rules that may be matched in order to match this rule. Either the value stored in V by the V function, or the return value of the first matching sub-rule is returned.

See DEFINE-RULE

Package

glsl-toolkit

Source

parser.lisp (file)

Macro: define-rule NAME &body BODY

Defines a new parsing rule of the given name.

This will create a function definition in the ORG.SHIRAKUMO.TRIAL.GLSL.RULES package by re-interning the symbol in that package.

A default lexical binding named V is provided.

See DEFINE-REFERENCE
See DEFINE-OBJECT

Package

glsl-toolkit

Source

parser.lisp (file)

Macro: define-serialization TYPE ARGS &body BODY

Convenience function to define the serialization of AST objects of the given type.

ARGS must be a lambda-list to destructure the contents of the
AST object.

See SERIALIZER

Package

glsl-toolkit

Source

printer.lisp (file)

Macro: define-serializer TYPE (OBJECT) &body BODY

Convenience function to define a serializer function for AST objects of the given type.

See SERIALIZER

Package

glsl-toolkit

Source

printer.lisp (file)

Macro: define-unary-op-walker TYPE

Define a walker for a unary AST object.

This walker recurses over the single node in the object and returns a fresh value constructed from it.

Package

glsl-toolkit

Source

walker.lisp (file)

Macro: define-walker TYPE (AST FUNC ENV) &body BODY

Define a new walker function that is responsible for walking over a particular type of AST object node.

See *WALKERS*
See WALKER
See DEFINE-WALKING-BODY

Package

glsl-toolkit

Source

walker.lisp (file)

Macro: define-walking-body TYPE ARGS &body BODY

Convenience definition macro.

The ARGS should be a destructuring-bind lambda-list to destructure the contents of the object.

The body should be forms that provide the values to use in the resulting AST object. The last value should be the tail of the object’s list. Thus this is about equivalent to

(define-walker type (o)
(destructuring-bind .. (o)
(list* ’type body)))

Within the body the WALK function is rebound to one that can be conveniently used to recursively walk the AST. It only needs the new node to walk over. It optionally takes a new environment to supply.

You can reach the other function values like the full AST, the walk function, and the environment by changing the type to a list and providing the binding symbols as keyword arguments in it with :KEY :FUNC and :ENV.

See DEFINE-WALKER

Package

glsl-toolkit

Source

walker.lisp (file)

Macro: with-indentation (&optional STEP) &body BODY

Makes sure the body is evaluated with an increased indentation level.

See *INDENT*
See INDENT

Package

glsl-toolkit

Source

printer.lisp (file)

Macro: with-token-input VECTOR &body BODY

Readies the environment for token parsing.

This binds *TOKEN-ARRAY* to the given vector and binds *TOKEN-INDEX* to 0.

See *TOKEN-ARRAY*
See *TOKEN-INDEX*

Package

glsl-toolkit

Source

parser.lisp (file)


Next: , Previous: , Up: Exported definitions   [Contents][Index]

5.1.4 Compiler macros

Compiler Macro: advance &optional OFFSET
Package

glsl-toolkit

Source

parser.lisp (file)

Compiler Macro: backtrack &optional OFFSET
Package

glsl-toolkit

Source

parser.lisp (file)

Compiler Macro: consume ()
Package

glsl-toolkit

Source

parser.lisp (file)

Compiler Macro: end-of-tokens-p ()
Package

glsl-toolkit

Source

parser.lisp (file)

Compiler Macro: peek &optional OFFSET
Package

glsl-toolkit

Source

parser.lisp (file)

Compiler Macro: sformat STRING &rest ARGS
Package

glsl-toolkit

Source

printer.lisp (file)


Next: , Previous: , Up: Exported definitions   [Contents][Index]

5.1.5 Functions

Function: ! ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: != ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: % ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: %= ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: & ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: && ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: &= ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: ( ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: ) ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: * ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: *= ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: + ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: ++ ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: += ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: , ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: - ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: -- ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: -= ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: . ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: / ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: /= ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: : ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: ; ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: < ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: << ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: <<= ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: <= ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: = ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: == ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: > ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: >= ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: >> ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: >>= ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: ? ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: [ ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: ] ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: ^ ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: ^= ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: ^^ ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: addition ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: advance &optional OFFSET

Advances the current token index.

See *TOKEN-INDEX*
See BACKTRACK

Package

glsl-toolkit

Source

parser.lisp (file)

Function: array-initializer ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: array-modifier ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: array-specifier ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: assignment ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: assignment-expression ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: backtrack &optional OFFSET

Reduces the current token index.

See *TOKEN-INDEX*
See ADVANCE

Package

glsl-toolkit

Source

parser.lisp (file)

Function: basic-type ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: binding NAME ENVIRONMENT

Accessor to the binding in the environment for the given name.

See BINDINGS
See ENVIRONMENT

Package

glsl-toolkit

Source

walker.lisp (file)

Writer

(setf binding) (function)

Function: (setf binding) VALUE NAME ENVIRONMENT
Package

glsl-toolkit

Source

walker.lisp (file)

Reader

binding (function)

Function: bit-inversion ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: bitwise-and ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: boolean-constant ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: break ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: call-modifier ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: case-label ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: compile-rule RULE

Compile the rule s-expression.

The following types are handled specially:
- NULL NIL is returned
- KEYWORD Attempts to match a token that is EQ to this keyword. On success returns the keyword.
- SYMBOL Attempts to match the rule given named by the symbol. Returns whatever the rule returns.
- CHARACTER Attempts to match a token that is EQL to this character. Returns the character on match.
- STRING Attempts to match the string against the tokens. Returns the string on successful match.
- CONS One of the following compound, identified by the first symbol.
- AND Matches if all of the sub-rules match. Returns the last rule’s return value on successful match. - OR Matches if any of the sub-rules match.
Returns the first successful rule’s return value. - NOTANY Matches if none of the choices match.
Returns the token that did not match.
- ANY Matches if any of the choices match.
Returns the token that did match.
- WHEN Performs all the other sub-rules only if the first sub-rule matches. Returns the last sub-rule’s return value.
- V Makes sure the result of the sub-rule is added to the values list if the sub-rule matches. Returns what the sub-rule returned.
- * Repeatedly matches the sub-rule as many times as possible. Returns T.
- + Attempts to match the sub-rule at least once. Returns T on success.
- ? Attempts to match the sub-rule. If it does not match the secondary form is returned, or NO-VALUE. - ! Evaluates the sub-rule and returns its result, but always resets the token index to its initial value. - Otherwise the rule is returned unchanged.

See CONSUME-STRING
See CONSUME-ANY
See CONSUME-NOTANY
See DEFINE-RULE

Package

glsl-toolkit

Source

parser.lisp (file)

Function: compound-statement ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: condition ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: condition-declarator ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: conditional ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: conditional-expression ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: constant-expression ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: constant-p VALUE ENVIRONMENT

Returns T if the given AST node is a constant value.

Package

glsl-toolkit

Source

walker.lisp (file)

Function: consume ()

Returns the token at the current index and advances the index by one.

See PEEK
See ADVANCE

Package

glsl-toolkit

Source

parser.lisp (file)

Function: consume-any CHOICES

Consume any of the tokens in the choices sequence, if possible.

If a token matches, it is returned. Otherwise NIL is returned instead. The index is only modified if a match occurs.

Package

glsl-toolkit

Source

parser.lisp (file)

Function: consume-notany CHOICES

Consume any token that is not one of the tokens in the choices sequence.

If a token matches, it is returned. Otherwise NIL is
returned instead. The index is only modified if a match
occurs.

Package

glsl-toolkit

Source

parser.lisp (file)

Function: consume-string STRING

Attempts to consume the given string from the token array.

If the string matches, it is returned. Otherwise, NIL is returned instead. If the match succeeds, the token index is modified. Otherwise it is reset to the point where it was before the match was attempted.

Package

glsl-toolkit

Source

parser.lisp (file)

Function: consume-whitespace ()

Consumes all spaces and newlines in the token array from the current position on.

Package

glsl-toolkit

Source

parser.lisp (file)

Function: continue ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: control-flow-p VALUE ENVIRONMENT

Returns T if the given AST node is a control-flow instruction.

Package

glsl-toolkit

Source

walker.lisp (file)

Function: decimal-token ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: declaration ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: declaration-p VALUE ENVIRONMENT

Returns T if the given AST node is a declaration statement.

Package

glsl-toolkit

Source

walker.lisp (file)

Function: decrement-modifier ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: discard ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: division ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: do-statement ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: end-of-tokens-p ()

Returns true if the end of the token array has been reached.

See *TOKEN-ARRAY*
See *TOKEN-INDEX*

Package

glsl-toolkit

Source

parser.lisp (file)

Function: equal ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: exclusive-or ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: expression ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: expression-p VALUE ENVIRONMENT

Returns T if the given AST node is an expression.

Package

glsl-toolkit

Source

walker.lisp (file)

Function: expression-statement ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: field-modifier ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: float-constant ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: float-token ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: for-statement ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: function-declaration ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: function-definition ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: function-identifier-p VALUE ENVIRONMENT

Returns T if the given AST node is an identifier for a function.

Package

glsl-toolkit

Source

walker.lisp (file)

Function: function-prototype ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: global-identifier-p VALUE ENVIRONMENT

Returns T if the given AST node is an identifier that refers to a global definition.

Package

glsl-toolkit

Source

walker.lisp (file)

Function: greater-equal-than ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: greater-than ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: hexadecimal-token ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: identifier ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: identifier-p VALUE ENVIRONMENT

Returns T if the given AST node might be an identifier.

This is not always accurate, as some identifiers can also be types at the same time. It thus depends on the context.

Package

glsl-toolkit

Source

walker.lisp (file)

Function: identifier-token ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: inclusive-or ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: increment-modifier ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: indent ()

Starts a fresh line and emits as many spaces as the *INDENT* variable dictates.

Package

glsl-toolkit

Source

printer.lisp (file)

Function: initializer ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: instance-name ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: integer-constant ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: integer-token ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: interface-declaration ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: interpolation-qualifier ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: invariant-qualifier ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: inversion ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: iteration-statement ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: jump-statement ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: keyword-p VALUE ENVIRONMENT

Returns T if the given AST node is a GLSL keyword.

See *GLSL-KEYWORD-SYMBOLS*

Package

glsl-toolkit

Source

walker.lisp (file)

Function: keyword-token ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: layout-qualifier ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: layout-qualifier-id ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: left-shift ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: less-equal-than ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: less-than ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: lex INPUT &optional TOPLEVEL-RULE

Lex the input string into a token array for use in parsing.

See NORMALIZE-SHADER-SOURCE
See RULE
See PARSE

Package

glsl-toolkit

Source

parser.lisp (file)

Function: local-identifier-p VALUE ENVIRONMENT

Returns T if the given AST node is an identifier that refers to a local definition.

Package

glsl-toolkit

Source

walker.lisp (file)

Function: logical-and ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: logical-or ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: logical-xor ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: make-environment &optional PARENT

Create a new environment object.

If not parent environment is passed in, the environment is assumed to be a top-level root environment.

See ENVIRONMENT

Package

glsl-toolkit

Source

walker.lisp (file)

Function: matching-declarators-p A B

Returns true if the two variable declarations are considered to match.

This is true if:
- The first of both lists (qualifiers) match by MATCHING-QUALIFIERS-P - The second of both lists (specifiers) match by MATCHING-SPECIFIERS-P - The fourth of both lists (array-identifiers) match by EQUAL

The third of both lists (identifiers) must not match.
The fifth of both lists (initializers) must not match.

Package

glsl-toolkit

Source

merge.lisp (file)

Function: matching-qualifiers-p A B

Returns true if the two given qualifier lists are considered to match.

The following qualifier parts are not considered:
:HIGHP :MEDIUMP :LOWP :INVARIANT :PRECISE :SMOOTH :FLAT :NOPERSPECTIVE

All other qualifiers must match by EQUAL, but don’t have to be
in the same order.

See https://www.khronos.org/opengl/wiki/Shader_Compilation#Qualifier_matching

Package

glsl-toolkit

Source

merge.lisp (file)

Function: matching-specifiers-p A B

Returns true if the two given specifier lists are considered to match.

In order to match, the two lists have to be EQUAL.

Package

glsl-toolkit

Source

merge.lisp (file)

Function: merge-shader-sources SOURCES &optional TO

Convenience function to merge the sources of multiple shaders into a single one.

See PARSE
See MERGE-SHADERS
See SERIALIZE

Package

glsl-toolkit

Source

merge.lisp (file)

Function: merge-shaders &rest SHADERS

Merge the given shader ASTs into a single AST.

The top-level AST nodes must be AST objects of type SHADER.

The merging will attempt to conflate declarations where possible and rename variables where necessary, in order to create a single shader that is internally consistent.

It also emits a single main function at the end, which does nothing but call the main function of each sub-shader in the sequence that the shaders were passed.

See HANDLE-DECLARATION
See HANDLE-IDENTIFIER
See WALK
See MERGE-SHADER-SOURCES

Package

glsl-toolkit

Source

merge.lisp (file)

Function: modified-reference ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: modulus ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: multiple-expressions ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: multiplication ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: negation ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: normalize-shader-source INPUT

Attempts to normalise the shader source code.

This does the following:
- Removes any and all comments from the code
- Handles the backslash-before-newline trick to get multiple lines to act as one.
- Converts CRLF/LFCR/LFLF/CRCR into NEWLINE
- Converts TAB to SPACE
- Converts consecutive whitespace into singular whitespace while preserving newlines.

The input may be one of the following types:
- PATHNAME
- STRING
- STREAM

See NEWLINE-P

Package

glsl-toolkit

Source

parser.lisp (file)

Function: not-equal ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: octal-token ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: operator ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: parameter-declaration ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: parse INPUT &optional TOPLEVEL-RULE

Parses the given GLSL shader source input into an AST.

The input may be of the following types:
- STRING STREAM PATHNAME
The input is lexed before parsing as by LEX
- LIST
The input is converted into a vector
- VECTOR
The input is parsed by the given toplevel parsing rule.

See LEX
See RULE

Package

glsl-toolkit

Source

parser.lisp (file)

Function: peek &optional OFFSET

Returns the token at the index relative to the current position.

See *TOKEN-ARRAY*
See *TOKEN-INDEX*

Package

glsl-toolkit

Source

parser.lisp (file)

Function: postfix-expression ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: precise-qualifier ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: precision-declaration ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: precision-qualifier ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: prefix-decrement ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: prefix-increment ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: preprocessor-directive ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: preprocessor-p VALUE ENVIRONMENT

Returns T if the given AST node is a preprocessor instruction.

Package

glsl-toolkit

Source

walker.lisp (file)

Function: preprocessor-token ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: primary-expression ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: reference-modifier ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: remove-rule NAME

Removes the parsing rule of the given name.

Package

glsl-toolkit

Source

parser.lisp (file)

Function: remove-serializer TYPE

Removes the serializer function for AST objects of the given type.

See *SERIALIZERS*
See SERIALIZER

Package

glsl-toolkit

Source

printer.lisp (file)

Function: remove-walker TYPE

Removes the walker function for AST objects of the given type.

See WALKER
See *WALKERS*

Package

glsl-toolkit

Source

walker.lisp (file)

Function: return ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: right-shift ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: root-environment-p ENVIRONMENT

Returns T if the environment is a top-level root environment.

See ENVIRONMENT
See ROOT

Package

glsl-toolkit

Source

walker.lisp (file)

Function: rule NAME

Returns the symbol that identifies the parsing rule of the given name.

This is a place that can be set with the function object
that should be used to parse the rule of the given name.

If no such rule exists, an error is signalled.

Package

glsl-toolkit

Source

parser.lisp (file)

Writer

(setf rule) (function)

Function: (setf rule) PARSER NAME
Package

glsl-toolkit

Source

parser.lisp (file)

Reader

rule (function)

Function: same-+ ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: selection-statement ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: serialize PART &optional TO

Serializes the AST part to shader source.

TO may be one of the following:
- NULL
The output is gathered into a string and returned. - T
The output is sent to *STANDARD-OUTPUT*.
- STREAM
The output is sent to this stream.
- PATHNAME
The output is written to the file. If the file already exists, an error is signalled.

See *SERIALIZE-STREAM*
See SERIALIZE-PART

Package

glsl-toolkit

Source

printer.lisp (file)

Function: serialize-part PART

Serializes the AST part.

This appropriately handles all values that can be contained in the AST. For AST objects, an appropriate serializer function is called if possible. Should an unknown AST object occur, an error is signalled.

See SERIALIZER

Package

glsl-toolkit

Source

printer.lisp (file)

Function: serializer TYPE

Accessor to the serializing function for AST objects of the given type.

See *SERIALIZERS*
See DEFINE-SERIALIZER
See REMOVE-SERIALIZER

Package

glsl-toolkit

Source

printer.lisp (file)

Writer

(setf serializer) (function)

Function: (setf serializer) FUNCTION TYPE
Package

glsl-toolkit

Source

printer.lisp (file)

Reader

serializer (function)

Function: sformat STRING &rest ARGS

Convenience function used to format to the serializing stream.

A special format directive ~O is provided as well, which causes SERIALIZE-PART to be called on the respective object.

Package

glsl-toolkit

Source

printer.lisp (file)

Function: shader ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: simple-statement ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: statement ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: statement-p VALUE ENVIRONMENT

Returns T if the given AST node is a statement.

See DECLARATION-P
See EXPRESSION-P
See CONTROL-FLOW-P

Package

glsl-toolkit

Source

walker.lisp (file)

Function: storage-qualifier ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: struct-declaration ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: struct-declarator ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: struct-field-declarator ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: struct-specifier ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: subroutine-qualifier ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: subtraction ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: switch-statement ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: token ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: tokenize ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: trace-parse ()

Cause all parse rule functions to emit tracing information.

See UNTRACE-PARSE
See TRACE-PARSE-FUNC

Package

glsl-toolkit

Source

parser.lisp (file)

Function: type-name ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: type-qualifier ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: type-specifier ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: type-specifier-nonarray ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: unary-expression ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: uniquify TABLE &optional NAME

Create a (hopefully) unique identifier for the given name.

The returned name is prefixed by two underscores. Identifiers like that are reserved for use by the underlying library or framework (us), so there should not be any clash with user identifiers unless the shader is not conforming to begin with.

See *UNIQUE-COUNTER*

Package

glsl-toolkit

Source

merge.lisp (file)

Function: untrace-parse ()

Make all parse rule functions cease to emit tracing information.

See TRACE-PARSE
See UNTRACE-PARSE-FUNC

Package

glsl-toolkit

Source

parser.lisp (file)

Function: variable-declaration ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: variable-identifier-p VALUE ENVIRONMENT

Returns T if the given AST node is an identifier for a variable.

Package

glsl-toolkit

Source

walker.lisp (file)

Function: variable-initializer ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: walk AST FUNCTION &optional ENVIRONMENT

Walk over the AST, calling FUNCTION on each interesting node.

Returns a fresh AST that was constructed by the function.

The function will be called with three arguments:
- The AST node at the current point
- The surrounding context in which the AST node is
- The environment object that maintains lexical information

The function should return a single value, which is the value that should be put into a fresh AST in place of the original node.

Note that calling any of the environment inspection functions on an identifier in a lower level than the current AST node that the function received is not going to work. The lexical information is only guaranteed to be ready by the time the function is called with the identifier itself.

See ROOT-ENVIRONMENT-P
See PREPROCESSOR-P
See CONSTANT-P
See DECLARATION-P
See EXPRESSION-P
See CONTROL-FLOW-P
See KEYWORD-P
See STATEMENT-P
See IDENTIFIER-P
See GLOBAL-IDENTIFIER-P
See LOCAL-IDENTIFIER-P
See VARIABLE-IDENTIFIER-P
See FUNCTION-IDENTIFIER-P
See ENVIRONMENT
See WALK-PART

Package

glsl-toolkit

Source

walker.lisp (file)

Function: walk-part AST CONTEXT FUNCTION ENVIRONMENT

Walk over the given AST node.

On AST objects, this will call out to the respective walker function.

See WALKER

Package

glsl-toolkit

Source

walker.lisp (file)

Function: walker TYPE

Accessor to the walker function for AST objects of the given type.

See *WALKERS*
See REMOVE-WALKER
See DEFINE-WALKER

Package

glsl-toolkit

Source

walker.lisp (file)

Writer

(setf walker) (function)

Function: (setf walker) FUNCTION TYPE
Package

glsl-toolkit

Source

walker.lisp (file)

Reader

walker (function)

Function: while-statement ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: whitespace ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: { ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: | ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: |= ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: || ()
Package

glsl-parser-rules

Source

grammar.lisp (file)

Function: } ()
Package

glsl-parser-rules

Source

grammar.lisp (file)


Previous: , Up: Exported definitions   [Contents][Index]

5.1.6 Structures

Structure: environment ()

Struct to hold information about the lexical environment during code walking.

See MAKE-ENVIRONMENT
See ROOT
See BINDINGS

Package

glsl-toolkit

Source

walker.lisp (file)

Direct superclasses

structure-object (structure)

Direct slots
Slot: root
Readers

root (function)

Writers

(setf root) (function)

Slot: bindings
Initform

(make-hash-table :test (quote equal))

Readers

bindings (function)

Writers

(setf bindings) (function)


Previous: , Up: Definitions   [Contents][Index]

5.2 Internal definitions


Next: , Previous: , Up: Internal definitions   [Contents][Index]

5.2.1 Special variables

Special Variable: *indent*

Variable to represent the current indenting level.

See WITH-INDENTATION
See INDENT

Package

glsl-toolkit

Source

printer.lisp (file)

Special Variable: *serialize-stream*

The stream to which the serializing output is sent to.

This has to be bound when SERIALIZE-PART is called.

Package

glsl-toolkit

Source

printer.lisp (file)

Special Variable: *serializers*

Hash table associating AST object types to serializer functions.

The function must accept a single argument, which is the
AST object itself.

See SERIALIZER
See REMOVE-SERIALIZER

Package

glsl-toolkit

Source

printer.lisp (file)

Special Variable: *sexpr-transforms*
Package

glsl-toolkit

Source

sexpr.lisp (file)

Special Variable: *token-array*

Holds a vector of tokens to be processed by the parser.

See PEEK
See CONSUME
See *TOKEN-INDEX*
See WITH-TOKEN-INPUT

Package

glsl-toolkit

Source

parser.lisp (file)

Special Variable: *token-index*

Holds the index into the token array that represents the current parser position.

See ADVANCE
See BACKTRACK
See *TOKEN-ARRAY*
See WITH-TOKEN-INPUT

Package

glsl-toolkit

Source

parser.lisp (file)

Special Variable: *trace-level*

Integer to represent the current stack level during tracing.

Package

glsl-toolkit

Source

parser.lisp (file)

Special Variable: *traced*

Hash table to hold associate names with the original function definitions.

Package

glsl-toolkit

Source

parser.lisp (file)

Special Variable: *unique-counter*

Counter to hold the current index used to compute names for unique identifiers.

See UNIQUIFY

Package

glsl-toolkit

Source

merge.lisp (file)

Special Variable: *walkers*

Hash table associating AST object types to walker functions.

A walker function must accept three arguments:
- The AST object to process
- The function that should walk over the AST
- The current lexical environment
It must return an AST object to use in place of the current one in the resulting AST.

See WALKER
See REMOVE-WALKER
See DEFINE-WALKER

Package

glsl-toolkit

Source

walker.lisp (file)


Next: , Previous: , Up: Internal definitions   [Contents][Index]

5.2.2 Macros

Macro: define-binary-op NAME LEFT OP RIGHT

Shorthand to define a binary operator object.

This takes care to avoid duplicate parsing of the same sequence if the subsequence should succeed. Meaning that if the left expression matches, but the operator or the right one does not it simply returns the left expression, instead of failing to match and causing a re-matching lower down in the tree.

Without this optimisation, performance would suffer greatly.

See DEFINE-OBJECT

Package

glsl-toolkit

Source

grammar.lisp (file)

Macro: define-expr-binary NAME AST DEFAULT
Package

glsl-toolkit

Source

sexpr.lisp (file)

Macro: define-operator-objects &body NAMES

Shorthand to define an object that parses a string and returns the keyword version of that string.

Used to define the various token objects.

See DEFINE-OBJECT

Package

glsl-toolkit

Source

grammar.lisp (file)

Macro: define-sexpr-comparator NAME AST
Package

glsl-toolkit

Source

sexpr.lisp (file)

Macro: define-sexpr-transform OP ARGS &body BODY
Package

glsl-toolkit

Source

sexpr.lisp (file)

Macro: with-glsl-syntax &body FORMS
Package

glsl-toolkit

Source

sexpr.lisp (file)


Next: , Previous: , Up: Internal definitions   [Contents][Index]

5.2.3 Functions

Function: %format-object S A CP AT

Helper function to call SERIALIZE-PART in a format string.

Package

glsl-toolkit

Source

printer.lisp (file)

Function: %make-environment &key (ROOT ROOT) (BINDINGS BINDINGS)

Construct a new environment object.

See ENVIRONMENT
See MAKE-ENVIRONMENT

Package

glsl-toolkit

Source

walker.lisp (file)

Function: bindings INSTANCE

Accessor to the table associating identifiers to bindings.

The values must be lists where the first item is a keyword that identifies the type of binding as either a :FUNCTION or :VARIABLE binding.

See ENVIRONMENT
See BINDING

Package

glsl-toolkit

Source

walker.lisp (file)

Writer

(setf bindings) (function)

Function: (setf bindings) VALUE INSTANCE
Package

glsl-toolkit

Source

walker.lisp (file)

Reader

bindings (function)

Function: call-traced-function NAME

Wrapper to output trace information around the call to the given function.

See *TRACE-LEVEL*
See *TRACED*

Package

glsl-toolkit

Source

parser.lisp (file)

Function: check-parse-complete TOPLEVEL-RULE
Package

glsl-toolkit

Source

parser.lisp (file)

Function: compile-format-string STRING

Rewrite the format string so that the ~O directive is acceptable.

Package

glsl-toolkit

Source

printer.lisp (file)

Function: enlist LIST &rest ITEMS

Ensures that LIST is a list.

If it is not, it is combined with ITEMS to form a list.

Package

glsl-toolkit

Source

toolkit.lisp (file)

Function: environment-p OBJECT
Package

glsl-toolkit

Source

walker.lisp (file)

Function: find-any CHOICES SEQUENCE

Like CL:FIND, but the item to find is a sequence of things that can be found.

Package

glsl-toolkit

Source

toolkit.lisp (file)

Function: find-direction-qualifier QUALIFIERS

Find the direction qualifier keyword in the qualifiers list.

Package

glsl-toolkit

Source

merge.lisp (file)

Function: find-layout-qualifier QUALIFIERS

Find the layout qualifier object in the qualifiers list.

Package

glsl-toolkit

Source

merge.lisp (file)

Function: find-matching-layout-declaration QUALIFIERS DECLARATIONS
Package

glsl-toolkit

Source

merge.lisp (file)

Function: handle-declaration AST CONTEXT ENVIRONMENT GLOBAL-ENV

Handles a declaration during a shader merging operation.

This will take care of registering the identifier with the global environment, substituting the name if necessary, merging the
declarations if possible, and erroring if there is a severe
mismatch that cannot be resolved.

The merging of variable declarations is in part according to the
OpenGL specification on interface matching between shader stages.
More specifically, the following strategy is employed here:
- If the declaration is a pipeline declaration (in/out/inout)
- If it has a layout qualifier
- If there is no known matching layout qualifier, register it
- If there is one and the declarations match, map the name to
that of the previous declaration and remove the current one
- Otherwise error as there are conflicting declarations that
cannot be rectified
- If the identifier is already known
- If the declarations of this one and the previous declaration
of the same identifier match, map the name to that of the
previous declaration and remove the current one
- Otherwise warn about the possible mismatch and remap the
current identifier to a new one
- Store the identifier directly and return the AST as-is
- If the identifier is already known
- Remap the identifier to a new one
- Otherwise store the identifier directly and return the AST as-is

See https://www.khronos.org/opengl/wiki/Shader_Compilation#Interface_matching See FIND-DIRECTION-QUALIFIER
See FIND-LAYOUT-QUALIFIER
See MATCHING-DECLARATORS-P
See MERGE-SHADERS

Package

glsl-toolkit

Source

merge.lisp (file)

Function: handle-identifier AST CONTEXT ENVIRONMENT GLOBAL-ENV

Handles an identifier during a shader merging operation.

This will take care of substituting the identifier if it has been remapped globally.

See GLOBAL-IDENTIFIER-P
See MERGE-SHADERS

Package

glsl-toolkit

Source

merge.lisp (file)

Function: mapcar* FUNCTION LIST

Like CL:MAPCAR, but only gathers non-NIL results.

Package

glsl-toolkit

Source

toolkit.lisp (file)

Function: merge-plists A B

Merges the two plists together by appending their values for the same keys.

Returns a fresh plist.

Package

glsl-toolkit

Source

toolkit.lisp (file)

Function: newline-p INPUT

Returns true if the input is a newline character and thus either CR or LF.

Package

glsl-toolkit

Source

parser.lisp (file)

Function: remove-sexpr-transform OP
Package

glsl-toolkit

Source

sexpr.lisp (file)

Function: root INSTANCE

Accessor to the root environment.

The root environment is the top-level lexical environment that holds all global definitions. On root environments, this must resolve to the environment instance itself.

See ENVIRONMENT

Package

glsl-toolkit

Source

walker.lisp (file)

Writer

(setf root) (function)

Function: (setf root) VALUE INSTANCE
Package

glsl-toolkit

Source

walker.lisp (file)

Reader

root (function)

Function: separate-qualifier-specifier TYPES
Package

glsl-toolkit

Source

sexpr.lisp (file)

Function: sexpr->glsl-ast FORM
Package

glsl-toolkit

Source

sexpr.lisp (file)

Function: sexpr-transform OP
Function: (setf sexpr-transform) FUNCTION OP
Package

glsl-toolkit

Source

sexpr.lisp (file)

Function: split-shader-into-groups SHADER
Package

glsl-toolkit

Source

merge.lisp (file)

Function: starts-with START SEQUENCE
Package

glsl-toolkit

Source

toolkit.lisp (file)

Function: symbol->identifier SYMBOL
Package

glsl-toolkit

Source

sexpr.lisp (file)

Function: trace-parse-func NAME

Ensures the given function is being traced for parsing, if it isn’t already.

This replaces the global function definition.

See CALL-TRACED-FUNCTION
See *TRACED*
See UNTRACE-PARSE-FUNC

Package

glsl-toolkit

Source

parser.lisp (file)

Function: untrace-parse-func NAME

Ensures the given functions restored to its original definition, if it isn’t already.

This replaces the global function definition.

See *TRACED*
See TRACE-PARSE-FUNC

Package

glsl-toolkit

Source

parser.lisp (file)


Previous: , Up: Internal definitions   [Contents][Index]

5.2.4 Types

Type: index ()

Type specifier for a token index.

Package

glsl-toolkit

Source

parser.lisp (file)


Previous: , Up: Top   [Contents][Index]

Appendix A Indexes


Next: , Previous: , Up: Indexes   [Contents][Index]

A.1 Concepts

Jump to:   F   G   L  
Index Entry  Section

F
File, Lisp, glsl-toolkit.asd: The glsl-toolkit<dot>asd file
File, Lisp, glsl-toolkit/documentation.lisp: The glsl-toolkit/documentation<dot>lisp file
File, Lisp, glsl-toolkit/grammar.lisp: The glsl-toolkit/grammar<dot>lisp file
File, Lisp, glsl-toolkit/merge.lisp: The glsl-toolkit/merge<dot>lisp file
File, Lisp, glsl-toolkit/package.lisp: The glsl-toolkit/package<dot>lisp file
File, Lisp, glsl-toolkit/parser.lisp: The glsl-toolkit/parser<dot>lisp file
File, Lisp, glsl-toolkit/printer.lisp: The glsl-toolkit/printer<dot>lisp file
File, Lisp, glsl-toolkit/sexpr.lisp: The glsl-toolkit/sexpr<dot>lisp file
File, Lisp, glsl-toolkit/toolkit.lisp: The glsl-toolkit/toolkit<dot>lisp file
File, Lisp, glsl-toolkit/walker.lisp: The glsl-toolkit/walker<dot>lisp file

G
glsl-toolkit.asd: The glsl-toolkit<dot>asd file
glsl-toolkit/documentation.lisp: The glsl-toolkit/documentation<dot>lisp file
glsl-toolkit/grammar.lisp: The glsl-toolkit/grammar<dot>lisp file
glsl-toolkit/merge.lisp: The glsl-toolkit/merge<dot>lisp file
glsl-toolkit/package.lisp: The glsl-toolkit/package<dot>lisp file
glsl-toolkit/parser.lisp: The glsl-toolkit/parser<dot>lisp file
glsl-toolkit/printer.lisp: The glsl-toolkit/printer<dot>lisp file
glsl-toolkit/sexpr.lisp: The glsl-toolkit/sexpr<dot>lisp file
glsl-toolkit/toolkit.lisp: The glsl-toolkit/toolkit<dot>lisp file
glsl-toolkit/walker.lisp: The glsl-toolkit/walker<dot>lisp file

L
Lisp File, glsl-toolkit.asd: The glsl-toolkit<dot>asd file
Lisp File, glsl-toolkit/documentation.lisp: The glsl-toolkit/documentation<dot>lisp file
Lisp File, glsl-toolkit/grammar.lisp: The glsl-toolkit/grammar<dot>lisp file
Lisp File, glsl-toolkit/merge.lisp: The glsl-toolkit/merge<dot>lisp file
Lisp File, glsl-toolkit/package.lisp: The glsl-toolkit/package<dot>lisp file
Lisp File, glsl-toolkit/parser.lisp: The glsl-toolkit/parser<dot>lisp file
Lisp File, glsl-toolkit/printer.lisp: The glsl-toolkit/printer<dot>lisp file
Lisp File, glsl-toolkit/sexpr.lisp: The glsl-toolkit/sexpr<dot>lisp file
Lisp File, glsl-toolkit/toolkit.lisp: The glsl-toolkit/toolkit<dot>lisp file
Lisp File, glsl-toolkit/walker.lisp: The glsl-toolkit/walker<dot>lisp file

Jump to:   F   G   L  

Next: , Previous: , Up: Indexes   [Contents][Index]

A.2 Functions

Jump to:   !   %   &   (   )   *   +   ,   -   .   /   :   ;   <   =   >   ?   [   ]   ^   {   |   }  
A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   P   R   S   T   U   V   W  
Index Entry  Section

!
!: Exported functions
!=: Exported functions

%
%: Exported functions
%=: Exported functions
%format-object: Internal functions
%make-environment: Internal functions

&
&: Exported functions
&&: Exported functions
&=: Exported functions

(
(: Exported functions
(setf binding): Exported functions
(setf bindings): Internal functions
(setf root): Internal functions
(setf rule): Exported functions
(setf serializer): Exported functions
(setf sexpr-transform): Internal functions
(setf walker): Exported functions

)
): Exported functions

*
*: Exported functions
*=: Exported functions

+
+: Exported functions
++: Exported functions
+=: Exported functions

,
,: Exported functions

-
-: Exported functions
--: Exported functions
-=: Exported functions

.
.: Exported functions

/
/: Exported functions
/=: Exported functions

:
:: Exported functions

;
;: Exported functions

<
<: Exported functions
<<: Exported functions
<<=: Exported functions
<=: Exported functions

=
=: Exported functions
==: Exported functions

>
>: Exported functions
>=: Exported functions
>>: Exported functions
>>=: Exported functions

?
?: Exported functions

[
[: Exported functions

]
]: Exported functions

^
^: Exported functions
^=: Exported functions
^^: Exported functions

{
{: Exported functions

|
|: Exported functions
|=: Exported functions
||: Exported functions

}
}: Exported functions

A
addition: Exported functions
advance: Exported compiler macros
advance: Exported functions
array-initializer: Exported functions
array-modifier: Exported functions
array-specifier: Exported functions
assignment: Exported functions
assignment-expression: Exported functions

B
backtrack: Exported compiler macros
backtrack: Exported functions
basic-type: Exported functions
binding: Exported functions
bindings: Internal functions
bit-inversion: Exported functions
bitwise-and: Exported functions
boolean-constant: Exported functions
break: Exported functions

C
call-modifier: Exported functions
call-traced-function: Internal functions
case-label: Exported functions
check-parse-complete: Internal functions
compile-format-string: Internal functions
compile-rule: Exported functions
Compiler Macro, advance: Exported compiler macros
Compiler Macro, backtrack: Exported compiler macros
Compiler Macro, consume: Exported compiler macros
Compiler Macro, end-of-tokens-p: Exported compiler macros
Compiler Macro, peek: Exported compiler macros
Compiler Macro, sformat: Exported compiler macros
compound-statement: Exported functions
condition: Exported functions
condition-declarator: Exported functions
conditional: Exported functions
conditional-expression: Exported functions
constant-expression: Exported functions
constant-p: Exported functions
consume: Exported compiler macros
consume: Exported functions
consume-any: Exported functions
consume-notany: Exported functions
consume-string: Exported functions
consume-whitespace: Exported functions
continue: Exported functions
control-flow-p: Exported functions

D
decimal-token: Exported functions
declaration: Exported functions
declaration-p: Exported functions
decrement-modifier: Exported functions
define-binary-op: Internal macros
define-binary-op-walker: Exported macros
define-empty-op-walker: Exported macros
define-expr-binary: Internal macros
define-object: Exported macros
define-operator-objects: Internal macros
define-reference: Exported macros
define-rule: Exported macros
define-serialization: Exported macros
define-serializer: Exported macros
define-sexpr-comparator: Internal macros
define-sexpr-transform: Internal macros
define-unary-op-walker: Exported macros
define-walker: Exported macros
define-walking-body: Exported macros
discard: Exported functions
division: Exported functions
do-statement: Exported functions

E
end-of-tokens-p: Exported compiler macros
end-of-tokens-p: Exported functions
enlist: Internal functions
environment-p: Internal functions
equal: Exported functions
exclusive-or: Exported functions
expression: Exported functions
expression-p: Exported functions
expression-statement: Exported functions

F
field-modifier: Exported functions
find-any: Internal functions
find-direction-qualifier: Internal functions
find-layout-qualifier: Internal functions
find-matching-layout-declaration: Internal functions
float-constant: Exported functions
float-token: Exported functions
for-statement: Exported functions
Function, !: Exported functions
Function, !=: Exported functions
Function, %: Exported functions
Function, %=: Exported functions
Function, %format-object: Internal functions
Function, %make-environment: Internal functions
Function, &: Exported functions
Function, &&: Exported functions
Function, &=: Exported functions
Function, (: Exported functions
Function, (setf binding): Exported functions
Function, (setf bindings): Internal functions
Function, (setf root): Internal functions
Function, (setf rule): Exported functions
Function, (setf serializer): Exported functions
Function, (setf sexpr-transform): Internal functions
Function, (setf walker): Exported functions
Function, ): Exported functions
Function, *: Exported functions
Function, *=: Exported functions
Function, +: Exported functions
Function, ++: Exported functions
Function, +=: Exported functions
Function, ,: Exported functions
Function, -: Exported functions
Function, --: Exported functions
Function, -=: Exported functions
Function, .: Exported functions
Function, /: Exported functions
Function, /=: Exported functions
Function, :: Exported functions
Function, ;: Exported functions
Function, <: Exported functions
Function, <<: Exported functions
Function, <<=: Exported functions
Function, <=: Exported functions
Function, =: Exported functions
Function, ==: Exported functions
Function, >: Exported functions
Function, >=: Exported functions
Function, >>: Exported functions
Function, >>=: Exported functions
Function, ?: Exported functions
Function, addition: Exported functions
Function, advance: Exported functions
Function, array-initializer: Exported functions
Function, array-modifier: Exported functions
Function, array-specifier: Exported functions
Function, assignment: Exported functions
Function, assignment-expression: Exported functions
Function, backtrack: Exported functions
Function, basic-type: Exported functions
Function, binding: Exported functions
Function, bindings: Internal functions
Function, bit-inversion: Exported functions
Function, bitwise-and: Exported functions
Function, boolean-constant: Exported functions
Function, break: Exported functions
Function, call-modifier: Exported functions
Function, call-traced-function: Internal functions
Function, case-label: Exported functions
Function, check-parse-complete: Internal functions
Function, compile-format-string: Internal functions
Function, compile-rule: Exported functions
Function, compound-statement: Exported functions
Function, condition: Exported functions
Function, condition-declarator: Exported functions
Function, conditional: Exported functions
Function, conditional-expression: Exported functions
Function, constant-expression: Exported functions
Function, constant-p: Exported functions
Function, consume: Exported functions
Function, consume-any: Exported functions
Function, consume-notany: Exported functions
Function, consume-string: Exported functions
Function, consume-whitespace: Exported functions
Function, continue: Exported functions
Function, control-flow-p: Exported functions
Function, decimal-token: Exported functions
Function, declaration: Exported functions
Function, declaration-p: Exported functions
Function, decrement-modifier: Exported functions
Function, discard: Exported functions
Function, division: Exported functions
Function, do-statement: Exported functions
Function, end-of-tokens-p: Exported functions
Function, enlist: Internal functions
Function, environment-p: Internal functions
Function, equal: Exported functions
Function, exclusive-or: Exported functions
Function, expression: Exported functions
Function, expression-p: Exported functions
Function, expression-statement: Exported functions
Function, field-modifier: Exported functions
Function, find-any: Internal functions
Function, find-direction-qualifier: Internal functions
Function, find-layout-qualifier: Internal functions
Function, find-matching-layout-declaration: Internal functions
Function, float-constant: Exported functions
Function, float-token: Exported functions
Function, for-statement: Exported functions
Function, function-declaration: Exported functions
Function, function-definition: Exported functions
Function, function-identifier-p: Exported functions
Function, function-prototype: Exported functions
Function, global-identifier-p: Exported functions
Function, greater-equal-than: Exported functions
Function, greater-than: Exported functions
Function, handle-declaration: Internal functions
Function, handle-identifier: Internal functions
Function, hexadecimal-token: Exported functions
Function, identifier: Exported functions
Function, identifier-p: Exported functions
Function, identifier-token: Exported functions
Function, inclusive-or: Exported functions
Function, increment-modifier: Exported functions
Function, indent: Exported functions
Function, initializer: Exported functions
Function, instance-name: Exported functions
Function, integer-constant: Exported functions
Function, integer-token: Exported functions
Function, interface-declaration: Exported functions
Function, interpolation-qualifier: Exported functions
Function, invariant-qualifier: Exported functions
Function, inversion: Exported functions
Function, iteration-statement: Exported functions
Function, jump-statement: Exported functions
Function, keyword-p: Exported functions
Function, keyword-token: Exported functions
Function, layout-qualifier: Exported functions
Function, layout-qualifier-id: Exported functions
Function, left-shift: Exported functions
Function, less-equal-than: Exported functions
Function, less-than: Exported functions
Function, lex: Exported functions
Function, local-identifier-p: Exported functions
Function, logical-and: Exported functions
Function, logical-or: Exported functions
Function, logical-xor: Exported functions
Function, make-environment: Exported functions
Function, mapcar*: Internal functions
Function, matching-declarators-p: Exported functions
Function, matching-qualifiers-p: Exported functions
Function, matching-specifiers-p: Exported functions
Function, merge-plists: Internal functions
Function, merge-shader-sources: Exported functions
Function, merge-shaders: Exported functions
Function, modified-reference: Exported functions
Function, modulus: Exported functions
Function, multiple-expressions: Exported functions
Function, multiplication: Exported functions
Function, negation: Exported functions
Function, newline-p: Internal functions
Function, normalize-shader-source: Exported functions
Function, not-equal: Exported functions
Function, octal-token: Exported functions
Function, operator: Exported functions
Function, parameter-declaration: Exported functions
Function, parse: Exported functions
Function, peek: Exported functions
Function, postfix-expression: Exported functions
Function, precise-qualifier: Exported functions
Function, precision-declaration: Exported functions
Function, precision-qualifier: Exported functions
Function, prefix-decrement: Exported functions
Function, prefix-increment: Exported functions
Function, preprocessor-directive: Exported functions
Function, preprocessor-p: Exported functions
Function, preprocessor-token: Exported functions
Function, primary-expression: Exported functions
Function, reference-modifier: Exported functions
Function, remove-rule: Exported functions
Function, remove-serializer: Exported functions
Function, remove-sexpr-transform: Internal functions
Function, remove-walker: Exported functions
Function, return: Exported functions
Function, right-shift: Exported functions
Function, root: Internal functions
Function, root-environment-p: Exported functions
Function, rule: Exported functions
Function, same-+: Exported functions
Function, selection-statement: Exported functions
Function, separate-qualifier-specifier: Internal functions
Function, serialize: Exported functions
Function, serialize-part: Exported functions
Function, serializer: Exported functions
Function, sexpr->glsl-ast: Internal functions
Function, sexpr-transform: Internal functions
Function, sformat: Exported functions
Function, shader: Exported functions
Function, simple-statement: Exported functions
Function, split-shader-into-groups: Internal functions
Function, starts-with: Internal functions
Function, statement: Exported functions
Function, statement-p: Exported functions
Function, storage-qualifier: Exported functions
Function, struct-declaration: Exported functions
Function, struct-declarator: Exported functions
Function, struct-field-declarator: Exported functions
Function, struct-specifier: Exported functions
Function, subroutine-qualifier: Exported functions
Function, subtraction: Exported functions
Function, switch-statement: Exported functions
Function, symbol->identifier: Internal functions
Function, token: Exported functions
Function, tokenize: Exported functions
Function, trace-parse: Exported functions
Function, trace-parse-func: Internal functions
Function, type-name: Exported functions
Function, type-qualifier: Exported functions
Function, type-specifier: Exported functions
Function, type-specifier-nonarray: Exported functions
Function, unary-expression: Exported functions
Function, uniquify: Exported functions
Function, untrace-parse: Exported functions
Function, untrace-parse-func: Internal functions
Function, variable-declaration: Exported functions
Function, variable-identifier-p: Exported functions
Function, variable-initializer: Exported functions
Function, walk: Exported functions
Function, walk-part: Exported functions
Function, walker: Exported functions
Function, while-statement: Exported functions
Function, whitespace: Exported functions
Function, [: Exported functions
Function, ]: Exported functions
Function, ^: Exported functions
Function, ^=: Exported functions
Function, ^^: Exported functions
Function, {: Exported functions
Function, |: Exported functions
Function, |=: Exported functions
Function, ||: Exported functions
Function, }: Exported functions
function-declaration: Exported functions
function-definition: Exported functions
function-identifier-p: Exported functions
function-prototype: Exported functions

G
global-identifier-p: Exported functions
greater-equal-than: Exported functions
greater-than: Exported functions

H
handle-declaration: Internal functions
handle-identifier: Internal functions
hexadecimal-token: Exported functions

I
identifier: Exported functions
identifier-p: Exported functions
identifier-token: Exported functions
inclusive-or: Exported functions
increment-modifier: Exported functions
indent: Exported functions
initializer: Exported functions
instance-name: Exported functions
integer-constant: Exported functions
integer-token: Exported functions
interface-declaration: Exported functions
interpolation-qualifier: Exported functions
invariant-qualifier: Exported functions
inversion: Exported functions
iteration-statement: Exported functions

J
jump-statement: Exported functions

K
keyword-p: Exported functions
keyword-token: Exported functions

L
layout-qualifier: Exported functions
layout-qualifier-id: Exported functions
left-shift: Exported functions
less-equal-than: Exported functions
less-than: Exported functions
lex: Exported functions
local-identifier-p: Exported functions
logical-and: Exported functions
logical-or: Exported functions
logical-xor: Exported functions

M
Macro, define-binary-op: Internal macros
Macro, define-binary-op-walker: Exported macros
Macro, define-empty-op-walker: Exported macros
Macro, define-expr-binary: Internal macros
Macro, define-object: Exported macros
Macro, define-operator-objects: Internal macros
Macro, define-reference: Exported macros
Macro, define-rule: Exported macros
Macro, define-serialization: Exported macros
Macro, define-serializer: Exported macros
Macro, define-sexpr-comparator: Internal macros
Macro, define-sexpr-transform: Internal macros
Macro, define-unary-op-walker: Exported macros
Macro, define-walker: Exported macros
Macro, define-walking-body: Exported macros
Macro, with-glsl-syntax: Internal macros
Macro, with-indentation: Exported macros
Macro, with-token-input: Exported macros
make-environment: Exported functions
mapcar*: Internal functions
matching-declarators-p: Exported functions
matching-qualifiers-p: Exported functions
matching-specifiers-p: Exported functions
merge-plists: Internal functions
merge-shader-sources: Exported functions
merge-shaders: Exported functions
modified-reference: Exported functions
modulus: Exported functions
multiple-expressions: Exported functions
multiplication: Exported functions

N
negation: Exported functions
newline-p: Internal functions
normalize-shader-source: Exported functions
not-equal: Exported functions

O
octal-token: Exported functions
operator: Exported functions

P
parameter-declaration: Exported functions
parse: Exported functions
peek: Exported compiler macros
peek: Exported functions
postfix-expression: Exported functions
precise-qualifier: Exported functions
precision-declaration: Exported functions
precision-qualifier: Exported functions
prefix-decrement: Exported functions
prefix-increment: Exported functions
preprocessor-directive: Exported functions
preprocessor-p: Exported functions
preprocessor-token: Exported functions
primary-expression: Exported functions

R
reference-modifier: Exported functions
remove-rule: Exported functions
remove-serializer: Exported functions
remove-sexpr-transform: Internal functions
remove-walker: Exported functions
return: Exported functions
right-shift: Exported functions
root: Internal functions
root-environment-p: Exported functions
rule: Exported functions

S
same-+: Exported functions
selection-statement: Exported functions
separate-qualifier-specifier: Internal functions
serialize: Exported functions
serialize-part: Exported functions
serializer: Exported functions
sexpr->glsl-ast: Internal functions
sexpr-transform: Internal functions
sformat: Exported compiler macros
sformat: Exported functions
shader: Exported functions
simple-statement: Exported functions
split-shader-into-groups: Internal functions
starts-with: Internal functions
statement: Exported functions
statement-p: Exported functions
storage-qualifier: Exported functions
struct-declaration: Exported functions
struct-declarator: Exported functions
struct-field-declarator: Exported functions
struct-specifier: Exported functions
subroutine-qualifier: Exported functions
subtraction: Exported functions
switch-statement: Exported functions
symbol->identifier: Internal functions

T
token: Exported functions
tokenize: Exported functions
trace-parse: Exported functions
trace-parse-func: Internal functions
type-name: Exported functions
type-qualifier: Exported functions
type-specifier: Exported functions
type-specifier-nonarray: Exported functions

U
unary-expression: Exported functions
uniquify: Exported functions
untrace-parse: Exported functions
untrace-parse-func: Internal functions

V
variable-declaration: Exported functions
variable-identifier-p: Exported functions
variable-initializer: Exported functions

W
walk: Exported functions
walk-part: Exported functions
walker: Exported functions
while-statement: Exported functions
whitespace: Exported functions
with-glsl-syntax: Internal macros
with-indentation: Exported macros
with-token-input: Exported macros

Jump to:   !   %   &   (   )   *   +   ,   -   .   /   :   ;   <   =   >   ?   [   ]   ^   {   |   }  
A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   P   R   S   T   U   V   W  

Next: , Previous: , Up: Indexes   [Contents][Index]

A.3 Variables

Jump to:   *  
B   N   R   S  
Index Entry  Section

*
*glsl-keyword-symbols*: Exported special variables
*glsl-keywords*: Exported special variables
*indent*: Internal special variables
*serialize-stream*: Internal special variables
*serializers*: Internal special variables
*sexpr-transforms*: Internal special variables
*token-array*: Internal special variables
*token-index*: Internal special variables
*trace-level*: Internal special variables
*traced*: Internal special variables
*unique-counter*: Internal special variables
*walkers*: Internal special variables

B
bindings: Exported structures

N
no-value: Exported symbol macros

R
root: Exported structures

S
Slot, bindings: Exported structures
Slot, root: Exported structures
Special Variable, *glsl-keyword-symbols*: Exported special variables
Special Variable, *glsl-keywords*: Exported special variables
Special Variable, *indent*: Internal special variables
Special Variable, *serialize-stream*: Internal special variables
Special Variable, *serializers*: Internal special variables
Special Variable, *sexpr-transforms*: Internal special variables
Special Variable, *token-array*: Internal special variables
Special Variable, *token-index*: Internal special variables
Special Variable, *trace-level*: Internal special variables
Special Variable, *traced*: Internal special variables
Special Variable, *unique-counter*: Internal special variables
Special Variable, *walkers*: Internal special variables
Symbol Macro, no-value: Exported symbol macros

Jump to:   *  
B   N   R   S  

Previous: , Up: Indexes   [Contents][Index]

A.4 Data types

Jump to:   E   G   I   P   S   T  
Index Entry  Section

E
environment: Exported structures

G
glsl-parser-rules: The glsl-parser-rules package
glsl-toolkit: The glsl-toolkit system
glsl-toolkit: The glsl-toolkit package

I
index: Internal types

P
Package, glsl-parser-rules: The glsl-parser-rules package
Package, glsl-toolkit: The glsl-toolkit package

S
Structure, environment: Exported structures
System, glsl-toolkit: The glsl-toolkit system

T
Type, index: Internal types

Jump to:   E   G   I   P   S   T