Exemplo n.º 1
0
ekBool ekCompilerFormatErrors(ekCompiler *compiler, ekString *output)
{
    struct ekContext *E = compiler->E;
    ekS32 i;
    for(i = 0; i < ekArraySize(E, &compiler->errors); i++)
    {
        ekError *error = compiler->errors[i];
        ekStringConcat(E, output, ekStringSafePtr(&error->filename));
        ekStringConcat(E, output, ":");
        appendInt(E, output, error->lineNo);
        ekStringConcat(E, output, ":");
        appendInt(E, output, error->col + 1); // "column" in an error is 1-indexed
        ekStringConcat(E, output, ": error: ");
        ekStringConcat(E, output, ekStringSafePtr(&error->explanation));
        ekStringConcat(E, output, "\n");

        if(error->line.len > 0)
        {
            ekS32 caratPos = error->col;

            ekStringConcat(E, output, ekStringSafePtr(&error->line));
            ekStringConcat(E, output, "\n");

            // draw the carat!
            for(; caratPos > 0; --caratPos)
            {
                ekStringConcat(E, output, " "); // how about that efficiency! /s
            }
            ekStringConcat(E, output, "^\n");
        }
    }
    return (ekArraySize(E, &compiler->errors) > 0) ? ekTrue : ekFalse;
}
Exemplo n.º 2
0
static void fileFuncDump(struct ekContext *E, ekDumpParams *params, struct ekValue *p)
{
    ekFile *file = (ekFile *)p->ptrVal;
    ekStringConcat(E, &params->output, "{ ");
    ekStringConcat(E, &params->output, "FILE: ");
    ekStringConcat(E, &params->output, ekValueSafeStr(file->filename));
    ekStringConcat(E, &params->output, " }");
}
Exemplo n.º 3
0
static void regexFuncDump(struct ekContext * E, ekDumpParams * params, struct ekValue * p)
{
    // TODO: implement something interesting
    ekStringConcat(E, &params->output, "regex");
}
Exemplo n.º 4
0
static void intFuncDump(struct ekContext * E, ekDumpParams * params, struct ekValue * p)
{
    char temp[64];
    sprintf(temp, "%d", p->intVal);
    ekStringConcat(E, &params->output, temp);
}
Exemplo n.º 5
0
static void appendInt(ekContext *E, ekString *str, ekS32 i)
{
    char temp[32];
    sprintf(temp, "%d", i);
    ekStringConcat(E, str, temp);
}