manyloc test should be green again

This commit is contained in:
Araq 2013-06-04 00:58:43 +02:00
commit b767f34b6b
5 changed files with 22 additions and 32 deletions

View file

@ -242,7 +242,6 @@ template `=~` *(s: string, pattern: TRegEx): expr =
bind maxSubPatterns bind maxSubPatterns
when not definedInScope(matches): when not definedInScope(matches):
var matches {.inject.}: array[0..maxSubPatterns-1, string] var matches {.inject.}: array[0..maxSubPatterns-1, string]
{.warning: "injected 'matches' might be affected by new scoping rules in 0.9.4".}
match(s, pattern, matches) match(s, pattern, matches)
# ------------------------- more string handling ------------------------------ # ------------------------- more string handling ------------------------------

View file

@ -870,7 +870,6 @@ template `=~`*(s: string, pattern: TPeg): bool =
bind maxSubpatterns bind maxSubpatterns
when not definedInScope(matches): when not definedInScope(matches):
var matches {.inject.}: array[0..maxSubpatterns-1, string] var matches {.inject.}: array[0..maxSubpatterns-1, string]
{.warning: "injected 'matches' might be affected by new scoping rules in 0.9.4".}
match(s, pattern, matches) match(s, pattern, matches)
# ------------------------- more string handling ------------------------------ # ------------------------- more string handling ------------------------------

View file

@ -33,18 +33,9 @@ proc emptyNode*(): PNimrodNode {.compileTime.} =
proc dot*(left, right: PNimrodNode): PNimrodNode {.compileTime.} = proc dot*(left, right: PNimrodNode): PNimrodNode {.compileTime.} =
result = newNimNode(nnkDotExpr).und(left, right) result = newNimNode(nnkDotExpr).und(left, right)
proc postfix*(a: PNimrodNode, b: string): PNimrodNode {.compileTime.} =
result = newNimNode(nnkPostfix).und(newIdentNode(!b), a)
proc prefix*(a: string, b: PNimrodNode): PNimrodNode {.compileTime.} = proc prefix*(a: string, b: PNimrodNode): PNimrodNode {.compileTime.} =
result = newNimNode(nnkPrefix).und(newIdentNode(!a), b) result = newNimNode(nnkPrefix).und(newIdentNode(!a), b)
proc infix*(a, b, c: PNimrodNode): PNimrodNode {.compileTime.} =
## 5.infix("+", 10) ## => 5 + 10
result = newNimNode(nnkInfix).und(b, a, c)
proc infix*(a: PNimrodNode; b: string; c: PNimrodNode): PNimrodNode {.compileTime.} =
## Infix operation: infix(5, "+", 10) ## =>
result = newNimNode(nnkInfix).und(newIdentNode(b), a, c)
proc quoted2ident*(a: PNimrodNode): PNimrodNode {.compileTime.} = proc quoted2ident*(a: PNimrodNode): PNimrodNode {.compileTime.} =
if a.kind != nnkAccQuoted: if a.kind != nnkAccQuoted:
return a return a

View file

@ -145,7 +145,7 @@ proc lobbyInit*() =
var pos = vec2f(10, 10) var pos = vec2f(10, 10)
u_alias = gui.newTextEntry( u_alias = gui.newTextEntry(
if s.existsKey("alias"): s["alias"].str else: "alias", if s.hasKey("alias"): s["alias"].str else: "alias",
pos) pos)
pos.y += 20 pos.y += 20
u_passwd = gui.newTextEntry("buzz", pos) u_passwd = gui.newTextEntry("buzz", pos)

View file

@ -227,12 +227,13 @@ template checkFile(path: expr): stmt {.dirty, immediate.} =
cacheImpl newSprite, SpriteSheets, PSpriteSheet: cacheImpl newSprite, SpriteSheets, PSpriteSheet:
result.file = filename result.file = filename
if not(filename =~ re"\S+_(\d+)x(\d+)\.\S\S\S"): if filename =~ re"\S+_(\d+)x(\d+)\.\S\S\S":
result.framew = strutils.parseInt(matches[0])
result.frameh = strutils.parseInt(matches[1])
checkFile("data/gfx"/result.file)
else:
errors.add "Bad file: "&filename&" must be in format name_WxH.png" errors.add "Bad file: "&filename&" must be in format name_WxH.png"
return return
result.framew = strutils.parseInt(matches[0])
result.frameh = strutils.parseInt(matches[1])
checkFile("data/gfx"/result.file)
cacheImpl newSound, SoundCache, PSoundRecord: cacheImpl newSound, SoundCache, PSoundRecord:
result.file = filename result.file = filename
@ -288,23 +289,23 @@ proc validateSettings*(settings: PJsonNode, errors: var seq[string]): bool =
if settings.kind != JObject: if settings.kind != JObject:
addError("Settings root must be an object") addError("Settings root must be an object")
return return
if not settings.existsKey("vehicles"): if not settings.hasKey("vehicles"):
addError("Vehicles section missing") addError("Vehicles section missing")
if not settings.existsKey("objects"): if not settings.hasKey("objects"):
errors.add("Objects section is missing") errors.add("Objects section is missing")
result = false result = false
if not settings.existsKey("level"): if not settings.hasKey("level"):
errors.add("Level settings section is missing") errors.add("Level settings section is missing")
result = false result = false
else: else:
let lvl = settings["level"] let lvl = settings["level"]
if lvl.kind != JObject or not lvl.existsKey("size"): if lvl.kind != JObject or not lvl.hasKey("size"):
errors.add("Invalid level settings") errors.add("Invalid level settings")
result = false result = false
elif not lvl.existsKey("size") or lvl["size"].kind != JArray or lvl["size"].len != 2: elif not lvl.hasKey("size") or lvl["size"].kind != JArray or lvl["size"].len != 2:
errors.add("Invalid/missing level size") errors.add("Invalid/missing level size")
result = false result = false
if not settings.existsKey("items"): if not settings.hasKey("items"):
errors.add("Items section missing") errors.add("Items section missing")
result = false result = false
else: else:
@ -363,7 +364,7 @@ proc loadSettings*(rawJson: string, errors: var seq[string]): bool =
nameToVehID[veh.name] = veh.id nameToVehID[veh.name] = veh.id
inc vID inc vID
vID = 0 vID = 0
if settings.existsKey("bullets"): if settings.hasKey("bullets"):
for blt in settings["bullets"].items: for blt in settings["bullets"].items:
var bullet = importBullet(blt, errors) var bullet = importBullet(blt, errors)
bullet.id = bID bullet.id = bID
@ -408,21 +409,21 @@ proc fetchBullet(name: string): PBulletRecord =
return cfg.bullets[nameToBulletID[name]] return cfg.bullets[nameToBulletID[name]]
proc getField(node: PJsonNode, field: string, target: var float) = proc getField(node: PJsonNode, field: string, target: var float) =
if not node.existsKey(field): if not node.hasKey(field):
return return
if node[field].kind == JFloat: if node[field].kind == JFloat:
target = node[field].fnum target = node[field].fnum
elif node[field].kind == JInt: elif node[field].kind == JInt:
target = node[field].num.float target = node[field].num.float
proc getField(node: PJsonNode, field: string, target: var int) = proc getField(node: PJsonNode, field: string, target: var int) =
if not node.existsKey(field): if not node.hasKey(field):
return return
if node[field].kind == JInt: if node[field].kind == JInt:
target = node[field].num.int target = node[field].num.int
elif node[field].kind == JFloat: elif node[field].kind == JFloat:
target = node[field].fnum.int target = node[field].fnum.int
proc getField(node: PJsonNode; field: string; target: var bool) = proc getField(node: PJsonNode; field: string; target: var bool) =
if not node.existsKey(field): if not node.hasKey(field):
return return
case node[field].kind case node[field].kind
of JBool: of JBool:
@ -434,7 +435,7 @@ proc getField(node: PJsonNode; field: string; target: var bool) =
else: nil else: nil
template checkKey(node: expr; key: string): stmt = template checkKey(node: expr; key: string): stmt =
if not existsKey(node, key): if not hasKey(node, key):
return return
proc importTrail(data: PJsonNode; errors: var seq[string]): TTrailRecord = proc importTrail(data: PJsonNode; errors: var seq[string]): TTrailRecord =
@ -450,17 +451,17 @@ proc importLevel(data: PJsonNode; errors: var seq[string]): PLevelSettings =
checkKey(data, "level") checkKey(data, "level")
var level = data["level"] var level = data["level"]
if level.existsKey("size") and level["size"].kind == JArray and level["size"].len == 2: if level.hasKey("size") and level["size"].kind == JArray and level["size"].len == 2:
result.size.x = level["size"][0].num.cint result.size.x = level["size"][0].num.cint
result.size.y = level["size"][1].num.cint result.size.y = level["size"][1].num.cint
if level.existsKey("starfield"): if level.hasKey("starfield"):
for star in level["starfield"].items: for star in level["starfield"].items:
result.starfield.add(newSprite(star.str, errors)) result.starfield.add(newSprite(star.str, errors))
proc importPhys(data: PJsonNode): TPhysicsRecord = proc importPhys(data: PJsonNode): TPhysicsRecord =
result.radius = 20.0 result.radius = 20.0
result.mass = 10.0 result.mass = 10.0
if data.existsKey("physics") and data["physics"].kind == JObject: if data.hasKey("physics") and data["physics"].kind == JObject:
let phys = data["physics"] let phys = data["physics"]
phys.getField("radius", result.radius) phys.getField("radius", result.radius)
phys.getField("mass", result.mass) phys.getField("mass", result.mass)
@ -489,10 +490,10 @@ proc importAnim(data: PJsonNode, errors: var seq[string]): PAnimationRecord =
result.delay = 1000.0 result.delay = 1000.0
result.spriteSheet = nil result.spriteSheet = nil
if data.existsKey("anim"): if data.hasKey("anim"):
let anim = data["anim"] let anim = data["anim"]
if anim.kind == JObject: if anim.kind == JObject:
if anim.existsKey("file"): if anim.hasKey("file"):
result.spriteSheet = newSprite(anim["file"].str, errors) result.spriteSheet = newSprite(anim["file"].str, errors)
anim.getField "angle", result.angle anim.getField "angle", result.angle