Skip to content

Commit

Permalink
String definition.
Browse files Browse the repository at this point in the history
  • Loading branch information
flatheadmill committed May 9, 2017
1 parent 005a341 commit b7eb12d
Show file tree
Hide file tree
Showing 4 changed files with 69 additions and 1 deletion.
30 changes: 29 additions & 1 deletion parser.js
Expand Up @@ -71,7 +71,6 @@ function visitPropertySerialize (context, parameters, body, fields) {
assert(node.type == 'ExpressionStatement')
node = node.expression
assert(node.type == 'CallExpression')
console.log(parameters)
assert(node.callee.name == parameters[0], 'unknown function call')

var arg = node.arguments[0]
Expand Down Expand Up @@ -105,6 +104,35 @@ function visitPropertySerialize (context, parameters, body, fields) {
}
visitPropertySerialize(name, parameters, arg.body.body, structure.fields)
fields.push(structure)
} else if (arg.type == 'ArrayExpression') {
if (
arg.elements.length == 1 &&
arg.elements[0].type == 'Literal' &&
arg.elements[0].value == 8
) {
var arg = node.arguments[2]
assert(arg.type == 'ArrayExpression')
var terminator = []
for (var i = 0, I = arg.elements.length; i < I; i++) {
assert(arg.elements[i].type == 'Literal')
assert(typeof arg.elements[i].value == 'number')
assert(arg.elements[i].value < 256)
terminator.push(arg.elements[i].value)
}
var arg = node.arguments[3]
var transform = null
if (arg != null) {
assert(arg.type == 'Literal')
assert(typeof arg.value == 'string')
transform = arg.value
}
fields.push({
name: name,
type: 'buffer',
terminator: terminator.slice(),
transform: transform
})
}
} else {
var value = arg.value

Expand Down
30 changes: 30 additions & 0 deletions t/language/compiled/string.json
@@ -0,0 +1,30 @@
{
"parse": [
{
"type": "structure",
"name": "object",
"fields": [
{
"name": "string",
"type": "buffer",
"terminator": [ 0 ],
"transform": "utf8"
}
]
}
],
"serialize": [
{
"type": "structure",
"name": "object",
"fields": [
{
"name": "string",
"type": "buffer",
"terminator": [ 0 ],
"transform": "utf8"
}
]
}
]
}
5 changes: 5 additions & 0 deletions t/language/source/string.packet.js
@@ -0,0 +1,5 @@
var packet = require('../../..')

exports.object = packet(function (packet, object) {
packet('string', [8], [0], 'utf8')
})
5 changes: 5 additions & 0 deletions t/language/string.t.js
@@ -0,0 +1,5 @@
require('proof')(1, prove)

function prove (assert) {
require('./harness').compile(assert, 'string')
}

0 comments on commit b7eb12d

Please sign in to comment.