utils/mojoshader-compiler.c
author Ryan C. Gordon <icculus@icculus.org>
Wed, 23 Feb 2011 16:45:06 -0500
changeset 1001 61991d334619
parent 992 a951ce8bf2ec
child 1006 0f65599179f9
permissions -rw-r--r--
Minor tweaks in case I expose semantic analysis phase to the public API later.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
555
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
     1
/**
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
     2
 * MojoShader; generate shader programs from bytecode of compiled
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
     3
 *  Direct3D shaders.
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
     4
 *
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
     5
 * Please see the file LICENSE.txt in the source's root directory.
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
     6
 *
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
     7
 *  This file written by Ryan C. Gordon.
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
     8
 */
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
     9
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
    10
#include <stdio.h>
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
    11
#include <stdlib.h>
659
e77acde263cc Added command line stuff to preprocess.c, including predefined macro support.
Ryan C. Gordon <icculus@icculus.org>
parents: 588
diff changeset
    12
#include <string.h>
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
    13
#include <assert.h>
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
    14
555
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
    15
#include "mojoshader.h"
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
    16
956
7888858a6777 Patched to compile on Windows.
Ryan C. Gordon <icculus@icculus.org>
parents: 938
diff changeset
    17
#ifdef _WIN32
7888858a6777 Patched to compile on Windows.
Ryan C. Gordon <icculus@icculus.org>
parents: 938
diff changeset
    18
#define snprintf _snprintf   // !!! FIXME: not a safe replacement!
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
    19
#endif
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
    20
660
d82a22c8ab3d Allow preprocess.c to specify include paths on the command line.
Ryan C. Gordon <icculus@icculus.org>
parents: 659
diff changeset
    21
static const char **include_paths = NULL;
d82a22c8ab3d Allow preprocess.c to specify include paths on the command line.
Ryan C. Gordon <icculus@icculus.org>
parents: 659
diff changeset
    22
static unsigned int include_path_count = 0;
d82a22c8ab3d Allow preprocess.c to specify include paths on the command line.
Ryan C. Gordon <icculus@icculus.org>
parents: 659
diff changeset
    23
673
4b14154df11b Turn off allocator debug output.
Ryan C. Gordon <icculus@icculus.org>
parents: 671
diff changeset
    24
#define MOJOSHADER_DEBUG_MALLOC 0
671
af7b7bfdfc2a Fixed allocator debug output.
Ryan C. Gordon <icculus@icculus.org>
parents: 670
diff changeset
    25
665
521d24646891 Added allocator debug output.
Ryan C. Gordon <icculus@icculus.org>
parents: 664
diff changeset
    26
#if MOJOSHADER_DEBUG_MALLOC
671
af7b7bfdfc2a Fixed allocator debug output.
Ryan C. Gordon <icculus@icculus.org>
parents: 670
diff changeset
    27
static void *Malloc(int len, void *d)
665
521d24646891 Added allocator debug output.
Ryan C. Gordon <icculus@icculus.org>
parents: 664
diff changeset
    28
{
521d24646891 Added allocator debug output.
Ryan C. Gordon <icculus@icculus.org>
parents: 664
diff changeset
    29
    void *ptr = malloc(len + sizeof (int));
521d24646891 Added allocator debug output.
Ryan C. Gordon <icculus@icculus.org>
parents: 664
diff changeset
    30
    int *store = (int *) ptr;
521d24646891 Added allocator debug output.
Ryan C. Gordon <icculus@icculus.org>
parents: 664
diff changeset
    31
    printf("malloc() %d bytes (%p)\n", len, ptr);
521d24646891 Added allocator debug output.
Ryan C. Gordon <icculus@icculus.org>
parents: 664
diff changeset
    32
    if (ptr == NULL) return NULL;
521d24646891 Added allocator debug output.
Ryan C. Gordon <icculus@icculus.org>
parents: 664
diff changeset
    33
    *store = len;
521d24646891 Added allocator debug output.
Ryan C. Gordon <icculus@icculus.org>
parents: 664
diff changeset
    34
    return (void *) (store + 1);
521d24646891 Added allocator debug output.
Ryan C. Gordon <icculus@icculus.org>
parents: 664
diff changeset
    35
} // Malloc
521d24646891 Added allocator debug output.
Ryan C. Gordon <icculus@icculus.org>
parents: 664
diff changeset
    36
521d24646891 Added allocator debug output.
Ryan C. Gordon <icculus@icculus.org>
parents: 664
diff changeset
    37
671
af7b7bfdfc2a Fixed allocator debug output.
Ryan C. Gordon <icculus@icculus.org>
parents: 670
diff changeset
    38
static void Free(void *_ptr, void *d)
665
521d24646891 Added allocator debug output.
Ryan C. Gordon <icculus@icculus.org>
parents: 664
diff changeset
    39
{
521d24646891 Added allocator debug output.
Ryan C. Gordon <icculus@icculus.org>
parents: 664
diff changeset
    40
    int *ptr = (((int *) _ptr) - 1);
521d24646891 Added allocator debug output.
Ryan C. Gordon <icculus@icculus.org>
parents: 664
diff changeset
    41
    int len = *ptr;
521d24646891 Added allocator debug output.
Ryan C. Gordon <icculus@icculus.org>
parents: 664
diff changeset
    42
    printf("free() %d bytes (%p)\n", len, ptr);
521d24646891 Added allocator debug output.
Ryan C. Gordon <icculus@icculus.org>
parents: 664
diff changeset
    43
    free(ptr);
521d24646891 Added allocator debug output.
Ryan C. Gordon <icculus@icculus.org>
parents: 664
diff changeset
    44
} // Free
521d24646891 Added allocator debug output.
Ryan C. Gordon <icculus@icculus.org>
parents: 664
diff changeset
    45
#else
521d24646891 Added allocator debug output.
Ryan C. Gordon <icculus@icculus.org>
parents: 664
diff changeset
    46
#define Malloc NULL
521d24646891 Added allocator debug output.
Ryan C. Gordon <icculus@icculus.org>
parents: 664
diff changeset
    47
#define Free NULL
521d24646891 Added allocator debug output.
Ryan C. Gordon <icculus@icculus.org>
parents: 664
diff changeset
    48
#endif
660
d82a22c8ab3d Allow preprocess.c to specify include paths on the command line.
Ryan C. Gordon <icculus@icculus.org>
parents: 659
diff changeset
    49
668
983f396a3d71 Added fail().
Ryan C. Gordon <icculus@icculus.org>
parents: 667
diff changeset
    50
983f396a3d71 Added fail().
Ryan C. Gordon <icculus@icculus.org>
parents: 667
diff changeset
    51
static void fail(const char *err)
983f396a3d71 Added fail().
Ryan C. Gordon <icculus@icculus.org>
parents: 667
diff changeset
    52
{
983f396a3d71 Added fail().
Ryan C. Gordon <icculus@icculus.org>
parents: 667
diff changeset
    53
    printf("%s.\n", err);
983f396a3d71 Added fail().
Ryan C. Gordon <icculus@icculus.org>
parents: 667
diff changeset
    54
    exit(1);
983f396a3d71 Added fail().
Ryan C. Gordon <icculus@icculus.org>
parents: 667
diff changeset
    55
} // fail
983f396a3d71 Added fail().
Ryan C. Gordon <icculus@icculus.org>
parents: 667
diff changeset
    56
933
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
    57
static void print_unroll_attr(FILE *io, const int unroll)
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
    58
{
992
a951ce8bf2ec Don't print loop attributes if user didn't explicitly specify one.
Ryan C. Gordon <icculus@icculus.org>
parents: 964
diff changeset
    59
    // -1 means "unroll at compiler's discretion",
a951ce8bf2ec Don't print loop attributes if user didn't explicitly specify one.
Ryan C. Gordon <icculus@icculus.org>
parents: 964
diff changeset
    60
    // -2 means user didn't specify the attribute.
a951ce8bf2ec Don't print loop attributes if user didn't explicitly specify one.
Ryan C. Gordon <icculus@icculus.org>
parents: 964
diff changeset
    61
    switch (unroll)
a951ce8bf2ec Don't print loop attributes if user didn't explicitly specify one.
Ryan C. Gordon <icculus@icculus.org>
parents: 964
diff changeset
    62
    {
a951ce8bf2ec Don't print loop attributes if user didn't explicitly specify one.
Ryan C. Gordon <icculus@icculus.org>
parents: 964
diff changeset
    63
        case 0:
a951ce8bf2ec Don't print loop attributes if user didn't explicitly specify one.
Ryan C. Gordon <icculus@icculus.org>
parents: 964
diff changeset
    64
            fprintf(io, "[loop] ");
a951ce8bf2ec Don't print loop attributes if user didn't explicitly specify one.
Ryan C. Gordon <icculus@icculus.org>
parents: 964
diff changeset
    65
            break;
a951ce8bf2ec Don't print loop attributes if user didn't explicitly specify one.
Ryan C. Gordon <icculus@icculus.org>
parents: 964
diff changeset
    66
        case -1:
a951ce8bf2ec Don't print loop attributes if user didn't explicitly specify one.
Ryan C. Gordon <icculus@icculus.org>
parents: 964
diff changeset
    67
            fprintf(io, "[unroll] ");
a951ce8bf2ec Don't print loop attributes if user didn't explicitly specify one.
Ryan C. Gordon <icculus@icculus.org>
parents: 964
diff changeset
    68
            break;
a951ce8bf2ec Don't print loop attributes if user didn't explicitly specify one.
Ryan C. Gordon <icculus@icculus.org>
parents: 964
diff changeset
    69
        case -2:
a951ce8bf2ec Don't print loop attributes if user didn't explicitly specify one.
Ryan C. Gordon <icculus@icculus.org>
parents: 964
diff changeset
    70
            /* no-op. */
a951ce8bf2ec Don't print loop attributes if user didn't explicitly specify one.
Ryan C. Gordon <icculus@icculus.org>
parents: 964
diff changeset
    71
            break;
a951ce8bf2ec Don't print loop attributes if user didn't explicitly specify one.
Ryan C. Gordon <icculus@icculus.org>
parents: 964
diff changeset
    72
        default:
a951ce8bf2ec Don't print loop attributes if user didn't explicitly specify one.
Ryan C. Gordon <icculus@icculus.org>
parents: 964
diff changeset
    73
            assert(unroll > 0);
a951ce8bf2ec Don't print loop attributes if user didn't explicitly specify one.
Ryan C. Gordon <icculus@icculus.org>
parents: 964
diff changeset
    74
            fprintf(io, "[unroll(%d)] ", unroll);
a951ce8bf2ec Don't print loop attributes if user didn't explicitly specify one.
Ryan C. Gordon <icculus@icculus.org>
parents: 964
diff changeset
    75
            break;
a951ce8bf2ec Don't print loop attributes if user didn't explicitly specify one.
Ryan C. Gordon <icculus@icculus.org>
parents: 964
diff changeset
    76
    } // case
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
    77
} // print_unroll_attr
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
    78
964
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
    79
static void print_ast_datatype(FILE *io, const MOJOSHADER_astDataType *dt)
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
    80
{
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
    81
    int i;
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
    82
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
    83
    if (dt == NULL)
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
    84
        return;
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
    85
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
    86
    switch (dt->type)
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
    87
    {
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
    88
        case MOJOSHADER_AST_DATATYPE_BOOL:
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
    89
            fprintf(io, "bool");
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
    90
            return;
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
    91
        case MOJOSHADER_AST_DATATYPE_INT:
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
    92
            fprintf(io, "int");
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
    93
            return;
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
    94
        case MOJOSHADER_AST_DATATYPE_UINT:
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
    95
            fprintf(io, "uint");
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
    96
            return;
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
    97
        case MOJOSHADER_AST_DATATYPE_FLOAT:
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
    98
            fprintf(io, "float");
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
    99
            return;
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
   100
        case MOJOSHADER_AST_DATATYPE_FLOAT_SNORM:
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
   101
            fprintf(io, "snorm float");
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
   102
            return;
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
   103
        case MOJOSHADER_AST_DATATYPE_FLOAT_UNORM:
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
   104
            fprintf(io, "unorm float");
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
   105
            return;
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
   106
        case MOJOSHADER_AST_DATATYPE_HALF:
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
   107
            fprintf(io, "half");
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
   108
            return;
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
   109
        case MOJOSHADER_AST_DATATYPE_DOUBLE:
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
   110
            fprintf(io, "double");
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
   111
            return;
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
   112
        case MOJOSHADER_AST_DATATYPE_STRING:
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
   113
            fprintf(io, "string");
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
   114
            return;
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
   115
        case MOJOSHADER_AST_DATATYPE_SAMPLER_1D:
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
   116
            fprintf(io, "sampler1D");
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
   117
            return;
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
   118
        case MOJOSHADER_AST_DATATYPE_SAMPLER_2D:
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
   119
            fprintf(io, "sampler2D");
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
   120
            return;
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
   121
        case MOJOSHADER_AST_DATATYPE_SAMPLER_3D:
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
   122
            fprintf(io, "sampler3D");
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
   123
            return;
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
   124
        case MOJOSHADER_AST_DATATYPE_SAMPLER_CUBE:
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
   125
            fprintf(io, "samplerCUBE");
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
   126
            return;
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
   127
        case MOJOSHADER_AST_DATATYPE_SAMPLER_STATE:
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
   128
            fprintf(io, "sampler_state");
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
   129
            return;
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
   130
        case MOJOSHADER_AST_DATATYPE_SAMPLER_COMPARISON_STATE:
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
   131
            fprintf(io, "SamplerComparisonState");
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
   132
            return;
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
   133
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
   134
        case MOJOSHADER_AST_DATATYPE_STRUCT:
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
   135
            fprintf(io, "struct { ");
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
   136
            for (i = 0; i < dt->structure.member_count; i++)
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
   137
            {
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
   138
                print_ast_datatype(io, dt->structure.members[i].datatype);
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
   139
                fprintf(io, " %s; ", dt->structure.members[i].identifier);
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
   140
            } // for
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
   141
            fprintf(io, "}");
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
   142
            return;
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
   143
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
   144
        case MOJOSHADER_AST_DATATYPE_ARRAY:
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
   145
            print_ast_datatype(io, dt->array.base);
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
   146
            if (dt->array.elements < 0)
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
   147
                fprintf(io, "[]");
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
   148
            else
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
   149
                fprintf(io, "[%d]", dt->array.elements);
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
   150
            return;
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
   151
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
   152
        case MOJOSHADER_AST_DATATYPE_VECTOR:
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
   153
            fprintf(io, "vector<");
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
   154
            print_ast_datatype(io, dt->vector.base);
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
   155
            fprintf(io, ",%d>", dt->vector.elements);
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
   156
            return;
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
   157
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
   158
        case MOJOSHADER_AST_DATATYPE_MATRIX:
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
   159
            fprintf(io, "matrix<");
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
   160
            print_ast_datatype(io, dt->matrix.base);
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
   161
            fprintf(io, ",%d,%d>", dt->matrix.rows, dt->matrix.columns);
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
   162
            return;
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
   163
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
   164
        case MOJOSHADER_AST_DATATYPE_BUFFER:
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
   165
            fprintf(io, "buffer<");
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
   166
            print_ast_datatype(io, dt->buffer.base);
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
   167
            fprintf(io, ">");
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
   168
            return;
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
   169
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
   170
        case MOJOSHADER_AST_DATATYPE_USER:
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
   171
            fprintf(io, "%s", dt->user.name);
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
   172
            return;
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
   173
1001
61991d334619 Minor tweaks in case I expose semantic analysis phase to the public API later.
Ryan C. Gordon <icculus@icculus.org>
parents: 992
diff changeset
   174
        // this should only appear if we did semantic analysis on the AST,
61991d334619 Minor tweaks in case I expose semantic analysis phase to the public API later.
Ryan C. Gordon <icculus@icculus.org>
parents: 992
diff changeset
   175
        //  so we only print the return value here.
61991d334619 Minor tweaks in case I expose semantic analysis phase to the public API later.
Ryan C. Gordon <icculus@icculus.org>
parents: 992
diff changeset
   176
        case MOJOSHADER_AST_DATATYPE_FUNCTION:
61991d334619 Minor tweaks in case I expose semantic analysis phase to the public API later.
Ryan C. Gordon <icculus@icculus.org>
parents: 992
diff changeset
   177
            if (!dt->function.retval)
61991d334619 Minor tweaks in case I expose semantic analysis phase to the public API later.
Ryan C. Gordon <icculus@icculus.org>
parents: 992
diff changeset
   178
                fprintf(io, "void");
61991d334619 Minor tweaks in case I expose semantic analysis phase to the public API later.
Ryan C. Gordon <icculus@icculus.org>
parents: 992
diff changeset
   179
            else
61991d334619 Minor tweaks in case I expose semantic analysis phase to the public API later.
Ryan C. Gordon <icculus@icculus.org>
parents: 992
diff changeset
   180
                print_ast_datatype(io, dt->function.retval);
61991d334619 Minor tweaks in case I expose semantic analysis phase to the public API later.
Ryan C. Gordon <icculus@icculus.org>
parents: 992
diff changeset
   181
            return;
61991d334619 Minor tweaks in case I expose semantic analysis phase to the public API later.
Ryan C. Gordon <icculus@icculus.org>
parents: 992
diff changeset
   182
964
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
   183
        //case MOJOSHADER_AST_DATATYPE_NONE:
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
   184
        default:
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
   185
            assert(0 && "Unexpected datatype.");
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
   186
            return;
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
   187
    } // switch
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
   188
} // print_ast_datatype
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
   189
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   190
// !!! FIXME: this screws up on order of operations.
933
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   191
static void print_ast(FILE *io, const int substmt, const void *_ast)
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   192
{
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   193
    const MOJOSHADER_astNode *ast = (const MOJOSHADER_astNode *) _ast;
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   194
    const char *nl = substmt ? "" : "\n";
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   195
    int typeint = 0;
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   196
    static int indent = 0;
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   197
    int isblock = 0;
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   198
    int i;
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   199
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   200
    // These _HAVE_ to be in the same order as MOJOSHADER_astNodeType!
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   201
    static const char *binary[] =
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   202
    {
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   203
        ",", "*", "/", "%", "+", "-", "<<", ">>", "<", ">", "<=", ">=", "==",
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   204
        "!=", "&", "^", "|", "&&", "||", "=", "*=", "/=", "%=", "+=", "-=",
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   205
        "<<=", ">>=", "&=", "^=", "|="
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   206
    };
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   207
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   208
    static const char *pre_unary[] = { "++", "--", "-", "~", "!" };
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   209
    static const char *post_unary[] = { "++", "--" };
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   210
    static const char *simple_stmt[] = { "", "break", "continue", "discard" };
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   211
    static const char *inpmod[] = { "", "in ", "out ", "in out ", "uniform " };
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   212
    static const char *fnstorage[] = { "", "inline " };
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   213
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   214
    static const char *interpmod[] = {
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   215
        "", " linear", " centroid", " nointerpolation",
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   216
        " noperspective", " sample"
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   217
    };
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   218
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   219
    if (!ast) return;
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   220
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   221
    typeint = (int) ast->ast.type;
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   222
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   223
    #define DO_INDENT do { \
933
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   224
        if (!substmt) { for (i = 0; i < indent; i++) fprintf(io, "    "); } \
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   225
    } while (0)
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   226
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   227
    switch (ast->ast.type)
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   228
    {
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   229
        case MOJOSHADER_AST_OP_PREINCREMENT:
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   230
        case MOJOSHADER_AST_OP_PREDECREMENT:
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   231
        case MOJOSHADER_AST_OP_NEGATE:
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   232
        case MOJOSHADER_AST_OP_COMPLEMENT:
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   233
        case MOJOSHADER_AST_OP_NOT:
933
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   234
            fprintf(io, "%s", pre_unary[(typeint-MOJOSHADER_AST_OP_START_RANGE_UNARY)-1]);
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   235
            print_ast(io, 0, ast->unary.operand);
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   236
            break;
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   237
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   238
        case MOJOSHADER_AST_OP_POSTINCREMENT:
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   239
        case MOJOSHADER_AST_OP_POSTDECREMENT:
933
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   240
            print_ast(io, 0, ast->unary.operand);
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   241
            fprintf(io, "%s", post_unary[typeint-MOJOSHADER_AST_OP_POSTINCREMENT]);
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   242
            break;
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   243
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   244
        case MOJOSHADER_AST_OP_MULTIPLY:
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   245
        case MOJOSHADER_AST_OP_DIVIDE:
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   246
        case MOJOSHADER_AST_OP_MODULO:
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   247
        case MOJOSHADER_AST_OP_ADD:
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   248
        case MOJOSHADER_AST_OP_SUBTRACT:
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   249
        case MOJOSHADER_AST_OP_LSHIFT:
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   250
        case MOJOSHADER_AST_OP_RSHIFT:
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   251
        case MOJOSHADER_AST_OP_LESSTHAN:
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   252
        case MOJOSHADER_AST_OP_GREATERTHAN:
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   253
        case MOJOSHADER_AST_OP_LESSTHANOREQUAL:
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   254
        case MOJOSHADER_AST_OP_GREATERTHANOREQUAL:
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   255
        case MOJOSHADER_AST_OP_EQUAL:
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   256
        case MOJOSHADER_AST_OP_NOTEQUAL:
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   257
        case MOJOSHADER_AST_OP_BINARYAND:
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   258
        case MOJOSHADER_AST_OP_BINARYXOR:
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   259
        case MOJOSHADER_AST_OP_BINARYOR:
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   260
        case MOJOSHADER_AST_OP_LOGICALAND:
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   261
        case MOJOSHADER_AST_OP_LOGICALOR:
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   262
        case MOJOSHADER_AST_OP_ASSIGN:
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   263
        case MOJOSHADER_AST_OP_MULASSIGN:
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   264
        case MOJOSHADER_AST_OP_DIVASSIGN:
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   265
        case MOJOSHADER_AST_OP_MODASSIGN:
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   266
        case MOJOSHADER_AST_OP_ADDASSIGN:
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   267
        case MOJOSHADER_AST_OP_SUBASSIGN:
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   268
        case MOJOSHADER_AST_OP_LSHIFTASSIGN:
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   269
        case MOJOSHADER_AST_OP_RSHIFTASSIGN:
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   270
        case MOJOSHADER_AST_OP_ANDASSIGN:
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   271
        case MOJOSHADER_AST_OP_XORASSIGN:
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   272
        case MOJOSHADER_AST_OP_ORASSIGN:
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   273
        case MOJOSHADER_AST_OP_COMMA:
933
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   274
            print_ast(io, 0, ast->binary.left);
938
fc5240c4f197 Fixed spacing for binary operators in print_ast().
Ryan C. Gordon <icculus@icculus.org>
parents: 934
diff changeset
   275
            if (ast->ast.type != MOJOSHADER_AST_OP_COMMA)
fc5240c4f197 Fixed spacing for binary operators in print_ast().
Ryan C. Gordon <icculus@icculus.org>
parents: 934
diff changeset
   276
                fprintf(io, " ");  // no space before the comma.
933
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   277
            fprintf(io, "%s ", binary[
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   278
                (typeint - MOJOSHADER_AST_OP_START_RANGE_BINARY) - 1]);
933
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   279
            print_ast(io, 0, ast->binary.right);
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   280
            break;
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   281
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   282
        case MOJOSHADER_AST_OP_DEREF_ARRAY:
933
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   283
            print_ast(io, 0, ast->binary.left);
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   284
            fprintf(io, "[");
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   285
            print_ast(io, 0, ast->binary.right);
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   286
            fprintf(io, "]");
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   287
            break;
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   288
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   289
        case MOJOSHADER_AST_OP_DEREF_STRUCT:
933
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   290
            print_ast(io, 0, ast->derefstruct.identifier);
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   291
            fprintf(io, ".");
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   292
            fprintf(io, "%s", ast->derefstruct.member);
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   293
            break;
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   294
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   295
        case MOJOSHADER_AST_OP_CONDITIONAL:
933
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   296
            print_ast(io, 0, ast->ternary.left);
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   297
            fprintf(io, " ? ");
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   298
            print_ast(io, 0, ast->ternary.center);
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   299
            fprintf(io, " : ");
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   300
            print_ast(io, 0, ast->ternary.right);
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   301
            break;
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   302
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   303
        case MOJOSHADER_AST_OP_IDENTIFIER:
933
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   304
            fprintf(io, "%s", ast->identifier.identifier);
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   305
            break;
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   306
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   307
        case MOJOSHADER_AST_OP_INT_LITERAL:
933
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   308
            fprintf(io, "%d", ast->intliteral.value);
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   309
            break;
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   310
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   311
        case MOJOSHADER_AST_OP_FLOAT_LITERAL:
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   312
        {
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   313
            const float f = ast->floatliteral.value;
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   314
            const long long flr = (long long) f;
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   315
            if (((float) flr) == f)
933
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   316
                fprintf(io, "%lld.0", flr);
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   317
            else
933
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   318
                fprintf(io, "%.16g", f);
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   319
            break;
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   320
        } // case
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   321
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   322
        case MOJOSHADER_AST_OP_STRING_LITERAL:
933
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   323
            fprintf(io, "\"%s\"", ast->stringliteral.string);
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   324
            break;
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   325
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   326
        case MOJOSHADER_AST_OP_BOOLEAN_LITERAL:
933
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   327
            fprintf(io, "%s", ast->boolliteral.value ? "true" : "false");
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   328
            break;
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   329
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   330
        case MOJOSHADER_AST_ARGUMENTS:
933
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   331
            print_ast(io, 0, ast->arguments.argument);
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   332
            if (ast->arguments.next != NULL)
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   333
            {
933
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   334
                fprintf(io, ", ");
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   335
                print_ast(io, 0, ast->arguments.next);
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   336
            } // if
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   337
            break;
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   338
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   339
        case MOJOSHADER_AST_OP_CALLFUNC:
933
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   340
            print_ast(io, 0, ast->callfunc.identifier);
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   341
            fprintf(io, "(");
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   342
            print_ast(io, 0, ast->callfunc.args);
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   343
            fprintf(io, ")");
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   344
            break;
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   345
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   346
        case MOJOSHADER_AST_OP_CONSTRUCTOR:
964
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
   347
            print_ast_datatype(io, ast->constructor.datatype);
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
   348
            fprintf(io, "(");
933
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   349
            print_ast(io, 0, ast->constructor.args);
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   350
            fprintf(io, ")");
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   351
            break;
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   352
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   353
        case MOJOSHADER_AST_OP_CAST:
964
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
   354
            fprintf(io, "(");
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
   355
            print_ast_datatype(io, ast->cast.datatype);
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
   356
            fprintf(io, ") (");
933
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   357
            print_ast(io, 0, ast->cast.operand);
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   358
            fprintf(io, ")");
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   359
            break;
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   360
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   361
        case MOJOSHADER_AST_STATEMENT_EXPRESSION:
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   362
            DO_INDENT;
933
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   363
            print_ast(io, 0, ast->exprstmt.expr);  // !!! FIXME: This is named badly...
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   364
            fprintf(io, ";%s", nl);
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   365
            print_ast(io, 0, ast->exprstmt.next);
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   366
            break;
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   367
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   368
        case MOJOSHADER_AST_STATEMENT_IF:
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   369
            DO_INDENT;
933
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   370
            fprintf(io, "if (");
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   371
            print_ast(io, 0, ast->ifstmt.expr);
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   372
            fprintf(io, ")\n");
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   373
            isblock = ast->ifstmt.statement->ast.type == MOJOSHADER_AST_STATEMENT_BLOCK;
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   374
            if (!isblock) indent++;
933
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   375
            print_ast(io, 0, ast->ifstmt.statement);
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   376
            if (!isblock) indent--;
933
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   377
            print_ast(io, 0, ast->ifstmt.next);
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   378
            break;
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   379
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   380
        case MOJOSHADER_AST_STATEMENT_TYPEDEF:
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   381
            DO_INDENT;
933
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   382
            print_ast(io, 1, ast->typedefstmt.type_info);
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   383
            fprintf(io, "%s", nl);
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   384
            print_ast(io, 0, ast->typedefstmt.next);
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   385
            break;
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   386
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   387
        case MOJOSHADER_AST_STATEMENT_SWITCH:
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   388
            DO_INDENT;
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   389
            switch ( ast->switchstmt.attributes )
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   390
            {
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   391
                case MOJOSHADER_AST_SWITCHATTR_NONE: break;
933
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   392
                case MOJOSHADER_AST_SWITCHATTR_FLATTEN: fprintf(io, "[flatten] "); break;
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   393
                case MOJOSHADER_AST_SWITCHATTR_BRANCH: fprintf(io, "[branch] "); break;
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   394
                case MOJOSHADER_AST_SWITCHATTR_FORCECASE: fprintf(io, "[forcecase] "); break;
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   395
                case MOJOSHADER_AST_SWITCHATTR_CALL: fprintf(io, "[call] "); break;
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   396
            } // switch
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   397
933
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   398
            fprintf(io, "switch (");
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   399
            print_ast(io, 0, ast->switchstmt.expr);
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   400
            fprintf(io, ")\n");
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   401
            DO_INDENT;
933
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   402
            fprintf(io, "{\n");
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   403
            indent++;
933
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   404
            print_ast(io, 0, ast->switchstmt.cases);
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   405
            indent--;
933
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   406
            fprintf(io, "\n");
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   407
            DO_INDENT;
933
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   408
            fprintf(io, "}\n");
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   409
            print_ast(io, 0, ast->switchstmt.next);
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   410
            break;
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   411
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   412
        case MOJOSHADER_AST_SWITCH_CASE:
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   413
            DO_INDENT;
933
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   414
            fprintf(io, "case ");
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   415
            print_ast(io, 0, ast->cases.expr);
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   416
            fprintf(io, ":\n");
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   417
            isblock = ast->cases.statement->ast.type == MOJOSHADER_AST_STATEMENT_BLOCK;
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   418
            if (!isblock) indent++;
933
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   419
            print_ast(io, 0, ast->cases.statement);
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   420
            if (!isblock) indent--;
933
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   421
            print_ast(io, 0, ast->cases.next);
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   422
            break;
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   423
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   424
        case MOJOSHADER_AST_STATEMENT_STRUCT:
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   425
            DO_INDENT;
933
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   426
            print_ast(io, 0, ast->structstmt.struct_info);
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   427
            fprintf(io, ";%s%s", nl, nl);  // always space these out.
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   428
            print_ast(io, 0, ast->structstmt.next);
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   429
            break;
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   430
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   431
        case MOJOSHADER_AST_STATEMENT_VARDECL:
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   432
            DO_INDENT;
933
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   433
            print_ast(io, 1, ast->vardeclstmt.declaration);
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   434
            fprintf(io, ";%s", nl);
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   435
            print_ast(io, 0, ast->vardeclstmt.next);
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   436
            break;
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   437
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   438
        case MOJOSHADER_AST_STATEMENT_BLOCK:
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   439
            DO_INDENT;
933
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   440
            fprintf(io, "{\n");
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   441
            indent++;
933
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   442
            print_ast(io, 0, ast->blockstmt.statements);
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   443
            indent--;
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   444
            DO_INDENT;
933
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   445
            fprintf(io, "}\n");
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   446
            print_ast(io, 0, ast->blockstmt.next);
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   447
            break;
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   448
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   449
        case MOJOSHADER_AST_STATEMENT_FOR:
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   450
            DO_INDENT;
933
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   451
            print_unroll_attr(io, ast->forstmt.unroll);
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   452
            fprintf(io, "for (");
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   453
            print_ast(io, 1, ast->forstmt.var_decl);
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   454
            if (ast->forstmt.initializer != NULL)
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   455
            {
933
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   456
                fprintf(io, " = ");
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   457
                print_ast(io, 1, ast->forstmt.initializer);
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   458
            } // if
933
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   459
            fprintf(io, "; ");
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   460
            print_ast(io, 1, ast->forstmt.looptest);
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   461
            fprintf(io, "; ");
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   462
            print_ast(io, 1, ast->forstmt.counter);
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   463
933
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   464
            fprintf(io, ")\n");
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   465
            isblock = ast->forstmt.statement->ast.type == MOJOSHADER_AST_STATEMENT_BLOCK;
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   466
            if (!isblock) indent++;
933
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   467
            print_ast(io, 0, ast->forstmt.statement);
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   468
            if (!isblock) indent--;
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   469
933
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   470
            print_ast(io, 0, ast->forstmt.next);
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   471
            break;
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   472
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   473
        case MOJOSHADER_AST_STATEMENT_DO:
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   474
            DO_INDENT;
933
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   475
            print_unroll_attr(io, ast->dostmt.unroll);
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   476
            fprintf(io, "do\n");
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   477
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   478
            isblock = ast->dostmt.statement->ast.type == MOJOSHADER_AST_STATEMENT_BLOCK;
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   479
            if (!isblock) indent++;
933
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   480
            print_ast(io, 0, ast->dostmt.statement);
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   481
            if (!isblock) indent--;
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   482
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   483
            DO_INDENT;
933
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   484
            fprintf(io, "while (");
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   485
            print_ast(io, 0, ast->dostmt.expr);
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   486
            fprintf(io, ");\n");
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   487
933
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   488
            print_ast(io, 0, ast->dostmt.next);
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   489
            break;
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   490
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   491
        case MOJOSHADER_AST_STATEMENT_WHILE:
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   492
            DO_INDENT;
933
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   493
            print_unroll_attr(io, ast->whilestmt.unroll);
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   494
            fprintf(io, "while (");
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   495
            print_ast(io, 0, ast->whilestmt.expr);
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   496
            fprintf(io, ")\n");
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   497
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   498
            isblock = ast->whilestmt.statement->ast.type == MOJOSHADER_AST_STATEMENT_BLOCK;
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   499
            if (!isblock) indent++;
933
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   500
            print_ast(io, 0, ast->whilestmt.statement);
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   501
            if (!isblock) indent--;
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   502
933
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   503
            print_ast(io, 0, ast->whilestmt.next);
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   504
            break;
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   505
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   506
        case MOJOSHADER_AST_STATEMENT_RETURN:
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   507
            DO_INDENT;
933
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   508
            fprintf(io, "return");
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   509
            if (ast->returnstmt.expr)
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   510
            {
933
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   511
                fprintf(io, " ");
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   512
                print_ast(io, 0, ast->returnstmt.expr);
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   513
            } // if
933
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   514
            fprintf(io, ";%s", nl);
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   515
            print_ast(io, 0, ast->returnstmt.next);
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   516
            break;
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   517
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   518
        case MOJOSHADER_AST_STATEMENT_EMPTY:
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   519
        case MOJOSHADER_AST_STATEMENT_BREAK:
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   520
        case MOJOSHADER_AST_STATEMENT_CONTINUE:
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   521
        case MOJOSHADER_AST_STATEMENT_DISCARD:
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   522
            DO_INDENT;
933
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   523
            fprintf(io, "%s;%s",
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   524
                simple_stmt[(typeint-MOJOSHADER_AST_STATEMENT_START_RANGE)-1],
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   525
                nl);
933
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   526
            print_ast(io, 0, ast->stmt.next);
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   527
            break;
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   528
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   529
        case MOJOSHADER_AST_COMPUNIT_FUNCTION:
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   530
            DO_INDENT;
933
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   531
            print_ast(io, 0, ast->funcunit.declaration);
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   532
            if (ast->funcunit.definition == NULL)
933
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   533
                fprintf(io, ";%s", nl);
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   534
            else
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   535
            {
933
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   536
                fprintf(io, "%s", nl);
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   537
                print_ast(io, 0, ast->funcunit.definition);
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   538
                fprintf(io, "%s", nl);
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   539
            } // else
933
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   540
            print_ast(io, 0, ast->funcunit.next);
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   541
            break;
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   542
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   543
        case MOJOSHADER_AST_COMPUNIT_TYPEDEF:
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   544
            DO_INDENT;
933
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   545
            print_ast(io, 0, ast->typedefunit.type_info);
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   546
            fprintf(io, "%s", nl);
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   547
            print_ast(io, 0, ast->typedefunit.next);
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   548
            break;
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   549
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   550
        case MOJOSHADER_AST_COMPUNIT_STRUCT:
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   551
            DO_INDENT;
933
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   552
            print_ast(io, 0, ast->structunit.struct_info);
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   553
            fprintf(io, ";%s%s", nl, nl);  // always space these out.
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   554
            print_ast(io, 0, ast->structunit.next);
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   555
            break;
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   556
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   557
        case MOJOSHADER_AST_COMPUNIT_VARIABLE:
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   558
            DO_INDENT;
933
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   559
            print_ast(io, 1, ast->varunit.declaration);
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   560
            fprintf(io, ";%s", nl);
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   561
            if (ast->varunit.next &&
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   562
                ast->varunit.next->ast.type!=MOJOSHADER_AST_COMPUNIT_VARIABLE)
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   563
            {
933
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   564
                fprintf(io, "%s", nl);  // group vars together, and space out other things.
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   565
            } // if
933
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   566
            print_ast(io, 0, ast->varunit.next);
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   567
            break;
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   568
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   569
        case MOJOSHADER_AST_SCALAR_OR_ARRAY:
933
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   570
            fprintf(io, "%s", ast->soa.identifier);
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   571
            if (ast->soa.isarray)
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   572
            {
933
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   573
                fprintf(io, "[");
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   574
                print_ast(io, 0, ast->soa.dimension);
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   575
                fprintf(io, "]");
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   576
            } // if
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   577
            break;
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   578
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   579
        case MOJOSHADER_AST_TYPEDEF:
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   580
            DO_INDENT;
964
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
   581
            fprintf(io, "typedef %s", ast->typdef.isconst ? "const " : "");
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
   582
            print_ast_datatype(io, ast->typdef.datatype);
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
   583
            fprintf(io, " ");
933
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   584
            print_ast(io, 0, ast->typdef.details);
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   585
            fprintf(io, ";%s", nl);
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   586
            break;
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   587
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   588
        case MOJOSHADER_AST_FUNCTION_PARAMS:
933
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   589
            fprintf(io, "%s", inpmod[(int) ast->params.input_modifier]);
964
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
   590
            print_ast_datatype(io, ast->params.datatype);
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
   591
            fprintf(io, " %s", ast->params.identifier);
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   592
            if (ast->params.semantic)
933
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   593
                fprintf(io, " : %s", ast->params.semantic);
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   594
            fprintf(io, "%s", interpmod[(int) ast->params.interpolation_modifier]);
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   595
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   596
            if (ast->params.initializer)
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   597
            {
933
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   598
                fprintf(io, " = ");
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   599
                print_ast(io, 0, ast->params.initializer);
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   600
            } // if
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   601
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   602
            if (ast->params.next)
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   603
            {
933
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   604
                fprintf(io, ", ");
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   605
                print_ast(io, 0, ast->params.next);
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   606
            } // if
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   607
            break;
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   608
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   609
        case MOJOSHADER_AST_FUNCTION_SIGNATURE:
933
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   610
            fprintf(io, "%s", fnstorage[(int) ast->funcsig.storage_class]);
964
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
   611
            if (ast->funcsig.datatype)
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
   612
                print_ast_datatype(io, ast->funcsig.datatype);
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
   613
            else
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
   614
                fprintf(io, "void");
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
   615
            fprintf(io, " %s(", ast->funcsig.identifier);
933
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   616
            print_ast(io, 0, ast->funcsig.params);
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   617
            fprintf(io, ")");
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   618
            if (ast->funcsig.semantic)
933
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   619
                fprintf(io, " : %s", ast->funcsig.semantic);
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   620
            break;
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   621
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   622
        case MOJOSHADER_AST_STRUCT_DECLARATION:
933
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   623
            fprintf(io, "struct %s\n", ast->structdecl.name);
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   624
            DO_INDENT;
933
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   625
            fprintf(io, "{\n");
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   626
            indent++;
933
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   627
            print_ast(io, 0, ast->structdecl.members);
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   628
            indent--;
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   629
            DO_INDENT;
933
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   630
            fprintf(io, "}");
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   631
            break;
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   632
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   633
        case MOJOSHADER_AST_STRUCT_MEMBER:
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   634
            DO_INDENT;
933
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   635
            fprintf(io, "%s", interpmod[(int)ast->structmembers.interpolation_mod]);
964
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
   636
            print_ast_datatype(io, ast->structmembers.datatype);
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
   637
            fprintf(io, " ");
933
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   638
            print_ast(io, 0, ast->structmembers.details);
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   639
            if (ast->structmembers.semantic)
933
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   640
                fprintf(io, " : %s", ast->structmembers.semantic);
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   641
            fprintf(io, ";%s", nl);
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   642
            print_ast(io, 0, ast->structmembers.next);
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   643
            break;
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   644
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   645
        case MOJOSHADER_AST_VARIABLE_DECLARATION:
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   646
            DO_INDENT;
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   647
            if (ast->vardecl.attributes & MOJOSHADER_AST_VARATTR_EXTERN)
933
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   648
                fprintf(io, "extern ");
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   649
            if (ast->vardecl.attributes & MOJOSHADER_AST_VARATTR_NOINTERPOLATION)
933
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   650
                fprintf(io, "nointerpolation ");
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   651
            if (ast->vardecl.attributes & MOJOSHADER_AST_VARATTR_SHARED)
933
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   652
                fprintf(io, "shared");
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   653
            if (ast->vardecl.attributes & MOJOSHADER_AST_VARATTR_STATIC)
933
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   654
                fprintf(io, "static ");
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   655
            if (ast->vardecl.attributes & MOJOSHADER_AST_VARATTR_UNIFORM)
933
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   656
                fprintf(io, "uniform ");
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   657
            if (ast->vardecl.attributes & MOJOSHADER_AST_VARATTR_VOLATILE)
933
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   658
                fprintf(io, "nointerpolation ");
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   659
            if (ast->vardecl.attributes & MOJOSHADER_AST_VARATTR_CONST)
933
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   660
                fprintf(io, "const ");
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   661
            if (ast->vardecl.attributes & MOJOSHADER_AST_VARATTR_ROWMAJOR)
933
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   662
                fprintf(io, "rowmajor ");
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   663
            if (ast->vardecl.attributes & MOJOSHADER_AST_VARATTR_COLUMNMAJOR)
933
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   664
                fprintf(io, "columnmajor ");
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   665
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   666
            if (ast->vardecl.datatype)
964
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
   667
                print_ast_datatype(io, ast->vardecl.datatype);
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   668
            else
933
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   669
                print_ast(io, 0, ast->vardecl.anonymous_datatype);
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   670
            fprintf(io, " ");
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   671
            print_ast(io, 0, ast->vardecl.details);
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   672
            if (ast->vardecl.semantic)
933
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   673
                fprintf(io, " : %s", ast->vardecl.semantic);
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   674
            if (ast->vardecl.annotations)
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   675
            {
933
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   676
                fprintf(io, " ");
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   677
                print_ast(io, 0, ast->vardecl.annotations);
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   678
            } // if
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   679
            if (ast->vardecl.initializer != NULL)
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   680
            {
933
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   681
                fprintf(io, " = ");
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   682
                print_ast(io, 0, ast->vardecl.initializer);
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   683
            } // if
933
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   684
            print_ast(io, 0, ast->vardecl.lowlevel);
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   685
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   686
            if (ast->vardecl.next == NULL)
933
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   687
                fprintf(io, "%s", nl);
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   688
            else
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   689
            {
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   690
                const int attr = ast->vardecl.next->attributes;
933
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   691
                fprintf(io, ", ");
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   692
                ast->vardecl.next->attributes = 0;
933
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   693
                print_ast(io, 1, ast->vardecl.next);
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   694
                ast->vardecl.next->attributes = attr;
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   695
            } // if
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   696
            break;
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   697
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   698
        case MOJOSHADER_AST_PACK_OFFSET:
933
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   699
            fprintf(io, " : packoffset(%s%s%s)", ast->packoffset.ident1,
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   700
                    ast->packoffset.ident2 ? "." : "",
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   701
                    ast->packoffset.ident2 ? ast->packoffset.ident2 : "");
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   702
            break;
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   703
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   704
        case MOJOSHADER_AST_VARIABLE_LOWLEVEL:
933
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   705
            print_ast(io, 0, ast->varlowlevel.packoffset);
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   706
            if (ast->varlowlevel.register_name)
933
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   707
                fprintf(io, " : register(%s)", ast->varlowlevel.register_name);
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   708
            break;
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   709
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   710
        case MOJOSHADER_AST_ANNOTATION:
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   711
        {
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   712
            const MOJOSHADER_astAnnotations *a = &ast->annotations;
933
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   713
            fprintf(io, "<");
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   714
            while (a)
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   715
            {
964
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
   716
                fprintf(io, " ");
e8c09c28162e Reworked datatype processing in the compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 956
diff changeset
   717
                print_ast_datatype(io, a->datatype);
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   718
                if (a->initializer != NULL)
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   719
                {
933
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   720
                    fprintf(io, " = ");
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   721
                    print_ast(io, 0, a->initializer);
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   722
                } // if
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   723
                if (a->next)
933
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   724
                    fprintf(io, ",");
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   725
                a = a->next;
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   726
            } // while
933
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   727
            fprintf(io, " >");
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   728
            break;
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   729
        } // case
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   730
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   731
        default:
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   732
            assert(0 && "unexpected type");
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   733
            break;
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   734
    } // switch
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   735
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   736
    #undef DO_INDENT
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   737
} // print_ast
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   738
668
983f396a3d71 Added fail().
Ryan C. Gordon <icculus@icculus.org>
parents: 667
diff changeset
   739
660
d82a22c8ab3d Allow preprocess.c to specify include paths on the command line.
Ryan C. Gordon <icculus@icculus.org>
parents: 659
diff changeset
   740
static int open_include(MOJOSHADER_includeType inctype, const char *fname,
d82a22c8ab3d Allow preprocess.c to specify include paths on the command line.
Ryan C. Gordon <icculus@icculus.org>
parents: 659
diff changeset
   741
                        const char *parent, const char **outdata,
d82a22c8ab3d Allow preprocess.c to specify include paths on the command line.
Ryan C. Gordon <icculus@icculus.org>
parents: 659
diff changeset
   742
                        unsigned int *outbytes, MOJOSHADER_malloc m,
d82a22c8ab3d Allow preprocess.c to specify include paths on the command line.
Ryan C. Gordon <icculus@icculus.org>
parents: 659
diff changeset
   743
                        MOJOSHADER_free f, void *d)
d82a22c8ab3d Allow preprocess.c to specify include paths on the command line.
Ryan C. Gordon <icculus@icculus.org>
parents: 659
diff changeset
   744
{
d82a22c8ab3d Allow preprocess.c to specify include paths on the command line.
Ryan C. Gordon <icculus@icculus.org>
parents: 659
diff changeset
   745
    int i;
d82a22c8ab3d Allow preprocess.c to specify include paths on the command line.
Ryan C. Gordon <icculus@icculus.org>
parents: 659
diff changeset
   746
    for (i = 0; i < include_path_count; i++)
d82a22c8ab3d Allow preprocess.c to specify include paths on the command line.
Ryan C. Gordon <icculus@icculus.org>
parents: 659
diff changeset
   747
    {
d82a22c8ab3d Allow preprocess.c to specify include paths on the command line.
Ryan C. Gordon <icculus@icculus.org>
parents: 659
diff changeset
   748
        const char *path = include_paths[i];
d82a22c8ab3d Allow preprocess.c to specify include paths on the command line.
Ryan C. Gordon <icculus@icculus.org>
parents: 659
diff changeset
   749
        const size_t len = strlen(path) + strlen(fname) + 2;
d82a22c8ab3d Allow preprocess.c to specify include paths on the command line.
Ryan C. Gordon <icculus@icculus.org>
parents: 659
diff changeset
   750
        char *buf = (char *) m(len, d);
d82a22c8ab3d Allow preprocess.c to specify include paths on the command line.
Ryan C. Gordon <icculus@icculus.org>
parents: 659
diff changeset
   751
        if (buf == NULL)
d82a22c8ab3d Allow preprocess.c to specify include paths on the command line.
Ryan C. Gordon <icculus@icculus.org>
parents: 659
diff changeset
   752
            return 0;
d82a22c8ab3d Allow preprocess.c to specify include paths on the command line.
Ryan C. Gordon <icculus@icculus.org>
parents: 659
diff changeset
   753
d82a22c8ab3d Allow preprocess.c to specify include paths on the command line.
Ryan C. Gordon <icculus@icculus.org>
parents: 659
diff changeset
   754
        snprintf(buf, len, "%s/%s", path, fname);
d82a22c8ab3d Allow preprocess.c to specify include paths on the command line.
Ryan C. Gordon <icculus@icculus.org>
parents: 659
diff changeset
   755
        FILE *io = fopen(buf, "rb");
d82a22c8ab3d Allow preprocess.c to specify include paths on the command line.
Ryan C. Gordon <icculus@icculus.org>
parents: 659
diff changeset
   756
        f(buf, d);
d82a22c8ab3d Allow preprocess.c to specify include paths on the command line.
Ryan C. Gordon <icculus@icculus.org>
parents: 659
diff changeset
   757
        if (io == NULL)
d82a22c8ab3d Allow preprocess.c to specify include paths on the command line.
Ryan C. Gordon <icculus@icculus.org>
parents: 659
diff changeset
   758
            continue;
d82a22c8ab3d Allow preprocess.c to specify include paths on the command line.
Ryan C. Gordon <icculus@icculus.org>
parents: 659
diff changeset
   759
d82a22c8ab3d Allow preprocess.c to specify include paths on the command line.
Ryan C. Gordon <icculus@icculus.org>
parents: 659
diff changeset
   760
        if (fseek(io, 0, SEEK_END) != -1)
d82a22c8ab3d Allow preprocess.c to specify include paths on the command line.
Ryan C. Gordon <icculus@icculus.org>
parents: 659
diff changeset
   761
        {
d82a22c8ab3d Allow preprocess.c to specify include paths on the command line.
Ryan C. Gordon <icculus@icculus.org>
parents: 659
diff changeset
   762
            const long fsize = ftell(io);
d82a22c8ab3d Allow preprocess.c to specify include paths on the command line.
Ryan C. Gordon <icculus@icculus.org>
parents: 659
diff changeset
   763
            if ((fsize == -1) || (fseek(io, 0, SEEK_SET) == -1))
d82a22c8ab3d Allow preprocess.c to specify include paths on the command line.
Ryan C. Gordon <icculus@icculus.org>
parents: 659
diff changeset
   764
            {
d82a22c8ab3d Allow preprocess.c to specify include paths on the command line.
Ryan C. Gordon <icculus@icculus.org>
parents: 659
diff changeset
   765
                fclose(io);
d82a22c8ab3d Allow preprocess.c to specify include paths on the command line.
Ryan C. Gordon <icculus@icculus.org>
parents: 659
diff changeset
   766
                return 0;
d82a22c8ab3d Allow preprocess.c to specify include paths on the command line.
Ryan C. Gordon <icculus@icculus.org>
parents: 659
diff changeset
   767
            } // if
d82a22c8ab3d Allow preprocess.c to specify include paths on the command line.
Ryan C. Gordon <icculus@icculus.org>
parents: 659
diff changeset
   768
d82a22c8ab3d Allow preprocess.c to specify include paths on the command line.
Ryan C. Gordon <icculus@icculus.org>
parents: 659
diff changeset
   769
            char *data = (char *) m(fsize, d);
d82a22c8ab3d Allow preprocess.c to specify include paths on the command line.
Ryan C. Gordon <icculus@icculus.org>
parents: 659
diff changeset
   770
            if (data == NULL)
d82a22c8ab3d Allow preprocess.c to specify include paths on the command line.
Ryan C. Gordon <icculus@icculus.org>
parents: 659
diff changeset
   771
            {
d82a22c8ab3d Allow preprocess.c to specify include paths on the command line.
Ryan C. Gordon <icculus@icculus.org>
parents: 659
diff changeset
   772
                fclose(io);
d82a22c8ab3d Allow preprocess.c to specify include paths on the command line.
Ryan C. Gordon <icculus@icculus.org>
parents: 659
diff changeset
   773
                return 0;
d82a22c8ab3d Allow preprocess.c to specify include paths on the command line.
Ryan C. Gordon <icculus@icculus.org>
parents: 659
diff changeset
   774
            } // if
d82a22c8ab3d Allow preprocess.c to specify include paths on the command line.
Ryan C. Gordon <icculus@icculus.org>
parents: 659
diff changeset
   775
d82a22c8ab3d Allow preprocess.c to specify include paths on the command line.
Ryan C. Gordon <icculus@icculus.org>
parents: 659
diff changeset
   776
            if (fread(data, fsize, 1, io) != 1)
d82a22c8ab3d Allow preprocess.c to specify include paths on the command line.
Ryan C. Gordon <icculus@icculus.org>
parents: 659
diff changeset
   777
            {
d82a22c8ab3d Allow preprocess.c to specify include paths on the command line.
Ryan C. Gordon <icculus@icculus.org>
parents: 659
diff changeset
   778
                f(data, d);
d82a22c8ab3d Allow preprocess.c to specify include paths on the command line.
Ryan C. Gordon <icculus@icculus.org>
parents: 659
diff changeset
   779
                fclose(io);
d82a22c8ab3d Allow preprocess.c to specify include paths on the command line.
Ryan C. Gordon <icculus@icculus.org>
parents: 659
diff changeset
   780
                return 0;
d82a22c8ab3d Allow preprocess.c to specify include paths on the command line.
Ryan C. Gordon <icculus@icculus.org>
parents: 659
diff changeset
   781
            } // if
d82a22c8ab3d Allow preprocess.c to specify include paths on the command line.
Ryan C. Gordon <icculus@icculus.org>
parents: 659
diff changeset
   782
d82a22c8ab3d Allow preprocess.c to specify include paths on the command line.
Ryan C. Gordon <icculus@icculus.org>
parents: 659
diff changeset
   783
            fclose(io);
d82a22c8ab3d Allow preprocess.c to specify include paths on the command line.
Ryan C. Gordon <icculus@icculus.org>
parents: 659
diff changeset
   784
            *outdata = data;
d82a22c8ab3d Allow preprocess.c to specify include paths on the command line.
Ryan C. Gordon <icculus@icculus.org>
parents: 659
diff changeset
   785
            *outbytes = (unsigned int) fsize;
d82a22c8ab3d Allow preprocess.c to specify include paths on the command line.
Ryan C. Gordon <icculus@icculus.org>
parents: 659
diff changeset
   786
            return 1;
d82a22c8ab3d Allow preprocess.c to specify include paths on the command line.
Ryan C. Gordon <icculus@icculus.org>
parents: 659
diff changeset
   787
        } // if
d82a22c8ab3d Allow preprocess.c to specify include paths on the command line.
Ryan C. Gordon <icculus@icculus.org>
parents: 659
diff changeset
   788
    } // for
d82a22c8ab3d Allow preprocess.c to specify include paths on the command line.
Ryan C. Gordon <icculus@icculus.org>
parents: 659
diff changeset
   789
d82a22c8ab3d Allow preprocess.c to specify include paths on the command line.
Ryan C. Gordon <icculus@icculus.org>
parents: 659
diff changeset
   790
    return 0;
d82a22c8ab3d Allow preprocess.c to specify include paths on the command line.
Ryan C. Gordon <icculus@icculus.org>
parents: 659
diff changeset
   791
} // open_include
d82a22c8ab3d Allow preprocess.c to specify include paths on the command line.
Ryan C. Gordon <icculus@icculus.org>
parents: 659
diff changeset
   792
d82a22c8ab3d Allow preprocess.c to specify include paths on the command line.
Ryan C. Gordon <icculus@icculus.org>
parents: 659
diff changeset
   793
663
e7b3b60bd3b1 Made function static.
Ryan C. Gordon <icculus@icculus.org>
parents: 662
diff changeset
   794
static void close_include(const char *data, MOJOSHADER_malloc m,
e7b3b60bd3b1 Made function static.
Ryan C. Gordon <icculus@icculus.org>
parents: 662
diff changeset
   795
                          MOJOSHADER_free f, void *d)
660
d82a22c8ab3d Allow preprocess.c to specify include paths on the command line.
Ryan C. Gordon <icculus@icculus.org>
parents: 659
diff changeset
   796
{
d82a22c8ab3d Allow preprocess.c to specify include paths on the command line.
Ryan C. Gordon <icculus@icculus.org>
parents: 659
diff changeset
   797
    f((void *) data, d);
d82a22c8ab3d Allow preprocess.c to specify include paths on the command line.
Ryan C. Gordon <icculus@icculus.org>
parents: 659
diff changeset
   798
} // close_include
d82a22c8ab3d Allow preprocess.c to specify include paths on the command line.
Ryan C. Gordon <icculus@icculus.org>
parents: 659
diff changeset
   799
d82a22c8ab3d Allow preprocess.c to specify include paths on the command line.
Ryan C. Gordon <icculus@icculus.org>
parents: 659
diff changeset
   800
578
6c8f73c845e7 Allow app to specify a base filename for error messages.
Ryan C. Gordon <icculus@icculus.org>
parents: 577
diff changeset
   801
static int preprocess(const char *fname, const char *buf, int len,
659
e77acde263cc Added command line stuff to preprocess.c, including predefined macro support.
Ryan C. Gordon <icculus@icculus.org>
parents: 588
diff changeset
   802
                      const char *outfile,
e77acde263cc Added command line stuff to preprocess.c, including predefined macro support.
Ryan C. Gordon <icculus@icculus.org>
parents: 588
diff changeset
   803
                      const MOJOSHADER_preprocessorDefine *defs,
669
fd14a7278a95 Merged assemble.c into mojoshader-compiler.c ...
Ryan C. Gordon <icculus@icculus.org>
parents: 668
diff changeset
   804
                      unsigned int defcount, FILE *io)
555
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   805
{
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   806
    const MOJOSHADER_preprocessData *pd;
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   807
    int retval = 0;
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   808
665
521d24646891 Added allocator debug output.
Ryan C. Gordon <icculus@icculus.org>
parents: 664
diff changeset
   809
    pd = MOJOSHADER_preprocess(fname, buf, len, defs, defcount, open_include,
521d24646891 Added allocator debug output.
Ryan C. Gordon <icculus@icculus.org>
parents: 664
diff changeset
   810
                               close_include, Malloc, Free, NULL);
555
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   811
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   812
    if (pd->error_count > 0)
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   813
    {
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   814
        int i;
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   815
        for (i = 0; i < pd->error_count; i++)
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   816
        {
885
29b6d4c4a7a2 Implemented error output unit test harness.
Ryan C. Gordon <icculus@icculus.org>
parents: 793
diff changeset
   817
            fprintf(stderr, "%s:%d: ERROR: %s\n",
577
bec531dd448e Report filenames in error messages.
Ryan C. Gordon <icculus@icculus.org>
parents: 556
diff changeset
   818
                    pd->errors[i].filename ? pd->errors[i].filename : "???",
555
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   819
                    pd->errors[i].error_position,
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   820
                    pd->errors[i].error);
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   821
        } // for
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   822
    } // if
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   823
    else
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   824
    {
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   825
        if (pd->output != NULL)
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   826
        {
747
0d1dbadcb387 Don't report false error when writing a zero-byte file.
Ryan C. Gordon <icculus@icculus.org>
parents: 706
diff changeset
   827
            const int len = pd->output_len;
0d1dbadcb387 Don't report false error when writing a zero-byte file.
Ryan C. Gordon <icculus@icculus.org>
parents: 706
diff changeset
   828
            if ((len) && (fwrite(pd->output, len, 1, io) != 1))
555
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   829
                printf(" ... fwrite('%s') failed.\n", outfile);
659
e77acde263cc Added command line stuff to preprocess.c, including predefined macro support.
Ryan C. Gordon <icculus@icculus.org>
parents: 588
diff changeset
   830
            else if ((outfile != NULL) && (fclose(io) == EOF))
555
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   831
                printf(" ... fclose('%s') failed.\n", outfile);
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   832
            else
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   833
                retval = 1;
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   834
        } // if
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   835
    } // else
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   836
    MOJOSHADER_freePreprocessData(pd);
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   837
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   838
    return retval;
556
04282775cc2c Fixed cut-and-pasted comments.
Ryan C. Gordon <icculus@icculus.org>
parents: 555
diff changeset
   839
} // preprocess
555
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   840
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   841
669
fd14a7278a95 Merged assemble.c into mojoshader-compiler.c ...
Ryan C. Gordon <icculus@icculus.org>
parents: 668
diff changeset
   842
static int assemble(const char *fname, const char *buf, int len,
fd14a7278a95 Merged assemble.c into mojoshader-compiler.c ...
Ryan C. Gordon <icculus@icculus.org>
parents: 668
diff changeset
   843
                    const char *outfile,
fd14a7278a95 Merged assemble.c into mojoshader-compiler.c ...
Ryan C. Gordon <icculus@icculus.org>
parents: 668
diff changeset
   844
                    const MOJOSHADER_preprocessorDefine *defs,
fd14a7278a95 Merged assemble.c into mojoshader-compiler.c ...
Ryan C. Gordon <icculus@icculus.org>
parents: 668
diff changeset
   845
                    unsigned int defcount, FILE *io)
fd14a7278a95 Merged assemble.c into mojoshader-compiler.c ...
Ryan C. Gordon <icculus@icculus.org>
parents: 668
diff changeset
   846
{
fd14a7278a95 Merged assemble.c into mojoshader-compiler.c ...
Ryan C. Gordon <icculus@icculus.org>
parents: 668
diff changeset
   847
    const MOJOSHADER_parseData *pd;
fd14a7278a95 Merged assemble.c into mojoshader-compiler.c ...
Ryan C. Gordon <icculus@icculus.org>
parents: 668
diff changeset
   848
    int retval = 0;
fd14a7278a95 Merged assemble.c into mojoshader-compiler.c ...
Ryan C. Gordon <icculus@icculus.org>
parents: 668
diff changeset
   849
fd14a7278a95 Merged assemble.c into mojoshader-compiler.c ...
Ryan C. Gordon <icculus@icculus.org>
parents: 668
diff changeset
   850
    pd = MOJOSHADER_assemble(fname, buf, len, NULL, 0, NULL, 0,
fd14a7278a95 Merged assemble.c into mojoshader-compiler.c ...
Ryan C. Gordon <icculus@icculus.org>
parents: 668
diff changeset
   851
                             defs, defcount, open_include, close_include,
fd14a7278a95 Merged assemble.c into mojoshader-compiler.c ...
Ryan C. Gordon <icculus@icculus.org>
parents: 668
diff changeset
   852
                             Malloc, Free, NULL);
fd14a7278a95 Merged assemble.c into mojoshader-compiler.c ...
Ryan C. Gordon <icculus@icculus.org>
parents: 668
diff changeset
   853
fd14a7278a95 Merged assemble.c into mojoshader-compiler.c ...
Ryan C. Gordon <icculus@icculus.org>
parents: 668
diff changeset
   854
    if (pd->error_count > 0)
fd14a7278a95 Merged assemble.c into mojoshader-compiler.c ...
Ryan C. Gordon <icculus@icculus.org>
parents: 668
diff changeset
   855
    {
fd14a7278a95 Merged assemble.c into mojoshader-compiler.c ...
Ryan C. Gordon <icculus@icculus.org>
parents: 668
diff changeset
   856
        int i;
fd14a7278a95 Merged assemble.c into mojoshader-compiler.c ...
Ryan C. Gordon <icculus@icculus.org>
parents: 668
diff changeset
   857
        for (i = 0; i < pd->error_count; i++)
fd14a7278a95 Merged assemble.c into mojoshader-compiler.c ...
Ryan C. Gordon <icculus@icculus.org>
parents: 668
diff changeset
   858
        {
885
29b6d4c4a7a2 Implemented error output unit test harness.
Ryan C. Gordon <icculus@icculus.org>
parents: 793
diff changeset
   859
            fprintf(stderr, "%s:%d: ERROR: %s\n",
669
fd14a7278a95 Merged assemble.c into mojoshader-compiler.c ...
Ryan C. Gordon <icculus@icculus.org>
parents: 668
diff changeset
   860
                    pd->errors[i].filename ? pd->errors[i].filename : "???",
fd14a7278a95 Merged assemble.c into mojoshader-compiler.c ...
Ryan C. Gordon <icculus@icculus.org>
parents: 668
diff changeset
   861
                    pd->errors[i].error_position,
fd14a7278a95 Merged assemble.c into mojoshader-compiler.c ...
Ryan C. Gordon <icculus@icculus.org>
parents: 668
diff changeset
   862
                    pd->errors[i].error);
fd14a7278a95 Merged assemble.c into mojoshader-compiler.c ...
Ryan C. Gordon <icculus@icculus.org>
parents: 668
diff changeset
   863
        } // for
fd14a7278a95 Merged assemble.c into mojoshader-compiler.c ...
Ryan C. Gordon <icculus@icculus.org>
parents: 668
diff changeset
   864
    } // if
fd14a7278a95 Merged assemble.c into mojoshader-compiler.c ...
Ryan C. Gordon <icculus@icculus.org>
parents: 668
diff changeset
   865
    else
fd14a7278a95 Merged assemble.c into mojoshader-compiler.c ...
Ryan C. Gordon <icculus@icculus.org>
parents: 668
diff changeset
   866
    {
fd14a7278a95 Merged assemble.c into mojoshader-compiler.c ...
Ryan C. Gordon <icculus@icculus.org>
parents: 668
diff changeset
   867
        if (pd->output != NULL)
fd14a7278a95 Merged assemble.c into mojoshader-compiler.c ...
Ryan C. Gordon <icculus@icculus.org>
parents: 668
diff changeset
   868
        {
747
0d1dbadcb387 Don't report false error when writing a zero-byte file.
Ryan C. Gordon <icculus@icculus.org>
parents: 706
diff changeset
   869
            const int len = pd->output_len;
0d1dbadcb387 Don't report false error when writing a zero-byte file.
Ryan C. Gordon <icculus@icculus.org>
parents: 706
diff changeset
   870
            if ((len) && (fwrite(pd->output, len, 1, io) != 1))
669
fd14a7278a95 Merged assemble.c into mojoshader-compiler.c ...
Ryan C. Gordon <icculus@icculus.org>
parents: 668
diff changeset
   871
                printf(" ... fwrite('%s') failed.\n", outfile);
fd14a7278a95 Merged assemble.c into mojoshader-compiler.c ...
Ryan C. Gordon <icculus@icculus.org>
parents: 668
diff changeset
   872
            else if ((outfile != NULL) && (fclose(io) == EOF))
fd14a7278a95 Merged assemble.c into mojoshader-compiler.c ...
Ryan C. Gordon <icculus@icculus.org>
parents: 668
diff changeset
   873
                printf(" ... fclose('%s') failed.\n", outfile);
fd14a7278a95 Merged assemble.c into mojoshader-compiler.c ...
Ryan C. Gordon <icculus@icculus.org>
parents: 668
diff changeset
   874
            else
fd14a7278a95 Merged assemble.c into mojoshader-compiler.c ...
Ryan C. Gordon <icculus@icculus.org>
parents: 668
diff changeset
   875
                retval = 1;
fd14a7278a95 Merged assemble.c into mojoshader-compiler.c ...
Ryan C. Gordon <icculus@icculus.org>
parents: 668
diff changeset
   876
        } // if
fd14a7278a95 Merged assemble.c into mojoshader-compiler.c ...
Ryan C. Gordon <icculus@icculus.org>
parents: 668
diff changeset
   877
    } // else
fd14a7278a95 Merged assemble.c into mojoshader-compiler.c ...
Ryan C. Gordon <icculus@icculus.org>
parents: 668
diff changeset
   878
    MOJOSHADER_freeParseData(pd);
fd14a7278a95 Merged assemble.c into mojoshader-compiler.c ...
Ryan C. Gordon <icculus@icculus.org>
parents: 668
diff changeset
   879
fd14a7278a95 Merged assemble.c into mojoshader-compiler.c ...
Ryan C. Gordon <icculus@icculus.org>
parents: 668
diff changeset
   880
    return retval;
fd14a7278a95 Merged assemble.c into mojoshader-compiler.c ...
Ryan C. Gordon <icculus@icculus.org>
parents: 668
diff changeset
   881
} // assemble
fd14a7278a95 Merged assemble.c into mojoshader-compiler.c ...
Ryan C. Gordon <icculus@icculus.org>
parents: 668
diff changeset
   882
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   883
static int ast(const char *fname, const char *buf, int len,
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   884
               const char *outfile, const MOJOSHADER_preprocessorDefine *defs,
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   885
               unsigned int defcount, FILE *io)
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   886
{
933
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   887
    const MOJOSHADER_astData *ad;
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   888
    int retval = 0;
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   889
933
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   890
    ad = MOJOSHADER_parseAst(MOJOSHADER_SRC_PROFILE_HLSL_PS_1_1,  // !!! FIXME
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   891
                        fname, buf, len, defs, defcount,
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   892
                        open_include, close_include, Malloc, Free, NULL);
933
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   893
    
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   894
    if (ad->error_count > 0)
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   895
    {
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   896
        int i;
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   897
        for (i = 0; i < ad->error_count; i++)
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   898
        {
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   899
            fprintf(stderr, "%s:%d: ERROR: %s\n",
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   900
                    ad->errors[i].filename ? ad->errors[i].filename : "???",
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   901
                    ad->errors[i].error_position,
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   902
                    ad->errors[i].error);
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   903
        } // for
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   904
    } // if
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   905
    else
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   906
    {
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   907
        print_ast(io, 0, ad->ast);
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   908
        if ((outfile != NULL) && (fclose(io) == EOF))
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   909
            printf(" ... fclose('%s') failed.\n", outfile);
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   910
        else
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   911
            retval = 1;
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   912
    } // else
934
f6ecea50c607 Whoops, forgot to free return value when finished with it.
Ryan C. Gordon <icculus@icculus.org>
parents: 933
diff changeset
   913
    MOJOSHADER_freeAstData(ad);
933
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   914
f2367f48f3e2 Finished cleaning up AST tools and moving them into application level.
Ryan C. Gordon <icculus@icculus.org>
parents: 931
diff changeset
   915
    return retval;
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   916
} // ast
706
01a92f30b84f Added some basic compiler stub stuff, just to get this building at all.
Ryan C. Gordon <icculus@icculus.org>
parents: 688
diff changeset
   917
01a92f30b84f Added some basic compiler stub stuff, just to get this building at all.
Ryan C. Gordon <icculus@icculus.org>
parents: 688
diff changeset
   918
static int compile(const char *fname, const char *buf, int len,
01a92f30b84f Added some basic compiler stub stuff, just to get this building at all.
Ryan C. Gordon <icculus@icculus.org>
parents: 688
diff changeset
   919
                    const char *outfile,
01a92f30b84f Added some basic compiler stub stuff, just to get this building at all.
Ryan C. Gordon <icculus@icculus.org>
parents: 688
diff changeset
   920
                    const MOJOSHADER_preprocessorDefine *defs,
01a92f30b84f Added some basic compiler stub stuff, just to get this building at all.
Ryan C. Gordon <icculus@icculus.org>
parents: 688
diff changeset
   921
                    unsigned int defcount, FILE *io)
01a92f30b84f Added some basic compiler stub stuff, just to get this building at all.
Ryan C. Gordon <icculus@icculus.org>
parents: 688
diff changeset
   922
{
793
616980fb00bb Fixed a compiler warning, for now.
Ryan C. Gordon <icculus@icculus.org>
parents: 747
diff changeset
   923
    // !!! FIXME: write me.
616980fb00bb Fixed a compiler warning, for now.
Ryan C. Gordon <icculus@icculus.org>
parents: 747
diff changeset
   924
    //const MOJOSHADER_parseData *pd;
616980fb00bb Fixed a compiler warning, for now.
Ryan C. Gordon <icculus@icculus.org>
parents: 747
diff changeset
   925
    //int retval = 0;
706
01a92f30b84f Added some basic compiler stub stuff, just to get this building at all.
Ryan C. Gordon <icculus@icculus.org>
parents: 688
diff changeset
   926
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   927
    MOJOSHADER_compile(MOJOSHADER_SRC_PROFILE_HLSL_PS_1_1,  // !!! FIXME
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   928
                        fname, buf, len, defs, defcount,
706
01a92f30b84f Added some basic compiler stub stuff, just to get this building at all.
Ryan C. Gordon <icculus@icculus.org>
parents: 688
diff changeset
   929
                             open_include, close_include,
01a92f30b84f Added some basic compiler stub stuff, just to get this building at all.
Ryan C. Gordon <icculus@icculus.org>
parents: 688
diff changeset
   930
                             Malloc, Free, NULL);
01a92f30b84f Added some basic compiler stub stuff, just to get this building at all.
Ryan C. Gordon <icculus@icculus.org>
parents: 688
diff changeset
   931
    return 1;
01a92f30b84f Added some basic compiler stub stuff, just to get this building at all.
Ryan C. Gordon <icculus@icculus.org>
parents: 688
diff changeset
   932
} // compile
669
fd14a7278a95 Merged assemble.c into mojoshader-compiler.c ...
Ryan C. Gordon <icculus@icculus.org>
parents: 668
diff changeset
   933
fd14a7278a95 Merged assemble.c into mojoshader-compiler.c ...
Ryan C. Gordon <icculus@icculus.org>
parents: 668
diff changeset
   934
typedef enum
fd14a7278a95 Merged assemble.c into mojoshader-compiler.c ...
Ryan C. Gordon <icculus@icculus.org>
parents: 668
diff changeset
   935
{
fd14a7278a95 Merged assemble.c into mojoshader-compiler.c ...
Ryan C. Gordon <icculus@icculus.org>
parents: 668
diff changeset
   936
    ACTION_UNKNOWN,
892
c45dec9f8906 Added a --version command line to mojoshader-compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 885
diff changeset
   937
    ACTION_VERSION,
669
fd14a7278a95 Merged assemble.c into mojoshader-compiler.c ...
Ryan C. Gordon <icculus@icculus.org>
parents: 668
diff changeset
   938
    ACTION_PREPROCESS,
fd14a7278a95 Merged assemble.c into mojoshader-compiler.c ...
Ryan C. Gordon <icculus@icculus.org>
parents: 668
diff changeset
   939
    ACTION_ASSEMBLE,
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   940
    ACTION_AST,
706
01a92f30b84f Added some basic compiler stub stuff, just to get this building at all.
Ryan C. Gordon <icculus@icculus.org>
parents: 688
diff changeset
   941
    ACTION_COMPILE,
669
fd14a7278a95 Merged assemble.c into mojoshader-compiler.c ...
Ryan C. Gordon <icculus@icculus.org>
parents: 668
diff changeset
   942
} Action;
fd14a7278a95 Merged assemble.c into mojoshader-compiler.c ...
Ryan C. Gordon <icculus@icculus.org>
parents: 668
diff changeset
   943
fd14a7278a95 Merged assemble.c into mojoshader-compiler.c ...
Ryan C. Gordon <icculus@icculus.org>
parents: 668
diff changeset
   944
555
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   945
int main(int argc, char **argv)
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   946
{
669
fd14a7278a95 Merged assemble.c into mojoshader-compiler.c ...
Ryan C. Gordon <icculus@icculus.org>
parents: 668
diff changeset
   947
    Action action = ACTION_UNKNOWN;
555
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   948
    int retval = 1;
659
e77acde263cc Added command line stuff to preprocess.c, including predefined macro support.
Ryan C. Gordon <icculus@icculus.org>
parents: 588
diff changeset
   949
    const char *infile = NULL;
e77acde263cc Added command line stuff to preprocess.c, including predefined macro support.
Ryan C. Gordon <icculus@icculus.org>
parents: 588
diff changeset
   950
    const char *outfile = NULL;
e77acde263cc Added command line stuff to preprocess.c, including predefined macro support.
Ryan C. Gordon <icculus@icculus.org>
parents: 588
diff changeset
   951
    int i;
555
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   952
659
e77acde263cc Added command line stuff to preprocess.c, including predefined macro support.
Ryan C. Gordon <icculus@icculus.org>
parents: 588
diff changeset
   953
    MOJOSHADER_preprocessorDefine *defs = NULL;
e77acde263cc Added command line stuff to preprocess.c, including predefined macro support.
Ryan C. Gordon <icculus@icculus.org>
parents: 588
diff changeset
   954
    unsigned int defcount = 0;
e77acde263cc Added command line stuff to preprocess.c, including predefined macro support.
Ryan C. Gordon <icculus@icculus.org>
parents: 588
diff changeset
   955
686
021241f2a237 Current working directory should always be in the include path.
Ryan C. Gordon <icculus@icculus.org>
parents: 673
diff changeset
   956
    include_paths = (const char **) malloc(sizeof (char *));
021241f2a237 Current working directory should always be in the include path.
Ryan C. Gordon <icculus@icculus.org>
parents: 673
diff changeset
   957
    include_paths[0] = ".";
021241f2a237 Current working directory should always be in the include path.
Ryan C. Gordon <icculus@icculus.org>
parents: 673
diff changeset
   958
    include_path_count = 1;
021241f2a237 Current working directory should always be in the include path.
Ryan C. Gordon <icculus@icculus.org>
parents: 673
diff changeset
   959
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   960
    // !!! FIXME: clean this up.
659
e77acde263cc Added command line stuff to preprocess.c, including predefined macro support.
Ryan C. Gordon <icculus@icculus.org>
parents: 588
diff changeset
   961
    for (i = 1; i < argc; i++)
555
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
   962
    {
659
e77acde263cc Added command line stuff to preprocess.c, including predefined macro support.
Ryan C. Gordon <icculus@icculus.org>
parents: 588
diff changeset
   963
        const char *arg = argv[i];
e77acde263cc Added command line stuff to preprocess.c, including predefined macro support.
Ryan C. Gordon <icculus@icculus.org>
parents: 588
diff changeset
   964
669
fd14a7278a95 Merged assemble.c into mojoshader-compiler.c ...
Ryan C. Gordon <icculus@icculus.org>
parents: 668
diff changeset
   965
        if (strcmp(arg, "-P") == 0)
fd14a7278a95 Merged assemble.c into mojoshader-compiler.c ...
Ryan C. Gordon <icculus@icculus.org>
parents: 668
diff changeset
   966
        {
688
29ee34e66161 No reason you can't specify the same option twice.
Ryan C. Gordon <icculus@icculus.org>
parents: 686
diff changeset
   967
            if ((action != ACTION_UNKNOWN) && (action != ACTION_PREPROCESS))
669
fd14a7278a95 Merged assemble.c into mojoshader-compiler.c ...
Ryan C. Gordon <icculus@icculus.org>
parents: 668
diff changeset
   968
                fail("Multiple actions specified");
fd14a7278a95 Merged assemble.c into mojoshader-compiler.c ...
Ryan C. Gordon <icculus@icculus.org>
parents: 668
diff changeset
   969
            action = ACTION_PREPROCESS;
fd14a7278a95 Merged assemble.c into mojoshader-compiler.c ...
Ryan C. Gordon <icculus@icculus.org>
parents: 668
diff changeset
   970
        } // if
fd14a7278a95 Merged assemble.c into mojoshader-compiler.c ...
Ryan C. Gordon <icculus@icculus.org>
parents: 668
diff changeset
   971
fd14a7278a95 Merged assemble.c into mojoshader-compiler.c ...
Ryan C. Gordon <icculus@icculus.org>
parents: 668
diff changeset
   972
        else if (strcmp(arg, "-A") == 0)
fd14a7278a95 Merged assemble.c into mojoshader-compiler.c ...
Ryan C. Gordon <icculus@icculus.org>
parents: 668
diff changeset
   973
        {
688
29ee34e66161 No reason you can't specify the same option twice.
Ryan C. Gordon <icculus@icculus.org>
parents: 686
diff changeset
   974
            if ((action != ACTION_UNKNOWN) && (action != ACTION_ASSEMBLE))
669
fd14a7278a95 Merged assemble.c into mojoshader-compiler.c ...
Ryan C. Gordon <icculus@icculus.org>
parents: 668
diff changeset
   975
                fail("Multiple actions specified");
fd14a7278a95 Merged assemble.c into mojoshader-compiler.c ...
Ryan C. Gordon <icculus@icculus.org>
parents: 668
diff changeset
   976
            action = ACTION_ASSEMBLE;
fd14a7278a95 Merged assemble.c into mojoshader-compiler.c ...
Ryan C. Gordon <icculus@icculus.org>
parents: 668
diff changeset
   977
        } // else if
fd14a7278a95 Merged assemble.c into mojoshader-compiler.c ...
Ryan C. Gordon <icculus@icculus.org>
parents: 668
diff changeset
   978
931
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   979
        else if (strcmp(arg, "-T") == 0)
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   980
        {
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   981
            if ((action != ACTION_UNKNOWN) && (action != ACTION_AST))
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   982
                fail("Multiple actions specified");
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   983
            action = ACTION_AST;
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   984
        } // else if
4aa1f68d8292 Heavy rework of the AST code.
Ryan C. Gordon <icculus@icculus.org>
parents: 892
diff changeset
   985
706
01a92f30b84f Added some basic compiler stub stuff, just to get this building at all.
Ryan C. Gordon <icculus@icculus.org>
parents: 688
diff changeset
   986
        else if (strcmp(arg, "-C") == 0)
01a92f30b84f Added some basic compiler stub stuff, just to get this building at all.
Ryan C. Gordon <icculus@icculus.org>
parents: 688
diff changeset
   987
        {
01a92f30b84f Added some basic compiler stub stuff, just to get this building at all.
Ryan C. Gordon <icculus@icculus.org>
parents: 688
diff changeset
   988
            if ((action != ACTION_UNKNOWN) && (action != ACTION_COMPILE))
01a92f30b84f Added some basic compiler stub stuff, just to get this building at all.
Ryan C. Gordon <icculus@icculus.org>
parents: 688
diff changeset
   989
                fail("Multiple actions specified");
01a92f30b84f Added some basic compiler stub stuff, just to get this building at all.
Ryan C. Gordon <icculus@icculus.org>
parents: 688
diff changeset
   990
            action = ACTION_COMPILE;
01a92f30b84f Added some basic compiler stub stuff, just to get this building at all.
Ryan C. Gordon <icculus@icculus.org>
parents: 688
diff changeset
   991
        } // else if
01a92f30b84f Added some basic compiler stub stuff, just to get this building at all.
Ryan C. Gordon <icculus@icculus.org>
parents: 688
diff changeset
   992
892
c45dec9f8906 Added a --version command line to mojoshader-compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 885
diff changeset
   993
        else if ((strcmp(arg, "-V") == 0) || (strcmp(arg, "--version") == 0))
c45dec9f8906 Added a --version command line to mojoshader-compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 885
diff changeset
   994
        {
c45dec9f8906 Added a --version command line to mojoshader-compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 885
diff changeset
   995
            if ((action != ACTION_UNKNOWN) && (action != ACTION_VERSION))
c45dec9f8906 Added a --version command line to mojoshader-compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 885
diff changeset
   996
                fail("Multiple actions specified");
c45dec9f8906 Added a --version command line to mojoshader-compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 885
diff changeset
   997
            action = ACTION_VERSION;
c45dec9f8906 Added a --version command line to mojoshader-compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 885
diff changeset
   998
        } // else if
c45dec9f8906 Added a --version command line to mojoshader-compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 885
diff changeset
   999
669
fd14a7278a95 Merged assemble.c into mojoshader-compiler.c ...
Ryan C. Gordon <icculus@icculus.org>
parents: 668
diff changeset
  1000
        else if (strcmp(arg, "-o") == 0)
659
e77acde263cc Added command line stuff to preprocess.c, including predefined macro support.
Ryan C. Gordon <icculus@icculus.org>
parents: 588
diff changeset
  1001
        {
e77acde263cc Added command line stuff to preprocess.c, including predefined macro support.
Ryan C. Gordon <icculus@icculus.org>
parents: 588
diff changeset
  1002
            if (outfile != NULL)
668
983f396a3d71 Added fail().
Ryan C. Gordon <icculus@icculus.org>
parents: 667
diff changeset
  1003
                fail("multiple output files specified");
659
e77acde263cc Added command line stuff to preprocess.c, including predefined macro support.
Ryan C. Gordon <icculus@icculus.org>
parents: 588
diff changeset
  1004
e77acde263cc Added command line stuff to preprocess.c, including predefined macro support.
Ryan C. Gordon <icculus@icculus.org>
parents: 588
diff changeset
  1005
            arg = argv[++i];
e77acde263cc Added command line stuff to preprocess.c, including predefined macro support.
Ryan C. Gordon <icculus@icculus.org>
parents: 588
diff changeset
  1006
            if (arg == NULL)
668
983f396a3d71 Added fail().
Ryan C. Gordon <icculus@icculus.org>
parents: 667
diff changeset
  1007
                fail("no filename after '-o'");
659
e77acde263cc Added command line stuff to preprocess.c, including predefined macro support.
Ryan C. Gordon <icculus@icculus.org>
parents: 588
diff changeset
  1008
            outfile = arg;
e77acde263cc Added command line stuff to preprocess.c, including predefined macro support.
Ryan C. Gordon <icculus@icculus.org>
parents: 588
diff changeset
  1009
        } // if
e77acde263cc Added command line stuff to preprocess.c, including predefined macro support.
Ryan C. Gordon <icculus@icculus.org>
parents: 588
diff changeset
  1010
667
8efc63f4ab9b That should be an "else if", not an "if" ...
Ryan C. Gordon <icculus@icculus.org>
parents: 666
diff changeset
  1011
        else if (strcmp(arg, "-I") == 0)
660
d82a22c8ab3d Allow preprocess.c to specify include paths on the command line.
Ryan C. Gordon <icculus@icculus.org>
parents: 659
diff changeset
  1012
        {
d82a22c8ab3d Allow preprocess.c to specify include paths on the command line.
Ryan C. Gordon <icculus@icculus.org>
parents: 659
diff changeset
  1013
            arg = argv[++i];
d82a22c8ab3d Allow preprocess.c to specify include paths on the command line.
Ryan C. Gordon <icculus@icculus.org>
parents: 659
diff changeset
  1014
            if (arg == NULL)
668
983f396a3d71 Added fail().
Ryan C. Gordon <icculus@icculus.org>
parents: 667
diff changeset
  1015
                fail("no path after '-I'");
983f396a3d71 Added fail().
Ryan C. Gordon <icculus@icculus.org>
parents: 667
diff changeset
  1016
660
d82a22c8ab3d Allow preprocess.c to specify include paths on the command line.
Ryan C. Gordon <icculus@icculus.org>
parents: 659
diff changeset
  1017
            include_paths = (const char **) realloc(include_paths,
d82a22c8ab3d Allow preprocess.c to specify include paths on the command line.
Ryan C. Gordon <icculus@icculus.org>
parents: 659
diff changeset
  1018
                       (include_path_count+1) * sizeof (char *));
d82a22c8ab3d Allow preprocess.c to specify include paths on the command line.
Ryan C. Gordon <icculus@icculus.org>
parents: 659
diff changeset
  1019
            include_paths[include_path_count] = arg;
d82a22c8ab3d Allow preprocess.c to specify include paths on the command line.
Ryan C. Gordon <icculus@icculus.org>
parents: 659
diff changeset
  1020
            include_path_count++;
d82a22c8ab3d Allow preprocess.c to specify include paths on the command line.
Ryan C. Gordon <icculus@icculus.org>
parents: 659
diff changeset
  1021
        } // if
d82a22c8ab3d Allow preprocess.c to specify include paths on the command line.
Ryan C. Gordon <icculus@icculus.org>
parents: 659
diff changeset
  1022
659
e77acde263cc Added command line stuff to preprocess.c, including predefined macro support.
Ryan C. Gordon <icculus@icculus.org>
parents: 588
diff changeset
  1023
        else if (strncmp(arg, "-D", 2) == 0)
e77acde263cc Added command line stuff to preprocess.c, including predefined macro support.
Ryan C. Gordon <icculus@icculus.org>
parents: 588
diff changeset
  1024
        {
e77acde263cc Added command line stuff to preprocess.c, including predefined macro support.
Ryan C. Gordon <icculus@icculus.org>
parents: 588
diff changeset
  1025
            arg += 2;
e77acde263cc Added command line stuff to preprocess.c, including predefined macro support.
Ryan C. Gordon <icculus@icculus.org>
parents: 588
diff changeset
  1026
            char *ident = strdup(arg);
e77acde263cc Added command line stuff to preprocess.c, including predefined macro support.
Ryan C. Gordon <icculus@icculus.org>
parents: 588
diff changeset
  1027
            char *ptr = strchr(ident, '=');
e77acde263cc Added command line stuff to preprocess.c, including predefined macro support.
Ryan C. Gordon <icculus@icculus.org>
parents: 588
diff changeset
  1028
            const char *val = "";
e77acde263cc Added command line stuff to preprocess.c, including predefined macro support.
Ryan C. Gordon <icculus@icculus.org>
parents: 588
diff changeset
  1029
            if (ptr)
e77acde263cc Added command line stuff to preprocess.c, including predefined macro support.
Ryan C. Gordon <icculus@icculus.org>
parents: 588
diff changeset
  1030
            {
e77acde263cc Added command line stuff to preprocess.c, including predefined macro support.
Ryan C. Gordon <icculus@icculus.org>
parents: 588
diff changeset
  1031
                *ptr = '\0';
e77acde263cc Added command line stuff to preprocess.c, including predefined macro support.
Ryan C. Gordon <icculus@icculus.org>
parents: 588
diff changeset
  1032
                val = ptr+1;
e77acde263cc Added command line stuff to preprocess.c, including predefined macro support.
Ryan C. Gordon <icculus@icculus.org>
parents: 588
diff changeset
  1033
            } // if
e77acde263cc Added command line stuff to preprocess.c, including predefined macro support.
Ryan C. Gordon <icculus@icculus.org>
parents: 588
diff changeset
  1034
e77acde263cc Added command line stuff to preprocess.c, including predefined macro support.
Ryan C. Gordon <icculus@icculus.org>
parents: 588
diff changeset
  1035
            defs = (MOJOSHADER_preprocessorDefine *) realloc(defs,
e77acde263cc Added command line stuff to preprocess.c, including predefined macro support.
Ryan C. Gordon <icculus@icculus.org>
parents: 588
diff changeset
  1036
                       (defcount+1) * sizeof (MOJOSHADER_preprocessorDefine));
e77acde263cc Added command line stuff to preprocess.c, including predefined macro support.
Ryan C. Gordon <icculus@icculus.org>
parents: 588
diff changeset
  1037
            defs[defcount].identifier = ident;
e77acde263cc Added command line stuff to preprocess.c, including predefined macro support.
Ryan C. Gordon <icculus@icculus.org>
parents: 588
diff changeset
  1038
            defs[defcount].definition = val;
e77acde263cc Added command line stuff to preprocess.c, including predefined macro support.
Ryan C. Gordon <icculus@icculus.org>
parents: 588
diff changeset
  1039
            defcount++;
e77acde263cc Added command line stuff to preprocess.c, including predefined macro support.
Ryan C. Gordon <icculus@icculus.org>
parents: 588
diff changeset
  1040
        } // else if
e77acde263cc Added command line stuff to preprocess.c, including predefined macro support.
Ryan C. Gordon <icculus@icculus.org>
parents: 588
diff changeset
  1041
555
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
  1042
        else
940821555fda Initial work on preprocessor. Not yet complete!
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
  1043
        {
659
e77acde263cc Added command line stuff to preprocess.c, including predefined macro support.
Ryan C. Gordon <icculus@icculus.org>
parents: 588
diff changeset
  1044
            if (infile != NULL)
670
8df3588cf14a Fixed some strings.
Ryan C. Gordon <icculus@icculus.org>
parents: 669
diff changeset
  1045
                fail("multiple input files specified");
659
e77acde263cc Added command line stuff to preprocess.c, including predefined macro support.
Ryan C. Gordon <icculus@icculus.org>
parents: 588
diff changeset
  1046
            infile = arg;
e77acde263cc Added command line stuff to preprocess.c, including predefined macro support.
Ryan C. Gordon <icculus@icculus.org>
parents: 588
diff changeset
  1047
        } // else
e77acde263cc Added command line stuff to preprocess.c, including predefined macro support.
Ryan C. Gordon <icculus@icculus.org>
parents: 588
diff changeset
  1048
    } // for
e77acde263cc Added command line stuff to preprocess.c, including predefined macro support.
Ryan C. Gordon <icculus@icculus.org>
parents: 588
diff changeset
  1049
669
fd14a7278a95 Merged assemble.c into mojoshader-compiler.c ...
Ryan C. Gordon <icculus@icculus.org>
parents: 668
diff changeset
  1050
    if (action == ACTION_UNKNOWN)
fd14a7278a95 Merged assemble.c into mojoshader-compiler.c ...
Ryan C. Gordon <icculus@icculus.org>
parents: 668
diff changeset
  1051
        action = ACTION_ASSEMBLE;
fd14a7278a95 Merged assemble.c into mojoshader-compiler.c ...
Ryan C. Gordon <icculus@icculus.org>
parents: 668
diff changeset
  1052
892
c45dec9f8906 Added a --version command line to mojoshader-compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 885
diff changeset
  1053
    if (action == ACTION_VERSION)
c45dec9f8906 Added a --version command line to mojoshader-compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 885
diff changeset
  1054
    {
c45dec9f8906 Added a --version command line to mojoshader-compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 885
diff changeset
  1055
        printf("mojoshader-compiler, changeset %s\n", MOJOSHADER_CHANGESET);
c45dec9f8906 Added a --version command line to mojoshader-compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 885
diff changeset
  1056
        return 0;
c45dec9f8906 Added a --version command line to mojoshader-compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 885
diff changeset
  1057
    } // if
c45dec9f8906 Added a --version command line to mojoshader-compiler.
Ryan C. Gordon <icculus@icculus.org>
parents: 885
diff changeset
  1058
659
e77acde263cc Added command line stuff to preprocess.c, including predefined macro support.
Ryan C. Gordon <icculus@icculus.org>
parents: 588
diff changeset
  1059
    if (infile == NULL)
670
8df3588cf14a Fixed some strings.
Ryan C. Gordon <icculus@icculus.org>
parents: 669
diff changeset
  1060
        fail("no input file specified");
659
e77acde263cc Added command line stuff to preprocess.c, including predefined macro support.
Ryan C. Gordon <icculus@icculus.org>
parents: 588
diff changeset
  1061
e77acde263cc Added command line stuff to preprocess.c, including predefined macro support.
Ryan C. Gordon <icculus@icculus.org>
parents: 588