From c7842c53b99eb76f9b2a127d80d6134498e15817 Mon Sep 17 00:00:00 2001 From: andri lim Date: Mon, 29 Feb 2016 19:42:06 +0700 Subject: [PATCH 1/4] npp-plugin --- web/question.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/web/question.txt b/web/question.txt index c0c61c46eb..b3a357bb8b 100644 --- a/web/question.txt +++ b/web/question.txt @@ -135,7 +135,8 @@ General FAQ - Sublime Text: Available via Package Control (`Repository `_) - LiClipse: http://www.liclipse.com/ (Eclipse based plugin) - Howl: Included - + - Notepad++: Available via `plugin `_ + .. container:: standout From 040d4864a4b012f5876b72e5b6c9a3921e1a0674 Mon Sep 17 00:00:00 2001 From: Ruslan Mustakov Date: Fri, 26 Feb 2016 14:55:11 +0600 Subject: [PATCH 2/4] Fixed try statement generation with --noCppExceptions switch --- compiler/ccgstmts.nim | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/compiler/ccgstmts.nim b/compiler/ccgstmts.nim index 529e59273d..f2ceadcce5 100644 --- a/compiler/ccgstmts.nim +++ b/compiler/ccgstmts.nim @@ -928,8 +928,10 @@ proc genTry(p: BProc, t: PNode, d: var TLoc) = for j in countup(0, blen - 2): assert(t.sons[i].sons[j].kind == nkType) if orExpr != nil: add(orExpr, "||") - appcg(p.module, orExpr, - "#isObj(#getCurrentException()->Sup.m_type, $1)", + let isObjFormat = if not p.module.compileToCpp: + "#isObj(#getCurrentException()->Sup.m_type, $1)" + else: "#isObj(#getCurrentException()->m_type, $1)" + appcg(p.module, orExpr, isObjFormat, [genTypeInfo(p.module, t.sons[i].sons[j].typ)]) if i > 1: line(p, cpsStmts, "else ") startBlock(p, "if ($1) {$n", [orExpr]) From 1b4fc744dba1f3e83c543f1d8382c9215117c170 Mon Sep 17 00:00:00 2001 From: Yuriy Glukhov Date: Mon, 29 Feb 2016 16:57:30 +0200 Subject: [PATCH 3/4] Fixed bad JS codegen for new json with tables. Added json to JS tests. --- compiler/jsgen.nim | 4 ++- lib/pure/json.nim | 62 +++++++++++++++++++--------------- tests/testament/categories.nim | 2 +- 3 files changed, 38 insertions(+), 30 deletions(-) diff --git a/compiler/jsgen.nim b/compiler/jsgen.nim index fc27a3ec08..d6b546d8b8 100644 --- a/compiler/jsgen.nim +++ b/compiler/jsgen.nim @@ -891,10 +891,12 @@ proc genFieldAccess(p: PProc, n: PNode, r: var TCompRes) = r.res = "$1['$2']" % [r.res, f.loc.r] r.kind = resExpr +proc genAddr(p: PProc, n: PNode, r: var TCompRes) + proc genCheckedFieldAddr(p: PProc, n: PNode, r: var TCompRes) = let m = if n.kind == nkHiddenAddr: n.sons[0] else: n internalAssert m.kind == nkCheckedFieldExpr - genFieldAddr(p, m.sons[0], r) # XXX + genAddr(p, m, r) # XXX proc genCheckedFieldAccess(p: PProc, n: PNode, r: var TCompRes) = genFieldAccess(p, n.sons[0], r) # XXX diff --git a/lib/pure/json.nim b/lib/pure/json.nim index 2da14c3634..c5b1a21e93 100644 --- a/lib/pure/json.nim +++ b/lib/pure/json.nim @@ -1123,9 +1123,9 @@ else: proc parseNativeJson(x: cstring): JSObject {.importc: "JSON.parse".} - proc getVarType(x): JsonNodeKind = + proc getVarType(x: JSObject): JsonNodeKind = result = JNull - proc getProtoName(y): cstring + proc getProtoName(y: JSObject): cstring {.importc: "Object.prototype.toString.call".} case $getProtoName(x) # TODO: Implicit returns fail here. of "[object Array]": return JArray @@ -1216,23 +1216,27 @@ when false: # To get that we shall use, obj["json"] when isMainModule: - var parsed = parseFile("tests/testdata/jsontest.json") - var parsed2 = parseFile("tests/testdata/jsontest2.json") + when not defined(js): + var parsed = parseFile("tests/testdata/jsontest.json") - try: - discard parsed["key2"][12123] - assert(false) - except IndexError: assert(true) + try: + discard parsed["key2"][12123] + doAssert(false) + except IndexError: doAssert(true) + + var parsed2 = parseFile("tests/testdata/jsontest2.json") + doAssert(parsed2{"repository", "description"}.str=="IRC Library for Haskell", "Couldn't fetch via multiply nested key using {}") let testJson = parseJson"""{ "a": [1, 2, 3, 4], "b": "asd", "c": "\ud83c\udf83", "d": "\u00E6"}""" # nil passthrough - assert(testJson{"doesnt_exist"}{"anything"}.isNil) + doAssert(testJson{"doesnt_exist"}{"anything"}.isNil) testJson{["e", "f"]} = %true - assert(testJson["e"]["f"].bval) + doAssert(testJson["e"]["f"].bval) # make sure UTF-16 decoding works. - assert(testJson["c"].str == "🎃") - assert(testJson["d"].str == "æ") + when not defined(js): # TODO: The following line asserts in JS + doAssert(testJson["c"].str == "🎃") + doAssert(testJson["d"].str == "æ") # make sure no memory leek when parsing invalid string let startMemory = getOccupiedMem() @@ -1242,41 +1246,43 @@ when isMainModule: except: discard # memory diff should less than 2M - assert(abs(getOccupiedMem() - startMemory) < 2 * 1024 * 1024) + doAssert(abs(getOccupiedMem() - startMemory) < 2 * 1024 * 1024) # test `$` let stringified = $testJson let parsedAgain = parseJson(stringified) - assert(parsedAgain["b"].str == "asd") + doAssert(parsedAgain["b"].str == "asd") + + parsedAgain["abc"] = %5 + doAssert parsedAgain["abc"].num == 5 # Bounds checking try: let a = testJson["a"][9] - assert(false, "EInvalidIndex not thrown") + doAssert(false, "EInvalidIndex not thrown") except IndexError: discard try: let a = testJson["a"][-1] - assert(false, "EInvalidIndex not thrown") + doAssert(false, "EInvalidIndex not thrown") except IndexError: discard try: - assert(testJson["a"][0].num == 1, "Index doesn't correspond to its value") + doAssert(testJson["a"][0].num == 1, "Index doesn't correspond to its value") except: - assert(false, "EInvalidIndex thrown for valid index") + doAssert(false, "EInvalidIndex thrown for valid index") - assert(testJson{"b"}.str=="asd", "Couldn't fetch a singly nested key with {}") - assert(isNil(testJson{"nonexistent"}), "Non-existent keys should return nil") - assert(parsed2{"repository", "description"}.str=="IRC Library for Haskell", "Couldn't fetch via multiply nested key using {}") - assert(isNil(testJson{"a", "b"}), "Indexing through a list should return nil") - assert(isNil(testJson{"a", "b"}), "Indexing through a list should return nil") - assert(testJson{"a"}==parseJson"[1, 2, 3, 4]", "Didn't return a non-JObject when there was one to be found") - assert(isNil(parseJson("[1, 2, 3]"){"foo"}), "Indexing directly into a list should return nil") + doAssert(testJson{"b"}.str=="asd", "Couldn't fetch a singly nested key with {}") + doAssert(isNil(testJson{"nonexistent"}), "Non-existent keys should return nil") + doAssert(isNil(testJson{"a", "b"}), "Indexing through a list should return nil") + doAssert(isNil(testJson{"a", "b"}), "Indexing through a list should return nil") + doAssert(testJson{"a"}==parseJson"[1, 2, 3, 4]", "Didn't return a non-JObject when there was one to be found") + doAssert(isNil(parseJson("[1, 2, 3]"){"foo"}), "Indexing directly into a list should return nil") # Generator: var j = %* [{"name": "John", "age": 30}, {"name": "Susan", "age": 31}] - assert j == %[%{"name": %"John", "age": %30}, %{"name": %"Susan", "age": %31}] + doAssert j == %[%{"name": %"John", "age": %30}, %{"name": %"Susan", "age": %31}] var j2 = %* [ @@ -1289,7 +1295,7 @@ when isMainModule: "age": 31 } ] - assert j2 == %[%{"name": %"John", "age": %30}, %{"name": %"Susan", "age": %31}] + doAssert j2 == %[%{"name": %"John", "age": %30}, %{"name": %"Susan", "age": %31}] var name = "John" let herAge = 30 @@ -1303,4 +1309,4 @@ when isMainModule: , "age": hisAge } ] - assert j3 == %[%{"name": %"John", "age": %30}, %{"name": %"Susan", "age": %31}] + doAssert j3 == %[%{"name": %"John", "age": %30}, %{"name": %"Susan", "age": %31}] diff --git a/tests/testament/categories.nim b/tests/testament/categories.nim index ff83379b8c..150c55edc2 100644 --- a/tests/testament/categories.nim +++ b/tests/testament/categories.nim @@ -223,7 +223,7 @@ proc jsTests(r: var TResults, cat: Category, options: string) = "varres/tvartup", "misc/tints", "misc/tunsignedinc"]: test "tests/" & testfile & ".nim" - for testfile in ["pure/strutils"]: + for testfile in ["pure/strutils", "pure/json"]: test "lib/" & testfile & ".nim" # ------------------------- manyloc ------------------------------------------- From d73227920365dcd3f0e58db561bf0934f33e7259 Mon Sep 17 00:00:00 2001 From: Samantha Doran Date: Tue, 1 Mar 2016 11:23:47 -0500 Subject: [PATCH 4/4] Don't expect all keys in hashsets to have $ defined --- lib/pure/collections/sets.nim | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/lib/pure/collections/sets.nim b/lib/pure/collections/sets.nim index 9a42a21ee0..aa4919884c 100644 --- a/lib/pure/collections/sets.nim +++ b/lib/pure/collections/sets.nim @@ -163,7 +163,11 @@ proc `[]`*[A](s: var HashSet[A], key: A): var A = var hc: Hash var index = rawGet(s, key, hc) if index >= 0: result = s.data[index].key - else: raise newException(KeyError, "key not found: " & $key) + else: + when compiles($key): + raise newException(KeyError, "key not found: " & $key) + else: + raise newException(KeyError, "key not found") proc mget*[A](s: var HashSet[A], key: A): var A {.deprecated.} = ## returns the element that is actually stored in 's' which has the same