void sqpStoreColumn( HLST *ph, char *pszColumn, int nColumn ) { HSQPCOLUMN pColumn = (HSQPCOLUMN)malloc( sizeof(SQPCOLUMN) ); char szName[200]; #ifdef SQPDEBUG printf( "[SQP][%s][%d] BEGIN: %s %d\n", __FILE__, __LINE__, pszColumn, nColumn ); #endif pColumn->pszTable = NULL; if ( pszColumn ) pColumn->pszColumn = (char*)strdup( pszColumn ); else { sprintf( szName, "%d", nColumn ); pColumn->pszColumn = (char*)strdup( szName ); } if ( !(*ph) ) *ph = lstOpen(); lstAppend( *ph, pColumn ); #ifdef SQPDEBUG printf( "[SQP][%s][%d] END:\n", __FILE__, __LINE__ ); #endif }
/* Listing loader callback. This is invoked at key points when loading a module file. */ void emListingLoadCallback(Ejs *ejs, int kind, ...) { va_list args; EjsModuleHdr *hdr; EjsMod *mp; Lst *lst; MprList *modules; char *name; int nextModule; va_start(args, kind); mp = ejs->loadData; lst = mprAlloc(sizeof(Lst)); /* Decode the record type and create a list for later processing. We need to process after the loader has done fixup for forward type references. */ switch (kind) { case EJS_SECT_BLOCK: lst->module = va_arg(args, EjsModule*); lst->owner = va_arg(args, EjsObj*); lst->slotNum = va_arg(args, int); lst->name = va_arg(args, EjsString*); lst->numProp = va_arg(args, int); break; case EJS_SECT_BLOCK_END: break; case EJS_SECT_CLASS: lst->module = va_arg(args, EjsModule*); lst->slotNum = va_arg(args, int); lst->qname = va_arg(args, EjsName); lst->type = va_arg(args, EjsType*); lst->attributes = va_arg(args, int); break; case EJS_SECT_CLASS_END: break; case EJS_SECT_DEPENDENCY: lst->module = va_arg(args, EjsModule*); lst->dependency = va_arg(args, EjsModule*); break; case EJS_SECT_END: modules = va_arg(args, MprList*); nextModule = va_arg(args, int); lstClose(mp, modules, nextModule); return; case EJS_SECT_EXCEPTION: lst->module = va_arg(args, EjsModule*); lst->fun = va_arg(args, EjsFunction*); break; case EJS_SECT_FUNCTION: lst->module = va_arg(args, EjsModule*); lst->owner = va_arg(args, EjsObj*); lst->slotNum = va_arg(args, int); lst->qname = va_arg(args, EjsName); lst->fun = va_arg(args, EjsFunction*); lst->attributes = va_arg(args, int); break; case EJS_SECT_FUNCTION_END: break; case EJS_SECT_START: name = va_arg(args, char*); hdr = va_arg(args, EjsModuleHdr*); lstOpen(mp, name, hdr); return; case EJS_SECT_PROPERTY: lst->module = va_arg(args, EjsModule*); lst->owner = va_arg(args, EjsObj*); lst->slotNum = va_arg(args, int); lst->qname = va_arg(args, EjsName); lst->attributes = va_arg(args, int); lst->typeName = va_arg(args, EjsName); break; case EJS_SECT_MODULE: break; case EJS_SECT_MODULE_END: break; case EJS_SECT_DEBUG: break; default: mprAssert(0); } lst->kind = kind; mprAddItem(mp->lstRecords, lst); }