aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOskari Timperi <oskari.timperi@iki.fi>2018-03-24 19:56:24 +0200
committerOskari Timperi <oskari.timperi@iki.fi>2018-03-24 19:59:37 +0200
commit02ededcd1b5f420847cf3be8322b4efaaf769e41 (patch)
tree5acf90eec458edb1f1c6a017f70bac3ccc286fef
parentb16ac04c11c9301cd535587a0b54c7a6827d1562 (diff)
downloadnimpb-02ededcd1b5f420847cf3be8322b4efaaf769e41.tar.gz
nimpb-02ededcd1b5f420847cf3be8322b4efaaf769e41.zip
Simplify
-rw-r--r--src/protobuf/gen.nim118
1 files changed, 52 insertions, 66 deletions
diff --git a/src/protobuf/gen.nim b/src/protobuf/gen.nim
index 5d9e1b5..06805b6 100644
--- a/src/protobuf/gen.nim
+++ b/src/protobuf/gen.nim
@@ -178,84 +178,70 @@ proc generateNewMessageProc(desc: NimNode): NimNode =
@[ident(getMessageName(desc))],
body)
-proc generateClearFieldProc(desc, field: NimNode): NimNode =
- let body = nnkStmtList.newTree()
-
- let messageName = getMessageName(desc)
- let fieldName = getFieldName(field)
+proc fieldProcName(prefix: string, field: NimNode): string =
+ result = prefix & capitalizeAscii(getFieldName(field))
- add(body, fieldInitializer("message", field))
+proc fieldProcIdent(prefix: string, field: NimNode): NimNode =
+ result = postfix(ident(fieldProcName(prefix, field)), "*")
- add(body, nnkCall.newTree(
- ident("excl"),
- nnkDotExpr.newTree(
- ident("message"),
- ident("hasField")
- ),
- newLit(getFieldNumber(field))
- ))
+proc generateClearFieldProc(desc, field: NimNode): NimNode =
+ let
+ messageId = ident("message")
+ fname = newDotExpr(messageId, ident(getFieldName(field)))
+ defvalue = defaultValue(field)
+ hasField = newDotExpr(messageId, ident("hasField"))
+ number = getFieldNumber(field)
+ procName = fieldProcIdent("clear", field)
+ mtype = ident(getMessageName(desc))
- result = newProc(postfix(ident("clear" & capitalizeAscii(fieldName)), "*"),
- @[newEmptyNode(), newIdentDefs(ident("message"), ident(messageName))],
- body)
+ result = quote do:
+ proc `procName`(`messageId`: `mtype`) =
+ `fname` = `defvalue`
+ excl(`hasfield`, `number`)
proc generateHasFieldProc(desc, field: NimNode): NimNode =
- let body = nnkCall.newTree(
- ident("contains"),
- newDotExpr(ident("message"), ident("hasField")),
- newLit(getFieldNumber(field))
- )
-
- let messageName = getMessageName(desc)
- let fieldName = getFieldName(field)
+ let
+ messageId = ident("message")
+ hasField = newDotExpr(messageId, ident("hasField"))
+ number = getFieldNumber(field)
+ mtype = ident(getMessageName(desc))
+ procName = fieldProcIdent("has", field)
- result = newProc(postfix(ident("has" & capitalizeAscii(fieldName)), "*"),
- @[ident("bool"), newIdentDefs(ident("message"), ident(messageName))],
- body)
+ result = quote do:
+ proc `procName`(`messageId`: `mtype`): bool =
+ contains(`hasfield`, `number`)
proc generateSetFieldProc(desc, field: NimNode): NimNode =
- # let body = nnkStmtList.newTree(nnkDiscardStmt.newTree(newEmptyNode()))
-
- let body = newStmtList()
-
- let messageName = getMessageName(desc)
- let fieldName = getFieldName(field)
-
- add(body, newAssignment(newDotExpr(ident("message"), ident(fieldName)), ident("value")))
-
- add(body, newCall("incl", newDotExpr(ident("message"), ident("hasField")),
- newLit(getFieldNumber(field))))
-
- let ftype = getFullFieldType(field)
+ let
+ messageId = ident("message")
+ hasField = newDotExpr(messageId, ident("hasField"))
+ number = getFieldNumber(field)
+ valueId = ident("value")
+ fname = newDotExpr(messageId, ident(getFieldName(field)))
+ procName = fieldProcIdent("set", field)
+ mtype = ident(getMessageName(desc))
+ ftype = getFullFieldType(field)
- result = newProc(postfix(ident("set" & capitalizeAscii(fieldName)), "*"),
- @[newEmptyNode(), newIdentDefs(ident("message"),
- ident(messageName)),
- newIdentDefs(ident("value"), ftype)],
- body)
+ result = quote do:
+ proc `procName`(`messageId`: `mtype`, `valueId`: `ftype`) =
+ `fname` = `valueId`
+ incl(`hasfield`, `number`)
proc generateAddToFieldProc(desc, field: NimNode): NimNode =
- let body = newStmtList()
-
- let messageName = getMessageName(desc)
- let fieldName = getFieldName(field)
-
- add(body, newCall(
- ident("add"),
- newDotExpr(ident("message"), ident(fieldName)),
- ident("value")
- ))
-
- add(body, newCall("incl", newDotExpr(ident("message"), ident("hasField")),
- newLit(getFieldNumber(field))))
-
- let ftype = ident(getFieldTypeAsString(field))
+ let
+ procName = fieldProcIdent("add", field)
+ messageId = ident("message")
+ mtype = ident(getMessageName(desc))
+ valueId = ident("value")
+ ftype = ident(getFieldTypeAsString(field))
+ hasField = newDotExpr(messageId, ident("hasField"))
+ number = getFieldNumber(field)
+ fname = newDotExpr(messageId, ident(getFieldName(field)))
- result = newProc(postfix(ident("add" & capitalizeAscii(fieldName)), "*"),
- @[newEmptyNode(), newIdentDefs(ident("message"),
- ident(messageName)),
- newIdentDefs(ident("value"), ftype)],
- body)
+ result = quote do:
+ proc `procName`(`messageId`: `mtype`, `valueId`: `ftype`) =
+ add(`fname`, `valueId`)
+ incl(`hasfield`, `number`)
proc ident(wt: WireType): NimNode =
result = newDotExpr(ident("WireType"), ident($wt))