about summary refs log tree commit diff stats
BranchCommit messageAuthorAge
bongkeys: st-xterm compatAcid Bong3 years
masterbump version to 6.4Hiltjo Posthuma3 years
musldmenumon fixAcid Bong3 years
 
TagDownloadAuthorAge
6.4dwm-6.4.tar.gz  Hiltjo Posthuma3 years
6.3dwm-6.3.tar.gz  Hiltjo Posthuma4 years
6.2dwm-6.2.tar.gz  Anselm R Garbe7 years
6.1dwm-6.1.tar.gz  Hiltjo Posthuma10 years
6.0dwm-6.0.tar.gz  anselm@garbe.us14 years
5.9dwm-5.9.tar.gz  garbeam@gmail.com14 years
5.8.2dwm-5.8.2.tar.gz  Anselm R Garbe15 years
5.8.1dwm-5.8.1.tar.gz  Anselm R Garbe15 years
5.8dwm-5.8.tar.gz  anselm@garbe.us15 years
5.7.2dwm-5.7.2.tar.gz  Anselm R Garbe16 years
5.7.1dwm-5.7.1.tar.gz  Anselm R Garbe16 years
5.7dwm-5.7.tar.gz  Anselm R Garbe16 years
5.6.1dwm-5.6.1.tar.gz  Anselm R Garbe16 years
5.6dwm-5.6.tar.gz  Anselm R Garbe16 years
5.5dwm-5.5.tar.gz  Anselm R Garbe16 years
5.4.1dwm-5.4.1.tar.gz  a@null17 years
5.4dwm-5.4.tar.gz  a@null17 years
5.3.1dwm-5.3.1.tar.gz  Anselm R Garbe17 years
5.3dwm-5.3.tar.gz  Anselm R Garbe17 years
5.2dwm-5.2.tar.gz  Anselm R Garbe17 years
5.1dwm-5.1.tar.gz  Anselm R Garbe17 years
5.0dwm-5.0.tar.gz  Anselm R Garbe17 years
4.9dwm-4.9.tar.gz  Anselm R Garbe17 years
4.8dwm-4.8.tar.gz  Anselm R Garbe17 years
4.7dwm-4.7.tar.gz  Anselm R. Garbe18 years
4.6dwm-4.6.tar.gz  arg@suckless.org18 years
4.5dwm-4.5.tar.gz  Anselm R. Garbe18 years
4.4.1dwm-4.4.1.tar.gz  Anselm R. Garbe18 years
4.4dwm-4.4.tar.gz  Anselm R. Garbe18 years
4.3dwm-4.3.tar.gz  arg@f00b4r18 years
4.2dwm-4.2.tar.gz  Anselm R. Garbe18 years
4.1dwm-4.1.tar.gz  Anselm R. Garbe18 years
4.0dwm-4.0.tar.gz  Anselm R. Garbe18 years
3.9dwm-3.9.tar.gz  Anselm R. Garbe18 years
3.8dwm-3.8.tar.gz  Anselm R. Garbe18 years
3.7dwm-3.7.tar.gz  Anselm R. Garbe18 years
3.6.1dwm-3.6.1.tar.gz  Anselm R. Garbe18 years
3.6dwm-3.6.tar.gz  Anselm R. Garbe18 years
3.5dwm-3.5.tar.gz  Anselm R. Garbe18 years
3.4dwm-3.4.tar.gz  Anselm R. Garbe19 years
3.3dwm-3.3.tar.gz  Anselm R. Garbe19 years
3.2.2dwm-3.2.2.tar.gz  Anselm R. Garbe19 years
3.2.1dwm-3.2.1.tar.gz  Anselm R. Garbe19 years
3.2dwm-3.2.tar.gz  Anselm R. Garbe19 years
3.1dwm-3.1.tar.gz  Anselm R. Garbe19 years
3.0dwm-3.0.tar.gz  Anselm R. Garbe19 years
2.9dwm-2.9.tar.gz  Anselm R. Garbe19 years
2.8dwm-2.8.tar.gz  arg@mig2919 years
2.7dwm-2.7.tar.gz  arg@mig2919 years
2.6dwm-2.6.tar.gz  arg@mig2919 years
2.5.1dwm-2.5.1.tar.gz  arg@mig2919 years
2.5dwm-2.5.tar.gz  arg@mig2919 years
2.4dwm-2.4.tar.gz  arg@mig2919 years
2.3dwm-2.3.tar.gz  arg@mig2919 years
2.2dwm-2.2.tar.gz  arg@mig2919 years
2.1dwm-2.1.tar.gz  arg@mig2919 years
2.0dwm-2.0.tar.gz  arg@mig2919 years
1.9dwm-1.9.tar.gz  Anselm R. Garbe19 years
1.8dwm-1.8.tar.gz  Anselm R. Garbe19 years
1.7.1dwm-1.7.1.tar.gz  Anselm R. Garbe19 years
1.7dwm-1.7.tar.gz  arg@mmvi19 years
1.6dwm-1.6.tar.gz  arg@mmvi19 years
1.5dwm-1.5.tar.gz  Anselm R. Garbe19 years
1.4dwm-1.4.tar.gz  Anselm R. Garbe19 years
1.3dwm-1.3.tar.gz  Anselm R. Garbe19 years
1.2dwm-1.2.tar.gz  Anselm R. Garbe19 years
1.1dwm-1.1.tar.gz  Anselm R. Garbe19 years
1.0dwm-1.0.tar.gz  Anselm R. Garbe19 years
0.9dwm-0.9.tar.gz  Anselm R.Garbe19 years
0.8dwm-0.8.tar.gz  Anselm R.Garbe19 years
0.7dwm-0.7.tar.gz  arg@10ksloc.org19 years
0.6dwm-0.6.tar.gz  arg@10ksloc.org19 years
0.5dwm-0.5.tar.gz  arg@10ksloc.org19 years
0.4dwm-0.4.tar.gz  arg@10ksloc.org19 years
0.3dwm-0.3.tar.gz  arg@10ksloc.org19 years
0.2dwm-0.2.tar.gz  Anselm R. Garbe19 years
0.1dwm-0.1.tar.gz  Anselm R. Garbe19 years
, info: TLineInfo, owner: TSymKind) proc addResultNode(c: PContext, n: PNode) proc instGenericContainer(c: PContext, n: PNode, header: PType): PType proc typeMismatch(n: PNode, formal, actual: PType) = GlobalError(n.Info, errGenerated, msgKindToString(errTypeMismatch) & typeToString(actual) & ") " & `%`(msgKindToString(errButExpectedX), [typeToString(formal)])) proc fitNode(c: PContext, formal: PType, arg: PNode): PNode = result = IndexTypesMatch(c, formal, arg.typ, arg) if result == nil: typeMismatch(arg, formal, arg.typ) proc isTopLevel(c: PContext): bool {.inline.} = result = c.tab.tos <= 2 proc newSymS(kind: TSymKind, n: PNode, c: PContext): PSym = result = newSym(kind, considerAcc(n), getCurrOwner()) result.info = n.info proc semIdentVis(c: PContext, kind: TSymKind, n: PNode, allowed: TSymFlags): PSym # identifier with visability proc semIdentWithPragma(c: PContext, kind: TSymKind, n: PNode, allowed: TSymFlags): PSym proc semStmtScope(c: PContext, n: PNode): PNode proc ParamsTypeCheck(c: PContext, typ: PType) {.inline.} = if not typeAllowed(typ, skConst): GlobalError(typ.n.info, errXisNoType, typeToString(typ)) proc expectMacroOrTemplateCall(c: PContext, n: PNode): PSym proc semTemplateExpr(c: PContext, n: PNode, s: PSym, semCheck = true): PNode proc semMacroExpr(c: PContext, n: PNode, sym: PSym, semCheck: bool = true): PNode proc semWhen(c: PContext, n: PNode, semCheck: bool = true): PNode include semtempl proc evalTypedExpr(c: PContext, e: PNode): PNode = result = getConstExpr(c.module, e) if result == nil: result = evalConstExpr(c.module, e) if result == nil or result.kind == nkEmpty: GlobalError(e.info, errConstExprExpected) proc semConstExpr(c: PContext, n: PNode): PNode = var e = semExprWithType(c, n) if e == nil: GlobalError(n.info, errConstExprExpected) return nil result = evalTypedExpr(c, e) proc semAndEvalConstExpr(c: PContext, n: PNode): PNode = result = semConstExpr(c, n) include seminst, semcall proc semAfterMacroCall(c: PContext, n: PNode, s: PSym): PNode = inc(evalTemplateCounter) if evalTemplateCounter > 100: GlobalError(s.info, errTemplateInstantiationTooNested) result = n case s.typ.sons[0].kind of tyExpr: # BUGFIX: we cannot expect a type here, because module aliases would not # work then (see the ``tmodulealias`` test) # semExprWithType(c, result) result = semExpr(c, result) of tyStmt: result = semStmt(c, result) of tyTypeDesc: if n.kind == nkStmtList: result.kind = nkStmtListType result.typ = semTypeNode(c, result, nil) else: result = semExpr(c, result) result = fitNode(c, s.typ.sons[0], result) #GlobalError(s.info, errInvalidParamKindX, typeToString(s.typ.sons[0])) dec(evalTemplateCounter) proc semMacroExpr(c: PContext, n: PNode, sym: PSym, semCheck: bool = true): PNode = markUsed(n, sym) if c.evalContext == nil: c.evalContext = newEvalContext(c.module, "", emStatic) result = evalMacroCall(c.evalContext, n, sym) if semCheck: result = semAfterMacroCall(c, result, sym) proc forceBool(c: PContext, n: PNode): PNode = result = fitNode(c, getSysType(tyBool), n) if result == nil: result = n proc semConstBoolExpr(c: PContext, n: PNode): PNode = result = fitNode(c, getSysType(tyBool), semExprWithType(c, n)) if result == nil: GlobalError(n.info, errConstExprExpected) return result = getConstExpr(c.module, result) if result == nil: GlobalError(n.info, errConstExprExpected) include semtypes, semexprs, semgnrc, semstmts proc addCodeForGenerics(c: PContext, n: PNode) = for i in countup(c.generics.lastGenericIdx, Len(c.generics.generics) - 1): var prc = c.generics.generics[i].instSym if prc.kind in {skProc, skMethod, skConverter} and prc.magic == mNone: if prc.ast == nil or prc.ast.sons[bodyPos] == nil: InternalError(prc.info, "no code for " & prc.name.s) addSon(n, prc.ast) c.generics.lastGenericIdx = Len(c.generics.generics) proc semExprNoFlags(c: PContext, n: PNode): PNode {.procvar.} = result = semExpr(c, n, {}) proc myOpen(module: PSym, filename: string): PPassContext = var c = newContext(module, filename) if (c.p != nil): InternalError(module.info, "sem.myOpen") c.semConstExpr = semConstExpr c.semExpr = semExprNoFlags c.semConstBoolExpr = semConstBoolExpr pushProcCon(c, module) pushOwner(c.module) openScope(c.tab) # scope for imported symbols SymTabAdd(c.tab, module) # a module knows itself if sfSystemModule in module.flags: magicsys.SystemModule = module # set global variable! InitSystem(c.tab) # currently does nothing else: SymTabAdd(c.tab, magicsys.SystemModule) # import the "System" identifier importAllSymbols(c, magicsys.SystemModule) openScope(c.tab) # scope for the module's symbols result = c proc myOpenCached(module: PSym, filename: string, rd: PRodReader): PPassContext = result = myOpen(module, filename) proc SemStmtAndGenerateGenerics(c: PContext, n: PNode): PNode = result = semStmt(c, n) # BUGFIX: process newly generated generics here, not at the end! if c.generics.lastGenericIdx < Len(c.generics.generics): var a = newNodeI(nkStmtList, n.info) addCodeForGenerics(c, a) if sonsLen(a) > 0: # a generic has been added to `a`: if result.kind != nkEmpty: addSon(a, result) result = a proc RecoverContext(c: PContext) = # clean up in case of a semantic error: We clean up the stacks, etc. This is # faster than wrapping every stack operation in a 'try finally' block and # requires far less code. while c.tab.tos-1 > ModuleTablePos: rawCloseScope(c.tab) while getCurrOwner().kind != skModule: popOwner() while c.p != nil and c.p.owner.kind != skModule: c.p = c.p.next proc myProcess(context: PPassContext, n: PNode): PNode = var c = PContext(context) # no need for an expensive 'try' if we stop after the first error anyway: if msgs.gErrorMax <= 1: result = SemStmtAndGenerateGenerics(c, n) else: try: result = SemStmtAndGenerateGenerics(c, n) except ERecoverableError: RecoverContext(c) result = ast.emptyNode proc checkThreads(c: PContext) = if not needsGlobalAnalysis(): return for i in 0 .. c.threadEntries.len-1: semthreads.AnalyseThreadProc(c.threadEntries[i]) proc myClose(context: PPassContext, n: PNode): PNode = var c = PContext(context) closeScope(c.tab) # close module's scope rawCloseScope(c.tab) # imported symbols; don't check for unused ones! if n == nil: result = newNode(nkStmtList) else: InternalError(n.info, "n is not nil") #result := n; addCodeForGenerics(c, result) # we produce a fake include statement for every slurped filename, so that # the module dependencies are accurate: var ics = newNode(nkIncludeStmt) for s in items(c.slurpedFiles): ics.add(newStrNode(nkStrLit, s)) result.add(ics) checkThreads(c) popOwner() popProcCon(c) proc semPass(): TPass = initPass(result) result.open = myOpen result.openCached = myOpenCached result.close = myClose result.process = myProcess