summary refs log tree commit diff stats
path: root/compiler/importer.nim
Commit message (Collapse)AuthorAgeFilesLines
* Replace countup(x, y-1) with x ..< yClyybber2019-05-071-4/+4
|
* Fix 105, few fixes for 101 (#11148)genotrance2019-05-041-1/+1
|
* Deprecate gc v2 (#10151)Neelesh Chandola2019-01-011-2/+2
| | | | | | * Deprecate gc v2 * warnDeprecated now has custom messages
* Nimsuggest now shows gotodef for y in `from x import y` (#10023)Neelesh Chandola2018-12-181-0/+1
|
* IC: further progressAraq2018-11-221-1/+1
|
* compiler refactoring; use typesafe path handing; docgen: render symbols ↵Andreas Rumpf2018-09-071-8/+6
| | | | between modules
* fixes #8852Araq2018-09-031-5/+5
|
* fixes #8066Araq2018-08-311-2/+8
|
* Fix nkImportAs regression (#8796)Oscar Nihlgård2018-08-281-9/+14
|
* Fix for module alias inside brackets (#8726)Oscar Nihlgård2018-08-231-7/+19
|
* incremental compilation: implemented basic replay logicAndreas Rumpf2018-06-021-11/+13
|
* baby steps for incremental compilationAndreas Rumpf2018-05-301-2/+3
|
* refactoring: remove idents.legacy global variable and pass the IdentCache ↵Andreas Rumpf2018-05-271-2/+2
| | | | around explicitly
* remove more global variables in the Nim compilerAndreas Rumpf2018-05-271-1/+1
|
* preparations of making compiler/msgs.nim free of global variablesAndreas Rumpf2018-05-171-2/+2
|
* fixes testament compilationAraq2018-05-141-5/+8
|\
| * implement the export/except statementZahary Karadjov2018-05-071-5/+8
| |
* | options.nim: no global variables anymoreAndreas Rumpf2018-05-131-1/+2
| |
* | make nimsuggest compile againAndreas Rumpf2018-05-131-1/+1
| |
* | pragmas compiles againAndreas Rumpf2018-05-111-17/+17
|/
* the 'deprecated' pragma for modules now supports an error messageAraq2018-04-061-1/+4
|
* Jump to definition on import will open the imported module (#7155)Yuriy Glukhov2018-01-311-2/+2
|
* make type vs proc ambiguous handling more consistent; fixes #6726; fixes #6693Araq2017-12-151-1/+1
|
* Add sections (type, var, let, const, using) support for reorder pragma (#6326)BigEpsilon2017-10-281-73/+1
|
* implemented new experimental scriptable import mechanismAndreas Rumpf2017-10-011-10/+40
|
* .pure enums are much more convenient to use nowAndreas Rumpf2017-09-171-2/+10
|
* fixes #5185Andreas Rumpf2017-02-081-0/+1
|
* fixes #5185Andreas Rumpf2017-01-061-2/+3
|
* implements module grouping for the import statementAndreas Rumpf2016-12-211-7/+19
|
* recursive modules are only detected to improve error messagesAndreas Rumpf2016-11-241-3/+3
|
* make tests green againAndreas Rumpf2016-11-241-1/+1
|
* disallow recursive module dependenciesAraq2016-11-231-3/+17
|
* new dependency tracking for nimsuggestAraq2016-11-051-1/+1
|
* big refactoring: step 1Araq2016-10-311-1/+1
|
* fixes a regression that caused --import in a config file to break thingsAndreas Rumpf2016-08-291-1/+4
|
* tester cleanup; enable some rod testsAraq2016-08-271-1/+1
|
* Locate 'attempt to redefine' errors at the import statement rather than at ↵Kier Davis2016-07-301-3/+3
| | | | the first line of the imported module. Fixes #4541.
* changed the compiler's path handling; fixes #546Andreas Rumpf2016-05-311-1/+5
|
* better nimsuggest supportAraq2015-11-031-0/+1
|
* added getOrDefault; bootstrapping works againAraq2015-10-131-2/+2
|
* Don't use deprecated intsets.emptydef2015-03-311-2/+2
|
* prepare for upcoming parsing change of unary operatorsAraq2015-03-221-12/+12
|
* Fixing import path support inconsitency.Hans Raaf2015-03-071-1/+1
|
* Merge branch 'devel' into bigbreakAraq2014-10-231-3/+3
|\ | | | | | | | | Conflicts: web/news.txt
| * fixes #1029Araq2014-10-221-2/+2
| |
| * fixes 'import x as y' regressionAraq2014-10-221-1/+1
| |
* | Merge branch 'devel' into bigbreakAraq2014-10-201-2/+4
|\| | | | | | | | | | | | | | | | | | | | | | | | | | | Conflicts: compiler/nim.ini doc/manual.txt doc/tut2.txt koch.nim lib/system/channels.nim readme.txt tools/niminst/niminst.nim tools/nimweb.nim web/download.txt web/news.txt
| * Compare fileIndexes instead of file namesSimon Krauter2014-10-151-1/+1
| |
| * Do not allow self importSimon Krauter2014-10-141-2/+4
| |
* | updated the compiler to use the new symbol namesAraq2014-08-281-4/+4
| |
>win, False, BUTTONMASK, GrabModeAsync, GrabModeSync, None, None); XGrabButton(dpy, Button3, MODKEY, c->win, False, BUTTONMASK, GrabModeAsync, GrabModeSync, None, None); XGrabButton(dpy, Button3, MODKEY | LockMask, c->win, False, BUTTONMASK, GrabModeAsync, GrabModeSync, None, None); XGrabButton(dpy, Button3, MODKEY | numlockmask, c->win, False, BUTTONMASK, GrabModeAsync, GrabModeSync, None, None); XGrabButton(dpy, Button3, MODKEY | numlockmask | LockMask, c->win, False, BUTTONMASK, GrabModeAsync, GrabModeSync, None, None); } else XGrabButton(dpy, AnyButton, AnyModifier, c->win, False, BUTTONMASK, GrabModeAsync, GrabModeSync, None, None); } static void resizetitle(Client *c) { c->tw = textw(c->name); if(c->tw > c->w) c->tw = c->w + 2; c->tx = c->x + c->w - c->tw + 2; c->ty = c->y; if(isvisible(c)) XMoveResizeWindow(dpy, c->twin, c->tx, c->ty, c->tw, c->th); else XMoveResizeWindow(dpy, c->twin, c->tx + 2 * sw, c->ty, c->tw, c->th); } static int xerrordummy(Display *dsply, XErrorEvent *ee) { return 0; } /* extern functions */ void ban(Client *c) { XMoveWindow(dpy, c->win, c->x + 2 * sw, c->y); XMoveWindow(dpy, c->twin, c->tx + 2 * sw, c->ty); } void focus(Client *c) { Client *old; if(!issel || (c && !isvisible(c))) return; if(!sel) sel = c; else if(sel != c) { if(maximized) togglemax(NULL); old = sel; sel = c; if(old) { grabbuttons(old, False); drawtitle(old); } } if(c) { detachstack(c); c->snext = stack; stack = c; grabbuttons(c, True); drawtitle(c); XSetInputFocus(dpy, c->win, RevertToPointerRoot, CurrentTime); } else XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime); } Client * getclient(Window w) { Client *c; for(c = clients; c; c = c->next) if(c->win == w) return c; return NULL; } Client * getctitle(Window w) { Client *c; for(c = clients; c; c = c->next) if(c->twin == w) return c; return NULL; } void gravitate(Client *c, Bool invert) { int dx = 0, dy = 0; switch(c->grav) { default: break; case StaticGravity: case NorthWestGravity: case NorthGravity: case NorthEastGravity: dy = c->border; break; case EastGravity: case CenterGravity: case WestGravity: dy = -(c->h / 2) + c->border; break; case SouthEastGravity: case SouthGravity: case SouthWestGravity: dy = -(c->h); break; } switch (c->grav) { default: break; case StaticGravity: case NorthWestGravity: case WestGravity: case SouthWestGravity: dx = c->border; break; case NorthGravity: case CenterGravity: case SouthGravity: dx = -(c->w / 2) + c->border; break; case NorthEastGravity: case EastGravity: case SouthEastGravity: dx = -(c->w + c->border); break; } if(invert) { dx = -dx; dy = -dy; } c->x += dx; c->y += dy; } void killclient(Arg *arg) { if(!sel) return; if(sel->proto & PROTODELWIN) sendevent(sel->win, wmatom[WMProtocols], wmatom[WMDelete]); else XKillClient(dpy, sel->win); } void manage(Window w, XWindowAttributes *wa) { Client *c; Window trans; XSetWindowAttributes twa; c = emallocz(sizeof(Client)); c->tags = emallocz(ntags * sizeof(Bool)); c->win = w; c->x = c->tx = wa->x; c->y = c->ty = wa->y; c->w = c->tw = wa->width; c->h = wa->height; c->th = bh; c->border = 0; updatesize(c); if(c->x + c->w + 2 > sw) c->x = sw - c->w - 2; if(c->x < 0) c->x = 0; if(c->y + c->h + 2 > sh) c->y = sh - c->h - 2; if(c->h != sh && c->y < bh) c->y = bh; c->proto = getproto(c->win); XSelectInput(dpy, c->win, StructureNotifyMask | PropertyChangeMask | EnterWindowMask); XGetTransientForHint(dpy, c->win, &trans); twa.override_redirect = 1; twa.background_pixmap = ParentRelative; twa.event_mask = ExposureMask | EnterWindowMask; c->twin = XCreateWindow(dpy, root, c->tx, c->ty, c->tw, c->th, 0, DefaultDepth(dpy, screen), CopyFromParent, DefaultVisual(dpy, screen), CWOverrideRedirect | CWBackPixmap | CWEventMask, &twa); grabbuttons(c, False); settags(c, getclient(trans)); if(!c->isfloat) c->isfloat = trans || (c->maxw && c->minw && c->maxw == c->minw && c->maxh == c->minh); if(clients) clients->prev = c; c->next = clients; c->snext = stack; stack = clients = c; updatetitle(c); ban(c); XMapWindow(dpy, c->win); XMapWindow(dpy, c->twin); if(isvisible(c)) focus(c); arrange(NULL); } void resize(Client *c, Bool sizehints, Corner sticky) { int bottom = c->y + c->h; int right = c->x + c->w; XWindowChanges wc; if(sizehints) { if(c->incw) c->w -= (c->w - c->basew) % c->incw; if(c->inch) c->h -= (c->h - c->baseh) % c->inch; if(c->minw && c->w < c->minw) c->w = c->minw; if(c->minh && c->h < c->minh) c->h = c->minh; if(c->maxw && c->w > c->maxw) c->w = c->maxw; if(c->maxh && c->h > c->maxh) c->h = c->maxh; } if(sticky == TopRight || sticky == BotRight) c->x = right - c->w; if(sticky == BotLeft || sticky == BotRight) c->y = bottom - c->h; /* offscreen appearance fixes */ if(c->x + c->w < 0) c->x = 0; if(c->y + c->h < bh) c->y = bh; if(c->x > sw) c->x = sw - c->w; if(c->y > sh) c->y = sh - c->h; resizetitle(c); wc.x = c->x; wc.y = c->y; wc.width = c->w; wc.height = c->h; if(c->w == sw && c->h == sh) wc.border_width = 0; else wc.border_width = 1; XConfigureWindow(dpy, c->win, CWX | CWY | CWWidth | CWHeight | CWBorderWidth, &wc); XSync(dpy, False); } void updatesize(Client *c) { long msize; XSizeHints size; if(!XGetWMNormalHints(dpy, c->win, &size, &msize) || !size.flags) size.flags = PSize; c->flags = size.flags; if(c->flags & PBaseSize) { c->basew = size.base_width; c->baseh = size.base_height; } else c->basew = c->baseh = 0; if(c->flags & PResizeInc) { c->incw = size.width_inc; c->inch = size.height_inc; } else c->incw = c->inch = 0; if(c->flags & PMaxSize) { c->maxw = size.max_width; c->maxh = size.max_height; } else c->maxw = c->maxh = 0; if(c->flags & PMinSize) { c->minw = size.min_width; c->minh = size.min_height; } else c->minw = c->minh = 0; if(c->flags & PWinGravity) c->grav = size.win_gravity; else c->grav = NorthWestGravity; } void updatetitle(Client *c) { char **list = NULL; int n; XTextProperty name; name.nitems = 0; c->name[0] = 0; XGetTextProperty(dpy, c->win, &name, netatom[NetWMName]); if(!name.nitems) XGetWMName(dpy, c->win, &name); if(!name.nitems) return; if(name.encoding == XA_STRING) strncpy(c->name, (char *)name.value, sizeof(c->name)); else { if(XmbTextPropertyToTextList(dpy, &name, &list, &n) >= Success && n > 0 && *list) { strncpy(c->name, *list, sizeof(c->name)); XFreeStringList(list); } } XFree(name.value); resizetitle(c); } void togglemax(Arg *arg) { int ox, oy, ow, oh; Client *c; XEvent ev; if(!sel) return; if((maximized = !maximized)) { ox = sel->x; oy = sel->y; ow = sel->w; oh = sel->h; sel->x = sx; sel->y = sy + bh; sel->w = sw - 2; sel->h = sh - 2 - bh; restack(); for(c = getnext(clients); c; c = getnext(c->next)) if(c != sel) ban(c); resize(sel, arrange == dofloat, TopLeft); sel->x = ox; sel->y = oy; sel->w = ow; sel->h = oh; } else arrange(NULL); while(XCheckMaskEvent(dpy, EnterWindowMask, &ev)); } void unmanage(Client *c) { Client *nc; XGrabServer(dpy); XSetErrorHandler(xerrordummy); detach(c); detachstack(c); if(sel == c) { for(nc = stack; nc && !isvisible(nc); nc = nc->snext); focus(nc); } XUngrabButton(dpy, AnyButton, AnyModifier, c->win); XDestroyWindow(dpy, c->twin); free(c->tags); free(c); XSync(dpy, False); XSetErrorHandler(xerror); XUngrabServer(dpy); arrange(NULL); }