Esempio n. 1
0
static Proto* LoadFunction (lua_State* L, ZIO* Z, int swap)
{
 Proto* tf=luaF_newproto(L);
 tf->source=LoadString(L,Z,swap);
 tf->lineDefined=LoadInt(L,Z,swap);
 tf->numparams=LoadInt(L,Z,swap);
 tf->is_vararg=LoadByte(L,Z);
 tf->maxstacksize=LoadInt(L,Z,swap);
 LoadLocals(L,tf,Z,swap);
 LoadLines(L,tf,Z,swap);
 LoadConstants(L,tf,Z,swap);
 LoadCode(L,tf,Z,swap);
 return tf;
}
static Proto* LoadFunction (LoadState* S, TString* p)
{
 Proto* f=luaF_newproto(S->L);
 f->source=LoadString(S); if (f->source==NULL) f->source=p;
 f->lineDefined=LoadInt(S);
 f->nups=LoadByte(S);
 f->numparams=LoadByte(S);
 f->is_vararg=LoadByte(S);
 f->maxstacksize=LoadByte(S);
 LoadLines(S,f);
 LoadLocals(S,f);
 LoadUpvalues(S,f);
 LoadConstants(S,f);
 LoadCode(S,f);
#ifndef TRUST_BINARIES
 if (!luaG_checkcode(f)) luaG_runerror(S->L,"bad code in %s",S->name);
#endif
 return f;
}
Esempio n. 3
0
static Proto* LoadFunction(LoadState* S, TString* p)
{
 Proto* f=luaF_newproto(S->L);
 setptvalue2s(S->L,S->L->top,f); incr_top(S->L);
 f->source=LoadString(S); if (f->source==NULL) f->source=p;
 f->linedefined=LoadInt(S);
 f->lastlinedefined=LoadInt(S);
 f->nups=LoadByte(S);
 f->numparams=LoadByte(S);
 f->is_vararg=LoadByte(S);
 f->maxstacksize=LoadByte(S);
 LoadLines(S,f);
 LoadLocals(S,f);
 LoadUpvalues(S,f);
 LoadConstants(S,f);
 LoadCode(S,f);
 IF (!luaG_checkcode(f), "bad code");
 S->L->top--;
 return f;
}
Esempio n. 4
0
LRESULT CALLBACK WatchWndProc(HWND hwnd, UINT iMessage, WPARAM wParam,
                              LPARAM lParam)
{
    WATCHDATA *ptr;
    static POINT menupos;
    static char buf[256];
    RECT r,  *pr;
    WINDOWPOS wp;
    HD_ITEM hie;
    HD_LAYOUT hdl;
    NMHDR *h;
    DRAWITEMSTRUCT *dr;
    HBITMAP hbmp;
    HDC hMemDC;
    TCHeader tch;
    TV_ITEM item;
    TV_INSERTSTRUCT t;
    static int sizingbottom;
    int offset;
    DEBUG_INFO *dbg;
    NM_TREEVIEW *nmt;
    VARINFO *var;
    HWND win;
    int level;
    int offset1;
    int doit;
    int i;
    CHARRANGE charrange;
    switch (iMessage)
    {
    case WM_SYSCOMMAND:
        if (wParam == SC_CLOSE)
        {
            PostMessage(hwnd, WM_CLOSE, 0, 0);
            return 0;
        }
        break;
    case WM_NOTIFY:
        ptr = (WATCHDATA *)GetWindowLong(hwnd, 0);
        h = (NMHDR*)lParam;
        switch (h->code)
        {
        case NM_RCLICK:
        {
            if (ptr->DID != DID_LOCALSWND)
            {
                HMENU menu = LoadMenuGeneric(hInstance, "WATCHMENU");
                HMENU popup = GetSubMenu(menu, 0);
                TV_HITTESTINFO t;
                HTREEITEM titem;
                GetCursorPos(&t.pt);
                ScreenToClient(ptr->hwndWatchTree, &t.pt);
                titem = TreeView_HitTest(ptr->hwndWatchTree, &t);
                if (!titem || TreeView_GetParent(ptr->hwndWatchTree, titem))
                {
                    EnableMenuItem(popup, IDM_DELETEWATCH, MF_GRAYED);
                }
                InsertBitmapsInMenu(popup);
                GetCursorPos(&menupos);
                TrackPopupMenuEx(popup, TPM_BOTTOMALIGN | TPM_LEFTBUTTON,
                                 menupos.x, menupos.y, hwndFrame, NULL);
                DestroyMenu(menu);
                lastWatch = ptr->DID;
            }
            SetFocus(ptr->hwndWatchTree);
        }
        return 0;
        case TVN_ITEMEXPANDING:
            nmt = (LPNMTREEVIEW)h;
            if (nmt->action)
            {
                ExpandPointer((VARINFO*)nmt->itemNew.lParam, nmt->action, ptr);
            }
            return 0;
        case TCN_EDITQUERY:
            nmt = (LPNMTREEVIEW)h;
            item.mask = TVIF_PARAM;
            item.hItem = (HTREEITEM)nmt->itemNew.hItem;
            TreeView_GetItem(ptr->hwndWatchTree, &item);
            var = (VARINFO*)item.lParam;
            if (var->editable)
            {
                WatchValue(ptr->watchinfo_list[var->watchindex].dbg_info, buf,
                           var, TRUE);
                return buf;
            }
            return 0;
        case TCN_EDITDONE:
            nmt = (LPNMTREEVIEW)h;
            item.mask = TVIF_PARAM;
            item.hItem = (HTREEITEM)nmt->itemNew.hItem;
            TreeView_GetItem(ptr->hwndWatchTree, &item);
            var = (VARINFO*)item.lParam;
            ChangeData(var, nmt->itemNew.pszText, ptr);
            RefreshItems(ptr);
            return 0;
        }
        break;
    case WM_CREATE:
        ptr = (WATCHDATA *)calloc(sizeof(WATCHDATA),1);
        SetWindowLong(hwnd, 0, (long)ptr);
        GetClientRect(hwnd, &r);
        tch.colText1 = "Item";
        tch.colText2 = "Value";
        tch.colBmp1 = itemBitmap;
        tch.colBmp2 = valueBitmap;
        ptr->hwndWatchTree = CreateextTreeWindow(hwnd, WS_DLGFRAME | TCS_LINE | WS_VISIBLE, &r, &tch);
        return 0;
    case WM_ADDWATCHINDIRECT:
        ptr = (WATCHDATA *)GetWindowLong(hwnd, 0);
        win = (HWND)wParam;
        doit = FALSE;
        SendMessage(win, EM_EXGETSEL, (WPARAM)0, (LPARAM) &charrange);
        if (charrange.cpMin == charrange.cpMax)
        {
            doit = SendMessage(win, WM_WORDUNDERPOINT, (WPARAM)&rightclickPos, (LPARAM)buf);
            if (!doit)
            {
                PostMessage(hwndFrame, WM_COMMAND, IDM_ADDWATCH, 0);
                break;
            }
        }
        else
        {
            if (charrange.cpMax - charrange.cpMin < sizeof(buf) ||charrange.cpMin - charrange.cpMax < sizeof(buf))
            {
                SendMessage(win, EM_GETSELTEXT, 0, (LPARAM)buf);
                doit = TRUE ;
            }
        }
        if (doit)
        {
            var = EvalExpr(&dbg, activeScope, (char*) buf, TRUE);
            if (var)
            {
                AddItem(dbg, var, activeScope->address, ptr);
                SelectWindow(ptr->DID);
                break ;
            }
        }
        ExtendedMessageBox("Error", MB_SETFOREGROUND |
                           MB_SYSTEMMODAL, "Symbol does not exist in this scope");
        break;
    case WM_ADDWATCH:
        ptr = (WATCHDATA *)GetWindowLong(hwnd, 0);
        offset = wParam;
        if (!offset)
        {
            DeleteAllItems(ptr);
        }
        else
        {
            var = EvalExpr(&dbg, activeScope, (char*)
                           lParam, TRUE);
            if (var)
            {
                AddItem(dbg, var, activeScope->address, ptr);
                SelectWindow(ptr->DID);
            }
        }
        break;
    case WM_INITIALSTACK:
        ptr = (WATCHDATA *)GetWindowLong(hwnd, 0);
        ptr->refreshNeeded = TRUE;
        break;
    case WM_COMMAND:
        ptr = (WATCHDATA *)GetWindowLong(hwnd, 0);
        switch (wParam)
        {
        case ID_SETADDRESS:
            if (ptr->DID == DID_LOCALSWND)
                LoadLocals(ptr);
            if (ptr->refreshNeeded)
                ReloadVars(ptr);
            else
                RefreshItems(ptr);
            ptr->refreshNeeded = FALSE;
            InvalidateRect(ptr->hwndWatchTree, 0, 0);
            break;
        case IDM_DELETEWATCH:
            DeleteItem(&menupos, ptr);
            break;
        case IDM_DELETEALLWATCH:
            DeleteAllItems(ptr);
            break;
        }
        break;
    case WM_DESTROY:
        ptr = (WATCHDATA *)GetWindowLong(hwnd, 0);
        TreeView_DeleteAllItems(ptr->hwndWatchTree);
        DestroyWindow(ptr->hwndWatchTree);
        DeleteObject(valueBitmap);
        DeleteObject(itemBitmap);
        break;

    case WM_SIZE:
        ptr = (WATCHDATA *)GetWindowLong(hwnd, 0);
        r.left = 0;
        r.right = LOWORD(lParam);
        r.top = 0;
        r.bottom = HIWORD(lParam);
        MoveWindow(ptr->hwndWatchTree, r.left, r.top, r.right - r.left, r.bottom -
                   r.top, 0);
        return 0;
    case WM_CLOSE:
        break;
    case WM_ACTIVATEME:
        ptr = (WATCHDATA *)GetWindowLong(hwnd, 0);
        if (ptr->DID != DID_LOCALSWND)
            lastWatch = ptr->DID;
        SendMessage(GetParent(hwnd), WM_ACTIVATEME, 0, 0);
        break;
    }
    return DefWindowProc(hwnd, iMessage, wParam, lParam);
}