From bb3ccf808b6cfd42247545e87ff81ae48be8b824 Mon Sep 17 00:00:00 2001 From: Nathan Braswell Date: Sat, 2 Jan 2016 13:44:31 -0500 Subject: [PATCH] unserialize grammer directly to avoid extra copying --- tests/test_ast.krak | 14 ++++++++++---- tests/test_grammer.krak | 12 +++++++++--- 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/tests/test_ast.krak b/tests/test_ast.krak index 4a94e15..1a92b23 100644 --- a/tests/test_ast.krak +++ b/tests/test_ast.krak @@ -9,8 +9,10 @@ import tree:* import serialize:* fun main():int { - - var gram.construct(): grammer + + /*var gram.construct(): grammer*/ + // delay construction until we either load it or copy construct it + var gram: grammer var file_name = string("../krakenGrammer.kgm") @@ -28,7 +30,9 @@ fun main():int { if (cached_contents == file_contents) { println("loaded_and_valid, using cached version!") loaded_and_valid = true - unpack(gram, pos) = unserialize(binary, pos) + /*unpack(gram, pos) = unserialize(binary, pos)*/ + // skip unnecessary copies this way + pos = gram.unserialize(binary, pos) println("finished unserializeing!!") } else { println("file contents do not match:") @@ -43,7 +47,9 @@ fun main():int { } if (!loaded_and_valid) { println("Not loaded_and_valid, re-generating and writing out") - gram = load_grammer(file_contents) + /*gram = load_grammer(file_contents)*/ + // since we now don't construct before hand + gram.copy_construct(&load_grammer(file_contents)) println("grammer loaded, calculate_first_set") gram.calculate_first_set() println("grammer loaded, calculate_state_automaton") diff --git a/tests/test_grammer.krak b/tests/test_grammer.krak index 33f8817..ae978c4 100644 --- a/tests/test_grammer.krak +++ b/tests/test_grammer.krak @@ -10,7 +10,9 @@ import serialize:* fun main():int { - var a.construct(): grammer + /*var a.construct(): grammer*/ + // delay construction until unserialization or copy_construction now + var a: grammer var file_name = string("../krakenGrammer.kgm") /*var file_name = string("../simplifiedKrakenGrammer.kgm")*/ @@ -32,7 +34,9 @@ fun main():int { if (cached_contents == file_contents) { println("loaded_and_valid, using cached version!") loaded_and_valid = true - unpack(a, pos) = unserialize(binary, pos) + /*unpack(a, pos) = unserialize(binary, pos)*/ + // avoid extra copies + pos = a.unserialize(binary, pos) println("finished unserializeing!!") } else { println("file contents do not match:") @@ -47,7 +51,9 @@ fun main():int { } if (!loaded_and_valid) { println("Not loaded_and_valid, re-generating and writing out") - a = load_grammer(file_contents) + /*a = load_grammer(file_contents)*/ + // copy construct now + a.copy_construct(&load_grammer(file_contents)) println("grammer loaded, calculate_first_set") a.calculate_first_set() println("grammer loaded, calculate_state_automaton")